Commit Graph

294 Commits

Author SHA1 Message Date
Lukáš Hejl
0161a59a93 Fix of #8472: The middle perimeter was missing for some specific configurations due to numeric rounding errors. 2022-08-02 13:21:39 +02:00
Lukáš Hejl
77f5973c25 Fix of #8446: Non-planar Voronoi diagram.
This is the follow-up to 63c66f4f18. Detection of non-planar (degenerated) Voronoi diagrams was rewritten to check if all neighboring edges of the Voronoi vertex are CCW ordered.
2022-07-26 13:47:40 +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
63c66f4f18 Fix of #8474 and #8514: Voronoi generator sometimes produced a non-planar Voronoi diagram.
We introduced detecting for those degeneration cases. When degenerated Voronoi diagram is detected, then the input polygons are rotated, and the Voronoi diagram is recomputed. Usually, rotation of input data solves issues like this.
2022-07-21 08:47:48 +02:00
Lukáš Hejl
ce038fd7f0 Reenabled some of the previously disabled tests after the computation of bridging perimeters was added. One test was disabled for Arachne because Arachne is causing issues with seam alignment. 2022-06-09 11:23:41 +02:00
Lukáš Hejl
f460c53d86 Backported a fix from Clipper 6.4.2 for the issue that Clipper Z coordinated has incorrect value because ZFillFunction wasn't called in all cases (https://sourceforge.net/p/polyclipping/bugs/160/). Also, this issue led to duplicity vertices with the same XY coordinates but differ in Z coordinates. 2022-06-09 11:05:05 +02:00
Lukáš Hejl
043ac6247e Fixed some failing unit tests after setting Arachne as the default perimeter generator. Some unit tests are temporarily disabled for 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
9b9f93ca07 Make unit test 'fff_print_tests' to pass when a memory leak is detected.
This is just for fixing builds from the stable branch, the master branch doesn't need it.
2022-02-09 13:43:51 +01:00
Vojtech Bubnik
ba84240a85 Fixed unit-tests of GCodeFindReplace
Follow-up to 7da4bebe7a
    WIP GCode substitutions: Changed the format of gcode_substitutions by
    adding an empty comment as a fourth parameter to each substitution.
    In the future, we will provide a UI to show / edit the comment.
2022-01-28 11:02:06 +01:00
Vojtech Bubnik
7ba5a2f5bc GCodeFindReplace - single line option unit tests. 2022-01-25 16:54:16 +01:00
Vojtech Bubnik
aa62868ccb WIP G-code find & replace: Unit tests and some bug fixes. 2022-01-17 12:29:47 +01:00
Vojtech Bubnik
d6bb8eead9 Fixed 3mf unit tests to pass on ARM 64bit 2021-12-06 14:20:52 +01:00
Vojtech Bubnik
7a2bd9023a One more fix to run unit tests on Windows: Missing DLLS need to be copied. 2021-11-30 11:00:26 +01:00
Vojtech Bubnik
5fd279cbc8 Fixing clang compiler warnings 2021-11-30 10:50:27 +01:00
Justin Schuh
cb4bade69f
Add missing setupapi.lib to slic3rutils tests (#7382)
thanks
2021-11-30 10:22:50 +01:00
Vojtech Bubnik
cc44089440 New BuildVolume class was created, which detects build volume type (rectangular,
circular, convex, concave) and performs efficient collision detection agains these build
volumes. As of now, collision detection is performed against a convex
hull of a concave build volume for efficency.

GCodeProcessor::Result renamed out of GCodeProcessor to GCodeProcessorResult,
so it could be forward declared.

Plater newly exports BuildVolume, not Bed3D. Bed3D is a rendering class,
while BuildVolume is a purely geometric class.

Reduced usage of global wxGetApp, the Bed3D is passed as a parameter
to View3D/Preview/GLCanvas.

Convex hull code was extracted from Geometry.cpp/hpp to Geometry/ConvexHulll.cpp,hpp.
New test inside_convex_polygon().
New efficent point inside polygon test: Decompose convex hull
to bottom / top parts and use the decomposition to detect point inside
a convex polygon in O(log n). decompose_convex_polygon_top_bottom(),
inside_convex_polygon().

New Circle constructing functions: circle_ransac() and circle_taubin_newton().

New polygon_is_convex() test with unit tests.
2021-11-16 10:15:51 +01:00
Filip Sykala
f9bdde5603 Remove SimplifyMesh 2021-11-02 14:23:49 +01:00
Vojtech Bubnik
d78a5acba9 Numerical improvements to Welzel minimum enclosing circle algorithm 2021-10-30 11:18:36 +02:00
Vojtech Bubnik
3216448bbc PlaceholderParser: implemented round(), digits() and zdigits() macros.
round() rounds to an integer.
This is a popular request, for example #3472

digits(value, num_digits, num_decimals) rounds to num_digits and
	num_decimals, left filled with spaces.
digits(value, num_digits) the same as digits(value, num_digits, 0)
    Neither decimal separator nor any decimals after decimal separator
    are emitted.
zdigits(...) is the same as digits(...) only left filled with zeros.
If the result does not fit num_digits, the result is never trimmed.
2021-10-29 13:36:26 +02:00
Vojtech Bubnik
cf7b6fb19a Extracted MedialAxis code from Geometry.cpp/hpp, moved to its own
files to Geometry/
Moved other Voronoi files to Geometry/
2021-10-27 16:03:04 +02:00
Vojtech Bubnik
497905406b New code for minimum enclosing circle by randomized Welzl algorithm.
Split the circle code from Geometry.cpp/hpp to Geometry/Circle.cpp,hpp
2021-10-27 15:12:29 +02:00
Vojtech Bubnik
743b99d22c Unit tests to the new optimized implementation of
Line::parallel_to() a Line::perpendicular_to().
2021-10-25 12:03:44 +02:00
Vojtech Bubnik
be236eda85 Renamed Geometry::intersect() to Geometry::convex_polygons_intersect()
to convey its true meaning.
2021-10-23 15:29:18 +02:00
tamasmeszaros
5f19539df5 Obvious fixes to stupid warnings 2021-10-21 09:55:12 +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
tamasmeszaros
4cc1b2740d Don't report intersection if two polygons are only touching. 2021-10-04 14:16:13 +02:00
tamasmeszaros
9fce0ce3a6 Fix compile issues and overlapping polygon fails 2021-10-01 18:27:37 +02:00
Lukas Matena
476b48ed11 Revert "Merge branch 'tm_convex_intersect_rotcalip'"
This reverts commit 627d8bcaef, reversing
changes made to 66d4462724.

The change breaks build on mac
2021-09-30 16:49:00 +02:00
tamasmeszaros
234f062ad4 Fast convex polygon intersection test with rotating calipers 2021-09-30 15:49:12 +02:00
Vojtech Bubnik
6c37955d75 Moved a commented out test for DynamicPrintConfig serialization
/ deserialization into a living unit test.
2021-09-24 11:32:15 +02:00
Vojtech Bubnik
8a2a9dba2f Eradicated admesh from TriangleMesh:
TriangleMesh newly only holds indexed_triangle_set and
TriangleMeshStats. TriangleMeshStats contains an excerpt of stl_stats.
TriangleMeshStats are updated when initializing with indexed_triangle_set.

Admesh triangle mesh fixing is newly only used when loading an STL.
AMF / 3MF / OBJ file formats are already indexed triangle sets, thus
they are no more converted to admesh stl_file format, nor fixed
through admesh repair machinery. When importing AMF / 3MF / OBJ files,
volume is calculated and if negative, all faces are flipped. Also
a bounding box and number of open edges is calculated.

Implemented its_number_of_patches(), its_num_open_edges()
Optimized its_split(), its_is_splittable() using a visitor pattern.

Reworked QHull integration into TriangleMesh:
    1) Face normals were not right.
    2) Indexed triangle set is newly emitted instead of duplicating
       vertices for each face.

