Commit Graph
100 Commits
Author SHA1 Message Date
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 9651ff19ef Fix of [prusa3d/PrusaSlicer] Typo in Keyboard Shortcuts (Issue #7161) 2021-10-24 11:12:15 +02:00
Vojtech Bubnik ae62801250 Implemented "Details" section enclosing OpenGL extensions when copying
sysinfo to clipboard for inserting into github issue.
Fix of [Feature Request] Help => System Info => Copy to Clipboard: wrap list of extensions with <details> tag #6830
2021-10-23 20:13:25 +02:00
Vojtech Bubnik 0bc2448e22 Documented the new print bed collision detection algorithm requirements:
Only convex print bed is supported.
Optimization of collision detection by precomputing the print bed shape type.
2021-10-23 15:29:18 +02:00
Vojtech Bubnik 36baae05f1 Commented out unused and expensive printbed_collision_state() 2021-10-23 15:29:18 +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
Vojtech Bubnik 5ccf7e9e47 Updated version and config location to beta. 2021-10-22 17:10:09 +02:00
Vojtech Bubnik 7e780380ee Fix of d43ae66eca
reduced copy / paste redudancy by extracting a new function
    to produce convex hull: its_convex_hull()
2021-10-22 16:54:21 +02:00
Vojtech Bubnik 3021a6f57f Fixing previous commit for QHull configured for doubles, not floats. 2021-10-22 15:20:40 +02:00
Vojtech Bubnik b15db6fdb7 Fixed previous commit, which broke debug compilation. 2021-10-22 15:11:51 +02:00
Vojtech Bubnik d43ae66eca reduced copy / paste redudancy by extracting a new function
to produce convex hull: its_convex_hull()
2021-10-22 14:02:53 +02:00
Vojtech Bubnik 48e89e0b0d const replaced with satic constexpr const 2021-10-22 14:02:53 +02:00
Vojtech Bubnik f9e3e1d9fd Fixed spelling error get_standart_duration -> get_standard_duration 2021-10-22 14:02:53 +02:00
Vojtech Bubnik 767f401ada Brim generator: Using pftNonZero instead of pftEvenOdd for intersection / difference. 2021-10-21 13:35:29 +02:00
Vojtech Bubnik 1f4f8ff3ad Fixed visualization of the "sinking contours" for complex objects. 2021-10-19 09:19:53 +02:00
Vojtech Bubnik 5e735a59d0 Fixed planning of support interface layers with rafts and
larger Z gap for supports than for the raft.
2021-10-19 09:19:53 +02:00
Vojtech Bubnik c313e6793a Follow-up to 1ca24f0bd0
Fixed visualization of G-code in G-code viewer after 07e7e11590
The line end positions were not extracted correctly from G-code
imported into a stand-alone G-code viewer.
2021-10-18 15:46:23 +02:00
Vojtech Bubnik 32ebfa66e9 Fix of M106 on every new layer #7094
after parallelization of CoolingBuffer:
Remember the last fan speed emitted at the previous layer.
2021-10-18 14:56:02 +02:00
Vojtech Bubnik 556e0c53c7 Some more refactoring of ClipperLib / closing() / opening() 2021-10-18 14:51:30 +02:00
Vojtech Bubnik bec140b4bc "only_retract_when_crossing_perimeters" disabled by default
to reduce stringing for "custom" printers based on "defaults".
2021-10-15 16:35:16 +02:00
Vojtech Bubnik 1ca24f0bd0 Fixed visualization of G-code in G-code viewer after 07e7e11590
Fix of prusa-gcodeviewer changes modification time of the viewed gcode file #7005
2021-10-15 14:31:57 +02:00
Vojtech Bubnik a6f4b9b71f Snug supports: Extrude interface layers 45 degrees from the base layer,
flip direction of the infill layer with each interface layer.
Unfortunately the flipping of support interface directions may not work
reliably due to base support layer heights growing at different rate
from the interface layers.
2021-10-14 13:56:04 +02:00
Vojtech Bubnik 64a3866ad5 Making GCC happy. 2021-10-14 09:33:39 +02:00
Vojtech Bubnik 0222533273 Fixed compilation on non MS systems 2021-10-14 09:31:53 +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
Vojtech Bubnik 7b0d90f489 Reworded "Shape Gallery" menu and dialog title 2021-10-07 15:40:28 +02:00
Vojtech Bubnik 5de143f04f Follow-up to 96b88f5b29
Fixed crash with zero support base spacing.
The bug fix was not correct and it disabled the new "zig-zag" sparse
infill generator, leading to GH issue #7014

Somehow improved missing interface layers for snug supports
by propagating full overhangs when generating interface layers.

Fixed generation of soluble interfaces for support enforcers,
where base support was used for steeper overhangs.

Disabled filtering out thin regions from the lower layer, that will
not be covered by perimeters, thus they are not supporting the current layer.
However this may lead to a situation where regions at the current layer
that are narrow thus not extrudable will generate unnecessary supports.
For example, see GH issue #3094
2021-10-07 15:39:44 +02:00
Vojtech Bubnik e185bf58b7 Replaced "Simple shorthands for smart pointers" shptr, uqptr, wkptr
with their original names. Using weird shorthands makes the code
unreadable for anyone but the original author.

template<class T> using shptr = std::shared_ptr<T>;
template<class T> using uqptr = std::unique_ptr<T>;
template<class T> using wkptr = std::weak_ptr<T>;
2021-10-04 16:56:26 +02:00
Vojtech Bubnik b028e169c8 Merge branch 'master' of https://github.com/Prusa3D/PrusaSlicer 2021-10-04 16:33:33 +02:00
Vojtech Bubnik 6192c57368 Fix of support missing under horizontal overhang #6058
There was a bug for more than 4 years, which likely triggers now more
often with the introduction of raft_contact_distance parameter,
which is usually significantly smaller than support_material_contact_distance.
There were no support towers built at the raft for contact layers
below the print_z of the first object layer.
2021-10-04 16:33:25 +02:00
Vojtech Bubnik e533d237f9 Manifold mesh may contain self-intersections, so we want to always allow fixing the mesh.
This is a fix of a regression wrt. https://github.com/prusa3d/PrusaSlicer/releases/tag/version_2.4.0-alpha2
2021-10-04 10:39:58 +02:00
Vojtech Bubnik c7d6a95cb3 Slightly reworded error messages for
Cannot import .sl1 files into PrusaSlicer
2021-10-01 15:07:09 +02:00
Vojtech Bubnik 68de2a49a3 Fixed update of mesh volume after applying a transformation.
Fixes flipped normals when importing some 3MFs.
2021-10-01 14:28:45 +02:00
Vojtech Bubnik afbbb36fa4 Fixed import of multi-material AMF files, broken due to admesh eradication. 2021-10-01 13:34:22 +02:00
Vojtech Bubnik 66d4462724 Fixed spelling error preffered / preferred 2021-09-30 14:44:11 +02:00
Vojtech Bubnik 96f4d71c71 Fixed 1st layer support expansion if printed without raft.
This is a regression to PrusaSlicer 2.3.3
2021-09-30 14:01:31 +02:00
Vojtech Bubnik b76f66d2d2 Follow-up to 3ee259b602
1) Added parsing of 3MF PrusaSlicer generator semantic version
2) For 3MFs generated by >= "2.4.0-alpha1" and < "2.4.0-alpha3",
   remove unreferenced vertices on loading. This should shrink the incorrectly
   generated 3MFs back.
