36 Commits

Author SHA1 Message Date
PavelMikus
27a7ddccb6 improve visibility estimation via distance to plane weighting.
increase angle importance, improve alignment
2022-06-08 10:28:21 +02:00
PavelMikus
c09781d61d optimize embedding computation
fix seed of random generators
set high angle importance for nearest mode
2022-06-07 11:12:48 +02:00
PavelMikus
1e7b4a6720 Implementation of ShortEdgeCollapse
Replaced QEC by edge collapse in occlusion computation
2022-06-07 11:12:48 +02:00
PavelMikus
b5b39195f4 Added throw_if_canceled callback to all slower sections 2022-06-07 11:12:48 +02:00
PavelMikus
c23d1488c9 Performance improvements 2022-06-07 11:12:48 +02:00
PavelMikus
a4201321e8 Hopefully improved the seam placer performance a lot 2022-06-07 11:12:48 +02:00
PavelMikus
6da220062c Mac OS pre 10.13 does not fully support std::optional (method .value() is not allowed)
This commit replaces usage of .value() calls with .operator*()
2022-06-07 11:12:48 +02:00
PavelMikus
d59d8eebde Full occlusion guided seam placer backport 2022-06-07 11:12:48 +02:00
Lukas Matena
ed508d49d6 Changed the inner seam replacement threshold to 3*nozzle_diameter 2022-01-25 15:40:28 +01:00
Lukas Matena
b86effada0 Fixed one possible crash and a warning 2022-01-25 15:40:28 +01:00
Lukas Matena
9e23795137 Trying to make the inner seam placement a bit more intelligent:
place external seams first, then place inner seam using the normal seam placement
function, only limited to vicinity of the closest external seam.
2022-01-25 15:40:27 +01:00
Lukas Matena
3cc907b361 Seams: changed the overhang penalty calculation, it might have been too much compared to the rest
Also reduced penalty for flat surfaces a bit, based on some testing (hopefully it is not overfitting on the test models)
2022-01-25 15:40:27 +01:00
Lukas Matena
689f923aaf Seam fixes:
- turned off staggering
- fixed a bug in one of the heuristics (distance between indices measured instead of actual distance)
2022-01-25 15:40:27 +01:00
Lukas Matena
e9b9c48cae Fixed rear seam option, which was not always respected,
the problem was originally introduced in b8c898b, recent
seam changes probably made it more visible
2021-12-08 16:18:54 +01:00
Lukas Matena
19eb984d72 SeamPlacer: one more heuristic to get rid of long travels 2021-10-22 13:16:08 +02:00
Lukas Matena
59502e7861 Seam placement improvements 2021-10-22 13:16:08 +02: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
Lukas Matena
b5fea72618 Speed-up of painted seams 2021-07-15 09:49:36 +02:00
Vojtech Bubnik
0d70a2be69 Renamed create_face_neighbors_index() to its_face_edge_ids().
Renamed its_create_neighbors_index() / its_create_neighbors_index_par() to its_face_neighbors() / its_face_neighbors_par().
New variant of its_face_edge_ids() to create edge IDs from face neighbors.
Fixed some incorrect use of _NDEBUG, it should be NDEBUG.
PrintObject::slice_support_volumes() returns newly Polygons, which are cheaper than ExPolygons.
Updated SeamPlacer and SupportMaterial to use regions defined as Polygons, not ExPolygons.
TriangleSelector::get_facets_strict() returning a patch with T-joints retriangulated.
New slice_mesh_slabs() - slicing projections of a triangle patch into top / bottom layers of slices, for MMU top / bottom segmentation.
TriangleMeshSlicer - use 64 mutexes instead of one when scattering sliced triangles into layers. This makes a big difference on modern many core desktop computers.
When applying MM segmented regions to input regions, the split regions are now re-merged with 10x higher positive offset epsilon to avoid creating gaps.
When testing for existence of paint-on supports or seam, use a more efficient has_facets() test, which does not deserialize into the expensive TriangleSelector tree structure.
GLIndexedVertexArray newly uses Eigen::AlignedBox<float, 3> for efficiency instead of our double based BoundingBoxf3.
Improved MMU painting refresh speed by optimizing generation of the vertex buffers.
Refactored MMU segmentation - projection of painted surfaces from top / bottom.
	1) Parallelized.
	2) Using the new slice_mesh_slabs() instead of projecting one triangle by the other and merging them with Clipper.
2021-06-20 15:21:12 +02:00
Lukas Matena
1904b7b904 Bugfix: custom seam did not work for triangles that were exactly vertical
The projection algorithm was originally made for custom supports, so vertical triangles
were not interesting. They are for seam. Instead of rewriting the algorithm and risking
more bugs, the edge case is detected and the triangle is tilted slightly.
2021-02-22 16:26:16 +01:00
Lukas Matena
bd2cbea202 Fix aligned seam when sequential printing is enabled 2021-02-22 16:26:16 +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
Lukas Matena
1834ebe981 Fixing Clang warnings 3 2021-02-08 17:52:29 +01:00
Lukas Matena
6e3b4b6fd8 Random seam: optimization and fix of a possible infinite loop 2020-12-17 15:48:25 +01:00
Lukas Matena
997ee971b4 Bugfix: custom seam identification
Bounding boxes of polygons could overlap. Ask the AABB tree for all possible candidates.
Might be faster than searching for the closest triangle, that requires traversing the whole depth of the tree every time.
2020-12-05 02:02:22 +01:00
Lukas Matena
985a4a8bf3 Bugfix: custom seam did not work on first layer with elephant foot compensation active 2020-12-05 00:02:43 +01:00
Lukas Matena
98434eb77b Bugfix: seam enforcers not always respected (#5137, #5294) 2020-12-05 00:02:43 +01:00
Lukas Matena
ca09bf0805 Fix random seam for single contour islands (#5003) and for external_perimeters_first 2020-11-27 11:33:25 +01:00
Lukas Matena
f485f66b2a Seam - fix indexing of layers (#5112, #5014) 2020-11-27 10:09:20 +01:00
Lukas Matena
22f93a34a8 Fix horrible complexity of custom seam lookup (#5067)
- polygons are offset individually
- custom areas are kept separately for each PrintObject
- AABB tree is used to get logN lookup complexity
2020-11-27 10:09:20 +01:00
Lukas Matena
cf50224248 Fix build on macOS and one logic error 2020-09-18 14:26:06 +02:00
Lukas Matena
8123930ee5 Store seam history for more islands 2020-09-18 12:20:02 +02:00
Lukas Matena
8dd345ed4c use center of enforcer only with spAligned 2020-09-18 12:00:48 +02:00
Lukas Matena
fffb79a085 Simple implementation of spRandom 2020-09-18 12:00:40 +02:00
Lukas Matena
5d6bf3261e fixed center-finding algorithm 2020-09-18 12:00:40 +02:00
Lukas Matena
e78221409a Renamed CustomSeam to SeamPlacer, move to a separate file 2020-09-18 12:00:14 +02:00