Fixed cut_mesh(): Orient the triangulated faces correctly.
2021-09-20 17:12:22 +02:00
Vojtech Bubnik
58d8ab3dea Removed the PRUS format parser. WIP: admesh eradication:
stl_stats are newly only accessed by TriangleMesh::stats(),
most of the direct access to TriangleMesh::stl is gone with the exception
of parsing input files (3MF, AMF, obj).
2021-09-14 11:58:14 +02:00
Vojtech Bubnik
ec976cbe05 Fixed unit tests after cab71073a1 2021-09-13 15:45:33 +02:00
Lukáš Hejl
e520454c3e Fixed unit tests after the previous commit. 2021-09-11 00:54:30 +02:00
Filip Sykala
d45ab1c484 Fix trouble case test 2021-09-02 11:17:07 +02:00
Filip Sykala
25feacfd95 FIX Creation of non volume place in mode during simplification 2021-09-01 19:15:16 +02:00
Filip Sykala
c04856e049 Extend simplify test to chack distance of each triangle center and each vertices. Both simplify to origin and vice versa 2021-08-16 18:04:38 +02:00
Filip Sykala
b90ca142a5 Merge branch 'master' into fs_QuadricEdgeCollapse 2021-08-16 11:56:56 +02:00
Vojtech Bubnik
965c2f2c55 Improved error reporting when importing various configuration files:
1) Slic3r::RuntimeError was replaced with ConfigurationError,
   all exceptions thrown by the configuration layer are derived
   from ConfigurationError.
2) When parsing configuration files, ConfigurationError is catched and
   rethrown extended with the file name being parsed.
2021-08-13 13:37:24 +02:00
Filip Sykala
ef5c94f90a Fix: prevent degeneration of model during simplification 2021-08-06 15:11:20 +02:00
Filip Sykala
6bcc576b5f truncate model name 2021-07-21 08:34:43 +02:00
Filip Sykala
25a4887075 QEC: When collapsing edge flip normal than check other edges in triangle
Quadric is calculated with double precission of normal
Fix calculation of normal for changed triangles
2021-07-19 15:46:41 +02:00
Filip Sykala
86a3fd00a5 Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-19 09:18:55 +02:00
Filip Sykala
af526c54f4 Add simplification GUI 2021-07-19 09:17:50 +02:00
tamasmeszaros
db782b01a5 Fix build on gcc8 2021-07-16 16:40:59 +02:00
Filip Sykala
aca93a7ced Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-09 14:14:54 +02:00
Vojtech Bubnik
3a9857e493 Our friendly GCC does not consider std::pair<int, int> trivially
copiable either, while everybody else does. Shame on GCC.
2021-07-09 14:05:30 +02:00
Vojtech Bubnik
d8a0b11157 GCC does not consider std::pair<std::pair<...>, ...> to be trivially
copiable, thus fixing the unit tests with a custom trivially
copyable type.
2021-07-09 13:58:54 +02:00
Filip Sykala
b2238834fb Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-09 13:40:58 +02:00