Commit Graph

130 Commits

Author SHA1 Message Date
Lukas Matena
a40d60ce08 Custom support generation now ignores triangles with upward-pointing normal 2020-04-22 14:01:29 +02:00
Lukas Matena
8d95345ede Fixed a logic error in the algorithm
The error created extremely large projections of triangles that were close to horizontal
2020-04-22 10:11:42 +02:00
Lukas Matena
7fc4a71715 Moved the projection function into PrintObject.cpp 2020-04-21 13:50:47 +02:00
bubnikv
10110ed307 WIP: Ironing over top surfaces. 2020-04-14 11:53:28 +02:00
bubnikv
7f376fa927 Fix of infill type update with vase mode enabled after change
of the number of bottom layers.
related to [2.2.1-RC] Vase mode prints base no matter what #3823
2020-03-14 11:59:50 +01:00
bubnikv
b47246f69b Fixed a bug, where the top or bottom solid layers were created even
if the number of top / bottom solid layers was set to zero while
the top / bottom minimum shell thickess was set nonzero.

With this commit, if the top / bottom solid layers is set to zero,
there are no top / bottom solid layers generated independent from
the minimum top / bottom shell thickness.
2020-02-18 15:44:01 +01:00
bubnikv
5eb1e7e886 Fixed a bug in the update of the backend when the Spiral Vase option
is enabled / disabled.

Spiral Vase forces different kind of slicing than the normal model:
In Spiral Vase mode, holes are closed and only the largest area contour is kept at each layer.
Therefore toggling the Spiral Vase on / off requires complete reslicing.

This commit moves the update to the correct location.
2020-02-09 13:56:42 +01:00
bubnikv
e7d2fcf0be Fixed unit tests broken with the previous commit (Spiral Vase fix).
Fixed a crash in the previous commit.
2020-02-09 09:43:15 +01:00
bubnikv
4e11552da9 Spiral vase improvements and bugfixes.
Fixes Connecting / expanding Bottom Layers to Vase Perimeter #253
Fixes Slicing error in vase mode #452
Fixes Slicing Issue (Vase Mode, 0.6mm dmr nozzle) #1887
Fixes Top fill pattern isn't used in spiral vase mode #2533
Fixes Cisar's vase doesn't slice correctly, creates artefacts #3595

When the model is sliced, all the contours are newly oriented
counter-clockwise (even holes), merged and then only the largest area
contour is retained. In perimeter generator, if the largest contour
splits into multiple perimeters, newly only the largest area perimeter
is retained in spiral vase mode. These two changes solve #3595 and similar.

