Commit Graph

19406 Commits

Author SHA1 Message Date
PavelMikus
b5a5926bbe Implemented alignment of inner seams, especially in concave angles where the perpendicular
projection is suboptimal.
2022-04-25 12:42:51 +02:00
PavelMikus
e377e58cd2 Updated weights for curve fitting, ensured snapping to sharp corners
Fixed debug exports after refactorings.
2022-04-25 12:42:51 +02:00
Godrak
43d9166382 nomralize weights of points before curve fitting and fitted value interpolation 2022-04-25 12:42:51 +02:00
PavelMikus
68cf4db58e interpolate fitted and original position during b spline alignment -
push points with large weight more towards their original position
2022-04-25 12:42:51 +02:00
PavelMikus
137fa35238 Postpone seam picking for spNearest configuration to the place_seam method. 2022-04-25 12:42:51 +02:00
PavelMikus
83f3ca27dc reworked and improved the find_next_seam_in_layer method:
Now uses find nearby_points with radius to save some computations
if all points are far.
From the nearby points, it finds the nearest and best point, and tries
to use them in this order (preivously only nearest was considered).
This helps to snap the alignment to nearby sharp corners if present.
2022-04-25 12:42:51 +02:00
PavelMikus
04d4a0d4f7 when searching for central enforcer (for alignment purposes), find properly the first
enforced segment. Fixed issue where if the enforced segment was painted over the start/end of the
perimeter, part of the enforced points was not considered.
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
2dfabb7e69 Fixing missing include. 2022-04-25 12:42:51 +02:00
Vojtech Bubnik
399b7f79e8 Little more refactoring of SeamPlacer. 2022-04-25 12:42:51 +02:00
Vojtech Bubnik
8c2e6aba79 On MSVC, std::deque degenerates to a list of pointers, which defeats
its purpose of reducing allocator load and memory fragmentation.
https://github.com/microsoft/STL/issues/147#issuecomment-1090148740
Slic3r::deque<> compiles to boost::container::deque<> on Windows,
to std::deque<> on other systems.
SeamPlacer newly uses Slic3r::deque<>.
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
adb467286f Documented the seam placement corner penalty with an image. 2022-04-25 12:42:51 +02:00
Vojtech Bubnik
853b8adf80 Little refactoring of SeamPlacer.
Moved color mapping functions to Color.hpp
Removed the "extern" keyword from Color.hpp
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
f5709345ad GCode export: Replaced std::strings in G-code comments with string_views.
Seam placer: Detecting perimeter by the pointer and size of the
comment_perimeter string_view, only placing seams for perimeters.
2022-04-25 12:42:51 +02:00
PavelMikus
fb2621c03c Negative volumes raycasting fix - normal was flipped between iterations, incorrect algorithm for hit detection
Debug files export fix after refactoring
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
8ce36e9137 Refactoring of SeamPlacer:
Replaced shared_ptr<> with deque.
Merged multiple vectors into one.
Refactoring using common helper functions (prev/next_idx_modulo(),
angle(), ...)
AABBTreeIndirect::intersect_ray_all_hits(): Reuse memory of the hits cache.
2022-04-25 12:42:51 +02:00
PavelMikus
3b8cfc62da fixed drawing seams on multipart objects
removed oversampling for blockers
improved drawing seams over sharp features
2022-04-25 12:42:51 +02:00
PavelMikus
47fc39a4ba fixed misleanding or wrong comments of the fitting function 2022-04-25 12:42:51 +02:00
PavelMikus
ae89d65e3e added description for the parameter count increase 2022-04-25 12:42:51 +02:00
PavelMikus
396d3215bd Refactoring of curve fitting algorithm:
removal of artificial extension at the ends of the curve
removal of observation points normalization
added clamping of parameter index which compensates for under-represented spline segments
added parameter for level of freedom at the ends of the curve
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
c19770189f Follow-up to 1c9ba291fe32bc4a4c78cabbab0639b0c164f23f
Refactoring of Curves.hpp for better memory management and vectorization
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
42e802c1b8 Refactoring of Curves.hpp for better memory management and vectorization
(replaced vector of vectors with Eigen 2D matrices).
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
bd8ce6fabd Follow-up to 9cb51caead9dee5c4d12a4ef5f925b5efeb00b75
Fixing compilation on GCC
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
e95d19b560 WIP, FIXME: Worked around a Perl integration test failure
in t/perimeters.t, see the comment
FIXME skip the 1st layer in the test 'loops start on concave point if any'

