113 Commits

Author SHA1 Message Date
enricoturri1966
ecb1a23edd SPE-1784: New compressed (binary) gcode format integration
1st installment as part of tech ENABLE_BINARIZED_GCODE

Still missing GCode Block save/load
2023-07-19 13:18:04 +02:00
Vojtech Bubnik
2b7cf2d877 GCodeGenerator / custom G-codes: Added new read/only options providing
the amount of total extruded material and per extruder extruded material
up to the point the value is evaluated:
"extruded_volume", "extruded_weight",
"extruded_volume_total", "extruded_weight_total"
2023-03-30 10:36:36 +02:00
Vojtech Bubnik
59552a8aee PlaceholderParser & G-code export: Exchange of position & extrusion status between custom G-codes and slicer, extension of script syntax.
Newly each custom G-code block may exchange the following values with slicer:

Position and Z-hop:
position (read/write)- 3 element vector (X, Y, Z) of current G-code position. Z element contains the current Z hop.
zhop (read only)- initial zhop value

Extruders: vector variables, one element per extruder:
e_position (read/write) - absolute E position, only available with absolute extruder addressing
e_retracted (read/write) - current retraction state
e_restart_extra (read/write) - current planned extra deretraction when starting printing

For readibility, script's if / elsif / else / endif syntax was modified:

{if cond then
	block
elsif cond then
	block
else
	block
endif}

Semicolon is not required after else or endif.
2023-03-28 12:47:32 +02:00
Lukas Matena
a067da6d53 Ooze prevention:
- remove the infinite skirt
- added 'idle_temperature' in Filament Settings as an optional parameter
- the logic is changed: if idle_temp is present, it is used,
  otherwise it uses the old delta value from Print Settings