3) Added check for an empty mesh, which could have crashed PrusaSlicer on 3MF parsing.
2021-09-30 12:18:43 +02:00
Vojtech Bubnik aeb18e729d New preferences key "clear_undo_redo_stack_on_new_project", set to "1"
by default: Clear Undo / Redo stack on new project or load project.
Fixes Clear undo chain #2812
2021-09-30 12:17:52 +02:00
Vojtech Bubnik 1f3b272d77 Redo of the project state, implementation of Undo/Redo stack compression 2021-09-30 12:17:39 +02:00
Vojtech Bubnik 85c760d9b6 Touch-up to some comments, removed commented-out code 2021-09-27 15:00:58 +02:00
Vojtech Bubnik 8f4f02f84c Merge remote-tracking branch 'remotes/origin/vb_project_state' 2021-09-27 14:36:22 +02:00
Vojtech Bubnik 9c4494637c WIP Undo / Redo and project state: Marking Undo / Redo snapshots
with their purpose.
Follow-up to 41dc265a45
2021-09-27 14:32:09 +02:00
Vojtech Bubnik 41dc265a45 WIP Undo / Redo and project state: Marking Undo / Redo snapshots
with their purpose.
2021-09-27 14:10:53 +02:00
Vojtech Bubnik 43470af0c6 Fix of "About" screen still shows 2020 at the copyright notice (#7018) 2021-09-27 10:07:29 +02:00
Vojtech Bubnik 07e7e11590 Fix of prusa-gcodeviewer changes modification time of the viewed gcode file #7005
This is a regression wrt. PrusaSlicer 2.4.0-alpha1 due to the G-code
processing optimization and parallelization.
Related to GCode Viewer changes files modified date in windows #5079
2021-09-27 10:02:54 +02:00
Vojtech Bubnik fec5d92bc8 Added various has_duplicate_points() checks, to be used by asserts.
Removed some "extern" function modifiers, they have no meaning in C++.
2021-09-24 14:07:46 +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 3872524dc4 Follow-up to b6d7601ead
Fixing the FDM raft generator.
2021-09-24 10:13:26 +02:00
Vojtech Bubnik 0c0c37b76c Fix of [2.4.0a] version placeholder doesn't work for output filename format #7002 2021-09-24 09:36:14 +02:00
Vojtech Bubnik 04e4aee246 Merge branch 'master' of https://github.com/Prusa3D/PrusaSlicer 2021-09-23 18:46:15 +02:00
Vojtech Bubnik b6d7601ead Fixed endless loop in support raft generator. 2021-09-23 18:46:11 +02:00
Vojtech Bubnik 96b88f5b29 Fixed crash with zero support base spacing.
Zero support base spacing is newly allowed, switching from
the "support base" infill pattern to rectilinar infill pattern.
Why someone would want to use a solid infill for support base eludes me,
but it is simpler to support it instead of working out some rules on
minimum support base density.

Fixes Support patern spacing set to zero causing crash #6989
2021-09-22 10:50:12 +02:00
Vojtech Bubnik a5a7f64db0 Mesh statistics for imported STLs: Added backwards_edges to open_edges,
so that a mesh with incorrectly oriented faces will not be considered
a manifold.

Added assert for 3D convex hulls constructed by QHull. They shall be
manifold (however sometimes they are not).
2021-09-21 16:04:04 +02:00
Vojtech Bubnik ac7674b85a Fixed visualization of G-code lines in G-code viewer (3D view).
Improved speed of parsing external G-code.
2021-09-21 15:30:37 +02:00
Vojtech Bubnik 116fd0526b Enabling PrusaLink in physcal printers dialog for MINI. 2021-09-21 12:49:25 +02:00
Vojtech Bubnik 7e3306c68f Fixed triangulation of meshes split by the cut tool. 2021-09-21 11:07:40 +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 f484953a5a Fix of Print setting changes not applied to all copies if one copy rotated #6971 2021-09-20 14:41:19 +02:00
Vojtech Bubnik 9d29eddf16 WIP: admesh eradication
follow-up to 58d8ab3dea
2021-09-14 14:51:40 +02:00
Vojtech Bubnik d749baf6bc Fix of 58d8ab3dea 2021-09-14 13:11:21 +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
Vojtech Bubnik 0a51afa3e6 Fix of Can't convert polyline with more than two points to a line (#6933)
Sometimes Clipper produces a polyline with more than 2 points when
clipping a line with a polygon or a set of polygons. We hope the intermediate
points are collinear with the line, so we may just ignore them.
2021-09-13 15:40:56 +02:00
Vojtech Bubnik cab71073a1 Some reduction of unnecessary conversions when calling ClipperUtils. 2021-09-13 15:13:10 +02:00
Vojtech Bubnik f9a5ee725d Follow-up to ae7d6db1d9
Exporting G-code on a worker thread did not work correctly as the worker
threads were using user's locale, not "C" locale.
The "C" locale is newly enforced to TBB worker threads by
name_tbb_thread_pool_threads_set_locale()
2021-09-13 13:04:12 +02:00
Vojtech Bubnik e78d647cc2 Follow-up to e7591e6aa6
GCodeFormatter default copy constructor / copy operators were not safe
and they were used in debug mode.
2021-09-13 12:51:50 +02:00
Vojtech Bubnik e7591e6aa6 GCodeWriter: published GCodeFormatter, made it more generic, so
it could be used outside of GCodeWriter.
Ported the GCodeWriter::retract/deretract to GCodeFormatter.
2021-09-13 11:55:44 +02:00
Vojtech Bubnik 880feb3a3d GCodeViewer slight opitmization: reuse (move) G-code line indices
in G-code viewer.
2021-09-13 10:41:28 +02:00
Vojtech Bubnik ae7d6db1d9 Parallelization of the G-code export.
Follow-up to
03b6048684
beee18f229
b5a007a683
etc
2021-09-13 10:04:21 +02:00
Vojtech Bubnik 34c4b74af4 Fixed Perl unit tests 2021-09-10 12:28:52 +02:00
Vojtech Bubnik dc4b783e9e Pimping up SpiralVase code, fix of 03b6048684 2021-09-10 12:10:00 +02:00
Vojtech Bubnik 03b6048684 Follow-up to beee18f229
WIP to G-code export parallelization through pipelining:
Decoupled CoolingBuffer from GCode / GCodeWriter, ready to be
pipelined on a different thread.
2021-09-10 11:43:59 +02:00
Vojtech Bubnik beee18f229 Follow-up to b5a007a683
WIP to G-code export parallelization through pipelining:
GCodeProcessor is called during the G-code export,
the G-code is no more reopened and re-read, but it is pipelined
from the G-code generator.
2021-09-08 15:06:12 +02:00
Vojtech Bubnik 0da0a7b2a0 Fix of recent GCode / GCodeProcessor refactoring: Don't close a FILE
twice.
2021-09-07 17:58:06 +02:00
Vojtech Bubnik 152e236dda Trying to fix the windows build 2021-09-07 17:31:36 +02:00
Vojtech Bubnik b5a007a683 WIP to G-code export parallelization through pipelining:
New class GCodeOutputStream as a G-code consumer.
In the following steps the GCodeOutputStream will be pipelined with
GCodeProcessor.
2021-09-07 16:23:43 +02:00
Vojtech Bubnik 32733b7db9 GCodeProcessor collects positions of line ends for GCodeViewer,
GCodeViewer no more parses G-code just to extract line end positions.
Removed start_mapping_gcode_window(), void stop_mapping_gcode_window(),
they are no more needed.
2021-09-07 15:42:56 +02:00
Vojtech Bubnik e30ff22b8a GCodePostProcessor - use C files instead of C++ streams, C files are faster.
Also fixed a regression - crashes on undefined cancellation callback.
2021-09-07 14:20:21 +02:00
Vojtech Bubnik 771a892776 Optimization of GCodeProcessor for speed. 2021-09-07 11:18:12 +02:00
Vojtech Bubnik 428509ac00 Pimped up GCodeProcessor::TimeProcessor::post_process():
replaced implicit lambda capture with explicit listing of captured
context for readability and code correctness. Captured this as const.
2021-09-06 18:08:13 +02:00
Vojtech Bubnik 86d06b0be9 G-code processor tiny change: In place initialization 2021-09-03 17:22:53 +02:00
Vojtech Bubnik 97d1fe35ad G-code writer optimization: Don't use std::strstream, it is slow! 2021-09-03 17:22:28 +02:00
Vojtech Bubnik dc72723911 Optimization of GCodeReader:
1) Use std::from_chars() instead of strtod()
2) Own implementation of buffered readline()
2021-09-03 16:21:45 +02:00
Vojtech Bubnik d154752c38 Commenting out untested and unused Polyline::simplify_by_visibility() 2021-09-03 16:21:44 +02:00
Vojtech Bubnik 2e250c1463 Speed-up in GCodeViewer vertex buffer generator 2021-09-03 16:21:44 +02:00
Vojtech Bubnik 79784d1a2e Fix of "Support on build plate only" no longer overridden by support painting (#6863)
This is a regression to a late PrusaSlicer 2.4.0-alpha0 change
	8dfc0422a8
    Faster and hopefully more reliable projection of paint-on support
    blockers and enforcers on a sliced mesh.
    Previous d89f01c717 did not fix it.
2021-09-03 11:45:08 +02:00
Vojtech Bubnik d89f01c717 Fix of "Support on build plate only" no longer overridden by support painting (#6863)
This is a regression to a late PrusaSlicer 2.4.0-alpha0 change
	8dfc0422a8
    Faster and hopefully more reliable projection of paint-on support
    blockers and enforcers on a sliced mesh.
2021-09-02 16:29:21 +02:00
Vojtech Bubnik c25ca3015a Bumped up version number 2021-09-01 15:15:32 +02:00
Vojtech Bubnik 950c216239 Commented out AMF export. The format never took off, we don't want to
keep supporting it. Let's wait for user feedback.
2021-09-01 15:11:26 +02:00
Vojtech Bubnik 6158347379 Follow-up to #6817
1) Activate installed filament or SLA material profile after update_compatible(),
so that the compatiblity and visibility flags of presets are updated.
2) Only activate the first newly installed filament / SLA material profile
if the active printer did not change. This also means that if no filament
profile was active before Wizard was open or it became incompatible with
the newly installed Printer profile, the default filament profile assigned
to the activated Printer is activated preferably, which may or may not
be one of the newly installed filament profiles.
2021-09-01 14:37:20 +02:00
Vojtech Bubnik ab84da6c56 Fix for #6803 - Illegal character in filename when STL opened direct from CAD app
Follow-up to ea4e9b35a3
Win32 specific: Substitute slashes to back slashes in file paths
when loading model files (STLs, 3MFS ...)
2021-09-01 11:08:08 +02:00
Vojtech Bubnik b0c4a13ebd Merge branch 'master' of https://github.com/Prusa3D/PrusaSlicer 2021-09-01 09:55:35 +02:00
Vojtech Bubnik b29c0ead7d Implemented configurable speed and acceleration settings for the first
object layer over raft interface:
"first_layer_speed_over_raft", "first_layer_acceleration_over_raft".
Fixes I have a question about the speed of the first layer after the raft. #6623
Fixes Layer After Raft Is Not Considered First Layer! #6166
2021-08-31 16:03:14 +02:00
Vojtech Bubnik 5f26bfd397 Brim separation from object, follow up to 82373334bc
1) Changed the name of the variable "brim_offset" to "brim_separation"
   for clarity.
