123 Commits

Author SHA1 Message Date
Martin Šach
0b4e406b28 Add missing point to the rectangular travel 2024-02-19 15:24:48 +01:00
Martin Šach
5f9f5be614 Add lift to first travel move on layer. Add retraction_length 0 to test, to avoid lifting back up and going back down. 2024-02-14 16:58:47 +01:00
Martin Šach
8cbea4982a Add lift before the first travel move in GCode.cpp 2024-01-23 09:00:58 +01:00
Martin Šach
97ba0fb478 Fix retraction test 2024-01-17 13:09:26 +01:00
Martin Šach
f9283728d6 During first layer change, do not actually move z.
This enables the user to set his own z in start gcode. Fixes #11843.
2024-01-17 12:22:22 +01:00
Lukáš Hejl
da57489874 Implement lift before obstacles that take into account already extruder extrusions on the current layer.
Ignore the first intersection of the travel path with the object from which the travel starts.

Created a new class TravelObstacleTracker, for wrapping all data structures related to lift before obstacles.
2024-01-17 12:22:22 +01:00
Lukáš Hejl
2fc9299c65 Use max value of double instead of std::optional in get_first_crossed_line_distance() and get_obstacle_adjusted_slope_end(). 2024-01-17 12:22:22 +01:00
Lukáš Hejl
5858cbf0f7 Fix warnings in Travels tests. 2024-01-17 12:22:22 +01:00
SachCZ
7f397cd7b3 Implement ramping layer change using a tag in gcode
During layer change, instead of generating the gcode, generate a placeholder tag. Then at the end of layer processing replace this tag with a ramping travel move.
This solves the issue, that one does not know the starting point of the current layer where the layer change gcode would be originally generate.
The ramping layer changes uses smoothing of the ramping travel. Also it is adjusted in such a way that it increases the ramp angle when the travel is too short, to always reach the next layer.
2024-01-17 12:22:19 +01:00
SachCZ
24e3254697 Smooth z-hop curve to avoid unreasonably high jerk setting.
* Replace the ramping travel with a smooth ramping travel on marlin 2 under the right circumstances.
2024-01-17 12:21:36 +01:00
Martin Šach
b287bbc5dc Remove obsolete cmake find script and also remove Fill.hpp 2024-01-08 10:27:38 +01:00
Martin Šach
6b0dcc658d Fix narrowing conversion and memory leak in tests 2024-01-08 10:27:38 +01:00
Martin Šach
3e28ea3379 Rewrite layers.t to c++ 2024-01-08 10:27:38 +01:00
Martin Šach
6e871a874a Rewrite gcode.t to c++ 2024-01-08 10:27:38 +01:00
Martin Šach
852faddc5b Rewrite retraction.t to c++ 2024-01-08 10:27:38 +01:00
Martin Šach
e298593a2e Refactor: Separate gcode generator layer changes utilities to a file. 2023-12-06 09:49:56 +01:00
Martin Šach
e13d3cdbf2 Refactor: Move gcode travel utils to a separate file. 2023-12-06 09:49:56 +01:00
Martin Šach
2175fc3f4d Fix lift before obstacle over multiple instances. 2023-12-06 09:49:56 +01:00
Martin Šach
384d245be7 Add basic implementation of an obstacle finding algorithm during travels.
A line distancer over previous layer is constructed. It is then queried
during travel planing. If an obstacle is found in the travel path,
the travel algorithm ensures minimal elevation before the obstacle.
2023-11-10 12:19:39 +01:00
Martin Šach
a4a7ac4a4e Add helical layer change.
Previously the layer change was straight up which caused stringing.
To solve this, a helical travel is implemented when changing layers.
2023-11-10 12:19:39 +01:00
Martin Šach
49455cf427 Replace GCode.cpp travel_to with more general z-hop strategy.
The new travel has an initial flat part, sloped part and
once the travel height reaches maxima a flat part again.
Also, the notion of extruder lift is removed. It is used no more.
Consequently the retract_lift parameter lost its original meaning.
2023-11-10 12:19:39 +01:00
Vojtech Bubnik
014953c864 Merge branch 'et_spe_1784_binary_gcode' into master_262 2023-08-30 12:52:02 +02:00
Vojtech Bubnik
015a24133a Fixed some compilation warnings. 2023-08-30 12:51:35 +02:00
Vojtech Bubnik
3cfe2f4a3a Merge branch 'vb_arc_welder' into master_262 2023-08-28 15:50:00 +02:00
tamasmeszaros
b2d43c8719 Fix arrange in fff tests 2023-08-18 16:50:35 +02:00
tamasmeszaros
0b31ef6e1e Beginning of arrange gen2 2023-08-16 09:59:10 +02:00
Vojtech Bubnik
19062b4d5f ArcWelder path interpolation based on the work by Brad Hochgesang @FormerLurker.
WIP GCode/SmoothPath.cpp,hpp cache for interpolating extrusion path with arches.
Removed Perl test t/geometry.t, replaced with C++ tests.
Refactored ExtrusionEntity and derived classes to hold extrusion attributes in new ExtrusionFlow/ExtrusionAttributes classes.
Reworked path ordering in G-code export to never copy polylines, but to work with a new "flipped" attribute.
Reworked G-code export to interpolate extrusion paths with smooth paths and to extrude those smooth paths.
New parameters: arc_fitting, arc_fitting_tolerance
Renamed GCode class to GCodeGenerator
Moved GCodeWriter.cpp/hpp to GCode/
Moved Wipe from from GCode.cpp,hpp to GCode/Wipe.cpp,hpp
Moved WipeTowerIntegration from GCode.cpp,hpp to GCode/WipeTowerIntegration.cpp,hpp
New variant of douglas_peucker() to simplify range of iterators in place.
Refactored wipe in general and wipe on perimeters / hiding seams.