- TODO: the optional parameter is not well supported in UI
2023-01-26 07:28:37 +01:00
Vojtech Bubnik
c64dbacf88 WIP Extending the expressivity of ExtrusionRole
Changed GCodeExtrusionRole to enum class.
Follow-up to 5991850db1f2d09d1b7713f42300e2bfe4a42128
e50e96bb26eab4f9d56c98706c03166635cf4fff
2023-01-16 11:14:34 +01:00
Vojtech Bubnik
5991850db1 WIP Extending the expressivity of ExtrusionRole
Co-authored-by: supermerill <merill@free.fr>
Based on the unfinished idea of @supermerill, defining ExtrusionRole
as a bit mask of ExtrusionRoleModifier.
Because the ExtrusionRole was used for both ExtrusionEntity and
G-code export / G-code viewer, the original ExtrusionRole had to be split
to ExtrusionRole and GCodeExtrusionRole to support bitmask attributes
for the former while keeing a low number of ordinary values for the latter.
2023-01-16 10:14:46 +01:00
Pavel Mikus
cfb702be99 rename avoid_curled_filament_during_travels to avoid_crossing_curled_overhangs
mark avoid_crossing_curled_overhangs as Experimental
rename overhang_steepness_levels to overhang_overlap_levels
2023-01-11 17:15:11 +01:00
PavelMikus
0fdb545b55 fix issues, new implemenetation affecting all extrusions 2022-12-14 14:49:20 +01:00
PavelMikus
38a287fec4 first implementation, but for overhangs the code is not run for some reason 2022-12-14 14:49:20 +01:00
Vojtech Bubnik
7309c729e0 Reworked "only_retract_when_crossing_perimeters" feature, which
was terribly slow:
Introduced RetractWhenCrossingPerimeters.cpp,hpp
AABBTreeIndirect traverse template was extended to support early exit.
2022-12-06 11:45:05 +01:00
Vojtech Bubnik
a98467f661 Merge remote-tracking branch 'remotes/origin/master' into vb_treesupports 2022-11-18 13:26:48 +01:00
Pavel Mikuš
633ce8aa21
Pm jps path finding (#8)
New step - estimation of curling on both the model and the support extrusions.
Improvements in curled filament estimation algortihm
Implementation of Jump Point Search algorithm 
Use of JPS algorithm to avoid curled extrusions during travel moves in Gcode export
2022-11-09 13:33:58 +01:00
Vojtech Bubnik
8858651bf4 WIP Refactoring of Layers: Reworked G-code export to make use
of Layer->LayerSlice->LayerIsland hierarchy. This should improve
tool path ordering of multiple parts within the same object #5511.

Some shells tests rewritten from Perl to C++.

FIXME: Gap fill extrusions are currently not handled by the initial
G-code preview!
2022-11-07 14:47:43 +01:00
Vojtech Bubnik
2ced762948 Integrating a C++20 like span library
https://github.com/tcbrindle/span

Replacing a homebrew const pointer wrapper const correctness helper
with the C++20 like span library.

One day when we switch to C++20 we will just use the C++20 spans instead.
2022-10-19 16:27:15 +02:00
Lukas Matena
62e59a4526 Fixing conflicts part 1:
fixed simple conflicts
2022-06-29 16:43:29 +02:00
Lukas Matena
b61714bb3e Merge branch 'master_250' (NO CONFLICTS FIXED):
CONFLICT (content): Merge conflict in resources/profiles/PrusaResearch.idx
CONFLICT (content): Merge conflict in resources/profiles/PrusaResearch.ini
CONFLICT (content): Merge conflict in src/libslic3r/CMakeLists.txt
CONFLICT (content): Merge conflict in src/libslic3r/Fill/Fill.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode.hpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/GCodeProcessor.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/GCodeProcessor.hpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/SeamPlacer.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/SeamPlacer.hpp
CONFLICT (add/add): Merge conflict in src/libslic3r/Geometry/Curves.hpp
CONFLICT (content): Merge conflict in src/libslic3r/PerimeterGenerator.cpp
CONFLICT (content): Merge conflict in src/libslic3r/Point.hpp
CONFLICT (content): Merge conflict in src/libslic3r/PrintConfig.hpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/ConfigWizard.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/GCodeViewer.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/GLCanvas3D.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/GUI_App.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp
CONFLICT (content): Merge conflict in src/slic3r/Utils/FixModelByWin10.cpp
CONFLICT (modify/delete): t/perimeters.t deleted in HEAD and modified in master_250.  Version master_250 of t/perimeters.t left in tree.
CONFLICT (content): Merge conflict in tests/fff_print/CMakeLists.txt
CONFLICT (content): Merge conflict in tests/fff_print/test_fill.cpp
CONFLICT (content): Merge conflict in version.inc
CONFLICT (modify/delete): xs/xsp/PerimeterGenerator.xsp deleted in HEAD and modified in master_250.  Version master_250 of xs/xsp/PerimeterGenerator.xsp left in tree.
2022-06-29 14:37:14 +02:00
Lukáš Hejl
9c07218d82 Reworked pressure equalizer and GCode processing pipeline to make pressure equalizer always returns one whole layer at once.
Now pressure equalizer is returning one layer back (the previous layer).

GCode produced by pressure equalizer now has the same number of decimal places as non-processed GCode.

Pressure equalizer was disabled for external perimeters and gap-fill.
2022-06-10 10:54:35 +02:00
Lukáš Hejl
0463518dc3 Attempted to reenable the old pressure equalizer and fix its issues. 2022-06-09 21:07:41 +02:00
PavelMikus
d59d8eebde Full occlusion guided seam placer backport 2022-06-07 11:12:48 +02:00
Vojtech Bubnik
f5709345ad GCode export: Replaced std::strings in G-code comments with string_views.
Seam placer: Detecting perimeter by the pointer and size of the
comment_perimeter string_view, only placing seams for perimeters.
2022-04-25 12:42:51 +02:00
PavelMikus
177a1fd54a finalize integration into GCode.cpp export functions, remove unused
edge grids
2022-04-25 12:42:51 +02:00
PavelMikus
fdfe19ef49 init version of occlusion estimation, raycasting implemented but for some reason only parts of model are estimated 2022-04-25 12:42:51 +02:00
Lukas Matena
e058f794d9 Merge branch 'stable' 2022-02-24 13:05:05 +01:00
Vojtech Bubnik
8aefe3fc90 Fix of gcode_substitutions will cause errors in prusaslicer_config dump at the end of gcode #7952
Suppress the G-code find / replace substitutions for the non-G-code
sections (comment blocks) at the start and at the end of the G-code file.
2022-02-21 11:04:43 +01:00
Vojtech Bubnik
199dc121a5 Quantization of G-code export to achieve more precise extrusion
width control.
2022-02-07 15:33:34 +01:00
Vojtech Bubnik
add1e994fa WIP G-code Find-Replace: Optimize regexps, process complete G-code,
not only G-code of layers.
2022-01-17 12:29:46 +01:00
Vojtech Bubnik
658f01b64b WIP: G-code find / replace using a new gcode_substitutions PrintConfig
parameter.
2022-01-17 12:29:46 +01:00
Vojtech Bubnik
4158f9ec8e New config value "gcode_resolution" replaces the hard coded RESOLUTION
value, which was set to 0.0125mm.
2021-11-30 17:52:05 +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
ae7d6db1d9 Parallelization of the G-code export.
Follow-up to
03b60486840f32e32dc54103dc3051f94e79b35a
beee18f22991e369b1722a43bbcb692fa0d68af0
b5a007a683124ec3b01b61e892ed8eb39c034248
etc
2021-09-13 10:04:21 +02:00
Vojtech Bubnik
beee18f229 Follow-up to b5a007a683124ec3b01b61e892ed8eb39c034248
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
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
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
Lukas Matena
a6ddab856b Wipe tower: refactoring of brim and solid infill on first layer 2021-04-05 23:39:27 +02:00
Vojtech Bubnik
9f09f03228 Refactoring of FDM support generator:
1) If "support on build plate only" is enabled, the support columns are
   newly trimmed to not land on top of an object. However this may make
   the column too small to be stable.
