121 Commits

Author SHA1 Message Date
Martin Šach
33e57827bc Fix neares corner seam picking 2024-06-20 14:53:13 +02:00
Martin Šach
f6396f59e9 Refactor seams - due to new rear implementation shells are now only required for aligned seams. 2024-06-14 14:55:50 +02:00
Martin Šach
7d6563641c Change implementation of rear seam.
Use line distancer to obtain the nearest line to a rear point.
Be smart about choosing the rear point.
2024-06-14 14:55:50 +02:00
Martin Šach
badd01b65d Make nearest seam position choose from corners first if there are any 2024-06-14 14:54:19 +02:00
Martin Šach
3543f8c738 Remove seam 'visit forward' assert and rename it to better convey what the function does. 2024-05-30 10:47:18 +02:00
Martin Šach
a0d6d9f4c3 Use lower arm length for better seams on spheres 2024-05-13 13:21:42 +02:00
Martin Šach
9bf4a5f14b Add continuity modifier to seam aligned.
Previously, when searching for the optimal seam candidate, no previous
seams were taken into account. This sometimes led to ugly leaps in the seam
path. Now the visibility of a seam candidate that continues from a
previous seam is reduced, meaning there is a bigger chance it will
be picked.
2024-05-10 10:34:56 +02:00
Martin Šach
9a1dcc4720 Handle special seam case of just 2 or 3 perimeters.
If there are only 2 or 3 perimeters on a layer, exactly two of them are
external and just one of them is a hole, then the seams should be
choosen next to each other on the external perimeters.
2024-05-06 10:28:16 +02:00
Martin Šach
e60b8b1193 Seam placement improvements.
Previously there was an algirithm that was fitting a curve through
the resulting seam points. This worked for smooth models, but was
failing for some very basic cases (such as a cylinder).

The new algorithm builds on the previously implemented visibility
algirithm but does not do the curve fitting anymore.

Now the code is more separated for the four seam placement
options (rear, random, aligned, nearest).

Nearest and random are handled as one would expect.
Aligned is handled in a more "brute force" manner
(trying multiple seams and picking the best one)
and rear smartly switches between two modes
(center straight line projection and max y).
2024-05-06 10:11:32 +02:00
Vojtech Bubnik
8dad25efc4 Merge branch 'master' into master_262 2023-09-04 14:44:32 +02:00
ps_copyright
f32859c302 final copyright headers 2023-09-01 14:49:07 +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
Vojtech Bubnik
9cde96993e Reworked the ClipperLib / Polygon types to use
the tbb::scallable_allocator to better scale on multiple threads.
2023-04-20 11:31:44 +02: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
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
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
Pavel Mikus
c86deb92db improve function name to reflect that it does unscaling (to_unscaled_linesf) 2022-10-06 12:19:33 +02:00
Pavel Mikus
b49a2425ca Improve Lines Distancer quality, use it also in SeamPlacer 2022-10-05 14:51:32 +02:00
PavelMikus
bb993b8f94 Greatly reduce curling of Rear seams, revert previous ineffective change
SPE-1310
2022-09-23 11:40:19 +02:00
PavelMikus
63222eb529 Reduce curling of Rear seams, improve its quality
Relevant issue: 8841 Rear Seam Not Aligned, Not Rear of Model
2022-09-15 15:25:27 +02:00
PavelMikus
2781f716f4 Fixed short edge collapse algortihm, so that it does not decimate all triangles on very high detailed models
Relevant issue 8834 Access Error when slicing
2022-09-15 15:25:15 +02:00
PavelMikus
464a37110f Staggered inner seams 2022-09-06 11:25:39 +02:00
Lukas Matena
d7a34f7e40 Merge branch 'master_250' 2022-08-30 16:31:07 +02:00
Lukas Matena
b878b3a80f Follow-up to 9e88954 (avoid unnecessary copy) 2022-08-30 11:14:41 +02:00
PavelMikus
9e88954fbc Fix of issue 8695 - seam enforced areas were not respected with arachne generator.
The real issue was with T-Junctions created by Arachne - seam placer then sometimes
choose the wrong perimeter to split. The fix cases the seam placer to look for two
consecutive points that point to the same perimeter, which enusres that the correct
loop is split
2022-08-24 11:36:41 +02:00
PavelMikus
be9cae74a0 Random seam fix - pseudorandom generator instead of rand() 2022-08-18 17:19:58 +02:00
PavelMikus
d746ece41a fix performance problem in seam placer - do not generate merged islands for each layer; use lslices insted
affects also overhang estiamtion and thus other params
2022-08-18 17:19:58 +02:00
Lukas Matena
deac513faa Fixed conflicts after merge 2022-08-15 15:23:59 +02:00
Lukas Matena
bce2b148f4 Merged 2.5.0-beta1 into master (NO CONFLICTS FIXED) 2022-08-15 13:41:40 +02:00
PavelMikus
d39d35cc83 better curling fix, removed resamping, fixed the feature disable from previous commit 2022-08-11 15:30:51 +02:00
PavelMikus
8812036c25 slowly decreasing angle seam placement feature disabled 2022-08-11 15:30:51 +02:00
PavelMikus
0479387b20 reduce wavy seams for all layer heights, improve painting 2022-08-11 15:30:51 +02:00
PavelMikus
06084b0bc5 lower segment count on smooth parts 2022-08-11 15:30:51 +02:00
PavelMikus
3f36187101 increase segments count for smooth long strings 2022-08-11 15:30:51 +02:00
PavelMikus
52b9325f7c improving dynamic segmentation, simplifications in snapping angle logic 2022-08-11 15:30:51 +02:00
PavelMikus
44a388d560 prefer enforcers over blockers, lower the threshold distance,
dynamic modification of segments count in alignment based on smoothnes
2022-08-11 15:30:51 +02:00
PavelMikus
a41435d044 fixed overhang estimation correclty 2022-08-11 15:30:51 +02:00
PavelMikus
af95b6ecbd fix issue with enforced patches
refactor end_index to mark index after the last point
hackfix issue with overhang seem placement
2022-08-11 15:30:51 +02:00
PavelMikus
cb3678e1e2 fix bug in seam string weight - use seam string length as quality score 2022-08-11 15:30:51 +02:00
Lukas Matena
fbdf777898 Merge branch 'master_250' 2022-07-15 15:04:10 +02:00
Pavel Mikus
70677858a1 Use resampling only with smooth surfaces generated by Arachne 2022-07-14 18:00:59 +02:00
Pavel Mikus
2e437d1761 curling improvements 2022-07-14 11:47:29 +02:00
Pavel Mikus
d5d1633e2b Bugfix: seam enforcers and blockers not respected on different nozzle widths -
now flow width is used instead of fixed distance param
2022-07-14 10:15:05 +02:00
Pavel Mikus
f5efb0d0aa remove global angle computation, wrong results 2022-07-14 10:15:05 +02:00
Pavel Mikus
4a9f9aa89b oversample smooth surfaces, which reduces curling on those surfaces, because the shortest path down is better defined 2022-07-14 10:15:05 +02:00
Pavel Mikus
40408c2178 increase snapping angle 2022-07-14 10:15:05 +02:00
PavelMikus
768bfd5c7f reduce curling 2022-07-14 10:15:05 +02:00
PavelMikus
c65e22e6bb refactored find_seam_string func 2022-07-14 10:15:05 +02:00
PavelMikus
4d8e8afb10 Count seam string weight and try mutiple strings; choose highest weight 2022-07-14 10:15:05 +02:00
Pavel Mikus
f31865a627 increase weight of central seam enforcers 2022-07-14 10:15:05 +02:00