The infill is newly calculated only for the bottom solid layers
if the spiral vase mode is active (removes various unwanted infill
along the vase walls), and the last bottom solid layer is switched
to a top solid pattern (solves #2533).

The thin walls are newly enforced to be disabled in spiral vase mode,
and the "ensure vertical shell wall" is enforced in spiral vase mode
to extend the bottom of the vase to the vase hull (fixes #253).
2020-02-08 21:36:43 +01:00
bubnikv
b8c898bf40 Fixed a bug in validation of the FDM Print to check for extruder
collisions against already printed objects: Rotation of an object
was not being taken into account.
Fixes #2450 PrusaSlicer 2.0 Sequential printing vs rotate object
Fixes #3585 Always Sequential Printing Error (Regardless of setting, placement or object size)

Fixed some collisions in sequential print just after arrangement by
making the validation using a slightly lower extruder radius value
than the arrangement.

Refactored PrintObject coordinate system so that the PrintObject's
coordinate system is always centered in respect to its ModelObject's
geometries. This refactoring may improve path planning a bit and
it may lower the requirements on bits representing Clipper coordinates
by 1 bit.
2020-02-07 14:10:27 +01:00
bubnikv
495a71ed00 Implemented top_solid_min_thickness / bottom_solid_min_thickness.
The two new config keys define a minimum vertical shell thickness.
The top shell thickness is calculated as a maximum of sum over
top_solid_layers * layer heights and top_solid_min_thickness,
the bottom shell thickness is calculated as a maximum of sum over
bottom_solid_layers * layer heights and bottom_solid_min_thickness.

The results of the formula above are shown at the Print parameter page
below the two new values to hint the user about the interaction
of the old versus new config values.

top_solid_min_thickness has no meaning if top_solid_layers is zero,
bottom_solid_min_thickness has no meaning if bottom_solid_layers is zero.
2020-02-05 16:53:48 +01:00
bubnikv
c5fa400208 Fixed regression of 71fa411100
where the PrintObject bounding box was not invalidated correctly
when the transformation matrices of instances changed.

Also refactored PrintObject::size() for const correctness.
2020-01-30 12:22:30 +01:00
bubnikv
dced3ce783 Fix of 2.2.0-A3: Sequential Printing: Wrong location after slicing #3570
This is a regression from 71fa411
2020-01-24 17:11:14 +01:00
bubnikv
71fa411100 Refactored PrintObject::m_copies to PrintInstances,
so that the ordering code at G-code export may work directly with
pointers to PrintInstances instead of with pair of <PrintObject, copy idx>.
Also the PrintInstance knows its source ModelInstance, which allows
sorting of PrintInstances for sequential printing in the order
they appear in Plater's object list.
2020-01-23 09:53:06 +01:00
bubnikv
3d17543d40 Fix of "Don't use bridging perimeters on top of elephant-foot compensation #3011"
If the Elephant foot compensation is applied to the 1st object's layer,
the uncompensated 1st object's slice is newly used for calculation
of bridges, overhans, skirt, brim, raft and supports.

Layer::slices were renamed to Layer::lslices to simplify reading
of the code, to differentiate from LayerRegion::slices.
2020-01-03 14:07:31 +01:00
Enrico Turri
b77ba32bb2 Adaptive layer height profile -> Added Adaptive button to imgui dialog 2019-11-12 14:18:43 +01:00
Enrico Turri
6e4060569a 1) Added new tech ENABLE_ADAPTIVE_LAYER_HEIGHT_PROFILE
2) Imgui dialog replaces texture for reset button and tooltip when layer editing is active
2019-11-07 15:55:45 +01:00
bubnikv
2399570950 Only enable Elphant foot compensation if printing directly
on the print bed (raft is disabled).
2019-11-04 11:34:33 +01:00
bubnikv
4c735192ef Bugfixes of the new adaptive elephant foot compensation. 2019-11-04 11:26:36 +01:00
bubnikv
a72ac57fab adaptive elpehant foot compensation, fixing
GH issues #1757 #2085 #2132 #2423 #2502 #2156 #2773 #2828 #2998 #3001
2019-11-01 19:59:09 +01:00
bubnikv
564eddd99d FDM Print refactoring:
Layer newly remembers bounding boxes of slices,
the bounding boxes are used by G-code generator & newly the support
generator.
Slices are stored as ExPolygons, not ExPolygonCollection.
2019-10-01 17:17:08 +02:00
bubnikv
6a07b231e1 Fixed a crash with a layer range modifier containing no slicing layer. 2019-10-01 13:41:22 +02:00
bubnikv
4b35ebe6e5 Merge branch 'master' of https://github.com/Prusa3d/PrusaSlicer 2019-09-27 09:52:57 +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
Lukas Matena
7861fa5086 Whitespace changes to supress misleading indentation warnings
These appear in newer gcc when spaces and tabs are mixed
2019-09-24 16:01:01 +02:00
bubnikv
4585618aea Fix of "Bridge flow ratio doesn't trigger reslicing of support" #2359 2019-09-09 18:09:40 +02:00
bubnikv
5c72eecf26 Fix of "Strange behavior on bridge detection" #1482
The very first slicing step needs to be invalidated if support is
enabled or disabled while the soluble supports are configured,
as the bridging is disabled for soluble supports, while the bridging
is enabled with supports disabled.
2019-09-09 17:47:29 +02:00
bubnikv
ee928f5f4d Replaced Perl style infill type enums with C++ enums in comments. 2019-09-09 16:47:15 +02:00
bubnikv
48ecbe777f Fix of "excess infill below bridges with 0% infill" #442
Fix of "Bridging infill not connecting with infill set to 0%" #1301

Top, bottom and bridging areas are extended into infill as long
as the infill is not zero. If the infill is zero,
top, bottom and bridging areas wound not expand into these "void" areas.