The failure is due to the seam smoothing, which brings the seam too far
away from the external perimeter at the 1st layer, which uses significantly
wider extrusion rate than the other layers. Moving the seam point from
the external perimeter causes an error when projecting the seam point
back to the external perimeter, where the projection lands not exactly
at a corner point, creating a short segment at the end of a polygon loop.
2022-04-25 12:42:51 +02:00
Vojtech Bubnik
7d02647ebf Removed various Point::ccw() and Point::ccw_angle() methods, they were
provided for Perl bindings and their semantic was confusing.
Implemented free function angle() to measure angle between two vectors.
Reworked Polygon::convex/concave_points(), changed the meaning of their
angle threshold parameter.
Removed some unused methods from Perl bindings and tests.
Reworked the "wipe inside at the external perimeter" function
after Point::ccw_angle() was removed.
2022-04-25 12:42:51 +02:00
PavelMikus
156a60017d fixed ExPolygons dealocation while using EdgeGrid
fixed warnings in Bicubic.h file
2022-04-25 12:42:51 +02:00
PavelMikus
965803822e remove invalid comment 2022-04-25 12:42:51 +02:00
PavelMikus
1164449d4e compute overhang distance using SDF
detect embedded (inner) perimeter points and prefer them for seam placement
2022-04-25 12:42:51 +02:00
PavelMikus
191e788aa0 make Random seams disaligned 2022-04-25 12:42:51 +02:00
PavelMikus
15135ef2ed fixes, central enforced point preference 2022-04-25 12:42:51 +02:00
PavelMikus
5c23d471de BSplines, Polynomial fitting 2022-04-25 12:42:51 +02:00
PavelMikus
bbcd6be250 Implemented piecewise data (curve) fitting with variable kernels 2022-04-25 12:42:51 +02:00
PavelMikus
bb89b630d9 implemented occlusion estimation for objects with negative volumes 2022-04-25 12:42:51 +02:00
PavelMikus
ca259caf33 fix ccw angle computation in Point.cpp 2022-04-25 12:42:51 +02:00
PavelMikus
177a1fd54a finalize integration into GCode.cpp export functions, remove unused
edge grids
2022-04-25 12:42:51 +02:00
PavelMikus
6dbc7149be parameter fixes, alignemnt for enforcers simplified 2022-04-25 12:42:51 +02:00
PavelMikus
c640fb854f bug fix: using trafo() instead of trafo_centred() caused
misalignment between occlusion mesh and seam candidates
2022-04-25 12:42:51 +02:00
PavelMikus
2274965079 alignment from best candidate 2022-04-25 12:42:51 +02:00
PavelMikus
eccf1c1553 refactored raycasting - inverted direction of raycasting - now each face is tested
fixed bug with custom seam drawings - square distance parameter named incorrectly
2022-04-25 12:42:51 +02:00
PavelMikus
a9f5330ad2 using gauss function to smoothen criteria skips 2022-04-25 12:42:51 +02:00
Godrak
ab3c8d0fe8 implemented smooth angle penalty function 2022-04-25 12:42:51 +02:00
PavelMikus
a92d5038bd debug export svg info,
fixing problem with weird seam placement caused by disconnected scoring function
2022-04-25 12:42:51 +02:00
PavelMikus
962282c9ef split occlusion and enforcers/blockers into separate functions
added weights to polynomial fitting
2022-04-25 12:42:51 +02:00
PavelMikus
f837759928 fixed problem with multipart objects
fixed bug : model volume trafo was not considered
2022-04-25 12:42:51 +02:00
PavelMikus
a775bf2978 improved enforcers blockers oversampling, renamed parameter 2022-04-25 12:42:51 +02:00
PavelMikus
8f7b86915a oversample polygons where necessary, due to seam enforcers & blockers 2022-04-25 12:42:51 +02:00
PavelMikus
87c276b7a4 comments and bugfix 2022-04-25 12:42:51 +02:00
PavelMikus
ad819850f9 tweaked parameters,
fixed minor bugs
2022-04-25 12:42:51 +02:00
PavelMikus
c72687c96c computing smooth score instead of binary decision when picking seams
some basic documentation
2022-04-25 12:42:51 +02:00
PavelMikus
105b67c9a7 presorting seams before alignemnt
mesh decimation for speed up
2022-04-25 12:42:51 +02:00
PavelMikus
f018160e72 implemented polynomial alignment,
however, initital seam placement is not ideal
- hard to balance visual cues and angle information
2022-04-25 12:42:51 +02:00