Commit Graph

282 Commits

Author SHA1 Message Date
Vojtech Bubnik
3873630520 Fixed 3mf unit tests to pass on ARM 64bit 2021-12-06 14:20:52 +01:00
Vojtech Bubnik
533e2d377d 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
651b60b899 Fixing clang compiler warnings 2021-11-30 10:50:27 +01:00
Justin Schuh
b6f87c7fd5 Add missing setupapi.lib to slic3rutils tests (#7382)
thanks
2021-11-30 10:22:50 +01:00
Vojtech Bubnik
537df6b503 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
20ab57d073 Remove SimplifyMesh 2021-11-02 14:23:49 +01:00
Vojtech Bubnik
37ca0daac2 Numerical improvements to Welzel minimum enclosing circle algorithm 2021-10-30 11:18:36 +02:00
Vojtech Bubnik
384303d57b 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
08bc063f66 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
0292826482 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
ec788911a1 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
2cc52fa9fb Renamed Geometry::intersect() to Geometry::convex_polygons_intersect()
to convey its true meaning.
2021-10-23 15:29:18 +02:00
tamasmeszaros
be11f7613c Obvious fixes to stupid warnings 2021-10-21 09:55:12 +02:00
Vojtech Bubnik
1c626e8596 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
30aa248234 Don't report intersection if two polygons are only touching. 2021-10-04 14:16:13 +02:00
tamasmeszaros
476ff563c5 Fix compile issues and overlapping polygon fails 2021-10-01 18:27:37 +02:00
Lukas Matena
59c982c5ea 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
e1ea6fcd5c Fast convex polygon intersection test with rotating calipers 2021-09-30 15:49:12 +02:00
Vojtech Bubnik
9311ce0d45 Moved a commented out test for DynamicPrintConfig serialization
/ deserialization into a living unit test.
2021-09-24 11:32:15 +02:00
Vojtech Bubnik
53a5c23d0f 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
01451d2e63 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
d580d636fd Fixed unit tests after cab71073a1 2021-09-13 15:45:33 +02:00
Lukáš Hejl
dddd85d9ed Fixed unit tests after the previous commit. 2021-09-11 00:54:30 +02:00
Filip Sykala
9a4ce1673f Fix trouble case test 2021-09-02 11:17:07 +02:00
Filip Sykala
0c73c304e6 FIX Creation of non volume place in mode during simplification 2021-09-01 19:15:16 +02:00
Filip Sykala
73196a8305 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
2b4005d1f5 Merge branch 'master' into fs_QuadricEdgeCollapse 2021-08-16 11:56:56 +02:00
Vojtech Bubnik
c7d91198b8 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
fce1f86405 Fix: prevent degeneration of model during simplification 2021-08-06 15:11:20 +02:00
Filip Sykala
9b646f3e42 truncate model name 2021-07-21 08:34:43 +02:00
Filip Sykala
68fe5c3630 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
babc34af01 Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-19 09:18:55 +02:00
Filip Sykala
a364ef3d6a Add simplification GUI 2021-07-19 09:17:50 +02:00
tamasmeszaros
7b08194cfe Fix build on gcc8 2021-07-16 16:40:59 +02:00
Filip Sykala
9623744a5b Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-09 14:14:54 +02:00
Vojtech Bubnik
e2969291bb 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
eeaab9f73b 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
94111f5d85 Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-09 13:40:58 +02:00
Vojtech Bubnik
0f9b2e20bf 1) Fixed a significant bug in MutablePriorityQueue when setting
the indices allowing rescheduling of values in the middle of the queue.
2) Implemented a cache friendly variant - MutableSkipHeapPriorityQueue
   based on
   https://playfulprogramming.blogspot.com/2015/08/cache-optimizing-priority-queue.html
   https://github.com/rollbear/prio_queue/blob/master/prio_queue.hpp
2021-07-09 12:53:29 +02:00
Filip Sykala
e9cb528198 FIX Simplify test 2021-07-09 10:31:05 +02:00
Filip Sykala
2683088b8d Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-09 09:10:05 +02:00
Filip Sykala
c5890b9b67 Add throw_on_cancel and statusfn into QEC 2021-07-09 09:09:52 +02:00
Vojtech Bubnik
2d646bddf1 Updated the Catch2 framework from v2.13.3 to v2.13.6.
Fixes Fix build error with non-const MINSIGSTKSZ. #6518
2021-07-08 16:55:59 +02:00
Filip Sykala
e58d6c98a3 Extend test with checking simplified model distance to original model 2021-07-08 08:33:06 +02:00
Filip Sykala
0b9f9f0062 Merge branch 'master' into fs_QuadricEdgeCollapse 2021-07-07 16:52:10 +02:00
Vojtech Bubnik
c5304750d9 Support for forward compatibility of configurations, user and system
config bundles, project files (3MFs, AMFs). When loading these files,
the caller may decide whether to substitute some of the configuration
values the current PrusaSlicer version does not understand with
some reasonable default value, and whether to report it. If substitution
is disabled, an exception is being thrown as before this commit.
If substitution is enabled, list of substitutions is returned by the
API to be presented to the user. This allows us to introduce for example
new firmware flavor key in PrusaSlicer 2.4 while letting PrusaSlicer
2.3.2 to fall back to some default and to report it to the user.

When slicing from command line, substutions are performed by default
and reported into the console, however substitutions may be either
disabled or made silent with the new "config-compatibility" command
line option.

Substitute enums and bools only.  Allow booleans to be parsed as
    true: "1", "enabled", "on" case insensitive
    false: "0", "disabled", "off" case insensitive
This will allow us in the future for example to switch the draft_shield
boolean to an enum with the following values: "disabled" / "enabled" / "limited".

Added "enum_bitmask.hpp" - support for type safe sets of options.
See for example PresetBundle::load_configbundle(...
LoadConfigBundleAttributes flags) for an example of intended usage.

WIP: GUI for reporting the list of config substitutions needs to be
implemented by @YuSanka.
2021-06-27 16:57:05 +02:00
Filip Sykala
8dbc7c57d6 Add test checking diference in volume before/after simplification
FIX warnings
..\src\libslic3r\QuadricEdgeCollapse.cpp(173): warning C4056: overflow in floating-point constant arithmetic
..\src\libslic3r\QuadricEdgeCollapse.cpp(232): warning C4056: overflow in floating-point constant arithmetic
2021-06-22 09:41:38 +02:00
Filip Sykala
429aff468a Add quadric edge collapse 2021-06-22 09:21:16 +02:00
tamasmeszaros
04331beb33 Add new (winner) neighbor index based on measurements 2021-06-08 10:34:32 +02:00
tamasmeszaros
2227d0f1ad Added measuring sandbox for neighbors index creation 2021-06-08 10:34:32 +02:00