Commit graph

55 commits

Author SHA1 Message Date
Vojtech Bubnik
237e56c7ce Follow-up to ee626eb65a
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 : 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 - 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 .
2022-07-14 09:10:22 +02:00
Lukáš Hejl
d02a0ec1b2 Fix of - 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 18124b07a2 - 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
Lukáš Hejl
3610afd393 Updated Arachne with Cura master. 2022-06-01 21:40:15 +02:00
Lukáš Hejl
324e889d5e Fixed inconsistent extrusion width between layers when it is used Arachne. 2022-06-01 21:40:15 +02:00
Lukáš Hejl
adf2d21c67 Allowed "Slicing engine" and all Arachne parameters to be settable per object. 2022-06-01 21:40:15 +02:00
Lukáš Hejl
556e2b71cc Initial port of Arachne from Cura. 2022-06-01 21:40:13 +02:00
Lukáš Hejl
4015a83acb Added a possibility into thick_polyline_to_extrusion_paths() to separately set tolerance for merging two following lines based on a difference between lines width. 2022-06-01 21:39:23 +02:00
Vojtech Bubnik
4158f9ec8e New config value "gcode_resolution" replaces the hard coded RESOLUTION
value, which was set to 0.0125mm.
2021-11-30 17:52:05 +01:00
Vojtech Bubnik
7ff76d0768 New ClipperUtils functions: opening(), closing() as an alternative
for offset2() with clear meaning.
New ClipperUtils functions: expand(), shrink() as an alternative
for offset() with clear meaning.
All offset values for the new functions are positive.

Various offsetting ClipperUtils (offset, offset2, offset2_ex) working
over Polygons were marked as unsafe, sometimes producing invalid output
if called for more than one polygon. These functions were reworked
to offset polygons one by one. The new functions working over Polygons
shall work the same way as the old safe ones working over ExPolygons,
but working with Polygons shall be computationally more efficient.

Improvements in FDM support generator:
1) For both grid and snug supports: Don't filter out supports for which
   the contacts are completely reduced by support / object XY separation.
2) Rounding / merging of supports using the closing radius parameter is
   now smoother, it does not produce sharp corners.
3) Snug supports: When calculating support interfaces, expand the projected
   support contact areas to produce wider, printable and more stable interfaces.
4) Don't reduce support interfaces for snug supports for steep overhangs,
   that would normally not need them. Snug supports often produce very
   narrow support interface regions and turning them off makes the support
   interfaces disappear.
2021-10-14 09:11:31 +02:00
Vojtech Bubnik
7d4b3f2992 Fix of safety_offset() after ClipperUtils refactoring.
Fixes Solid infill where there should be none 
Also the safety offsetting was revised to be enabled only where needed,
the "do safety offset" is now easy to discover by
a new ApplySafetyOffset::Yes enum, and safety offset over union, which
is better done by offset() / offset_ex() has been replaced with
new union_safety_offset() / union_safety_offset_ex() functions, which
better convey their meaning and which could be better optimized than
union() with the safety offset applied.
2021-05-05 12:16:47 +02:00
Vojtech Bubnik
09a80d954c Further rework of ClipperUtils: Replaced many to_polygons() /
to_expolygons() calls with templated ClipperUtils variants to avoid
memory allocation and copying.
2021-05-03 11:39:53 +02:00
Vojtech Bubnik
f01f02154c Reworked the "new" bridging to respect the bridge_flow_ratio
by maintaining extrusion spacing, but modifying the extrusion width
and / or height.
2021-03-15 09:55:56 +01:00
Vojtech Bubnik
ceea9de8b8 WIP: Refactored bridging flow from normal flow, new config value
'thick_bridges' to switch between the Slic3r vs. S3D/Cura/Ideamaker
way of printing 1st object layer over supports.
Simplified the PresetHints.
2021-03-15 09:55:56 +01:00
Vojtech Bubnik
aee136cedd Squash merge of pull request Raft enhancements
thanks @nemart69
2021-02-24 11:59:22 +01:00
Vojtech Bubnik
d2c46025c7 Fix of Enforce support for first N layers has no effect 2021-02-23 15:31:21 +01:00
Vojtech Bubnik
db2d78ff21 Reduction on compiler warnings, mainly on MSVC.
Fix of the new gap_fill_enable flag: Take it into account when comparing
regions.
2021-02-10 17:29:07 +01:00
Vojtech Bubnik
6555b32f5c Squashed commit of the following:
commit 61b3ca0b4b4a0b4cfbbc706ede94ef7ccec4c91f
Author: Vojtech Bubnik <bubnikv@gmail.com>
Date:   Wed Feb 10 15:42:27 2021 +0100

    Fix of fuzzy skin