With this commit, the top, bottom and bridging areas are allowed to expand
into the "void" areas as long as these "void" areas are supported below
with perimeters or some other non-empty infill, and slightly beyond
these supporting areas into the voids (currently hard coded to 1mm).
2019-09-06 15:03:49 +02:00
Lukas Matena
66d74bc591 Merge branch 'lm_layer_height_validation' into dev 2019-09-02 16:31:59 +02:00
Lukas Matena
942f959e87 Fixed couple of warnings
Turned several includes into forward declarations
Removed several sprintf calls in favor of std::to_string
2019-09-02 16:27:48 +02:00
Lukas Matena
b43003dfad Fixed layer height equality check needed in order to enable the wipe tower
The change was needed because enabling the new layer-height-modifier made the validation fail, even if there was no real layer height modification
2019-08-29 16:13:04 +02:00
Lukas Matena
1b5d561b7c Added handling of std::bad_alloc so the user gets more comprehensible error message
Call to boost::nowide::nowide_filesystem() was made Windows only
2019-08-08 16:55:25 +02:00
bubnikv
4865240a9c Fixed compilation issue 2019-07-16 09:19:00 +02:00
Lukas Matena
004e2719b1 Merge branch 'master' into lm_warnings 2019-07-15 13:26:55 +02:00
Lukas Matena
cb916c4dda Fixed warnings in libslic3r 2019-06-25 16:04:29 +02:00
bubnikv
35b3fd3176 Integrated the new layer height spans with configs into the backend.
Fixed some compiler warnings.
2019-06-20 16:15:09 +02:00
bubnikv
0c95d4e0d9 Merge remote-tracking branch 'remotes/origin/ys_new_features' 2019-06-18 10:01:29 +02:00
bubnikv
0bb8ee149e Sharing TriangleMesh objects between the front end (UI) and back end
(background processing)
2019-06-11 17:08:47 +02:00
YuSanka
1090105b68 Experiments with updating layer_config_ranges from UI
+ Fixed OSX build
2019-06-05 11:50:59 +02:00
Lukas Matena
07282eb24d Fixed unit tests when run with range checks on std::vector
There was a bug in unit tests that led to generating the wipe tower with non-normalized preset.
This caused out-of-bounds access into max_layer_height vector in fill_wipe_tower_partitions.
The problem surfaced in https://github.com/prusa3d/PrusaSlicer/issues/2288.
I quickly patched additional normalization of the preset to prevent this from happening.

Also, an assert in the same function turned out to trip on one of the tests.
This one was commented out for now and will (hopefully) be looked into later.

Function Print::apply_config was renamed to apply_config_perl_tests_only so everyone
sees its current purpose and does not mistake it for the more important Print::apply.
2019-05-22 16:48:20 +02:00
bubnikv
3f08d9f30d Changed references to renamed github project
https://github.com/prusa3d/PrusaSlicer
2019-05-14 19:46:01 +02:00
YuSanka
8e007c5b6a Localization improvements 2019-05-04 02:07:07 +02:00
Lukas Matena
f33e9bf609 TriangleMeshSlicer is now initialized by const-pointer to the mesh, responsibility for calling require_shared_vertices is left to the caller 2019-04-16 09:04:04 +02:00
bubnikv
1e455bc065 Fix of "Variable layer height feature breaks after rotating part #2073"
There was an approximate bounding box used at the GUI, while a snug
bounding box was used at the back end, causing invalidation
of the variable layer height editing profile on rotated objects.

A snug bounding box around the first instance is now cached.
2019-04-13 14:15:54 +02:00
bubnikv
ef1a273f0c Fix of "Latest commit of Slic3r 1.42.0 cuts away part of the model #2063"
Fixed one bug of many in admesh library, where the face connectivity
was broken when removing a degenerate face. Likely there are some
similar issues left to be solved.
Placed a workaround to always recalculate face connectivity before slicing.
2019-04-04 16:16:57 +02:00
bubnikv
382326ffc8 Fixed FFF slicing of meshes with left hand oriented transformations applied.
Slight optimization of FFF slicing - optimized copy of an object with just
a single volume.
2019-04-03 11:12:03 +02:00
bubnikv
e399cf6d3d Implemented clipping of parts of multi-part objects in the order
they are presented in the UI.

Parallelized the slice stealing when splitting regions with modifier meshes.

Rewrote Layer::make_perimeters() to C++11 loops.
2019-03-06 10:21:10 +01:00
bubnikv
676076b7b4 Fix of caching of the SlicingParamerters at PrintObject 2019-03-05 14:05:58 +01:00
bubnikv
5e582efc5c Elephant foot compensation improvements.
Fix of the negative XY compensation on multi-material (or multi-region)
prints, where the negative XY compensation created gaps between parts.
2019-03-05 11:54:04 +01:00
bubnikv
cc79b1553d Implemented caching of SlicingParameters by PrintObject 2019-03-04 15:28:04 +01:00
bubnikv
e3cba0a65a Introduced the "slice_closing_radius" to define, how large gaps
will be closed after triangle mesh slicing.
The value is set to 0.049 by default, which corresponds to the hard
coded default in Slic3r-1.41.3.