2) Support enforcers newly take precedence over "supports on build plate only"
   and over "don't support bridges".
3) Some refactoring of the support generator code for clarity: Reduced
   some of the worst spagetti offenders.

Fixes Support generated even if support on build only activated #915
Fixes Bug: supports on build plate only #1340
Fixes Bottom interface layer is not generated , support on build plate only. (long open defect) #4199
Fixes option "supports on build plate only" does not work #3980

Fixes No support interface layers generated #1997
Fixes Feature Request: Option to combine results of 'support from build plate only' and 'support enforcers only' #2801
Fixes Support interface isn't generated: build plate only + blocked by model + support enforcer #3831
Fixes Support Enforcer don't create interface layers #5748
Fixes Support Enforcers Don't Have Top Loops/Raft #1870
Fixes Don't cancel support enforcers with "don't support bridges" #5105
2021-03-19 11:21:35 +01:00
enricoturri1966
50c6fc1719 Tech ENABLE_TOOLPATHS_WIDTH_HEIGHT_FROM_GCODE set as default 2021-02-17 11:23:17 +01:00
Vojtech Bubnik
6ea5781709 Fix of Supports printed too slowly. #984
Processing of CoolingBuffer is newly staggered for support layers
until the 1st object layer above supports is received by CoolingBuffer.
2021-02-16 11:30:57 +01:00
Vojtech Bubnik
73c9f939e0 Squash merge of lh_brim_rework,
brim separated to Brim.cpp,hpp
Refactored accessors to PrintObjectPtrs, PrintRegionPtrs, LayerPtrs,
SupportLayerPtrs for const correctness.
2021-02-03 15:12:53 +01:00
Vojtech Bubnik
7353d8c6e9 Rework of Add random function for gcode macros. #5219 after merge:
The thread local storage variables for the random number generator
were replaced by an external context variable.
Thread local storage is a scarce resource.
2020-12-09 09:19:46 +01:00
enricoturri1966
b7ac74bc42 Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer 2020-12-08 15:56:08 +01:00
enricoturri1966
5bd443cd1f #4936 - Take toolpaths width and height from gcode decorations, if available 2020-12-08 15:55:53 +01:00
Vojtech Bubnik
5f456ebbe7 Merge branch 'lh_avoid_crossing_perimeters' 2020-12-08 13:39:33 +01:00
Vojtech Bubnik
3dd9b8c718 Further improvement error reporting with buggy custom G-code sections #1516
1) The macro-processor sanitizes the source code line for invalid UTF-8
   characters. Ideally these invalid characters would be replaced with ?,
   they are just dropped as of now. Better than showing an empty string
   when converting to wxString though.
2) G-code export collects full error message for 1st occurence of an error
   for each custom G-code block.
3) The composite error message now displays the errors collected in 2).
4) The error window is now scaled bigger and the Slicer logo is smaller
   if the text is to be rendered with monospaced font, as the monospaced
   text will not be word wrapped.
2020-12-03 12:50:24 +01:00
Lukáš Hejl
f25e5c0ec6 Merge remote-tracking branch 'origin/master' into lh_avoid_crossing_perimeters 2020-12-01 14:31:22 +01:00
Vojtech Bubnik
e62bb4a7c7 Fix of Head crash on completion with sequential printing #5349
In addition to an existing "layer_z" placeholder variable,
a new "max_layer_z" has been added to custom G-code sections accumulating
maximum of "layer_z" over the print. This value may be used for example
in the end G-code of a sequential print to lift the print head
up before travel over the whole print bed.
2020-12-01 08:23:46 +01:00
Vojtech Bubnik
04c2fde671 Removed the old motion planner. 2020-11-17 09:33:30 +01:00
Lukáš Hejl
ef9de07740 Disabling wipe for avoid crossing perimeters 2020-11-16 14:22:32 +01:00
Lukáš Hejl
8adf02a289 Moved AvoidCrossingPerimeters to separate file 2020-11-16 14:22:32 +01:00
Lukáš Hejl
c16aad7e0b Reworked the algorithm for avoid crossing perimeters for multiple objects 2020-11-16 14:21:36 +01:00