WIP: Convert estimate_speed_from_extrusion_quality() and its application to smooth paths.
WIP: Cooling buffer to process G2G3, disable arc fitting for filters that cannot process it.
2023-07-13 11:54:42 +02:00
PavelMikus
827230174f Fix tests for new ensuring under bridges 2023-05-12 10:32:14 +02:00
PavelMikus
68d0f2da2b Improve bridge over infill filtering, fix tests 2023-04-06 15:54:16 +02:00
PavelMikus
0eb2a2cf04 Disable "infill only where needed" option
Note: only commented out for now.
2023-03-27 13:27:57 +02:00
Vojtech Bubnik
e46891fa8c PlaceholderParser: Fixed compilation issues, added integration test
with FDM slicing process.
2023-03-23 09:23:20 +01:00
PavelMikus
de09af23b7 Fix/Disable some tests after Removal of ensure vertical shell thickness option 2023-03-03 18:15:21 +01:00
Vojtech Bubnik
001358cbba Merge remote-tracking branch 'remotes/origin/master' into vb_ensurovani 2023-02-02 09:53:14 +01:00
Lukas Matena
c909391e86 Fix a failing test (which is now obsolete) 2023-01-27 12:04:55 +01:00
Lukas Matena
98fea2f6ee Wipe tower: use GCode::set_extruder, allow ooze prevention:
this removes duplicated code and fixes toolchange retraction
The ooze prevention part needs further work, now it does not
work as advertised (the tall skirt)
2023-01-26 07:28:37 +01:00
Vojtech Bubnik
5991850db1 WIP Extending the expressivity of ExtrusionRole
Co-authored-by: supermerill <merill@free.fr>
Based on the unfinished idea of @supermerill, defining ExtrusionRole
as a bit mask of ExtrusionRoleModifier.
Because the ExtrusionRole was used for both ExtrusionEntity and
G-code export / G-code viewer, the original ExtrusionRole had to be split
to ExtrusionRole and GCodeExtrusionRole to support bitmask attributes
for the former while keeing a low number of ordinary values for the latter.
2023-01-16 10:14:46 +01:00
Vojtech Bubnik
fb85baf889 Ported shells.t unit tests from Perl. 2022-12-23 16:07:09 +01:00
Vojtech Bubnik
11c0e567a6 WIP "ensure verticall wall thickness" rework:
1) New region expansion code to propagate wave from a boundary
   of a region inside of it.