2) Added legacy conversion after loading an old 3MF that does not define
   then new "brim_separation" variable: The "brim_separation" is being
   filled in with the "elefant_foot_compensation" value to produce
   equal brim separation to the old PrusaSlicer that saved that 3MF file.
2021-08-31 12:22:44 +02:00
Vojtech Bubnik f92312b597 Fixed parsing of Config from AMF / 3MF if it started with an empty line.
This bug was introduced with e947a29fc8
2021-08-30 17:57:04 +02:00
Vojtech Bubnik 87b542597e Referenced https://github.com/prusa3d/PrusaSlicer/wiki/PrusaSlicer-on-Linux---binary-distributions 2021-08-30 14:52:53 +02:00
Vojtech Bubnik 1c76df89ea Fix of paint on supports don't work for object that has been scaled up #6718
The triangle-ray intersection function used a hard coded epsilon,
which did not work for triangle meshes, that were either too small
or too large. Newly the epsilon may be provided to the AABBTreeIndirect
search functions externally and IndexedMesh calculates a suitable
epsilon on demand from an average triangle mesh edge length.
2021-08-27 21:04:18 +02:00
Vojtech Bubnik 8dfc0422a8 Faster and hopefully more reliable projection of paint-on support
blockers and enforcers on a sliced mesh.
2021-08-27 15:05:18 +02:00
Vojtech Bubnik 306bd0a198 Fixed leakage of paint-on supports through thin objects. This is a bug
introduced during 2.4.0 refactoring.
Fixes To much support #6067
2021-08-27 15:05:18 +02:00
Vojtech Bubnik 03fce23570 Fixed Perl bindings 2021-08-27 15:05:18 +02:00