Commit graph

65 commits

Author SHA1 Message Date
enricoturri1966
9af9b9b35d Tech ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS set as default 2021-11-16 12:39:54 +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
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
be236eda85 Renamed Geometry::intersect() to Geometry::convex_polygons_intersect()
to convey its true meaning.
2021-10-23 15:29:18 +02:00
enricoturri1966
982172b878 Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_sinking_objects_collision 2021-10-05 15:33:37 +02:00
tamasmeszaros
29a5f48f43 Minor performance optimization for convex intersection algo 2021-10-05 13:31:09 +02:00
enricoturri1966
a9ca63d344 Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_sinking_objects_collision 2021-10-04 15:04:34 +02:00
tamasmeszaros
4cc1b2740d Don't report intersection if two polygons are only touching. 2021-10-04 14:16:13 +02:00
enricoturri1966
5739178306 Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_sinking_objects_collision 2021-10-04 13:07:53 +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
enricoturri1966
cf380fb456 Tech ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS - Out of bed detection for circular printbeds 2021-09-21 13:51:57 +02:00
Lukas Matena
1f29a2593b Fixed two more locales-related issues
One warning was also fixed
2021-06-07 12:31:41 +02:00
Vojtech Bubnik
dd79a2b832 Fixing some compiler warnings 2021-05-25 20:46:31 +02:00
Vojtech Bubnik
5644b98d3b Factored out convex hull calculation from ModelObject::convex_hull_2d()
to Geometry::convex_hull().
Update Geometry::convex_hull() to handle duplicate points.
2021-05-19 13:23:19 +02:00
Vojtech Bubnik
f16d4953be Removing offset2 from Perl bindings and other minor cleanup. 2021-05-06 14:29:20 +02:00
Vojtech Bubnik
e8643125d8 Clipper / ClipperUtils:
1) Let Clipper use int32_t for representing its coordinates. This
   reduces memory and allows to skip conversion between Slic3r Polygon
   and Clipper polygon.
2) Disable additional offset before executing the Clipper Offset algorithm.
   We don't see any reason for that and it required 64bit Clipper coordinates,
   which were disabled with 1).
2021-04-13 11:31:54 +02:00
Vojtech Bubnik
d7a786e8c8 Bumping up wxWidgets to 3.1.4-patched on all platforms. 2021-03-01 11:36:11 +01:00
Vojtech Bubnik
2d6b694261 Fix of Place on face:
1) Decreased "gimbal lock" epsilon 10x
2) Got rid of unnecessary back and forth conversions which led to numerical inacurracies

This should fix issues ,  and 
2020-12-09 06:20:41 +01:00
Vojtech Bubnik
239d588c5d 1) Implemented anchoring of infill lines to perimeters with length
limited anchors, while before a full perimeter segment was always
   taken if possible.
2) Adapted the line infills (grid, stars, triangles, cubic) to 1).
   This also solves a long standing issue of these infills producing
   anchors for each sweep direction independently, thus possibly
   overlapping and overextruding, which was quite detrimental
   in narrow areas.
3) Refactored cubic adaptive infill anchroing algorithm
   for performance and clarity.
2020-11-05 17:32:40 +01:00
Vojtech Bubnik
067cde85f1 WIP Refactoring of exceptions:
1) All slicer's exceptions are now derived from Slic3r::Exception.
2) New exceptions are defined for slicing errors.
3) Exceptions are propagated to the Plater to show.
It remains to modify the slicing back-end to throw the new SlicingError
exceptions instead of std::runtime_error and to show the other exceptions
by a message dialog instead of a notification.
2020-09-14 18:03:22 +02:00
Vojtech Bubnik
b101a8e266 Fixes of the offset curves from Voronoi diagram.
The offset curve extractor is already quite usable,
though singular cases are still not covered yet
when the offset curve intersects or nearly intersects
a Voronoi vertex.

