Commit Graph

41 Commits

Author SHA1 Message Date
b616a0c183 Completely replaced the homebrew Pointf3 class with Eigen Vec3d.
Replaced the unscale macro with a template, implemented templates
for unscaling Eigen vectors.
2018-08-21 17:43:05 +02:00
f738c42aa5 Removed Point::scale(),translate(),coincides_with(),distance_to(),
distance_to_squared(),perp_distance_to(),negative(),vector_to(),
translate(), distance_to() etc,
replaced with the Eigen equivalents.
2018-08-17 14:14:24 +02:00
dcd0d3f6aa Changing the internal representation of Point / Pointf / Point3 / Pointf3 to Eigen Matrix types:
Changed the Point3 / Pointf3 to derive from the Eigen Vec3crd / Vec3d.
Replaced the Point::concide_with() method calls with == operator.
Reduced some compiler warnings.
2018-08-15 13:51:40 +02:00
92b196dadd Fix of a regression issue, which was certainly in 1.34.0, probably
even longer. An infill / perimeter overlap was not applied
when defined with absolute coordinates.
Fixes https://github.com/prusa3d/Slic3r/issues/964
2018-06-11 10:59:02 +02:00
b937846576 Fix of extraneous infill over thin walls.
Fixes https://github.com/prusa3d/Slic3r/issues/670
and some of https://github.com/prusa3d/Slic3r/issues/895

PerimeterGenerator was using an unsafe clipper offset function,
which performed offset for both a contour and its holes together.
With this commit the offsets were replaced with their safe counterparts,
though these safe counterparts may be somehow slower
(performing offset on ExPolygon or ExPolygons, piece by piece).

Also there was a bug, where if the infill & gap fill consumed
everything of the polygon, a polygon one onion shell above was still
used for infill.
2018-05-18 09:52:09 +02:00
ea9920e5d6 Fix of Negative Feedrates: G1 F-3.84007e+006 stops smoothie
The problem was caused by the gap fill algorithm, which worked
with square extrusion width values as with rounded extrusion widths,
which sometimes lead to negative extrusion cross sections
for high height to width ratios.

The extrusion width logic has been changed to consider the input width
to be the extrusion spacing, not the extrusion width. The change certainly
removed the negative feed rates, but it also certainly increased the gap
fill width to some exent. It needs to be verified now, whether the gap fill
does not extrude too much.

https://github.com/prusa3d/Slic3r/issues/677
2018-02-02 19:48:16 +01:00
b58756f38b A bit of refactoring and beautification. 2017-09-18 10:01:37 +02:00
ac672d9dc5 Changed the default "sane" extrusion width parameters to
1x nozzle_dmr for support and top infill,
and 1.125x nozzle_dmr for the rest.
This corresponds roughly to the default values tuned for the Prusa MK2
for normal prints.
2017-07-19 16:06:29 +02:00
9c1b1829cf PerimeterGenerator - a bit of refactoring for readability. 2017-07-19 15:42:49 +02:00
ed2ee2f6f3 Merged support_fills with support_interface_fills.
When extruding supports, the support is interleaved with interface
if possible (when extruded with the same extruder).
Otherwise the base is extruded first.
2017-04-07 17:37:30 +02:00
555560f63c Simplification, C++11 beautification. 2017-04-05 09:51:03 +02:00
29b986fa76 Improvement of the move semantics on various objects:
The source object will be empty after the move operation.
2017-01-20 14:39:44 +01:00
6582182e0c Adapted to the new ClipperUtils.hpp interface by @alexrj 2016-12-13 19:22:23 +01:00
24e0b568b5 Fix compilation, cherry picked from @alexrj fde6e2e61deabd097a3bf565d4948077147b25ab 2016-12-08 15:01:36 +01:00
79f5a16536 Reverted the perimeter generator to not save the perimeter areas.
These could be calculated from the fill areas if needed.
On the other side, the non-classified (non-split) fill areas are stored
now for use in the "ensure vertical wall thickness" feature,
also the non-split fill areas are re-used when recalculating the infills.
This is safer than trying to stitch the fill region together from the
classified fragments.

