80 Commits

Author SHA1 Message Date
Pavel Mikus
c234b98db5 Fix additional special case for ordering of extra perimeters 2023-03-28 21:00:07 +02:00
Pavel Mikuš
5885a47698
Improve pathing on extra perimeters - should not print in air if possible (#29)
Fix issue 9545 - make extra perimeters print first anchored then rest by
sorting paths - breadth first search from anchored first
2023-03-08 14:29:55 +01:00
Vojtech Bubnik
978f5c8b47 Merge remote-tracking branch 'remotes/origin/master' into vb_ensurovani 2023-02-17 15:20:47 +01:00
PavelMikus
2b1bd627d7 Extra perimeters - minimal change, reduce touch distance in order to improve path sorting
Object stability warning - relfect the state, recommend brim only when it makes sense, and brim is not enabled yet.
2023-02-06 17:06:28 +01:00
PavelMikus
5de05294db Fix extra perimters overlap with infill, there was unecessary additional extrusion
issue: Extra perimeters on overhangs #9604
2023-02-06 11:43:33 +01:00
Pavel Mikus
79d5a38928 Create validation error when both avoid crossing curled overhangs and avoid crossing perimeters are both enabled together
Update of the previous fix of extra perimeters - do not allow changing the direction of the paths after they have been sorted
2023-02-03 15:25:21 +01:00
PavelMikus
06e602afd3 \#9480 Fix weird path connections in Extra Perimeters when gap fill is applied
\#9513 \#9489 Fix crash when brim is used - the expansion of very small drops may result in empty polygon, which the support spot generator did not reflect
Fix crashes of stability alert checker, when empty print object was passed to it
2023-02-02 14:46:48 +01:00
Vojtech Bubnik
001358cbba Merge remote-tracking branch 'remotes/origin/master' into vb_ensurovani 2023-02-02 09:53:14 +01:00
Vojtech Bubnik
ca0c83d914 The new ExtrusionRole implementation newly supports both "Bridging"
and "External" attributes at the same time.
PerimeterGenerator was updated to make use of it and set "External"
attribute for overhang perimeters.
2023-01-16 14:39:57 +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
PavelMikus
9ccb413c02 Extra perimeters fix 2023-01-11 17:15:11 +01:00
Pavel Mikus
50425627b7 Fix etra perimeters overhang filtering based on the testing models 2023-01-11 17:15:11 +01:00
Pavel Mikus
72a25e7ad0 use new extrusion quality estimator function in support spot generator; fix issue with local support points and incorrect distance sign; 2023-01-11 17:15:11 +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
24e9807387 Greatly improve performance of extra perimeters on overhangs, fix gap fill on extra perimeters, mark as Experimental 2022-12-14 16:07:16 +01:00
Vojtech Bubnik
7f6f63db0f Fixed asserts in connecting islands and in perimeter overhangs
due to self intersections in clipped clipping rectangle.
2022-12-08 13:05:47 +01:00
Vojtech Bubnik
a98467f661 Merge remote-tracking branch 'remotes/origin/master' into vb_treesupports 2022-11-18 13:26:48 +01:00
Vojtech Bubnik
70b1b4dfbf Fixed extrusion of gap fill of classic perimeter generator
after recent refactoring / sorting of extrusions into LayerIslands.
2022-11-16 15:27:17 +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
Pavel Mikuš
294839eb24
Improve performance of extra perimeters on overhangs (#9)
Use polygons instead of ExPolygons
remove unnecessary unions of expensive areas
Smoothen the anchors via opening and closing
2022-11-16 11:33:00 +01:00
Vojtech Bubnik
1307fbf2f6 Fixed performance issues of PerimeterGenerator with
extremely detailed chain fabric models, for example
Fabric_of_Thyme_2.0_23x23
2022-11-15 18:28:56 +01:00
Vojtech Bubnik
f1c0c61895 Refactored Point / MultiPoint / Polyline / Polygon:
1) Removed virtual methods. There was not really need for them.
2) Some of the virtual methods were using conversion to Lines, which
   was unnecessary and expensive.