Removal of the PRINTF_ZU "%zu" Visual Studio printf compatibility macro.
Fixes of a contours self intersection test for collinear segments.
SVG exporter now exports white background, so that the GNOME Eye viewer is usable.
2020-06-16 13:15:48 +02:00
bubnikv
26b7dbd6f5 Improved accuracy of ModelVolume matrix store / restore
into the 3MF / AMF.
Improved accuracy of ModelVolume's mesh transform back from Object's
coordinate space to its own coordinate space after reloading
from 3MF / AMF.
2019-12-19 12:27:49 +01:00
bubnikv
cf94482731 Fix of Voronoi debug output. 2019-10-23 15:07:41 +02:00
bubnikv
e538a06fb0 Added missing include (worked on MSVC) 2019-10-15 09:49:33 +02:00
bubnikv
42a858b999 Added test projects for libslic3r and fff_print.
Added test_geometry.cpp from upstream slic3r, thanks @lordofhyphens
Added circle_taubin_newton() for circle center calculation, thanks @lordofhyphens
2019-10-15 09:40:40 +02:00
Enrico Turri
835ee148e5 Fixed conflicts after merging with master 2019-10-09 11:17:48 +02:00
bubnikv
331c187b39 Rest of the path chaining has been replaced with the new algorithm.
PolylineCollection.cpp/hpp was removed, use Polylines instead.
Various first_point() / last_point() now return references, not copies.
2019-09-27 18:17:21 +02:00
bubnikv
d06831076d WIP: Consolidation of shortest path calculations,
various chaining algorithms are replaced with the improved TSP
algorithm.
2019-09-26 17:30:03 +02:00
Enrico Turri
2dc9949a4c ENABLE_ENHANCED_RELOAD_FROM_DISK set as default 2019-09-23 15:35:49 +02:00
Enrico Turri
74747226f7 ENABLE_ENHANCED_RELOAD_FROM_DISK
1) Modified .zip.amf import/export to save/load volume matrices and source data

2) Incremented .zip.amf version to 3
2019-09-19 12:39:59 +02:00
Lukas Matena
cb916c4dda Fixed warnings in libslic3r 2019-06-25 16:04:29 +02:00
Enrico Turri
6b0d75127b
1) Reworked logic for pasting volumes

2) Fixed paste of volumes into different objects

3) Do not apply offset when pasting into the copied object

4) Keep source transformation matrix and relative positions when copy/pasting volumes into another object
2019-06-24 12:26:11 +02:00
Enrico Turri
91b97337b0 Tech ENABLE_NEW_EULER_ANGLES set as default 2019-05-21 10:16:44 +02:00
Enrico Turri
975ccc4ac1 Tech ENABLE_VOLUMES_CENTERING_FIXES set as default 2019-05-21 09:42:59 +02:00
bubnikv
ca6a5af1dc Fixed rotation of SLA instances in case a rotation in X or Y was applied
to the instances.
2019-04-08 13:35:03 +02:00
Enrico Turri
21a7fa6af2 Fix of 2019-02-07 09:22:04 +01:00
Enrico Turri
14fe55d4b8 Fix of rotations using sidebar fields 2019-01-29 11:26:35 +01:00
bubnikv
3e0ef05386 Merge remote-tracking branch 'remotes/origin/objects_centering' 2019-01-28 10:25:41 +01:00
bubnikv
adb96bdc2e WIP: Optimization of the object's 2D convex silhouette for arrangement,
not working yet.
2019-01-28 10:10:23 +01:00
bubnikv
bb0cf221bc WIP synchronization of Z rotation of the instances 2019-01-28 08:52:22 +01:00
Enrico Turri
533e1feac3 Fixed import of volumes from .amf 2019-01-25 12:58:55 +01:00
Enrico Turri
9d51348272 Tweak to euler angles euristic 2019-01-25 12:46:45 +01:00
Enrico Turri
9ca9e8dda5 Another iteration on euler angles and instances synchronization 2019-01-24 10:04:39 +01:00
Enrico Turri
cc9cf7f39e Fixed unselected instance synchronization when rotating using rotate gizmo 2019-01-23 11:08:18 +01:00
Enrico Turri
1ea51aeb2e Euler angles calculated as described in http://www.gregslabaugh.net/publications/euler.pdf 2019-01-23 09:12:22 +01:00
Enrico Turri
25319113f1 Code cleanup 2019-01-21 11:29:45 +01:00
Enrico Turri
80bae6dd98 1st installment of volumes centering fixes (WIP) 2019-01-18 12:52:09 +01:00