Modified the "ensure vertical wall thickness" feature to use the non-split
fill areas instead of perimeter areas for the calculation
of non-supported regions. This is cheaper as the fill areas contain
roughly half the edges.
2016-11-17 23:22:59 +01:00
b116fe287c Fixes https://github.com/prusa3d/Slic3r/issues/32#issuecomment-260135542
Reverts an inadverent bug introduced in 4460b5ce50
2016-11-12 19:04:40 +01:00
4460b5ce50 re-wrote PrintObject::detect_surfaces_type() to C++,
Fixed some cracks in the fill surfaces created by rounding all surfaces inside detect_surface_type().

Fixed https://github.com/prusa3d/Slic3r/issues/12
Bridging-Angle not optimal

Extended the "Ensure veritcal wall thickness" mode (merged with the original discover_horizontal_shells function), but this a work in progress. Already Slic3r with "ensure vertical wall thickness" produces less spurious infills inside solids.
2016-11-10 19:23:01 +01:00
483a658144 Method ExtrusionEntity::polygons_covered() and derived were split
into polygons_covered_by_width() and polygons_covered_by_spacing().

Bugfix of ExtrusionLoop::split_at(const Point &point),
where the split ExtrusionPaths were not initialised correctly.
2016-11-04 00:10:35 +01:00
7b6b609df1 ExtrusionEntity and derived classes: Documented, short methods made
inline for efficiency and readability, grow() renamed to polygons_covered().
2016-11-03 10:24:32 +01:00
95ede7c4b8 Rewrote Fill2.pm to C++, deleted Perl infills for good.
Removed dependency on Perl Math::PlanePath module.
Fixed compilation with Visual Studio and SLIC3R_DEBUG: Visual Studio older than 2015 does not support the prinf type specifier %zu. Use %Iu instead.
C++11 move semantics enabled.
2016-11-02 10:47:00 +01:00
e0d1aa8a1a Collect the perimeter surfaces when generating perimeters.
The perimeter surfaces are later used for performing infill
below overhangs and to maintan configured vertical wall thickness
at sloping surfaces.
2016-09-26 13:44:23 +02:00
4c67230436 Documented the purpose of various perl modules. 2016-09-14 11:22:41 +02:00
620c6c7378 Ported from the playground branch. Various documentation and optimization. 2016-09-13 13:30:00 +02:00
f518e0675c Initial commit of the new Pressure Equalizer, the EdgeGrid
signed distance field structure.
The EdgeGrid is used to avoid placing the seams on overhangs.
2016-09-12 16:25:15 +02:00
9e8022f6f6 More refactoring to medial axis and gap fill, more robust 2016-05-20 17:03:57 +02:00
9576973b57 Tune gap fill and thin walls to less extreme values 2016-03-26 18:37:37 +01:00
7041bb5bd9 Rewritten the medial axis algorithm, now more robust (don't just prune MAT from endpoints, but validate all single edges) 2016-03-26 01:45:08 +01:00
b744947711 Missing #include 2016-03-20 01:50:27 +01:00
dfb1ec99ac Variable-width thin walls. Yay! 2016-03-19 19:40:11 +01:00
6dc42ee902 Variable-width gap fill. Yay! #2960 2016-03-19 19:20:04 +01:00
9eabbded2b Fixed regression in the C++ port of PerimeterGenerator causing gaps to be filled twice 2016-02-20 19:27:00 +01:00
795107dfa2 Bugfix: external details were simplified too much when using default settings at low layer height, because the internal flow was erroneously taken into account. #2807 2015-12-19 16:46:56 +01:00
bab3404b2d Very minor code improvements 2015-12-19 16:36:07 +01:00
2df750a9c9 Fixed ported code of PerimeterGenerator 2015-12-19 16:35:51 +01:00
4913e90e10 Remove any Perl related code from libslic3r 2015-12-08 00:39:54 +01:00
48f1fab49f Bugfix: an error in porting caused bad perimeter ordering. Includes regression test and more unit tests for PerimeterGenerator 2015-12-01 20:40:00 +01:00
9fcec10737 Finished porting LayerRegion to C++ 2015-10-26 23:24:46 +01:00
5b8ed7367a Fixed potential hang in PerimeterGenerator.cpp 2015-08-06 10:07:13 +02:00
b4515cf695 Finished porting PerimeterGenerator to C++ 2015-07-23 15:53:02 +02:00
0e18b094d1 More work for porting PerimeterGenerator to XS 2015-07-07 01:17:31 +02:00
b8aecbd56c Initial work for porting PerimeterGenerator to XS 2015-07-03 22:58:29 +02:00