See issues #520 #820 #1029 #1364 for the reference of why we need
the parameter for being able to print some specific models.
2019-03-01 17:53:02 +01:00
bubnikv
ab30370fb4 Split the external infill pattern to separate top / bottom config values.
Based on f9344a00e3
thanks @supermerill
Implements  #475, #479, #1133, #1474
2019-02-22 15:25:35 +01:00
bubnikv
0af11c51e3 Fixed update on reset of the variable layer height profile.
Fixed update of the layer height profile on PrintObject when changing profiles.
Fixed crash due to the layer height editing refactoring & wipe tower.
2019-01-23 14:00:03 +01:00
bubnikv
d64b55d27d WIP Restoration of the layer editing. 2019-01-21 10:06:51 +01:00
Enrico Turri
611d9aa0d8 Model's volume transform set as default 2019-01-02 10:49:13 +01:00
bubnikv
126035f6f8 Fixed many errors in background processing synchronization and update.
Fixed couple of compiler warnings.
2018-12-22 10:02:42 +01:00
bubnikv
771928d916 Logging of memory allocations on Windows during the slicing process
when the SLIC3R_LOGLEVEL >= info.
2018-12-18 11:31:41 +01:00
bubnikv
7cd612fc17 Fix of SPE-694
Slicer do not generate infill after Contact Z distance settings change
2018-12-18 09:57:19 +01:00
bubnikv
37806c020a Temporarily disabled the following check:
"Levitating objects cannot be printed without support"
until the unit tests are adjusted.
2018-12-14 19:40:02 +01:00
bubnikv
506cbcb4a7 Fix of G-code invalidation on "wipe_into_object" "wipe_into_infill"
changes.

WIP: Fix of "levitating objects cannot be sliced".
2018-12-14 17:17:51 +01:00
bubnikv
52db7b055a WIP: Merged commits from stable between 1.41.2-beta and 1.42.2 final.
Changes in SupportMaterial.cpp, TriangleMesh.cpp and 01_trianglemesh.t
are yet to be merged.

WIP: Refactoring of layer height editing.
Removed layer_height_ranges from PrintObject, as the Print/PrintObject
now hold their copies of Model/ModelObject.
2018-12-11 16:33:43 +01:00
bubnikv
9f43e7d375 Fixed a harless assert in PrintObject consturctor.
Fixed a bug in G-code generator regarding the seam hiding.
2018-12-07 11:21:05 +01:00
bubnikv
c9a4c6c73c Partial update of 3D scene (GLVolumes derived from Model and from
the SLAPrintObject).
Updated PrintBase to generate a unique timestamp at each step invalidation.
2018-11-16 18:28:50 +01:00
bubnikv
48173e2a55 Fixed synchronization of background processing with the front end. 2018-11-12 16:28:27 +01:00
bubnikv
c2e46350f2 Separated Print / PrintObject into PrintBase.cpp/h to support SLAPrint 2018-11-08 14:23:17 +01:00
bubnikv
3eea327ef0 WIP: When iterating over PrintObject's regions, use the region count
by PrintObject::region_volumes. This is due to the way Print::apply()
works, it does not invalidate an existing PrintObject if a new region
is added to the print.
2018-11-06 15:31:26 +01:00
bubnikv
7ffa22191d Fixed some issues with front end / back end synchronization. 2018-11-05 17:52:55 +01:00
bubnikv
0870f81425 Merge remote-tracking branch 'remotes/origin/vb_modelbase_id_refactor' into dev_native 2018-11-02 20:53:47 +01:00
bubnikv
5da83742a3 Some refactoring. 2018-11-02 20:41:49 +01:00
Enrico Turri
7114b80882 Use Transform3d in place of Transform3f as parameter of mesh transform functions 2018-11-02 13:47:47 +01:00
Enrico Turri
3aad8b5fd2 Translation of ModelVolume as transformation component (without modifying the mesh) 2018-11-02 12:11:28 +01:00
bubnikv
da37094a09 Bugfix: Slice at the correct height. 2018-10-31 20:02:07 +01:00
bubnikv
e6d78cc063 Print step invalidation: Improvement of readability. 2018-10-31 19:21:00 +01:00
bubnikv
197458cf3a Background processing: Fixed rotation & scaling of PrintObjects. 2018-10-24 11:48:39 +02:00
bubnikv
bded28f888 WIP: Reconstruction of background processing. 2018-10-23 15:27:31 +02:00
Enrico Turri
059ab4a05c ModelInstance's full 3D transform set as default 2018-10-16 09:51:30 +02:00
bubnikv
6260e43f61 Merge remote-tracking branch 'origin/dev2' into dev_native 2018-09-25 15:33:51 +02:00
bubnikv
add45a8f6e Added C++ command line processing, thanks @alexrj and @loh 2018-09-20 16:48:13 +02:00
bubnikv
0558b53493 WIP: Moved sources int src/, separated most of the source code from Perl.
The XS was left only for the unit / integration tests, and it links
libslic3r only. No wxWidgets are allowed to be used from Perl starting
from now.
2018-09-19 11:02:24 +02:00