2) get_extents() extended with a template attribute to work with
   zero area data sets.
3) ClipperZUtils.hpp for handling Clipper operation with Z coordinate
   (for source contour identification)
2022-12-20 09:09:10 +01:00
PavelMikus
f71f8e0472 fix perimeters tests after merge of overhang slowdowns 2022-12-14 16:40:50 +01:00
Pavel Mikus
f730fd21d4 refactoring overhang speed 2022-12-14 14:49:20 +01:00
PavelMikus
dd7777f648 fix tests 2022-12-14 14:49:20 +01:00
Lukas Matena
f81382f604 Generic sphere shape is now created by recursive division of an icosahedron 2022-12-08 14:55:32 +01:00
Vojtech Bubnik
fe51f77839 Improvements in performance of Medial Axis algorithm.
Fixes Slicing slows or hangs on "Generating Permiters 20%" cpu load is at 100% #8164
Fixes Slicing hangs on generating perimeters with thing:3565827 (30g) #3259
2022-11-16 12:03:31 +01:00
Vojtech Bubnik
db3f696888 Fixed ExPolygon::overlaps(), which was not commutative.
Wrote unit tests for Clipper polyline clipping operations.
Rewrote ExPolygon unit tests from Perl to C++.
2022-11-15 15:32:16 +01:00
Vojtech Bubnik
9dca8403fe ClipperLib: Optimized PointInPolygon() to calculate cross products
with int64s instead of doubles.
Polygon / ExPolygon: contains() reworked to use ClipperLib::PointInPolygon().
	The Slic3r own implementation was not robust.
Fixed test_perimeters after recent refactoring (sorting of extrusions
	into LayerIslands)
2022-11-14 15:17:04 +01:00
Vojtech Bubnik
8858651bf4 WIP Refactoring of Layers: Reworked G-code export to make use
of Layer->LayerSlice->LayerIsland hierarchy. This should improve
tool path ordering of multiple parts within the same object #5511.

Some shells tests rewritten from Perl to C++.

FIXME: Gap fill extrusions are currently not handled by the initial
G-code preview!
2022-11-07 14:47:43 +01:00
Vojtech Bubnik
409fae6183 WIP Refactoring of Layers: LayerIslands filled in with perimeter
extrusions, gap fill extrusions and fill regions.
2022-11-02 12:59:31 +01:00
Vojtech Bubnik
d041fa6c0c Refactored PerimeterGenerator to output out_fill_surfaces as ExPolygons,
not SurfaceCollection.

Reworked combineinfill.t, 07_extrusionpath.t, 08_extrusionloop.t to c++.
Removed Layer / ExtrusionPath / ExtrusionLoop / ExtrusionEntityCollection
from Perl bindings.
2022-10-27 19:08:43 +02:00
Vojtech Bubnik
237e56c7ce Follow-up to ee626eb65a1a41ec7fd3e00f7b39d048c2795516
Refactored PerimeterGenerator for functional style, better constness
with the goal of calling PerimeterGenerator::process_xxx()
for each surface at once to collect its fill expolygons.
2022-10-27 13:04:52 +02:00
Vojtech Bubnik
ee626eb65a WIP: Layers split into islands, islands overlapping in Z interconnected
into a graph with links to the layer above / below.

In addition:
Members of LayerRegion were made private, public interface const only.
this->m_xxx replaced with just m_xxx
SurfacesPtr was made a vector of const pointers.
2022-10-26 18:41:39 +02:00