3) Removed some nearest element search methods from Point.
2022-11-14 19:01:17 +01:00
Pavel Mikuš
06fbab12fe
Pm overhang extra perimeters (#7)
Implementation of extra perimeters on steep overhangs/flat unsupported parts
Also contains:
Principal components computation over polygon area
New fast bridge direction estimation which minimizes amount of unanchored bridge endpoints
2022-11-09 10:38:36 +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
Lukáš Hejl
8a69612fe1 Fix of #8793: Visible vertical "seam" on fuzzy skin on the place where extrusion begins. 2022-09-02 19:52:44 +02:00
Lukáš Hejl
952a6c882c Fixed an issue that the wipe was shorter when it was located where extrusion width was changing. 2022-08-18 17:00:28 +02:00
Lukáš Hejl
e838acdcd1 Added a lot of debugging outputs (SVG) into SkeletalTrapezoidation. 2022-08-12 09:48:34 +02:00
Lukáš Hejl
c9ddf7315e Replaced parameters wall_add_middle_threshold and wall_split_middle_threshold with automatic computation based on extrusion width.
That allows computed better values in cases when the extrusion width of the first layer or for the infill differs from the extrusion width for perimeters.

Parameters min_feature_size and wall_transition_length now can be set in percentages, and then they will be calculated based on nozzle size. Old profiles with default values are forced to replace old default values with new default values in percentages.
2022-08-08 10:21:55 +02:00
Lukáš Hejl
decfa80bfd Test case for issue when Arachne produce closed ExtrusionLine that have different the first and the last point. 2022-07-22 08:33:27 +02:00
Lukáš Hejl
e14da6224a Fixed an issue when an open perimeter containing part of an overhang perimeter was split into two parts and wasn't extruded as continuous extrusion. 2022-07-22 08:33:27 +02:00
Lukáš Hejl
2a865919a0 Prevented gap fill and Arachne from creating tiny gaps in extrusions in specific cases. 2022-07-22 08:33:27 +02:00
Lukáš Hejl
e2e1272003 Fix of #8455 - Fixed the incorrect computation of the threshold for grouping ExtrusionPaths with the same extrusion width in thick_polyline_to_extrusion_paths() that was affecting Arachne and gap fill.
The previous behavior didn't merge two ExtrusionPaths with the same extrusion width, and it also could merge two ExtrusionPaths with different widths, which was unintentional, and it could also possibly create visible artifacts in some cases.
Because simplification of ExtrusionLoop in GCode::extrude_loop is working on ExtrusionPath and not on whole ExtrusionLoop, so previous incorrect behavior was preventing simplification and removing small extrusions like in #8455.
2022-07-14 09:10:22 +02:00
Lukáš Hejl
d02a0ec1b2 Fix of #8447 - Zero spacing when Clipper Z-coordinate (line width) equaled zero because the resulting path after clipping had vertices from a clipping polygon (which has Z-coordinate equal to zero). 2022-07-11 11:31:59 +02:00
Lukáš Hejl
a09cf52798 Fixed that fuzzy skin hadn't connected endpoints of extrusion when Arachne was used. 2022-06-21 12:35:56 +02:00
Lukáš Hejl
1622208249 Fixed infill polygons filtering. 2022-06-16 14:01:56 +02:00
Lukáš Hejl
f34c1f14da Fixed the orientation of ExtrusionLoops when Arachne is used. 2022-06-15 23:28:11 +02:00
Lukáš Hejl
3fba411d17 Follow-up of 18124b07a213f7ea5c420e9d2cdb52d893e80ed1 - Forgot to remove code for debugging. 2022-06-10 12:12:26 +02:00
Lukáš Hejl
18124b07a2 Fixed a crash when Arachne returns extrusion with zero-length (just two same endpoints). 2022-06-10 11:46:46 +02:00
Lukáš Hejl
3d9b13a5e3 Added fuzzy skin for Arachne. 2022-06-09 11:23:41 +02:00
Lukáš Hejl
357dbb4686 Fixed the flow of bridging perimeters for Arachne. 2022-06-09 11:23:41 +02:00
Lukáš Hejl
dc2789a0e8 Added computation of bridging perimeters for Arachne. 2022-06-09 11:23:41 +02:00
Lukáš Hejl
d107c47b0a Fixed infill polygons filtering for Arachne to mimic filtering in the classic perimeter generator. 2022-06-01 21:43:01 +02:00
Lukáš Hejl
e631ac171a Fixed a crash when the number of perimeters is set to zero with Arachne. 2022-06-01 21:43:01 +02:00
Lukáš Hejl
454e6496ce Added concentric infill generated using Arachne. 2022-06-01 21:41:39 +02:00
Lukáš Hejl
9896721bc8 Fixed crash when Arachne produced empty output. 2022-06-01 21:40:15 +02:00
Lukáš Hejl
d868261399 Updated the default values for wall_add_middle_threshold and wall_split_middle_threshold, which should decrease the number of missing tiny islands. 2022-06-01 21:40:15 +02:00
Lukáš Hejl
7e52650430 Fixed extrusion width calculation. 2022-06-01 21:40:15 +02:00
Lukáš Hejl
8616758354 Added greedy sort for ExtrusionLine in the perimeter generator. 2022-06-01 21:40:15 +02:00