From a06b6716eaab6784fa09a839ac1a384f536cc33c Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Thu, 9 Aug 2018 16:35:28 +0200 Subject: First naive implementation of TriangleMesh convex hull calculation --- xs/src/libslic3r/TriangleMesh.cpp | 48 +++++++++++++++++++++++++++++++++++++++ xs/src/libslic3r/TriangleMesh.hpp | 1 + 2 files changed, 49 insertions(+) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp index 45e4b6f5d..197b4d488 100644 --- a/xs/src/libslic3r/TriangleMesh.cpp +++ b/xs/src/libslic3r/TriangleMesh.cpp @@ -1,6 +1,9 @@ #include "TriangleMesh.hpp" #include "ClipperUtils.hpp" #include "Geometry.hpp" +#include "qhull/src/libqhullcpp/Qhull.h" +#include "qhull/src/libqhullcpp/QhullFacetList.h" +#include "qhull/src/libqhullcpp/QhullVertexSet.h" #include #include #include @@ -10,6 +13,7 @@ #include #include #include +#include #include @@ -597,6 +601,50 @@ TriangleMesh::bounding_box() const return bb; } + +TriangleMesh TriangleMesh::convex_hull3d() const +{ + // qhull's realT is assumed to be a typedef for float - let's better check it first: + static_assert(std::is_same::value, "Internal type realT in the qhull library must be float!"); + + // Helper struct for qhull: + struct PointForQHull{ + PointForQHull(float x_p, float y_p, float z_p) : x(x_p), y(y_p), z(z_p) {} + float x,y,z; + }; + std::vector input_verts; + + // We will now fill the vector with input points for computation: + stl_facet* facet_ptr = stl.facet_start; + while (facet_ptr < stl.facet_start+stl.stats.number_of_facets) { + for (int j=0;j<3;++j) + input_verts.emplace_back(PointForQHull(facet_ptr->vertex[j].x, facet_ptr->vertex[j].y, facet_ptr->vertex[j].z)); + facet_ptr+=1; + } + + // The qhull call: + orgQhull::Qhull qhull; + qhull.disableOutputStream(); // we want qhull to be quiet + qhull.runQhull("", 3, input_verts.size(), (const realT*)(input_verts.data()), "Qt" ); + + // Let's collect results: + Pointf3s vertices; + std::vector facets; + auto facet_list = qhull.facetList().toStdVector(); + for (const orgQhull::QhullFacet& facet : facet_list) { // iterate through facets + for (unsigned char i=0; i<3; ++i) { // iterate through facet's vertices + orgQhull::QhullPoint p = (facet.vertices())[i].point(); + const float* coords = p.coordinates(); + Pointf3 vert((float)coords[0], (float)coords[1], (float)coords[2]); + vertices.emplace_back(vert); + } + facets.emplace_back(Point3(vertices.size()-3, vertices.size()-2, vertices.size()-1)); + } + TriangleMesh output_mesh(vertices, facets); + output_mesh.repair(); + return output_mesh; +} + void TriangleMesh::require_shared_vertices() { diff --git a/xs/src/libslic3r/TriangleMesh.hpp b/xs/src/libslic3r/TriangleMesh.hpp index c700784a5..14fdba6c3 100644 --- a/xs/src/libslic3r/TriangleMesh.hpp +++ b/xs/src/libslic3r/TriangleMesh.hpp @@ -55,6 +55,7 @@ public: ExPolygons horizontal_projection() const; Polygon convex_hull(); BoundingBoxf3 bounding_box() const; + TriangleMesh convex_hull3d() const; void reset_repair_stats(); bool needed_repair() const; size_t facets_count() const; -- cgit v1.2.3 From 09ce6c62ea94c5f3d88eb2a7a0aa9de91c8a728e Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 13 Aug 2018 14:51:03 +0200 Subject: Retraction after ramming is now done without moving the head --- xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp index 3d0dba07a..4009ebf3a 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp @@ -793,11 +793,16 @@ void WipeTowerPrusaMM::toolchange_Unload( float turning_point = (!m_left_to_right ? xl : xr ); float total_retraction_distance = m_cooling_tube_retraction + m_cooling_tube_length/2.f - 15.f; // the 15mm is reserved for the first part after ramming writer.suppress_preview() - .load_move_x_advanced(turning_point, -15.f, 83.f, 50.f) // this is done at fixed speed + .retract(15.f, 5000.f) // feedrate 5000mm/min = 83mm/s + .retract(0.70f * total_retraction_distance, 1.0f * m_filpar[m_current_tool].unloading_speed * 60.f) + .retract(0.20f * total_retraction_distance, 0.5f * m_filpar[m_current_tool].unloading_speed * 60.f) + .retract(0.10f * total_retraction_distance, 0.3f * m_filpar[m_current_tool].unloading_speed * 60.f) + + /*.load_move_x_advanced(turning_point, -15.f, 83.f, 50.f) // this is done at fixed speed .load_move_x_advanced(old_x, -0.70f * total_retraction_distance, 1.0f * m_filpar[m_current_tool].unloading_speed) .load_move_x_advanced(turning_point, -0.20f * total_retraction_distance, 0.5f * m_filpar[m_current_tool].unloading_speed) .load_move_x_advanced(old_x, -0.10f * total_retraction_distance, 0.3f * m_filpar[m_current_tool].unloading_speed) - .travel(old_x, writer.y()) // in case previous move was shortened to limit feedrate + .travel(old_x, writer.y()) // in case previous move was shortened to limit feedrate*/ .resume_preview(); if (new_temperature != 0 && new_temperature != m_old_temperature ) { // Set the extruder temperature, but don't wait. -- cgit v1.2.3 From 74e807f89bb03472924563212e7b11878424f077 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Tue, 14 Aug 2018 16:23:23 +0200 Subject: New experimental parameter to adjust initial loading speed of the filament from the nozzle --- xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp | 2 +- xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp | 6 ++++-- xs/src/libslic3r/Print.cpp | 2 ++ xs/src/libslic3r/PrintConfig.cpp | 8 ++++++++ xs/src/libslic3r/PrintConfig.hpp | 2 ++ 5 files changed, 17 insertions(+), 3 deletions(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp index 4009ebf3a..de1f9a59b 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp @@ -793,7 +793,7 @@ void WipeTowerPrusaMM::toolchange_Unload( float turning_point = (!m_left_to_right ? xl : xr ); float total_retraction_distance = m_cooling_tube_retraction + m_cooling_tube_length/2.f - 15.f; // the 15mm is reserved for the first part after ramming writer.suppress_preview() - .retract(15.f, 5000.f) // feedrate 5000mm/min = 83mm/s + .retract(15.f, m_filpar[m_current_tool].unloading_speed_start * 60.f) // feedrate 5000mm/min = 83mm/s .retract(0.70f * total_retraction_distance, 1.0f * m_filpar[m_current_tool].unloading_speed * 60.f) .retract(0.20f * total_retraction_distance, 0.5f * m_filpar[m_current_tool].unloading_speed * 60.f) .retract(0.10f * total_retraction_distance, 0.3f * m_filpar[m_current_tool].unloading_speed * 60.f) diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp index e1529bcf4..4b96ce17c 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp @@ -66,8 +66,8 @@ public: // Set the extruder properties. void set_extruder(size_t idx, material_type material, int temp, int first_layer_temp, float loading_speed, - float unloading_speed, float delay, int cooling_moves, float cooling_initial_speed, - float cooling_final_speed, std::string ramming_parameters, float nozzle_diameter) + float unloading_speed, float unloading_speed_start, float delay, int cooling_moves, + float cooling_initial_speed, float cooling_final_speed, std::string ramming_parameters, float nozzle_diameter) { //while (m_filpar.size() < idx+1) // makes sure the required element is in the vector m_filpar.push_back(FilamentParameters()); @@ -77,6 +77,7 @@ public: m_filpar[idx].first_layer_temperature = first_layer_temp; m_filpar[idx].loading_speed = loading_speed; m_filpar[idx].unloading_speed = unloading_speed; + m_filpar[idx].unloading_speed_start = unloading_speed_start; m_filpar[idx].delay = delay; m_filpar[idx].cooling_moves = cooling_moves; m_filpar[idx].cooling_initial_speed = cooling_initial_speed; @@ -217,6 +218,7 @@ private: int first_layer_temperature = 0; float loading_speed = 0.f; float unloading_speed = 0.f; + float unloading_speed_start = 0.f; float delay = 0.f ; int cooling_moves = 0; float cooling_initial_speed = 0.f; diff --git a/xs/src/libslic3r/Print.cpp b/xs/src/libslic3r/Print.cpp index 7d2906bcc..4154378ec 100644 --- a/xs/src/libslic3r/Print.cpp +++ b/xs/src/libslic3r/Print.cpp @@ -201,6 +201,7 @@ bool Print::invalidate_state_by_config_options(const std::vectorconfig.first_layer_temperature.get_at(i), this->config.filament_loading_speed.get_at(i), this->config.filament_unloading_speed.get_at(i), + this->config.filament_unloading_speed_start.get_at(i), this->config.filament_toolchange_delay.get_at(i), this->config.filament_cooling_moves.get_at(i), this->config.filament_cooling_initial_speed.get_at(i), diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index d8f2d85a6..cb09a9d09 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -482,6 +482,14 @@ PrintConfigDef::PrintConfigDef() def->min = 0; def->default_value = new ConfigOptionFloats { 90. }; + def = this->add("filament_unloading_speed_start", coFloats); + def->label = L("EXPERIMENTAL: Unloading speed at the start"); + def->tooltip = L("Speed used for unloading the tip of the filament immediately after ramming. "); + def->sidetext = L("mm/s"); + def->cli = "filament-unloading-speed-start=f@"; + def->min = 0; + def->default_value = new ConfigOptionFloats { 83. }; + def = this->add("filament_toolchange_delay", coFloats); def->label = L("Delay after unloading"); def->tooltip = L("Time to wait after the filament is unloaded. " diff --git a/xs/src/libslic3r/PrintConfig.hpp b/xs/src/libslic3r/PrintConfig.hpp index b18603d87..edf7756e8 100644 --- a/xs/src/libslic3r/PrintConfig.hpp +++ b/xs/src/libslic3r/PrintConfig.hpp @@ -530,6 +530,7 @@ public: ConfigOptionFloats filament_loading_speed; ConfigOptionFloats filament_load_time; ConfigOptionFloats filament_unloading_speed; + ConfigOptionFloats filament_unloading_speed_start; ConfigOptionFloats filament_toolchange_delay; ConfigOptionFloats filament_unload_time; ConfigOptionInts filament_cooling_moves; @@ -596,6 +597,7 @@ protected: OPT_PTR(filament_loading_speed); OPT_PTR(filament_load_time); OPT_PTR(filament_unloading_speed); + OPT_PTR(filament_unloading_speed_start); OPT_PTR(filament_unload_time); OPT_PTR(filament_toolchange_delay); OPT_PTR(filament_cooling_moves); -- cgit v1.2.3 From 48b9793d3d2f5a9b4163f4927563ffd4266e4f12 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 17 Aug 2018 15:20:35 +0200 Subject: Templated convex_hull function in Geometry.cpp --- xs/src/libslic3r/Geometry.cpp | 53 +++++++++++++++++++++++++++---------------- xs/src/libslic3r/Geometry.hpp | 2 ++ xs/src/libslic3r/Point.cpp | 6 +++++ xs/src/libslic3r/Point.hpp | 1 + 4 files changed, 43 insertions(+), 19 deletions(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/Geometry.cpp b/xs/src/libslic3r/Geometry.cpp index 39b626ee3..aaf0352c9 100644 --- a/xs/src/libslic3r/Geometry.cpp +++ b/xs/src/libslic3r/Geometry.cpp @@ -195,47 +195,62 @@ using namespace boost::polygon; // provides also high() and low() namespace Slic3r { namespace Geometry { -static bool -sort_points (Point a, Point b) -{ - return (a.x < b.x) || (a.x == b.x && a.y < b.y); -} +struct SortPoints { + template + bool operator()(const T& a, const T& b) const { + return (b.x > a.x) || (a.x == b.x && b.y > a.y); + } +}; -/* This implementation is based on Andrew's monotone chain 2D convex hull algorithm */ -Polygon -convex_hull(Points points) +// This implementation is based on Andrew's monotone chain 2D convex hull algorithm +template +static T raw_convex_hull(T& points) { assert(points.size() >= 3); // sort input points - std::sort(points.begin(), points.end(), sort_points); + std::sort(points.begin(), points.end(), SortPoints()); int n = points.size(), k = 0; - Polygon hull; + T hull; if (n >= 3) { - hull.points.resize(2*n); + hull.resize(2*n); // Build lower hull for (int i = 0; i < n; i++) { - while (k >= 2 && points[i].ccw(hull.points[k-2], hull.points[k-1]) <= 0) k--; - hull.points[k++] = points[i]; + while (k >= 2 && points[i].ccw(hull[k-2], hull[k-1]) <= 0) k--; + hull[k++] = points[i]; } // Build upper hull for (int i = n-2, t = k+1; i >= 0; i--) { - while (k >= t && points[i].ccw(hull.points[k-2], hull.points[k-1]) <= 0) k--; - hull.points[k++] = points[i]; + while (k >= t && points[i].ccw(hull[k-2], hull[k-1]) <= 0) k--; + hull[k++] = points[i]; } - hull.points.resize(k); + hull.resize(k); - assert( hull.points.front().coincides_with(hull.points.back()) ); - hull.points.pop_back(); + assert( hull.front().coincides_with(hull.back()) ); + hull.pop_back(); } return hull; } +Pointf3s +convex_hull(Pointf3s points) +{ + return raw_convex_hull(points); +} + +Polygon +convex_hull(Points points) +{ + Polygon hull; + hull.points = raw_convex_hull(points); + return hull; +} + Polygon convex_hull(const Polygons &polygons) { @@ -243,7 +258,7 @@ convex_hull(const Polygons &polygons) for (Polygons::const_iterator p = polygons.begin(); p != polygons.end(); ++p) { pp.insert(pp.end(), p->points.begin(), p->points.end()); } - return convex_hull(pp); + return convex_hull(std::move(pp)); } /* accepts an arrayref of points and returns a list of indices diff --git a/xs/src/libslic3r/Geometry.hpp b/xs/src/libslic3r/Geometry.hpp index c2c3dc8b7..956ef82aa 100644 --- a/xs/src/libslic3r/Geometry.hpp +++ b/xs/src/libslic3r/Geometry.hpp @@ -108,8 +108,10 @@ inline bool segment_segment_intersection(const Pointf &p1, const Vectorf &v1, co return true; } +Pointf3s convex_hull(Pointf3s points); Polygon convex_hull(Points points); Polygon convex_hull(const Polygons &polygons); + void chained_path(const Points &points, std::vector &retval, Point start_near); void chained_path(const Points &points, std::vector &retval); template void chained_path_items(Points &points, T &items, T &retval); diff --git a/xs/src/libslic3r/Point.cpp b/xs/src/libslic3r/Point.cpp index 2abcd26af..349b00bb6 100644 --- a/xs/src/libslic3r/Point.cpp +++ b/xs/src/libslic3r/Point.cpp @@ -263,6 +263,12 @@ operator<<(std::ostream &stm, const Pointf &pointf) return stm << pointf.x << "," << pointf.y; } +double +Pointf::ccw(const Pointf &p1, const Pointf &p2) const +{ + return (double)(p2.x - p1.x)*(double)(this->y - p1.y) - (double)(p2.y - p1.y)*(double)(this->x - p1.x); +} + std::string Pointf::wkt() const { diff --git a/xs/src/libslic3r/Point.hpp b/xs/src/libslic3r/Point.hpp index 87104674f..347966c03 100644 --- a/xs/src/libslic3r/Point.hpp +++ b/xs/src/libslic3r/Point.hpp @@ -221,6 +221,7 @@ public: static Pointf new_unscale(const Point &p) { return Pointf(unscale(p.x), unscale(p.y)); }; + double ccw(const Pointf &p1, const Pointf &p2) const; std::string wkt() const; std::string dump_perl() const; void scale(double factor); -- cgit v1.2.3 From f9efcc36b64d631bfece0a207fbb74388c3bb514 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 17 Aug 2018 15:40:47 +0200 Subject: Lay flat gizmo improvements - merge adjacent faces, compute and cache convex hull for entire ModelObject, refresh when moved, etc. --- xs/src/libslic3r/TriangleMesh.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp index 957515db3..19dcc6a07 100644 --- a/xs/src/libslic3r/TriangleMesh.cpp +++ b/xs/src/libslic3r/TriangleMesh.cpp @@ -728,6 +728,7 @@ TriangleMesh TriangleMesh::convex_hull_3d() const TriangleMesh output_mesh(det_vertices, facets); output_mesh.repair(); + output_mesh.require_shared_vertices(); return output_mesh; } -- cgit v1.2.3 From b0dd328fdec094cd072ece2cbfff87dcf07d51c2 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 20 Aug 2018 11:27:25 +0200 Subject: Lay flat - icons and invalidation improvement --- xs/src/libslic3r/TriangleMesh.cpp | 5 +++++ xs/src/libslic3r/TriangleMesh.hpp | 1 + 2 files changed, 6 insertions(+) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp index 19dcc6a07..008679e6c 100644 --- a/xs/src/libslic3r/TriangleMesh.cpp +++ b/xs/src/libslic3r/TriangleMesh.cpp @@ -732,6 +732,11 @@ TriangleMesh TriangleMesh::convex_hull_3d() const return output_mesh; } +const float* TriangleMesh::first_vertex() const +{ + return stl.facet_start ? &stl.facet_start->vertex[0].x : nullptr; +} + void TriangleMesh::require_shared_vertices() { diff --git a/xs/src/libslic3r/TriangleMesh.hpp b/xs/src/libslic3r/TriangleMesh.hpp index 6ab52efe2..be151f062 100644 --- a/xs/src/libslic3r/TriangleMesh.hpp +++ b/xs/src/libslic3r/TriangleMesh.hpp @@ -53,6 +53,7 @@ public: TriangleMeshPtrs split() const; void merge(const TriangleMesh &mesh); ExPolygons horizontal_projection() const; + const float* first_vertex() const; Polygon convex_hull(); BoundingBoxf3 bounding_box() const; // Returns the bbox of this TriangleMesh transformed by the given matrix -- cgit v1.2.3 From 28c8e176b56e3fbff11a1f7b7f07bc87bcc252b4 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Tue, 21 Aug 2018 14:36:24 +0200 Subject: Yet another experimental parameter to adjust the initial loading speed of a newly loaded filament --- xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp | 9 +++++++-- xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp | 4 +++- xs/src/libslic3r/Print.cpp | 2 ++ xs/src/libslic3r/PrintConfig.cpp | 8 ++++++++ xs/src/libslic3r/PrintConfig.hpp | 2 ++ 5 files changed, 22 insertions(+), 3 deletions(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp index de1f9a59b..42c06252b 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp @@ -879,10 +879,15 @@ void WipeTowerPrusaMM::toolchange_Load( writer.append("; CP TOOLCHANGE LOAD\n") .suppress_preview() - .load_move_x_advanced(turning_point, 0.2f * edist, 0.3f * m_filpar[m_current_tool].loading_speed) // Acceleration + /*.load_move_x_advanced(turning_point, 0.2f * edist, 0.3f * m_filpar[m_current_tool].loading_speed) // Acceleration .load_move_x_advanced(oldx, 0.5f * edist, m_filpar[m_current_tool].loading_speed) // Fast phase .load_move_x_advanced(turning_point, 0.2f * edist, 0.3f * m_filpar[m_current_tool].loading_speed) // Slowing down - .load_move_x_advanced(oldx, 0.1f * edist, 0.1f * m_filpar[m_current_tool].loading_speed) // Super slow + .load_move_x_advanced(oldx, 0.1f * edist, 0.1f * m_filpar[m_current_tool].loading_speed) // Super slow*/ + + .load(0.2f * edist, 60.f * m_filpar[m_current_tool].loading_speed_start) + .load_move_x_advanced(turning_point, 0.7f * edist, m_filpar[m_current_tool].loading_speed) // Fast phase + .load_move_x_advanced(oldx, 0.1f * edist, 0.1f * m_filpar[m_current_tool].loading_speed) // Super slow*/ + .travel(oldx, writer.y()) // in case last move was shortened to limit x feedrate .resume_preview(); diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp index 4b96ce17c..305dbc40a 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp @@ -65,7 +65,7 @@ public: // Set the extruder properties. - void set_extruder(size_t idx, material_type material, int temp, int first_layer_temp, float loading_speed, + void set_extruder(size_t idx, material_type material, int temp, int first_layer_temp, float loading_speed, float loading_speed_start, float unloading_speed, float unloading_speed_start, float delay, int cooling_moves, float cooling_initial_speed, float cooling_final_speed, std::string ramming_parameters, float nozzle_diameter) { @@ -76,6 +76,7 @@ public: m_filpar[idx].temperature = temp; m_filpar[idx].first_layer_temperature = first_layer_temp; m_filpar[idx].loading_speed = loading_speed; + m_filpar[idx].loading_speed_start = loading_speed_start; m_filpar[idx].unloading_speed = unloading_speed; m_filpar[idx].unloading_speed_start = unloading_speed_start; m_filpar[idx].delay = delay; @@ -217,6 +218,7 @@ private: int temperature = 0; int first_layer_temperature = 0; float loading_speed = 0.f; + float loading_speed_start = 0.f; float unloading_speed = 0.f; float unloading_speed_start = 0.f; float delay = 0.f ; diff --git a/xs/src/libslic3r/Print.cpp b/xs/src/libslic3r/Print.cpp index 4154378ec..bd14837d9 100644 --- a/xs/src/libslic3r/Print.cpp +++ b/xs/src/libslic3r/Print.cpp @@ -200,6 +200,7 @@ bool Print::invalidate_state_by_config_options(const std::vectorconfig.temperature.get_at(i), this->config.first_layer_temperature.get_at(i), this->config.filament_loading_speed.get_at(i), + this->config.filament_loading_speed_start.get_at(i), this->config.filament_unloading_speed.get_at(i), this->config.filament_unloading_speed_start.get_at(i), this->config.filament_toolchange_delay.get_at(i), diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index cd933deaf..860283fbd 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -473,6 +473,14 @@ PrintConfigDef::PrintConfigDef() def->min = 0; def->default_value = new ConfigOptionFloats { 28. }; + def = this->add("filament_loading_speed_start", coFloats); + def->label = L("EXPERIMENTAL: Loading speed at the start"); + def->tooltip = L("Speed used at the very beginning of loading phase. "); + def->sidetext = L("mm/s"); + def->cli = "filament-loading-speed-start=f@"; + def->min = 0; + def->default_value = new ConfigOptionFloats { 9. }; + def = this->add("filament_unloading_speed", coFloats); def->label = L("Unloading speed"); def->tooltip = L("Speed used for unloading the filament on the wipe tower (does not affect " diff --git a/xs/src/libslic3r/PrintConfig.hpp b/xs/src/libslic3r/PrintConfig.hpp index edf7756e8..fd5392cab 100644 --- a/xs/src/libslic3r/PrintConfig.hpp +++ b/xs/src/libslic3r/PrintConfig.hpp @@ -528,6 +528,7 @@ public: ConfigOptionFloats filament_cost; ConfigOptionFloats filament_max_volumetric_speed; ConfigOptionFloats filament_loading_speed; + ConfigOptionFloats filament_loading_speed_start; ConfigOptionFloats filament_load_time; ConfigOptionFloats filament_unloading_speed; ConfigOptionFloats filament_unloading_speed_start; @@ -595,6 +596,7 @@ protected: OPT_PTR(filament_cost); OPT_PTR(filament_max_volumetric_speed); OPT_PTR(filament_loading_speed); + OPT_PTR(filament_loading_speed_start); OPT_PTR(filament_load_time); OPT_PTR(filament_unloading_speed); OPT_PTR(filament_unloading_speed_start); -- cgit v1.2.3 From 86b67bbd4282016fbbbbc94306e37eada582daf1 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Tue, 21 Aug 2018 15:40:11 +0200 Subject: Lay flat - rotation is now done in one go directly about the necessary axis --- xs/src/libslic3r/Model.cpp | 2 +- xs/src/libslic3r/Model.hpp | 2 +- xs/src/libslic3r/TriangleMesh.cpp | 11 +++++++++++ xs/src/libslic3r/TriangleMesh.hpp | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/Model.cpp b/xs/src/libslic3r/Model.cpp index 23d447748..09b515c2f 100644 --- a/xs/src/libslic3r/Model.cpp +++ b/xs/src/libslic3r/Model.cpp @@ -725,7 +725,7 @@ void ModelObject::scale(const Pointf3 &versor) this->invalidate_bounding_box(); } -void ModelObject::rotate(float angle, const Axis &axis) +void ModelObject::rotate(float angle, const Pointf3& axis) { for (ModelVolume *v : this->volumes) { diff --git a/xs/src/libslic3r/Model.hpp b/xs/src/libslic3r/Model.hpp index 23af9fb1c..dadd515de 100644 --- a/xs/src/libslic3r/Model.hpp +++ b/xs/src/libslic3r/Model.hpp @@ -120,7 +120,7 @@ public: void translate(const Vectorf3 &vector) { this->translate(vector.x, vector.y, vector.z); } void translate(coordf_t x, coordf_t y, coordf_t z); void scale(const Pointf3 &versor); - void rotate(float angle, const Axis &axis); + void rotate(float angle, const Pointf3& axis); void transform(const float* matrix3x4); void mirror(const Axis &axis); size_t materials_count() const; diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp index 008679e6c..4c45680b6 100644 --- a/xs/src/libslic3r/TriangleMesh.cpp +++ b/xs/src/libslic3r/TriangleMesh.cpp @@ -324,6 +324,17 @@ void TriangleMesh::translate(float x, float y, float z) stl_invalidate_shared_vertices(&this->stl); } +void TriangleMesh::rotate(float angle, Pointf3 axis) +{ + if (angle == 0.f) + return; + + axis = normalize(axis); + Eigen::Transform m = Eigen::Transform::Identity(); + m.rotate(Eigen::AngleAxisf(angle, Eigen::Vector3f(axis.x, axis.y, axis.z))); + stl_transform(&stl, (float*)m.data()); +} + void TriangleMesh::rotate(float angle, const Axis &axis) { if (angle == 0.f) diff --git a/xs/src/libslic3r/TriangleMesh.hpp b/xs/src/libslic3r/TriangleMesh.hpp index be151f062..72e541afc 100644 --- a/xs/src/libslic3r/TriangleMesh.hpp +++ b/xs/src/libslic3r/TriangleMesh.hpp @@ -40,6 +40,7 @@ public: void scale(const Pointf3 &versor); void translate(float x, float y, float z); void rotate(float angle, const Axis &axis); + void rotate(float angle, Pointf3 axis); void rotate_x(float angle); void rotate_y(float angle); void rotate_z(float angle); -- cgit v1.2.3 From be3b8e98daab21fda63bf126a1bcd6d80869706b Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 24 Aug 2018 12:46:32 +0200 Subject: Edited captions and default values of the new parameters (initial loading and unloading speed) --- xs/src/libslic3r/PrintConfig.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 860283fbd..c2baba027 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -474,12 +474,12 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloats { 28. }; def = this->add("filament_loading_speed_start", coFloats); - def->label = L("EXPERIMENTAL: Loading speed at the start"); + def->label = L("Loading speed at the start"); def->tooltip = L("Speed used at the very beginning of loading phase. "); def->sidetext = L("mm/s"); def->cli = "filament-loading-speed-start=f@"; def->min = 0; - def->default_value = new ConfigOptionFloats { 9. }; + def->default_value = new ConfigOptionFloats { 3. }; def = this->add("filament_unloading_speed", coFloats); def->label = L("Unloading speed"); @@ -491,12 +491,12 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloats { 90. }; def = this->add("filament_unloading_speed_start", coFloats); - def->label = L("EXPERIMENTAL: Unloading speed at the start"); + def->label = L("Unloading speed at the start"); def->tooltip = L("Speed used for unloading the tip of the filament immediately after ramming. "); def->sidetext = L("mm/s"); def->cli = "filament-unloading-speed-start=f@"; def->min = 0; - def->default_value = new ConfigOptionFloats { 83. }; + def->default_value = new ConfigOptionFloats { 100. }; def = this->add("filament_toolchange_delay", coFloats); def->label = L("Delay after unloading"); -- cgit v1.2.3 From 78a7104994b671e622c6e2bb00718d3c0bd6fa60 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Sat, 25 Aug 2018 22:09:55 +0200 Subject: Changed the wording of "Purge into this object's ..." to "Wipe ..." --- xs/src/libslic3r/PrintConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index b582b501b..f9f0b2056 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -2059,7 +2059,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("wipe_into_infill", coBool); def->category = L("Extruders"); - def->label = L("Purge into this object's infill"); + def->label = L("Wipe into this object's infill"); def->tooltip = L("Purging after toolchange will done inside this object's infills. " "This lowers the amount of waste but may result in longer print time " " due to additional travel moves."); @@ -2068,7 +2068,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("wipe_into_objects", coBool); def->category = L("Extruders"); - def->label = L("Purge into this object"); + def->label = L("Wipe into this object"); def->tooltip = L("Object will be used to purge the nozzle after a toolchange to save material " "that would otherwise end up in the wipe tower and decrease print time. " "Colours of the objects will be mixed as a result."); -- cgit v1.2.3 From 4522811f5bae9ca3a66270ad7f51ac39e0cb6e47 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Sat, 25 Aug 2018 22:11:04 +0200 Subject: Bumped up the version number to 1.41.0-beta2 --- xs/src/libslic3r/libslic3r.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'xs/src/libslic3r') diff --git a/xs/src/libslic3r/libslic3r.h b/xs/src/libslic3r/libslic3r.h index 34f61cb12..6db60440b 100644 --- a/xs/src/libslic3r/libslic3r.h +++ b/xs/src/libslic3r/libslic3r.h @@ -14,7 +14,7 @@ #include #define SLIC3R_FORK_NAME "Slic3r Prusa Edition" -#define SLIC3R_VERSION "1.41.0-beta" +#define SLIC3R_VERSION "1.41.0-beta2" #define SLIC3R_BUILD "UNKNOWN" typedef int32_t coord_t; -- cgit v1.2.3