commit d971ed51a5bb65e8bdfd326bc41b9d7ab2e20834
Author: Vojtech Bubnik <bubnikv@gmail.com>
Date:   Wed Feb 10 14:12:51 2021 +0100

    CMake adjustment of MINIMUM_BOOST_VERSION

commit 5d8aa2c59ecf7e32456f2e43e07dedc7d24eb21c
Author: Vojtech Bubnik <bubnikv@gmail.com>
Date:   Wed Feb 10 14:12:33 2021 +0100

    Fix of debug compilation after warning removal.

commit 5e339b3078f0c9d75b6fac28ed3c295ae9fbbef5
Author: Vojtech Bubnik <bubnikv@gmail.com>
Date:   Wed Feb 10 14:11:34 2021 +0100

    Fuzzy Skin changes:
    1) Moved the parameters to region
    2) Removed experimental code.
    3) Allowed fuzzyfication of both outer perimeter and holes.
2021-02-10 16:02:43 +01:00
Ilya
f639c08caf
Added separate checkbox for gap filling ()
* in dev

* moved to Advanced menu
2021-02-10 16:01:40 +01:00
Vojtech Bubnik
73c9f939e0 Squash merge of lh_brim_rework,
brim separated to Brim.cpp,hpp
Refactored accessors to PrintObjectPtrs, PrintRegionPtrs, LayerPtrs,
SupportLayerPtrs for const correctness.
2021-02-03 15:12:53 +01:00
Lukas Matena
2d32c80b75 Fixing GCC warnings 2 2021-01-29 10:46:52 +01:00
Vojtech Bubnik
dcec1fa749 Commented out fuzzy_skin_shape for now, the parameter may be used
in the future, but for now we don't want the parameter to be stored
into configuration files.
2021-01-27 09:36:39 +01:00
Vojtech Bubnik
4620402ab4 WIP: Initial Fuzzy Skin implementaiton
Based on pull request Experimental fuzzy skin mode  by @etet100
and on CuraEngine implementation of perimeter fuzzyfication
void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh)
2021-01-26 09:29:34 +01:00
Vojtech Bubnik
364300055e Fix of spiral vase mode with holes in the bottom: Holes in the bottom layers
(non-spiral vase layers) were being closed.
Fixes Bad slicing in vase mode (unexpected bridge and solid infill layers) 
Fixes Model with holes in the base does not slice properly in "Vase Mode" 
2020-12-09 14:54:26 +01:00
Vojtech Bubnik
62bdc192d8 Fix of [2.3.0-alpha4] Crash - several models cause crash when slicing
Fixed some issues in internal anchors of the Adaptive Cubic infill.
The ugly and dangerous implicit casting operators in Line, MultiPoint,
Polyline and Polygon were made explicit.
2020-11-24 16:01:08 +01:00
bubnikv
4e11552da9 Spiral vase improvements and bugfixes.
Fixes Connecting / expanding Bottom Layers to Vase Perimeter 
Fixes Slicing error in vase mode 
Fixes Slicing Issue (Vase Mode, 0.6mm dmr nozzle) 
Fixes Top fill pattern isn't used in spiral vase mode 
Fixes Cisar's vase doesn't slice correctly, creates artefacts 

When the model is sliced, all the contours are newly oriented
counter-clockwise (even holes), merged and then only the largest area
contour is retained. In perimeter generator, if the largest contour
splits into multiple perimeters, newly only the largest area perimeter
is retained in spiral vase mode. These two changes solve  and similar.

The infill is newly calculated only for the bottom solid layers
if the spiral vase mode is active (removes various unwanted infill
along the vase walls), and the last bottom solid layer is switched
to a top solid pattern (solves ).

The thin walls are newly enforced to be disabled in spiral vase mode,
and the "ensure vertical shell wall" is enforced in spiral vase mode
to extend the bottom of the vase to the vase hull (fixes ).
2020-02-08 21:36:43 +01:00
bubnikv
331c187b39 Rest of the path chaining has been replaced with the new algorithm.
PolylineCollection.cpp/hpp was removed, use Polylines instead.
Various first_point() / last_point() now return references, not copies.
2019-09-27 18:17:21 +02:00
bubnikv
41495a932a Introduction of a greedy Traveling Salesman Problem algorithm,
producing better shortest path estimate than the "closest next neighbor"
heuristics. The new greedy algorithm utilizes KD tree for closest
end point search, and builds a graph to detect loops.

PerimeterGenerator newly uses the optimized TSP algorithm.

ExtrusionEntity has been refactored / simplified.
2019-09-26 09:44:38 +02:00