diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt
index 73d369353e..1eaf05f5cd 100644
--- a/deps/CMakeLists.txt
+++ b/deps/CMakeLists.txt
@@ -24,8 +24,8 @@
# therefore, unfortunatelly, the installation cannot be copied/moved elsewhere without re-installing wxWidgets.
#
+cmake_minimum_required(VERSION 3.10)
project(PrusaSlicer-deps)
-cmake_minimum_required(VERSION 3.2)
include(ExternalProject)
include(ProcessorCount)
@@ -66,6 +66,10 @@ if (NOT _is_multi AND NOT CMAKE_BUILD_TYPE)
message(STATUS "Forcing CMAKE_BUILD_TYPE to Release as it was not specified.")
endif ()
+if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.24)
+ cmake_policy(SET CMP0135 NEW)
+endif ()
+
function(prusaslicer_add_cmake_project projectname)
cmake_parse_arguments(P_ARGS "" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})
@@ -199,6 +203,8 @@ include(NanoSVG/NanoSVG.cmake)
include(wxWidgets/wxWidgets.cmake)
include(OCCT/OCCT.cmake)
+include(LibBGCode/LibBGCode.cmake)
+
set(_dep_list
dep_Boost
dep_TBB
@@ -214,6 +220,7 @@ set(_dep_list
${PNG_PKG}
${ZLIB_PKG}
${EXPAT_PKG}
+ dep_LibBGCode
)
# if (NOT MSVC)
diff --git a/deps/LibBGCode/LibBGCode.cmake b/deps/LibBGCode/LibBGCode.cmake
new file mode 100644
index 0000000000..92003869a6
--- /dev/null
+++ b/deps/LibBGCode/LibBGCode.cmake
@@ -0,0 +1,34 @@
+set(LibBGCode_SOURCE_DIR "" CACHE PATH "Optionally specify local LibBGCode source directory")
+
+set(_source_dir_line
+ URL https://github.com/prusa3d/libbgcode/archive/50bedae2ae0c7fc83dd350a8be99ddc8f1749005.zip
+ URL_HASH SHA256=3958c93a325d6d7ed1c97aabb37cc09a08f8e981e3a7917312d568071e462162
+)
+
+if (LibBGCode_SOURCE_DIR)
+ set(_source_dir_line "SOURCE_DIR;${LibBGCode_SOURCE_DIR};BUILD_ALWAYS;ON")
+endif ()
+
+prusaslicer_add_cmake_project(LibBGCode_deps
+ ${_source_dir_line}
+ SOURCE_SUBDIR deps
+ DEPENDS dep_Boost ${ZLIB_PKG}
+ CMAKE_ARGS
+ -DDEP_DOWNLOAD_DIR:PATH=${DEP_DOWNLOAD_DIR}
+ -DDEP_CMAKE_OPTS:STRING=-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
+ -DLibBGCode_Deps_SELECT_ALL:BOOL=OFF
+ -DLibBGCode_Deps_SELECT_heatshrink:BOOL=ON
+ -DDESTDIR=${DESTDIR}
+)
+
+prusaslicer_add_cmake_project(LibBGCode
+ ${_source_dir_line}
+ DEPENDS dep_LibBGCode_deps
+ CMAKE_ARGS
+ -DLibBGCode_BUILD_TESTS:BOOL=OFF
+ -DLibBGCode_BUILD_CMD_TOOL:BOOL=OFF
+)
+
+if (MSVC)
+ add_debug_dep(dep_LibBGCode)
+endif ()
\ No newline at end of file
diff --git a/lib/Slic3r/Geometry.pm b/lib/Slic3r/Geometry.pm
index f771c70b32..0f8b376442 100644
--- a/lib/Slic3r/Geometry.pm
+++ b/lib/Slic3r/Geometry.pm
@@ -25,7 +25,6 @@ our @EXPORT_OK = qw(
X Y Z
convex_hull
- chained_path_from
deg2rad
rad2deg
);
diff --git a/resources/icons/convert_file.svg b/resources/icons/convert_file.svg
new file mode 100644
index 0000000000..2de2b707f0
--- /dev/null
+++ b/resources/icons/convert_file.svg
@@ -0,0 +1,93 @@
+
+
+
+
diff --git a/resources/icons/scalar_param.svg b/resources/icons/scalar_param.svg
new file mode 100644
index 0000000000..f9386ab70e
--- /dev/null
+++ b/resources/icons/scalar_param.svg
@@ -0,0 +1,21 @@
+
+
+
diff --git a/resources/icons/vector_filament_param.svg b/resources/icons/vector_filament_param.svg
new file mode 100644
index 0000000000..a3404cfd88
--- /dev/null
+++ b/resources/icons/vector_filament_param.svg
@@ -0,0 +1,28 @@
+
+
+
diff --git a/resources/icons/vector_param.svg b/resources/icons/vector_param.svg
new file mode 100644
index 0000000000..a5c8affc7f
--- /dev/null
+++ b/resources/icons/vector_param.svg
@@ -0,0 +1,28 @@
+
+
+
diff --git a/resources/localization/list.txt b/resources/localization/list.txt
index de553f2a32..df800c95a6 100644
--- a/resources/localization/list.txt
+++ b/resources/localization/list.txt
@@ -33,6 +33,7 @@ src/slic3r/GUI/DesktopIntegrationDialog.cpp
src/slic3r/GUI/DoubleSlider.cpp
src/slic3r/GUI/Downloader.cpp
src/slic3r/GUI/DownloaderFileGet.cpp
+src/slic3r/GUI/EditGCodeDialog.cpp
src/slic3r/GUI/ExtraRenderers.cpp
src/slic3r/GUI/ExtruderSequenceDialog.cpp
src/slic3r/GUI/Field.cpp
diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx
index 09bd30991a..38535b192f 100644
--- a/resources/profiles/PrusaResearch.idx
+++ b/resources/profiles/PrusaResearch.idx
@@ -1,3 +1,6 @@
+min_slic3r_version = 2.6.2-alpha0
+1.11.0-alpha1 Updated ramming parameters. Updated start-gcode for XL Multi-Tool. Updated output filename format.
+1.11.0-alpha0 Binary g-code, arc fitting, QOI/PNG thumbnails, 90degree XL tower, XL specific filament variants.
min_slic3r_version = 2.6.0-beta2
1.9.8 FW version notification (MK2.5/3 family). Minor update of MK4IS profiles. Updated MK4IS thumbnail.
1.9.7 MK4 Input Shaper RC firmware notification.
diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini
index 93d05a216d..e81382c039 100644
--- a/resources/profiles/PrusaResearch.ini
+++ b/resources/profiles/PrusaResearch.ini
@@ -5,7 +5,7 @@
name = Prusa Research
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
-config_version = 1.9.8
+config_version = 1.11.0-alpha1
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@@ -33,6 +33,16 @@ bed_texture = mk4.svg
thumbnail = MK4IS_thumbnail_v2.png
default_materials = Prusament PLA @PGIS; Prusament PLA Blend @PGIS; Prusament PETG @PGIS; Generic PLA @PGIS; Prusa PLA @PGIS; Prusa PETG @PGIS; Generic ASA @MK4; Generic PETG @PGIS; Prusa PLA @PGIS; Generic PLA Silk @PGIS
+; [printer_model:MK3.9]
+; name = Original Prusa MK3.9
+; variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8
+; technology = FFF
+; family = MK3.9
+; bed_model = mk4_bed.stl
+; bed_texture = mk4.svg
+; thumbnail = MK4IS_thumbnail_v2.png
+; default_materials = Prusament PLA @PGIS; Prusament PLA Blend @PGIS; Prusament PETG @PGIS; Generic PLA @PGIS; Prusa PLA @PGIS; Prusa PETG @PGIS; Generic ASA @MK4; Generic PETG @PGIS; Prusa PLA @PGIS; Generic PLA Silk @PGIS
+
[printer_model:MINI]
name = Original Prusa MINI && MINI+
variants = 0.4; 0.25; 0.6; 0.8
@@ -94,7 +104,7 @@ technology = FFF
family = XL Single-Tool
bed_model = xl_bed.stl
bed_texture = xl.svg
-default_materials = Generic PLA @PG 0.6; Generic ABS @PG 0.6; Generic PETG @PG 0.6; Prusament PLA @PG 0.6; Prusament PETG @PG 0.6; Prusament ASA @PG 0.6; Prusament PC Blend @PG 0.6; Prusament PC Blend Carbon Fiber @PG 0.6; Prusament PVB @PG 0.6; Prusament PA11 Carbon Fiber @PG 0.6
+default_materials = Generic PLA @XL 0.6; Generic ABS @XL 0.6; Generic PETG @XL 0.6; Prusament PLA @XL 0.6; Prusament PETG @XL 0.6; Prusament ASA @XL 0.6; Prusament PC Blend @XL 0.6; Prusament PC Blend Carbon Fiber @XL 0.6; Prusament PVB @XL 0.6; Prusament PA11 Carbon Fiber @XL 0.6
[printer_model:XL2]
name = Original Prusa XL - 2T
@@ -103,7 +113,7 @@ technology = FFF
family = XL Multi-Tool
bed_model = xl_bed.stl
bed_texture = xl.svg
-default_materials = Generic PLA @PG 0.6; Generic ABS @PG 0.6; Generic PETG @PG 0.6; Prusament PLA @PG 0.6; Prusament PETG @PG 0.6; Prusament ASA @PG 0.6; Prusament PC Blend @PG 0.6; Prusament PC Blend Carbon Fiber @PG 0.6; Prusament PVB @PG 0.6; Prusament PA11 Carbon Fiber @PG 0.6; Verbatim BVOH @PG 0.6
+default_materials = Generic PLA @XL 0.6; Generic ABS @XL 0.6; Generic PETG @XL 0.6; Prusament PLA @XL 0.6; Prusament PETG @XL 0.6; Prusament ASA @XL 0.6; Prusament PC Blend @XL 0.6; Prusament PC Blend Carbon Fiber @XL 0.6; Prusament PVB @XL 0.6; Prusament PA11 Carbon Fiber @XL 0.6; Verbatim BVOH @XL 0.6
[printer_model:XL5]
name = Original Prusa XL - 5T
@@ -112,7 +122,7 @@ technology = FFF
family = XL Multi-Tool
bed_model = xl_bed.stl
bed_texture = xl.svg
-default_materials = Generic PLA @PG 0.6; Generic ABS @PG 0.6; Generic PETG @PG 0.6; Prusament PLA @PG 0.6; Prusament PETG @PG 0.6; Prusament ASA @PG 0.6; Prusament PC Blend @PG 0.6; Prusament PC Blend Carbon Fiber @PG 0.6; Prusament PVB @PG 0.6; Prusament PA11 Carbon Fiber @PG 0.6; Verbatim BVOH @PG 0.6
+default_materials = Generic PLA @XL 0.6; Generic ABS @XL 0.6; Generic PETG @XL 0.6; Prusament PLA @XL 0.6; Prusament PETG @XL 0.6; Prusament ASA @XL 0.6; Prusament PC Blend @XL 0.6; Prusament PC Blend Carbon Fiber @XL 0.6; Prusament PVB @XL 0.6; Prusament PA11 Carbon Fiber @XL 0.6; Verbatim BVOH @XL 0.6
[printer_model:MK2.5S]
name = Original Prusa i3 MK2.5S
@@ -238,7 +248,7 @@ notes =
overhangs = 1
only_retract_when_crossing_perimeters = 0
ooze_prevention = 0
-output_filename_format = {input_filename_base}_{nozzle_diameter[initial_tool]}n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode
+output_filename_format = {input_filename_base}_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode
perimeters = 2
perimeter_extruder = 1
perimeter_extrusion_width = 0.45
@@ -332,14 +342,17 @@ first_layer_speed = 25
support_material_threshold = 45
raft_first_layer_density = 80%
## gcode_substitutions = "; stop printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S-1\\n";r;;"; printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S$2\\nM486 N$1\\n";r;
-output_filename_format = {input_filename_base}_{nozzle_diameter[initial_tool]}n_{layer_height}mm_{printing_filament_types}_XL_{print_time}.gcode
+output_filename_format = {input_filename_base}_{layer_height}mm_{printing_filament_types}_XL_{print_time}.bgcode
wipe_tower_cone_angle = 25
+wipe_tower_rotation_angle = 90
wipe_tower = 1
wipe_tower_bridging = 8
-wipe_tower_extra_spacing = 100
+wipe_tower_extra_spacing = 150
wipe_tower_brim_width = 3
ooze_prevention = 1
standby_temperature_delta = -110
+gcode_binary = 1
+arc_fitting = emit_radius
[print:*MK4*]
inherits = *common*
@@ -363,6 +376,9 @@ first_layer_speed = 20
support_material_threshold = 45
raft_first_layer_density = 80%
## gcode_substitutions = "; stop printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S-1\\n";r;;"; printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S$2\\nM486 N$1\\n";r;
+output_filename_format = {input_filename_base}_0.4n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+gcode_binary = 1
+arc_fitting = emit_radius
[print:*MK306*]
inherits = *MK3*
@@ -403,6 +419,7 @@ thick_bridges = 0
bridge_flow_ratio = 1
bridge_speed = 20
wipe_tower_bridging = 6
+output_filename_format = {input_filename_base}_0.25n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode
[print:*0.25nozzleMK3*]
inherits = *0.25nozzle*
@@ -433,6 +450,10 @@ infill_acceleration = 800
first_layer_acceleration = 500
[print:*0.25nozzleXL*]
+inherits = *0.25nozzleMK4*
+output_filename_format = {input_filename_base}_0.25n_{layer_height}mm_{printing_filament_types}_XL_{print_time}.bgcode
+
+[print:*0.25nozzleMK4*]
inherits = *0.25nozzleMK3*
infill_speed = 40
solid_infill_speed = 40
@@ -441,9 +462,7 @@ first_layer_acceleration = 500
infill_anchor = 1
perimeters = 3
brim_separation = 0
-
-[print:*0.25nozzleMK4*]
-inherits = *0.25nozzleXL*
+output_filename_format = {input_filename_base}_0.25n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
[print:*0.3nozzle*]
external_perimeter_extrusion_width = 0.33
@@ -457,6 +476,14 @@ support_material_extrusion_width = 0.3
fill_density = 20%
perimeters = 3
infill_anchor = 1.5
+output_filename_format = {input_filename_base}_0.3n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+
+[print:*0.3nozzleXL*]
+inherits = *0.3nozzle*
+output_filename_format = {input_filename_base}_0.3n_{layer_height}mm_{printing_filament_types}_XL_{print_time}.bgcode
+
+[print:*0.4nozzleXL*]
+output_filename_format = {input_filename_base}_0.4n_{layer_height}mm_{printing_filament_types}_XL_{print_time}.bgcode
[print:*0.5nozzle*]
external_perimeter_extrusion_width = 0.55
@@ -476,6 +503,11 @@ infill_anchor = 2
infill_anchor_max = 15
thick_bridges = 0
bridge_speed = 30
+output_filename_format = {input_filename_base}_0.5n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+
+[print:*0.5nozzleXL*]
+inherits = *0.5nozzle*
+output_filename_format = {input_filename_base}_0.5n_{layer_height}mm_{printing_filament_types}_XL_{print_time}.bgcode
[print:*0.6nozzle*]
external_perimeter_extrusion_width = 0.61
@@ -497,6 +529,7 @@ bridge_flow_ratio = 0.95
bridge_speed = 25
infill_overlap = 15%
support_tree_branch_diameter_double_wall = 0
+output_filename_format = {input_filename_base}_0.6n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode
[print:*0.6nozzleMK3*]
inherits = *0.6nozzle*
@@ -506,6 +539,10 @@ infill_extrusion_width = 0.65
thick_bridges = 0
[print:*0.6nozzleXL*]
+inherits = *0.6nozzleMK4*
+output_filename_format = {input_filename_base}_0.6n_{layer_height}mm_{printing_filament_types}_XL_{print_time}.bgcode
+
+[print:*0.6nozzleMK4*]
inherits = *0.6nozzle*
external_perimeter_extrusion_width = 0.65
extrusion_width = 0.65
@@ -514,9 +551,7 @@ thick_bridges = 0
fill_density = 20%
support_material_interface_spacing = 0.25
infill_anchor = 2.5
-
-[print:*0.6nozzleMK4*]
-inherits = *0.6nozzleXL*
+output_filename_format = {input_filename_base}_0.6n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
[print:*0.6nozzleMINI*]
inherits = *0.6nozzleMK3*
@@ -573,6 +608,7 @@ single_extruder_multi_material_priming = 0
thick_bridges = 1
overhangs = 0
support_tree_branch_diameter_double_wall = 0
+output_filename_format = {input_filename_base}_0.8n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode
[print:*0.8nozzleXL*]
inherits = *0.8nozzle*
@@ -587,12 +623,14 @@ raft_first_layer_expansion = 2
default_acceleration = 1250
infill_anchor = 2.5
first_layer_acceleration = 500
+output_filename_format = {input_filename_base}_0.8n_{layer_height}mm_{printing_filament_types}_XL_{print_time}.bgcode
[print:*0.8nozzleMK4*]
inherits = *0.8nozzleXL*
default_acceleration = 1000
infill_acceleration = 2000
first_layer_acceleration = 600
+output_filename_format = {input_filename_base}_0.8n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
[print:*soluble_support*]
overhangs = 1
@@ -1949,7 +1987,7 @@ compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==
## XL - 0.3mm nozzle
[print:0.05mm ULTRADETAIL @XL 0.3]
-inherits = *0.05mm*; *XL*; *0.3nozzle*
+inherits = *0.05mm*; *XL*; *0.3nozzleXL*
top_solid_layers = 14
bottom_solid_layers = 9
support_material_contact_distance = 0.07
@@ -1975,7 +2013,7 @@ default_acceleration = 800
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.3
[print:0.08mm DETAIL @XL 0.3]
-inherits = *0.07mm*; *XL*; *0.3nozzle*
+inherits = *0.07mm*; *XL*; *0.3nozzleXL*
layer_height = 0.08
support_material_contact_distance = 0.08
raft_contact_distance = 0.08
@@ -2003,7 +2041,7 @@ gcode_resolution = 0.006
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.3
[print:0.12mm QUALITY @XL 0.3]
-inherits = *0.12mm*; *XL*; *0.3nozzle*
+inherits = *0.12mm*; *XL*; *0.3nozzleXL*
support_material_contact_distance = 0.1
raft_contact_distance = 0.1
perimeter_speed = 35
@@ -2029,7 +2067,7 @@ gcode_resolution = 0.008
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.3
[print:0.16mm SPEED @XL 0.3]
-inherits = *0.16mm*; *XL*; *0.3nozzle*
+inherits = *0.16mm*; *XL*; *0.3nozzleXL*
support_material_contact_distance = 0.15
raft_contact_distance = 0.15
perimeter_speed = 50
@@ -2055,7 +2093,7 @@ gcode_resolution = 0.008
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.3
[print:0.20mm DRAFT @XL 0.3]
-inherits = *0.20mm*; *XL*; *0.3nozzle*
+inherits = *0.20mm*; *XL*; *0.3nozzleXL*
support_material_contact_distance = 0.18
raft_contact_distance = 0.18
perimeter_speed = 50
@@ -2088,7 +2126,7 @@ compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==
## XL - 0.4mm nozzle
[print:0.07mm ULTRADETAIL @XL 0.4]
-inherits = *0.07mm*; *XL*
+inherits = *0.07mm*; *XL*; *0.4nozzleXL*
thick_bridges = 1
bridge_flow_ratio = 0.6
top_infill_extrusion_width = 0.4
@@ -2123,7 +2161,7 @@ default_acceleration = 800
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.4
[print:0.10mm DETAIL @XL 0.4]
-inherits = *0.10mm*; *XL*
+inherits = *0.10mm*; *XL*; *0.4nozzleXL*
support_material_contact_distance = 0.17
raft_contact_distance = 0.15
perimeter_speed = 45
@@ -2159,7 +2197,7 @@ gcode_resolution = 0.006
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.4
[print:0.15mm QUALITY @XL 0.4]
-inherits = *0.15mm*; *XL*
+inherits = *0.15mm*; *XL*; *0.4nozzleXL*
perimeter_speed = 65
external_perimeter_speed = 40
small_perimeter_speed = 35
@@ -2191,7 +2229,7 @@ gcode_resolution = 0.008
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.4
[print:0.20mm QUALITY @XL 0.4]
-inherits = *0.20mm*; *XL*
+inherits = *0.20mm*; *XL*; *0.4nozzleXL*
perimeter_speed = 65
external_perimeter_speed = 40
small_perimeter_speed = 35
@@ -2223,7 +2261,7 @@ top_infill_extrusion_width = 0.4
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.4
[print:0.20mm SOLUBLE INTERFACE @XL 0.4]
-inherits = 0.20mm QUALITY @XL 0.4; *soluble_support_XL*
+inherits = 0.20mm QUALITY @XL 0.4; *soluble_support_XL*; *0.4nozzleXL*
support_material_extruder = 0
perimeter_speed = 50
external_perimeter_speed = 35
@@ -2240,7 +2278,7 @@ support_material_extruder = 2
support_material_with_sheath = 1
[print:0.20mm SPEED @XL 0.4]
-inherits = *0.20mm*; *XL*
+inherits = *0.20mm*; *XL*; *0.4nozzleXL*
perimeter_speed = 90
external_perimeter_speed = 70
small_perimeter_speed = 40
@@ -2271,7 +2309,7 @@ top_infill_extrusion_width = 0.42
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.4
[print:0.30mm DRAFT @XL 0.4]
-inherits = *0.30mm*; *XL*
+inherits = *0.30mm*; *XL*; *0.4nozzleXL*
bottom_solid_layers = 3
perimeter_speed = 80
external_perimeter_speed = 70
@@ -2310,7 +2348,7 @@ compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==
## XL - 0.5mm nozzle
[print:0.10mm DETAIL @XL 0.5]
-inherits = *0.10mm*; *XL*; *0.5nozzle*
+inherits = *0.10mm*; *XL*; *0.5nozzleXL*
perimeter_speed = 40
external_perimeter_speed = 30
small_perimeter_speed = 25
@@ -2341,7 +2379,7 @@ gcode_resolution = 0.008
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.5
[print:0.15mm QUALITY @XL 0.5]
-inherits = *0.15mm*; *XL*; *0.5nozzle*
+inherits = *0.15mm*; *XL*; *0.5nozzleXL*
perimeter_speed = 65
external_perimeter_speed = 40
small_perimeter_speed = 35
@@ -2365,7 +2403,7 @@ gcode_resolution = 0.008
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.5
[print:0.20mm QUALITY @XL 0.5]
-inherits = 0.15mm QUALITY @XL 0.5; *0.20mm*; *XL*; *0.5nozzle*
+inherits = 0.15mm QUALITY @XL 0.5; *0.20mm*; *XL*; *0.5nozzleXL*
gcode_resolution = 0.01
support_material_interface_layers = 4
infill_speed = 200
@@ -2396,7 +2434,7 @@ support_material_with_sheath = 1
support_material_extrusion_width = 0.47
[print:0.25mm SPEED @XL 0.5]
-inherits = *0.25mm*; *XL*; *0.5nozzle*
+inherits = *0.25mm*; *XL*; *0.5nozzleXL*
bottom_solid_layers = 3
perimeter_speed = 70
external_perimeter_speed = 70
@@ -2422,7 +2460,7 @@ max_print_speed = 200
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.5
[print:0.32mm DRAFT @XL 0.5]
-inherits = *0.32mm*; *XL*; *0.5nozzle*
+inherits = *0.32mm*; *XL*; *0.5nozzleXL*
bottom_solid_layers = 3
perimeter_speed = 70
external_perimeter_speed = 70
@@ -3730,7 +3768,7 @@ min_skirt_length = 4
mmu_segmented_region_max_width = 0
only_retract_when_crossing_perimeters = 0
ooze_prevention = 0
-output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
+output_filename_format = {input_filename_base}_0.4n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
overhang_speed_0 = 15
overhang_speed_1 = 25
overhang_speed_2 = 30
@@ -3800,7 +3838,9 @@ travel_speed = 300
travel_speed_z = 12
thick_bridges = 0
thin_walls = 0
-compatible_printers_condition = printer_model=="MK4IS" and nozzle_diameter[0]==0.4
+compatible_printers_condition = printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.4
+gcode_binary = 1
+arc_fitting = emit_radius
[print:*MK4IS_common025*]
inherits = *MK4IS_common*
@@ -3840,7 +3880,8 @@ raft_first_layer_density = 95%
gap_fill_speed = 50
single_extruder_multi_material_priming = 0
wipe_tower = 1
-compatible_printers_condition = printer_model=="MK4IS" and nozzle_diameter[0]==0.25
+output_filename_format = {input_filename_base}_0.25n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+compatible_printers_condition = printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.25
[print:*MK4IS_common03*]
inherits = *MK4IS_common*
@@ -3875,7 +3916,8 @@ raft_first_layer_density = 90%
gap_fill_speed = 50
top_solid_min_thickness = 0.7
bottom_solid_min_thickness = 0.5
-compatible_printers_condition = printer_model=="MK4IS" and nozzle_diameter[0]==0.3
+output_filename_format = {input_filename_base}_0.3n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+compatible_printers_condition = printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.3
[print:*MK4IS_common05*]
inherits = *MK4IS_common*
@@ -3902,7 +3944,8 @@ infill_acceleration = 4000
default_acceleration = 2500
infill_anchor = 2
infill_anchor_max = 15
-compatible_printers_condition = printer_model=="MK4IS" and nozzle_diameter[0]==0.5
+output_filename_format = {input_filename_base}_0.5n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+compatible_printers_condition = printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.5
[print:*MK4IS_common06*]
inherits = *MK4IS_common*
@@ -3923,7 +3966,8 @@ support_material_interface_spacing = 0.25
support_material_interface_speed = 75%
raft_contact_distance = 0.25
gap_fill_speed = 70
-compatible_printers_condition = printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+output_filename_format = {input_filename_base}_0.6n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+compatible_printers_condition = printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
overhang_speed_0 = 15
overhang_speed_1 = 20
overhang_speed_2 = 25
@@ -3956,7 +4000,8 @@ raft_contact_distance = 0.2
gap_fill_speed = 40
top_solid_min_thickness = 1.2
bottom_solid_min_thickness = 0.8
-compatible_printers_condition = printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+output_filename_format = {input_filename_base}_0.8n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.bgcode
+compatible_printers_condition = printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
seam_position = nearest
infill_anchor = 2.5
infill_anchor_max = 20
@@ -4633,7 +4678,7 @@ compatible_printers_condition = ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ a
[filament:*PLAPG*]
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.038{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"
-compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
slowdown_below_layer_time = 8
filament_cooling_final_speed = 2
filament_cooling_initial_speed = 3
@@ -4651,16 +4696,39 @@ full_fan_speed_layer = 3
[filament:*PLA06PG*]
inherits = *PLAPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]==0.6
filament_max_volumetric_speed = 15.5
slowdown_below_layer_time = 14
[filament:*PLA08PG*]
inherits = *PLAPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]==0.8
filament_max_volumetric_speed = 19
slowdown_below_layer_time = 18
+[filament:*PLAXL*]
+compatible_printers_condition = printer_notes=~/.*XL.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+filament_multitool_ramming = 0
+filament_multitool_ramming_volume = 5
+filament_multitool_ramming_flow = 40
+filament_minimal_purge_on_wipe_tower = 15
+filament_retract_length_toolchange = nil
+
+[filament:*PLA06XL*]
+inherits = *PLAXL*
+compatible_printers_condition = printer_notes=~/.*XL.*/ and nozzle_diameter[0]==0.6
+
+[filament:*PLA08XL*]
+inherits = *PLAXL*
+compatible_printers_condition = printer_notes=~/.*XL.*/ and nozzle_diameter[0]==0.8
+
+[filament:*PVAXL*]
+filament_multitool_ramming = 1
+filament_multitool_ramming_volume = 10
+filament_multitool_ramming_flow = 40
+filament_minimal_purge_on_wipe_tower = 35
+filament_retract_length_toolchange = 20
+
[filament:*PET*]
inherits = *common*
bed_temperature = 90
@@ -4688,7 +4756,7 @@ compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model!="MK2S
filament_max_volumetric_speed = 15
[filament:*PETPG*]
-compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
filament_max_volumetric_speed = 10
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.055{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"
filament_cooling_final_speed = 1
@@ -4710,23 +4778,42 @@ slowdown_below_layer_time = 9
[filament:*PET06PG*]
inherits = *PETPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]==0.6
filament_max_volumetric_speed = 17
slowdown_below_layer_time = 14
filament_retract_length = 0.9
[filament:*PET08PG*]
inherits = *PETPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]==0.8
filament_max_volumetric_speed = 22
slowdown_below_layer_time = 18
filament_retract_length = 0.8
+[filament:*PETXL*]
+compatible_printers_condition = printer_notes=~/.*XL.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+filament_multitool_ramming = 1
+filament_multitool_ramming_volume = 5
+filament_multitool_ramming_flow = 40
+filament_minimal_purge_on_wipe_tower = 35
+filament_retract_length_toolchange = 20
+
+[filament:*PET06XL*]
+inherits = *PETXL*
+compatible_printers_condition = printer_notes=~/.*XL.*/ and nozzle_diameter[0]==0.6
+
+[filament:*PET08XL*]
+inherits = *PETXL*
+compatible_printers_condition = printer_notes=~/.*XL.*/ and nozzle_diameter[0]==0.8
+
[filament:*04PLUS*]
compatible_printers_condition = nozzle_diameter[0]>=0.4 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) and printer_notes!~/.*PG.*/
[filament:*04PLUSPG*]
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*MK4.*/
+
+[filament:*04PLUSXL*]
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*XL.*/
[filament:*PETMMU1*]
filament_retract_length = nil
@@ -4837,7 +4924,7 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
[filament:*ABSPG*]
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
filament_max_volumetric_speed = 12
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp"
filament_cooling_final_speed = 50
@@ -4855,97 +4942,105 @@ idle_temperature = 100
[filament:*ABS06PG*]
inherits = *ABSPG*
filament_max_volumetric_speed = 15
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.6
[filament:*ABS08PG*]
inherits = *ABSPG*
filament_max_volumetric_speed = 18
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.8
slowdown_below_layer_time = 25
-[filament:*ABSMK4*]
-inherits = *ABSPG*
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+[filament:*ABSXL*]
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+filament_multitool_ramming = 1
+filament_multitool_ramming_volume = 5
+filament_multitool_ramming_flow = 40
+filament_minimal_purge_on_wipe_tower = 35
+filament_retract_length_toolchange = 20
-[filament:*ABS06MK4*]
-inherits = *ABSMK4*
-filament_max_volumetric_speed = 15
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.6
+[filament:*ABS06XL*]
+inherits = *ABSXL*
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
-[filament:*ABS08MK4*]
-inherits = *ABSMK4*
+[filament:*ABS08XL*]
+inherits = *ABSXL*
filament_max_volumetric_speed = 18
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
slowdown_below_layer_time = 25
[filament:*PCPG*]
inherits = *ABSPG*
filament_max_volumetric_speed = 8
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.022{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"
-first_layer_bed_temperature = 100
-bed_temperature = 105
-idle_temperature = 150
filament_minimal_purge_on_wipe_tower = 35
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
[filament:*PC06PG*]
inherits = *PCPG*
filament_max_volumetric_speed = 14
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.6
[filament:*PC08PG*]
inherits = *PCPG*
filament_max_volumetric_speed = 18
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.8
-[filament:*PCMK4*]
-inherits = *ABSMK4*
-filament_max_volumetric_speed = 8
-start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.022{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"
+[filament:*PCXL*]
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
idle_temperature = 150
+first_layer_bed_temperature = 100
+bed_temperature = 105
+filament_multitool_ramming = 1
+filament_multitool_ramming_volume = 5
+filament_multitool_ramming_flow = 40
+filament_minimal_purge_on_wipe_tower = 35
+filament_retract_length_toolchange = 20
-[filament:*PC06MK4*]
-inherits = *PCMK4*
-filament_max_volumetric_speed = 14
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.6
+[filament:*PC06XL*]
+inherits = *PCXL*
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
-[filament:*PC08MK4*]
-inherits = *PCMK4*
-filament_max_volumetric_speed = 18
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.8
+[filament:*PC08XL*]
+inherits = *PCXL*
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
[filament:*PAPG*]
inherits = *ABSPG*
filament_max_volumetric_speed = 5
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.022{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"
-bed_temperature = 105
idle_temperature = 150
filament_minimal_purge_on_wipe_tower = 35
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
[filament:*PA06PG*]
inherits = *PAPG*
filament_max_volumetric_speed = 7
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.6
[filament:*PA08PG*]
inherits = *PAPG*
filament_max_volumetric_speed = 10
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.8
-[filament:*PAMK4*]
-inherits = *ABSMK4*
-filament_max_volumetric_speed = 5
-start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.022{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"
+[filament:*PAXL*]
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
idle_temperature = 70
+bed_temperature = 105
+filament_multitool_ramming = 1
+filament_multitool_ramming_volume = 5
+filament_multitool_ramming_flow = 40
+filament_minimal_purge_on_wipe_tower = 35
+filament_retract_length_toolchange = 20
-[filament:*PA06MK4*]
-inherits = *PAMK4*
+[filament:*PA06XL*]
+inherits = *PAXL*
filament_max_volumetric_speed = 7
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
-[filament:*PA08MK4*]
-inherits = *PAMK4*
+[filament:*PA08XL*]
+inherits = *PAXL*
filament_max_volumetric_speed = 10
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
[filament:*FLEX*]
inherits = *common*
@@ -4973,6 +5068,25 @@ filament_retract_lift = 0
filament_wipe = 0
[filament:*FLEXPG*]
+filament_max_volumetric_speed = 4
+filament_retract_speed = 60
+filament_deretract_speed = 20
+filament_retract_before_travel = 2
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]>=0.3 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+idle_temperature = 70
+start_filament_gcode = "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp"
+
+[filament:*FLEX06PG*]
+inherits = *FLEXPG*
+filament_max_volumetric_speed = 6.5
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.6
+
+[filament:*FLEX08PG*]
+inherits = *FLEXPG*
+filament_max_volumetric_speed = 9
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.8
+
+[filament:*FLEXXL*]
filament_max_volumetric_speed = 3.5
filament_retract_speed = 60
filament_deretract_speed = 20
@@ -4980,37 +5094,23 @@ filament_retract_before_travel = 2
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]>=0.3 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
idle_temperature = 70
start_filament_gcode = "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp"
+filament_multitool_ramming = 0
+filament_multitool_ramming_volume = 40
+filament_multitool_ramming_flow = 3.5
filament_minimal_purge_on_wipe_tower = 35
-[filament:*FLEX06PG*]
-inherits = *FLEXPG*
+[filament:*FLEX06XL*]
+inherits = *FLEXXL*
filament_max_volumetric_speed = 4.5
+filament_multitool_ramming_flow = 4.5
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
-[filament:*FLEX08PG*]
-inherits = *FLEXPG*
+[filament:*FLEX08XL*]
+inherits = *FLEXXL*
filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
-[filament:*FLEXMK4*]
-filament_max_volumetric_speed = 4
-filament_retract_speed = 60
-filament_deretract_speed = 20
-filament_retract_before_travel = 2
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]>=0.3 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
-idle_temperature = 70
-start_filament_gcode = "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp"
-
-[filament:*FLEX06MK4*]
-inherits = *FLEXMK4*
-filament_max_volumetric_speed = 6.5
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.6
-
-[filament:*FLEX08MK4*]
-inherits = *FLEXMK4*
-filament_max_volumetric_speed = 9
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.8
-
[filament:ColorFabb bronzeFill]
inherits = *PLA*; *04PLUS*
filament_vendor = ColorFabb
@@ -5035,6 +5135,15 @@ inherits = ColorFabb bronzeFill; *PLA08PG*
filament_max_volumetric_speed = 17
extrusion_multiplier = 1.05
+[filament:ColorFabb bronzeFill @XL]
+inherits = ColorFabb bronzeFill @PG; *PLAXL*; *04PLUSXL*
+
+[filament:ColorFabb bronzeFill @XL 0.6]
+inherits = ColorFabb bronzeFill @PG 0.6; *PLA06XL*
+
+[filament:ColorFabb bronzeFill @XL 0.8]
+inherits = ColorFabb bronzeFill @PG 0.8; *PLA08XL*
+
[filament:ColorFabb steelFill]
inherits = ColorFabb bronzeFill
extrusion_multiplier = 1.15
@@ -5056,6 +5165,15 @@ inherits = ColorFabb steelFill; *PLA08PG*
filament_max_volumetric_speed = 17
extrusion_multiplier = 1.05
+[filament:ColorFabb steelFill @XL]
+inherits = ColorFabb steelFill @PG; *PLAXL*; *04PLUSXL*
+
+[filament:ColorFabb steelFill @XL 0.6]
+inherits = ColorFabb steelFill @PG 0.6; *PLA06XL*
+
+[filament:ColorFabb steelFill @XL 0.8]
+inherits = ColorFabb steelFill @PG 0.8; *PLA08XL*
+
[filament:ColorFabb copperFill]
inherits = ColorFabb bronzeFill
extrusion_multiplier = 1.15
@@ -5075,6 +5193,15 @@ inherits = ColorFabb copperFill; *PLA08PG*
filament_max_volumetric_speed = 17
extrusion_multiplier = 1.05
+[filament:ColorFabb copperFill @XL]
+inherits = ColorFabb copperFill @PG; *PLAXL*; *04PLUSXL*
+
+[filament:ColorFabb copperFill @XL 0.6]
+inherits = ColorFabb copperFill @PG 0.6; *PLA06XL*
+
+[filament:ColorFabb copperFill @XL 0.8]
+inherits = ColorFabb copperFill @PG 0.8; *PLA08XL*
+
[filament:ColorFabb HT]
inherits = *PET*
filament_vendor = ColorFabb
@@ -5097,28 +5224,28 @@ temperature = 270
inherits = ColorFabb HT; *PETPG*
first_layer_bed_temperature = 100
bed_temperature = 105
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
[filament:ColorFabb HT @PG 0.6]
inherits = ColorFabb HT @PG; *PET06PG*
-compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.6
[filament:ColorFabb HT @PG 0.8]
inherits = ColorFabb HT @PG; *PET08PG*
+compatible_printers_condition = printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.8
+
+[filament:ColorFabb HT @XL]
+inherits = ColorFabb HT @PG; *PETXL*
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
+
+[filament:ColorFabb HT @XL 0.6]
+inherits = ColorFabb HT @PG 0.6; *PET06XL*
+compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.6
+
+[filament:ColorFabb HT @XL 0.8]
+inherits = ColorFabb HT @PG 0.8; *PET08XL*
compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]==0.8
-[filament:ColorFabb HT @MK4]
-inherits = ColorFabb HT; *PETPG*
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
-
-[filament:ColorFabb HT @MK4 0.6]
-inherits = ColorFabb HT @MK4; *PET06PG*
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.6
-
-[filament:ColorFabb HT @MK4 0.8]
-inherits = ColorFabb HT @MK4; *PET08PG*
-compatible_printers_condition = printer_model=~/(MK4|MK4IS)/ and nozzle_diameter[0]==0.8
-
[filament:ColorFabb PLA-PHA]
inherits = *PLA*
filament_vendor = ColorFabb
@@ -5135,6 +5262,15 @@ inherits = ColorFabb PLA-PHA; *PLA06PG*
[filament:ColorFabb PLA-PHA @PG 0.8]
inherits = ColorFabb PLA-PHA; *PLA08PG*
+[filament:ColorFabb PLA-PHA @XL]
+inherits = ColorFabb PLA-PHA @PG; *PLAXL*
+
+[filament:ColorFabb PLA-PHA @XL 0.6]
+inherits = ColorFabb PLA-PHA @PG 0.6; *PLA06XL*
+
+[filament:ColorFabb PLA-PHA @XL 0.8]
+inherits = ColorFabb PLA-PHA @PG 0.8; *PLA08XL*
+
[filament:ColorFabb woodFill]
inherits = *PLA*; *04PLUS*
filament_vendor = ColorFabb
@@ -5162,6 +5298,15 @@ inherits = ColorFabb woodFill; *PLA08PG*
filament_max_volumetric_speed = 17
extrusion_multiplier = 1
+[filament:ColorFabb woodFill @XL]
+inherits = ColorFabb woodFill @PG; *PLAXL*; *04PLUSXL*
+
+[filament:ColorFabb woodFill @XL 0.6]
+inherits = ColorFabb woodFill @PG 0.6; *PLA06XL*
+
+[filament:ColorFabb woodFill @XL 0.8]
+inherits = ColorFabb woodFill @PG 0.8; *PLA08XL*
+
[filament:ColorFabb corkFill]
inherits = *PLA*; *04PLUS*
filament_vendor = ColorFabb
@@ -5189,6 +5334,15 @@ inherits = ColorFabb corkFill; *PLA08PG*
filament_max_volumetric_speed = 17
extrusion_multiplier = 1.05
+[filament:ColorFabb corkFill @XL]
+inherits = ColorFabb corkFill @PG; *PLAXL*; *04PLUSXL*
+
+[filament:ColorFabb corkFill @XL 0.6]
+inherits = ColorFabb corkFill @PG 0.6; *PLA06XL*
+
+[filament:ColorFabb corkFill @XL 0.8]
+inherits = ColorFabb corkFill @PG 0.8; *PLA08XL*
+
[filament:ColorFabb XT]
inherits = *PET*
filament_vendor = ColorFabb
@@ -5208,6 +5362,15 @@ inherits = ColorFabb XT; *PET06PG*
[filament:ColorFabb XT @PG 0.8]
inherits = ColorFabb XT; *PET08PG*
+[filament:ColorFabb XT @XL]
+inherits = ColorFabb XT @PG; *PETXL*
+
+[filament:ColorFabb XT @XL 0.6]
+inherits = ColorFabb XT @PG 0.6; *PET06XL*
+
+[filament:ColorFabb XT @XL 0.8]
+inherits = ColorFabb XT @PG 0.8; *PET08XL*
+
[filament:ColorFabb XT-CF20]
inherits = *PET*
filament_vendor = ColorFabb
@@ -5237,6 +5400,15 @@ filament_max_volumetric_speed = 6
inherits = ColorFabb XT-CF20 @PG; *PET08PG*
filament_max_volumetric_speed = 9
+[filament:ColorFabb XT-CF20 @XL]
+inherits = ColorFabb XT-CF20 @PG; *PETXL*; *04PLUSXL*
+
+[filament:ColorFabb XT-CF20 @XL 0.6]
+inherits = ColorFabb XT-CF20 @PG 0.6; *PET06XL*
+
+[filament:ColorFabb XT-CF20 @XL 0.8]
+inherits = ColorFabb XT-CF20 @PG 0.8; *PET08XL*
+
[filament:ColorFabb nGen]
inherits = *PET*
filament_vendor = ColorFabb
@@ -5255,10 +5427,19 @@ min_fan_speed = 20
inherits = ColorFabb nGen; *PETPG*
[filament:ColorFabb nGen @PG 0.6]
-inherits = ColorFabb nGen; *PET06PG*
+inherits = ColorFabb nGen @PG; *PET06PG*
[filament:ColorFabb nGen @PG 0.8]
-inherits = ColorFabb nGen; *PET08PG*
+inherits = ColorFabb nGen @PG; *PET08PG*
+
+[filament:ColorFabb nGen @XL]
+inherits = ColorFabb nGen @PG; *PETPG*
+
+[filament:ColorFabb nGen @XL 0.6]
+inherits = ColorFabb nGen @PG 0.6; *PET06XL*
+
+[filament:ColorFabb nGen @XL 0.8]
+inherits = ColorFabb nGen @PG 0.8; *PET08XL*
[filament:ColorFabb nGen flex]
inherits = *FLEX*
@@ -5282,30 +5463,37 @@ filament_retract_length = nil
filament_retract_lift = 0
compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material)
-[filament:ColorFabb nGen flex @PG]
-inherits = ColorFabb nGen flex; *FLEXPG*
+[filament:ColorFabb nGen flex @XL]
+inherits = ColorFabb nGen flex; *FLEXXL*
+renamed_from = "ColorFabb nGen flex @PG"
filament_max_volumetric_speed = 6
filament_retract_length = 2.5
+filament_multitool_ramming_flow = 6
+filament_retract_length_toolchange = 2.5
-[filament:ColorFabb nGen flex @PG 0.6]
-inherits = ColorFabb nGen flex; *FLEX06PG*
+[filament:ColorFabb nGen flex @XL 0.6]
+inherits = ColorFabb nGen flex; *FLEX06XL*
+renamed_from = "ColorFabb nGen flex @PG 0.6"
filament_max_volumetric_speed = 7
+filament_multitool_ramming_flow = 7
-[filament:ColorFabb nGen flex @PG 0.8]
-inherits = ColorFabb nGen flex; *FLEX08PG*
+[filament:ColorFabb nGen flex @XL 0.8]
+inherits = ColorFabb nGen flex; *FLEX08XL*
+renamed_from = "ColorFabb nGen flex @PG 0.8"
filament_max_volumetric_speed = 10
+filament_multitool_ramming_flow = 10
[filament:ColorFabb nGen flex @MK4]
-inherits = ColorFabb nGen flex; *FLEXMK4*
+inherits = ColorFabb nGen flex; *FLEXPG*
filament_max_volumetric_speed = 7
filament_retract_length = 2.5
[filament:ColorFabb nGen flex @MK4 0.6]
-inherits = ColorFabb nGen flex; *FLEX06MK4*
+inherits = ColorFabb nGen flex; *FLEX06PG*
filament_max_volumetric_speed = 9
[filament:ColorFabb nGen flex @MK4 0.8]
-inherits = ColorFabb nGen flex; *FLEX08MK4*
+inherits = ColorFabb nGen flex; *FLEX08PG*
filament_max_volumetric_speed = 12
[filament:Kimya PETG Carbon]
@@ -5335,6 +5523,15 @@ filament_max_volumetric_speed = 9
inherits = Kimya PETG Carbon @PG; *PET08PG*
filament_max_volumetric_speed = 14
+[filament:Kimya PETG Carbon @XL]
+inherits = Kimya PETG Carbon @PG; *PETXL*; *04PLUSXL*
+
+[filament:Kimya PETG Carbon @XL 0.6]
+inherits = Kimya PETG Carbon @PG 0.6; *PET06XL*
+
+[filament:Kimya PETG Carbon @XL 0.8]
+inherits = Kimya PETG Carbon @PG 0.8; *PET08XL*
+
[filament:Kimya ABS Carbon]
inherits = *ABSC*
filament_vendor = Kimya
@@ -5346,31 +5543,32 @@ first_layer_temperature = 260
temperature = 260
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Kimya ABS Carbon @PG]
-inherits = Kimya ABS Carbon; *ABSPG*; *04PLUSPG*
+[filament:Kimya ABS Carbon @XL]
+inherits = Kimya ABS Carbon; *ABSPG*; *ABSXL*; *04PLUSXL*
+renamed_from = "Kimya ABS Carbon @PG"
bed_temperature = 105
filament_max_volumetric_speed = 6
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/.*XL.*/
-[filament:Kimya ABS Carbon @PG 0.6]
-inherits = Kimya ABS Carbon @PG; *ABS06PG*
+[filament:Kimya ABS Carbon @XL 0.6]
+inherits = Kimya ABS Carbon @XL; *ABS06XL*
+renamed_from = "Kimya ABS Carbon @PG 0.6"
filament_max_volumetric_speed = 10
-[filament:Kimya ABS Carbon @PG 0.8]
-inherits = Kimya ABS Carbon @PG; *ABS08PG*
+[filament:Kimya ABS Carbon @XL 0.8]
+inherits = Kimya ABS Carbon @XL; *ABS08XL*
+renamed_from = "Kimya ABS Carbon @PG 0.8"
filament_max_volumetric_speed = 14
[filament:Kimya ABS Carbon @MK4]
-inherits = Kimya ABS Carbon; *ABSMK4*
+inherits = Kimya ABS Carbon; *ABSPG*
filament_max_volumetric_speed = 6
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/(MK4|MK4IS)/
[filament:Kimya ABS Carbon @MK4 0.6]
-inherits = Kimya ABS Carbon @MK4; *ABS06MK4*
+inherits = Kimya ABS Carbon @MK4; *ABS06PG*
filament_max_volumetric_speed = 10
[filament:Kimya ABS Carbon @MK4 0.8]
-inherits = Kimya ABS Carbon @MK4; *ABS08MK4*
+inherits = Kimya ABS Carbon @MK4; *ABS08PG*
filament_max_volumetric_speed = 14
[filament:Kimya ABS Kevlar]
@@ -5378,29 +5576,30 @@ inherits = Kimya ABS Carbon
filament_vendor = Kimya
filament_density = 1.037
-[filament:Kimya ABS Kevlar @PG]
-inherits = Kimya ABS Kevlar; *ABSPG*; *04PLUSPG*
+[filament:Kimya ABS Kevlar @XL]
+inherits = Kimya ABS Kevlar; *ABSPG*; *ABSXL*; *04PLUSXL*
+renamed_from = "Kimya ABS Kevlar @PG"
bed_temperature = 105
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/.*XL.*/
-[filament:Kimya ABS Kevlar @PG 0.6]
-inherits = Kimya ABS Kevlar @PG; *ABS06PG*
+[filament:Kimya ABS Kevlar @XL 0.6]
+inherits = Kimya ABS Kevlar @XL; *ABS06XL*
+renamed_from = "Kimya ABS Kevlar @PG 0.6"
filament_max_volumetric_speed = 10
-[filament:Kimya ABS Kevlar @PG 0.8]
-inherits = Kimya ABS Kevlar @PG; *ABS08PG*
+[filament:Kimya ABS Kevlar @XL 0.8]
+inherits = Kimya ABS Kevlar @XL; *ABS08XL*
+renamed_from = "Kimya ABS Kevlar @PG 0.8"
filament_max_volumetric_speed = 14
[filament:Kimya ABS Kevlar @MK4]
-inherits = Kimya ABS Kevlar; *ABSMK4*; *04PLUSPG*
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/(MK4|MK4IS)/
+inherits = Kimya ABS Kevlar; *ABSPG*; *04PLUSPG*
[filament:Kimya ABS Kevlar @MK4 0.6]
-inherits = Kimya ABS Kevlar @MK4; *ABS06MK4*
+inherits = Kimya ABS Kevlar @MK4; *ABS06PG*
filament_max_volumetric_speed = 10
[filament:Kimya ABS Kevlar @MK4 0.8]
-inherits = Kimya ABS Kevlar @MK4; *ABS08MK4*
+inherits = Kimya ABS Kevlar @MK4; *ABS08PG*
filament_max_volumetric_speed = 14
[filament:Kimya PEBA-S]
@@ -5429,6 +5628,15 @@ filament_max_volumetric_speed = 8
inherits = Kimya PEBA-S @PG; *PET08PG*
filament_max_volumetric_speed = 10
+[filament:Kimya PEBA-S @XL]
+inherits = Kimya PEBA-S @PG; *PETXL*
+
+[filament:Kimya PEBA-S @XL 0.6]
+inherits = Kimya PEBA-S @PG 0.6; *PET06XL*
+
+[filament:Kimya PEBA-S @XL 0.8]
+inherits = Kimya PEBA-S @PG 0.8; *PET08XL*
+
[filament:E3D Edge]
inherits = *PET*
filament_vendor = E3D
@@ -5445,6 +5653,15 @@ inherits = E3D Edge; *PET06PG*
[filament:E3D Edge @PG 0.8]
inherits = E3D Edge; *PET08PG*
+[filament:E3D Edge @XL]
+inherits = E3D Edge @PG; *PETXL*
+
+[filament:E3D Edge @XL 0.6]
+inherits = E3D Edge @PG 0.6; *PET06XL*
+
+[filament:E3D Edge @XL 0.8]
+inherits = E3D Edge @PG 0.8; *PET08XL*
+
[filament:E3D PC-ABS]
## discontinued
inherits = *ABS*
@@ -5471,6 +5688,15 @@ inherits = Fillamentum PLA; *PLA06PG*
[filament:Fillamentum PLA @PG 0.8]
inherits = Fillamentum PLA; *PLA08PG*
+[filament:Fillamentum PLA @XL]
+inherits = Fillamentum PLA @PG; *PLAXL*
+
+[filament:Fillamentum PLA @XL 0.6]
+inherits = Fillamentum PLA @PG 0.6; *PLA06XL*
+
+[filament:Fillamentum PLA @XL 0.8]
+inherits = Fillamentum PLA @PG 0.8; *PLA08XL*
+
[filament:Fillamentum ABS]
inherits = *ABSC*
filament_vendor = Fillamentum
@@ -5480,24 +5706,27 @@ filament_spool_weight = 230
first_layer_temperature = 240
temperature = 240
-[filament:Fillamentum ABS @PG]
-inherits = Fillamentum ABS; *ABSPG*
+[filament:Fillamentum ABS @XL]
+inherits = Fillamentum ABS; *ABSPG*; *ABSXL*
+renamed_from = "Fillamentum ABS @PG"
bed_temperature = 105
-[filament:Fillamentum ABS @PG 0.6]
-inherits = Fillamentum ABS @PG; *ABS06PG*
+[filament:Fillamentum ABS @XL 0.6]
+inherits = Fillamentum ABS @XL; *ABS06XL*
+renamed_from = "Fillamentum ABS @PG 0.6"
-[filament:Fillamentum ABS @PG 0.8]
-inherits = Fillamentum ABS @PG; *ABS08PG*
+[filament:Fillamentum ABS @XL 0.8]
+inherits = Fillamentum ABS @XL; *ABS08XL*
+renamed_from = "Fillamentum ABS @PG 0.8"
[filament:Fillamentum ABS @MK4]
-inherits = Fillamentum ABS; *ABSMK4*
+inherits = Fillamentum ABS; *ABSPG*
[filament:Fillamentum ABS @MK4 0.6]
-inherits = Fillamentum ABS @MK4; *ABS06MK4*
+inherits = Fillamentum ABS @MK4; *ABS06PG*
[filament:Fillamentum ABS @MK4 0.8]
-inherits = Fillamentum ABS @MK4; *ABS08MK4*
+inherits = Fillamentum ABS @MK4; *ABS08PG*
[filament:Fillamentum ASA]
inherits = *ABS*
@@ -5515,28 +5744,31 @@ first_layer_temperature = 260
temperature = 260
filament_type = ASA
-[filament:Fillamentum ASA @PG]
-inherits = Fillamentum ASA; *ABSPG*
+[filament:Fillamentum ASA @XL]
+inherits = Fillamentum ASA; *ABSPG*; *ABSXL*
+renamed_from = "Fillamentum ASA @PG"
bed_temperature = 105
min_fan_speed = 10
max_fan_speed = 10
-[filament:Fillamentum ASA @PG 0.6]
-inherits = Fillamentum ASA @PG; *ABS06PG*
+[filament:Fillamentum ASA @XL 0.6]
+inherits = Fillamentum ASA @XL; *ABS06XL*
+renamed_from = "Fillamentum ASA @PG 0.6"
-[filament:Fillamentum ASA @PG 0.8]
-inherits = Fillamentum ASA @PG; *ABS08PG*
+[filament:Fillamentum ASA @XL 0.8]
+inherits = Fillamentum ASA @XL; *ABS08XL*
+renamed_from = "Fillamentum ASA @PG 0.8"
[filament:Fillamentum ASA @MK4]
-inherits = Fillamentum ASA; *ABSMK4*
+inherits = Fillamentum ASA; *ABSPG*
min_fan_speed = 10
max_fan_speed = 10
[filament:Fillamentum ASA @MK4 0.6]
-inherits = Fillamentum ASA @MK4; *ABS06MK4*
+inherits = Fillamentum ASA @MK4; *ABS06PG*
[filament:Fillamentum ASA @MK4 0.8]
-inherits = Fillamentum ASA @MK4; *ABS08MK4*
+inherits = Fillamentum ASA @MK4; *ABS08PG*
[filament:Prusament ASA]
inherits = *ABS*
@@ -5561,31 +5793,34 @@ filament_colour = #FFF2EC
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0"
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Prusament ASA @PG]
-inherits = Prusament ASA; *ABSPG*
+[filament:Prusament ASA @XL]
+inherits = Prusament ASA; *ABSPG*; *ABSXL*
+renamed_from = "Prusament ASA @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
min_fan_speed = 10
max_fan_speed = 10
-[filament:Prusament ASA @PG 0.6]
-inherits = Prusament ASA @PG; *ABS06PG*
+[filament:Prusament ASA @XL 0.6]
+inherits = Prusament ASA @XL; *ABS06XL*
+renamed_from = "Prusament ASA @PG 0.6"
-[filament:Prusament ASA @PG 0.8]
-inherits = Prusament ASA @PG; *ABS08PG*
+[filament:Prusament ASA @XL 0.8]
+inherits = Prusament ASA @XL; *ABS08XL*
+renamed_from = "Prusament ASA @PG 0.8"
first_layer_temperature = 265
temperature = 265
[filament:Prusament ASA @MK4]
-inherits = Prusament ASA; *ABSMK4*
+inherits = Prusament ASA; *ABSPG*
min_fan_speed = 10
max_fan_speed = 10
[filament:Prusament ASA @MK4 0.6]
-inherits = Prusament ASA @MK4; *ABS06MK4*
+inherits = Prusament ASA @MK4; *ABS06PG*
[filament:Prusament ASA @MK4 0.8]
-inherits = Prusament ASA @MK4; *ABS08MK4*
+inherits = Prusament ASA @MK4; *ABS08PG*
first_layer_temperature = 265
temperature = 265
@@ -5615,32 +5850,35 @@ filament_retract_lift = 0.2
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.07{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
-[filament:Prusament PC Blend @PG]
+[filament:Prusament PC Blend @XL]
+inherits = Prusament PC Blend; *PCPG*; *PCXL*
+renamed_from = "Prusament PC Blend @PG"
+filament_max_volumetric_speed = 9
+min_fan_speed = 10
+max_fan_speed = 10
+
+[filament:Prusament PC Blend @XL 0.6]
+inherits = Prusament PC Blend @XL; *PC06XL*
+renamed_from = "Prusament PC Blend @PG 0.6"
+filament_max_volumetric_speed = 13
+
+[filament:Prusament PC Blend @XL 0.8]
+inherits = Prusament PC Blend @XL; *PC08XL*
+renamed_from = "Prusament PC Blend @PG 0.8"
+filament_max_volumetric_speed = 18
+
+[filament:Prusament PC Blend @MK4]
inherits = Prusament PC Blend; *PCPG*
filament_max_volumetric_speed = 9
min_fan_speed = 10
max_fan_speed = 10
-[filament:Prusament PC Blend @PG 0.6]
-inherits = Prusament PC Blend @PG; *PC06PG*
-filament_max_volumetric_speed = 13
-
-[filament:Prusament PC Blend @PG 0.8]
-inherits = Prusament PC Blend @PG; *PC08PG*
-filament_max_volumetric_speed = 18
-
-[filament:Prusament PC Blend @MK4]
-inherits = Prusament PC Blend; *PCMK4*
-filament_max_volumetric_speed = 9
-min_fan_speed = 10
-max_fan_speed = 10
-
[filament:Prusament PC Blend @MK4 0.6]
-inherits = Prusament PC Blend @MK4; *PC06MK4*
+inherits = Prusament PC Blend @MK4; *PC06PG*
filament_max_volumetric_speed = 13
[filament:Prusament PC Blend @MK4 0.8]
-inherits = Prusament PC Blend @MK4; *PC08MK4*
+inherits = Prusament PC Blend @MK4; *PC08PG*
filament_max_volumetric_speed = 18
[filament:Prusament PC Blend @MK2]
@@ -5664,30 +5902,33 @@ filament_retract_length = nil
filament_retract_lift = nil
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Prusament PC Blend Carbon Fiber @PG]
+[filament:Prusament PC Blend Carbon Fiber @XL]
+inherits = Prusament PC Blend Carbon Fiber; *PCPG*; *PCXL*
+renamed_from = "Prusament PC Blend Carbon Fiber @PG"
+min_fan_speed = 10
+max_fan_speed = 10
+
+[filament:Prusament PC Blend Carbon Fiber @XL 0.6]
+inherits = Prusament PC Blend Carbon Fiber @XL; *PC06XL*
+renamed_from = "Prusament PC Blend Carbon Fiber @PG 0.6"
+filament_max_volumetric_speed = 13
+
+[filament:Prusament PC Blend Carbon Fiber @XL 0.8]
+inherits = Prusament PC Blend Carbon Fiber @XL; *PC08XL*
+renamed_from = "Prusament PC Blend Carbon Fiber @PG 0.8"
+filament_max_volumetric_speed = 18
+
+[filament:Prusament PC Blend Carbon Fiber @MK4]
inherits = Prusament PC Blend Carbon Fiber; *PCPG*
min_fan_speed = 10
max_fan_speed = 10
-[filament:Prusament PC Blend Carbon Fiber @PG 0.6]
-inherits = Prusament PC Blend Carbon Fiber @PG; *PC06PG*
-filament_max_volumetric_speed = 13
-
-[filament:Prusament PC Blend Carbon Fiber @PG 0.8]
-inherits = Prusament PC Blend Carbon Fiber @PG; *PC08PG*
-filament_max_volumetric_speed = 18
-
-[filament:Prusament PC Blend Carbon Fiber @MK4]
-inherits = Prusament PC Blend Carbon Fiber; *PCMK4*
-min_fan_speed = 10
-max_fan_speed = 10
-
[filament:Prusament PC Blend Carbon Fiber @MK4 0.6]
-inherits = Prusament PC Blend Carbon Fiber @MK4; *PC06MK4*
+inherits = Prusament PC Blend Carbon Fiber @MK4; *PC06PG*
filament_max_volumetric_speed = 13
[filament:Prusament PC Blend Carbon Fiber @MK4 0.8]
-inherits = Prusament PC Blend Carbon Fiber @MK4; *PC08MK4*
+inherits = Prusament PC Blend Carbon Fiber @MK4; *PC08PG*
filament_max_volumetric_speed = 18
[filament:Prusament PC Blend Carbon Fiber @MK2]
@@ -5712,28 +5953,28 @@ bed_temperature = 115
fan_below_layer_time = 10
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Prusament PA11 Carbon Fiber @PG]
-inherits = Prusament PA11 Carbon Fiber; *PCPG*
+[filament:Prusament PA11 Carbon Fiber @XL]
+inherits = Prusament PA11 Carbon Fiber; *PCPG*; *PCXL*
filament_max_volumetric_speed = 6.5
-[filament:Prusament PA11 Carbon Fiber @PG 0.6]
-inherits = Prusament PA11 Carbon Fiber @PG; *PC06PG*
+[filament:Prusament PA11 Carbon Fiber @XL 0.6]
+inherits = Prusament PA11 Carbon Fiber @XL; *PC06XL*
filament_max_volumetric_speed = 8
-[filament:Prusament PA11 Carbon Fiber @PG 0.8]
-inherits = Prusament PA11 Carbon Fiber @PG; *PC08PG*
+[filament:Prusament PA11 Carbon Fiber @XL 0.8]
+inherits = Prusament PA11 Carbon Fiber @XL; *PC08XL*
filament_max_volumetric_speed = 10
[filament:Prusament PA11 Carbon Fiber @MK4]
-inherits = Prusament PA11 Carbon Fiber; *PCMK4*
+inherits = Prusament PA11 Carbon Fiber; *PCPG*
filament_max_volumetric_speed = 6.5
[filament:Prusament PA11 Carbon Fiber @MK4 0.6]
-inherits = Prusament PA11 Carbon Fiber @MK4; *PC06MK4*
+inherits = Prusament PA11 Carbon Fiber @MK4; *PC06PG*
filament_max_volumetric_speed = 8
[filament:Prusament PA11 Carbon Fiber @MK4 0.8]
-inherits = Prusament PA11 Carbon Fiber @MK4; *PC08MK4*
+inherits = Prusament PA11 Carbon Fiber @MK4; *PC08PG*
filament_max_volumetric_speed = 10
[filament:Prusament PA11 Carbon Fiber @MK2]
@@ -5769,6 +6010,15 @@ inherits = Fillamentum CPE; *PET06PG*
[filament:Fillamentum CPE @PG 0.8]
inherits = Fillamentum CPE; *PET08PG*
+[filament:Fillamentum CPE @XL]
+inherits = Fillamentum CPE @PG; *PETXL*
+
+[filament:Fillamentum CPE @XL 0.6]
+inherits = Fillamentum CPE @PG 0.6; *PET06XL*
+
+[filament:Fillamentum CPE @XL 0.8]
+inherits = Fillamentum CPE @PG 0.8; *PET08XL*
+
[filament:Fillamentum Timberfill]
inherits = *PLA*; *04PLUS*
filament_vendor = Fillamentum
@@ -5797,6 +6047,15 @@ inherits = Fillamentum Timberfill; *PLA08PG*
filament_max_volumetric_speed = 17
extrusion_multiplier = 1.05
+[filament:Fillamentum Timberfill @XL]
+inherits = Fillamentum Timberfill @PG; *PLAXL*; *04PLUSXL*
+
+[filament:Fillamentum Timberfill @XL 0.6]
+inherits = Fillamentum Timberfill @PG 0.6; *PLA06XL*
+
+[filament:Fillamentum Timberfill @XL 0.8]
+inherits = Fillamentum Timberfill @PG 0.8; *PLA08XL*
+
[filament:Smartfil Wood]
inherits = *PLA*; *04PLUS*
filament_vendor = Smart Materials 3D
@@ -5824,6 +6083,15 @@ inherits = Smartfil Wood; *PLA08PG*
filament_max_volumetric_speed = 17
extrusion_multiplier = 1.05
+[filament:Smartfil Wood @XL]
+inherits = Smartfil Wood @PG; *PLAXL*
+
+[filament:Smartfil Wood @XL 0.6]
+inherits = Smartfil Wood @PG 0.6; *PLA06XL*
+
+[filament:Smartfil Wood @XL 0.8]
+inherits = Smartfil Wood @PG 0.8; *PLA08XL*
+
[filament:Generic ABS]
inherits = *ABSC*
filament_vendor = Generic
@@ -5831,26 +6099,29 @@ filament_cost = 27.82
filament_density = 1.04
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Generic ABS @PG]
-inherits = Generic ABS; *ABSPG*
+[filament:Generic ABS @XL]
+inherits = Generic ABS; *ABSPG*; *ABSXL*
+renamed_from = "Generic ABS @PG"
bed_temperature = 105
-[filament:Generic ABS @PG 0.6]
-inherits = Generic ABS @PG; *ABS06PG*
+[filament:Generic ABS @XL 0.6]
+inherits = Generic ABS @XL; *ABS06XL*
+renamed_from = "Generic ABS @PG 0.6"
-[filament:Generic ABS @PG 0.8]
-inherits = Generic ABS @PG; *ABS08PG*
+[filament:Generic ABS @XL 0.8]
+inherits = Generic ABS @XL; *ABS08XL*
+renamed_from = "Generic ABS @PG 0.8"
first_layer_temperature = 265
temperature = 265
[filament:Generic ABS @MK4]
-inherits = Generic ABS; *ABSMK4*
+inherits = Generic ABS; *ABSPG*
[filament:Generic ABS @MK4 0.6]
-inherits = Generic ABS @MK4; *ABS06MK4*
+inherits = Generic ABS @MK4; *ABS06PG*
[filament:Generic ABS @MK4 0.8]
-inherits = Generic ABS @MK4; *ABS08MK4*
+inherits = Generic ABS @MK4; *ABS08PG*
first_layer_temperature = 265
temperature = 265
@@ -5861,24 +6132,27 @@ filament_cost = 27.82
filament_density = 1.01
filament_spool_weight = 265
-[filament:Esun ABS @PG]
-inherits = Esun ABS; *ABSPG*
+[filament:Esun ABS @XL]
+inherits = Esun ABS; *ABSPG*; *ABSXL*
+renamed_from = "Esun ABS @PG"
bed_temperature = 105
-[filament:Esun ABS @PG 0.6]
-inherits = Esun ABS @PG; *ABS06PG*
+[filament:Esun ABS @XL 0.6]
+inherits = Esun ABS @XL; *ABS06XL*
+renamed_from = "Esun ABS @PG 0.6"
-[filament:Esun ABS @PG 0.8]
-inherits = Esun ABS @PG; *ABS08PG*
+[filament:Esun ABS @XL 0.8]
+inherits = Esun ABS @XL; *ABS08XL*
+renamed_from = "Esun ABS @PG 0.8"
[filament:Esun ABS @MK4]
-inherits = Esun ABS; *ABSMK4*
+inherits = Esun ABS; *ABSPG*
[filament:Esun ABS @MK4 0.6]
-inherits = Esun ABS @MK4; *ABS06MK4*
+inherits = Esun ABS @MK4; *ABS06PG*
[filament:Esun ABS @MK4 0.8]
-inherits = Esun ABS @MK4; *ABS08MK4*
+inherits = Esun ABS @MK4; *ABS08PG*
[filament:Hatchbox ABS]
inherits = *ABSC*
@@ -5887,24 +6161,27 @@ filament_cost = 27.82
filament_density = 1.04
filament_spool_weight = 245
-[filament:Hatchbox ABS @PG]
-inherits = Hatchbox ABS; *ABSPG*
+[filament:Hatchbox ABS @XL]
+inherits = Hatchbox ABS; *ABSPG*; *ABSXL*
+renamed_from = "Hatchbox ABS @PG"
bed_temperature = 105
-[filament:Hatchbox ABS @PG 0.6]
-inherits = Hatchbox ABS @PG; *ABS06PG*
+[filament:Hatchbox ABS @XL 0.6]
+inherits = Hatchbox ABS @XL; *ABS06XL*
+renamed_from = "Hatchbox ABS @PG 0.6"
-[filament:Hatchbox ABS @PG 0.8]
-inherits = Hatchbox ABS @PG; *ABS08PG*
+[filament:Hatchbox ABS @XL 0.8]
+inherits = Hatchbox ABS @XL; *ABS08XL*
+renamed_from = "Hatchbox ABS @PG 0.8"
[filament:Hatchbox ABS @MK4]
-inherits = Hatchbox ABS; *ABSMK4*
+inherits = Hatchbox ABS; *ABSPG*
[filament:Hatchbox ABS @MK4 0.6]
-inherits = Hatchbox ABS @MK4; *ABS06MK4*
+inherits = Hatchbox ABS @MK4; *ABS06PG*
[filament:Hatchbox ABS @MK4 0.8]
-inherits = Hatchbox ABS @MK4; *ABS08MK4*
+inherits = Hatchbox ABS @MK4; *ABS08PG*
[filament:Filament PM ABS]
inherits = *ABSC*
@@ -5914,24 +6191,27 @@ filament_cost = 27.82
filament_density = 1.08
filament_spool_weight = 230
-[filament:Filament PM ABS @PG]
-inherits = Filament PM ABS; *ABSPG*
+[filament:Filament PM ABS @XL]
+inherits = Filament PM ABS; *ABSPG*; *ABSXL*
+renamed_from = "Filament PM ABS @PG"
bed_temperature = 105
-[filament:Filament PM ABS @PG 0.6]
-inherits = Filament PM ABS @PG; *ABS06PG*
+[filament:Filament PM ABS @XL 0.6]
+inherits = Filament PM ABS @XL; *ABS06XL*
+renamed_from = "Filament PM ABS @PG 0.6"
-[filament:Filament PM ABS @PG 0.8]
-inherits = Filament PM ABS @PG; *ABS08PG*
+[filament:Filament PM ABS @XL 0.8]
+inherits = Filament PM ABS @XL; *ABS08XL*
+renamed_from = "Filament PM ABS @PG 0.8"
[filament:Filament PM ABS @MK4]
-inherits = Filament PM ABS; *ABSMK4*
+inherits = Filament PM ABS; *ABSPG*
[filament:Filament PM ABS @MK4 0.6]
-inherits = Filament PM ABS @MK4; *ABS06MK4*
+inherits = Filament PM ABS @MK4; *ABS06PG*
[filament:Filament PM ABS @MK4 0.8]
-inherits = Filament PM ABS @MK4; *ABS08MK4*
+inherits = Filament PM ABS @MK4; *ABS08PG*
[filament:Verbatim ABS]
inherits = *ABSC*
@@ -5941,24 +6221,27 @@ filament_density = 1.05
filament_spool_weight = 235
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.03{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0"
-[filament:Verbatim ABS @PG]
-inherits = Verbatim ABS; *ABSPG*
+[filament:Verbatim ABS @XL]
+inherits = Verbatim ABS; *ABSPG*; *ABSXL*
+renamed_from = "Verbatim ABS @PG"
bed_temperature = 105
-[filament:Verbatim ABS @PG 0.6]
-inherits = Verbatim ABS @PG; *ABS06PG*
+[filament:Verbatim ABS @XL 0.6]
+inherits = Verbatim ABS @XL; *ABS06XL*
+renamed_from = "Verbatim ABS @PG 0.6"
-[filament:Verbatim ABS @PG 0.8]
-inherits = Verbatim ABS @PG; *ABS08PG*
+[filament:Verbatim ABS @XL 0.8]
+inherits = Verbatim ABS @XL; *ABS08XL*
+renamed_from = "Verbatim ABS @PG 0.8"
[filament:Verbatim ABS @MK4]
-inherits = Verbatim ABS; *ABSMK4*
+inherits = Verbatim ABS; *ABSPG*
[filament:Verbatim ABS @MK4 0.6]
-inherits = Verbatim ABS @MK4; *ABS06MK4*
+inherits = Verbatim ABS @MK4; *ABS06PG*
[filament:Verbatim ABS @MK4 0.8]
-inherits = Verbatim ABS @MK4; *ABS08MK4*
+inherits = Verbatim ABS @MK4; *ABS08PG*
[filament:Generic PETG]
inherits = *PET*
@@ -5970,18 +6253,27 @@ compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MK2S
[filament:Generic PETG @PG]
inherits = Generic PETG; *PETPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Generic PETG @PG 0.6]
inherits = Generic PETG; *PET06PG*
filament_max_volumetric_speed = 17
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
[filament:Generic PETG @PG 0.8]
inherits = Generic PETG; *PET08PG*
first_layer_temperature = 240
temperature = 250
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+
+[filament:Generic PETG @XL]
+inherits = Generic PETG @PG; *PETXL*
+
+[filament:Generic PETG @XL 0.6]
+inherits = Generic PETG @PG 0.6; *PET06XL*
+
+[filament:Generic PETG @XL 0.8]
+inherits = Generic PETG @PG 0.8; *PET08XL*
[filament:Generic PETG @PGIS]
inherits = Generic PETG @PG
@@ -5995,7 +6287,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Generic PETG @PGIS 0.6]
inherits = Generic PETG @PG 0.6
@@ -6005,7 +6297,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Generic PETG @PGIS 0.8]
inherits = Generic PETG @PG 0.8
@@ -6015,7 +6307,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
[filament:Extrudr DuraPro ASA]
inherits = Fillamentum ASA
@@ -6033,15 +6325,21 @@ filament_spool_weight = 230
[filament:Extrudr DuraPro ASA @PG]
inherits = Extrudr DuraPro ASA; *ABSPG*
filament_max_volumetric_speed = 10
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Extrudr DuraPro ASA @PG 0.6]
inherits = Extrudr DuraPro ASA @PG; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Extrudr DuraPro ASA @PG 0.8]
inherits = Extrudr DuraPro ASA @PG; *ABS08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Extrudr DuraPro ASA @XL]
+inherits = Extrudr DuraPro ASA @PG; *ABSXL*
+
+[filament:Extrudr DuraPro ASA @XL 0.6]
+inherits = Extrudr DuraPro ASA @PG 0.6; *ABS06XL*
+
+[filament:Extrudr DuraPro ASA @XL 0.8]
+inherits = Extrudr DuraPro ASA @PG 0.8; *ABS08XL*
[filament:Extrudr PETG]
inherits = *PET*
@@ -6068,6 +6366,15 @@ inherits = Extrudr PETG; *PET06PG*
[filament:Extrudr PETG @PG 0.8]
inherits = Extrudr PETG; *PET08PG*
+[filament:Extrudr PETG @XL]
+inherits = Extrudr PETG @PG; *PETXL*
+
+[filament:Extrudr PETG @XL 0.6]
+inherits = Extrudr PETG @PG 0.6; *PET06XL*
+
+[filament:Extrudr PETG @XL 0.8]
+inherits = Extrudr PETG @PG 0.8; *PET08XL*
+
[filament:Extrudr PETG @MINI]
inherits = Extrudr PETG; *PETMINI*
filament_vendor = Extrudr
@@ -6091,6 +6398,15 @@ inherits = Extrudr XPETG CF; *PET06PG*
[filament:Extrudr XPETG CF @PG 0.8]
inherits = Extrudr XPETG CF; *PET08PG*
+[filament:Extrudr XPETG CF @XL]
+inherits = Extrudr XPETG CF @PG; *PETXL*
+
+[filament:Extrudr XPETG CF @XL 0.6]
+inherits = Extrudr XPETG CF @PG 0.6; *PET06XL*
+
+[filament:Extrudr XPETG CF @XL 0.8]
+inherits = Extrudr XPETG CF @PG 0.8; *PET08XL*
+
[filament:Extrudr XPETG CF @MINI]
inherits = Extrudr XPETG CF; *PETMINI*
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI"
@@ -6112,6 +6428,15 @@ inherits = Extrudr XPETG Matt; *PET06PG*
[filament:Extrudr XPETG Matt @PG 0.8]
inherits = Extrudr XPETG Matt; *PET08PG*
+[filament:Extrudr XPETG Matt @XL]
+inherits = Extrudr XPETG Matt @PG; *PETXL*
+
+[filament:Extrudr XPETG Matt @XL 0.6]
+inherits = Extrudr XPETG Matt @PG 0.6; *PET06XL*
+
+[filament:Extrudr XPETG Matt @XL 0.8]
+inherits = Extrudr XPETG Matt @PG 0.8; *PET08XL*
+
[filament:Extrudr XPETG Matt @MINI]
inherits = Extrudr XPETG Matt; *PETMINI*
@@ -6140,6 +6465,15 @@ inherits = Extrudr BioFusion; *PLA06PG*
[filament:Extrudr BioFusion @PG 0.8]
inherits = Extrudr BioFusion; *PLA08PG*
+[filament:Extrudr BioFusion @XL]
+inherits = Extrudr BioFusion @PG; *PLAXL*
+
+[filament:Extrudr BioFusion @XL 0.6]
+inherits = Extrudr BioFusion @PG 0.6; *PLA06XL*
+
+[filament:Extrudr BioFusion @XL 0.8]
+inherits = Extrudr BioFusion @PG 0.8; *PLA08XL*
+
[filament:Extrudr Flax]
inherits = *PLA*
filament_vendor = Extrudr
@@ -6169,6 +6503,15 @@ filament_max_volumetric_speed = 17
first_layer_temperature = 200
temperature = 200
+[filament:Extrudr Flax @XL]
+inherits = Extrudr Flax @PG; *PLAXL*
+
+[filament:Extrudr Flax @XL 0.6]
+inherits = Extrudr Flax @PG 0.6; *PLA06XL*
+
+[filament:Extrudr Flax @XL 0.8]
+inherits = Extrudr Flax @PG 0.8; *PLA08XL*
+
[filament:Extrudr GreenTEC]
inherits = *PLA*
filament_vendor = Extrudr
@@ -6189,6 +6532,15 @@ inherits = Extrudr GreenTEC; *PLA06PG*
[filament:Extrudr GreenTEC @PG 0.8]
inherits = Extrudr GreenTEC; *PLA08PG*
+[filament:Extrudr GreenTEC @XL]
+inherits = Extrudr GreenTEC @PG; *PLAXL*
+
+[filament:Extrudr GreenTEC @XL 0.6]
+inherits = Extrudr GreenTEC @PG; *PLA06XL*
+
+[filament:Extrudr GreenTEC @XL 0.8]
+inherits = Extrudr GreenTEC @PG; *PLA08XL*
+
[filament:Extrudr GreenTEC Pro]
inherits = *PLA*
filament_vendor = Extrudr
@@ -6211,6 +6563,15 @@ inherits = Extrudr GreenTEC Pro; *PLA06PG*
[filament:Extrudr GreenTEC Pro @PG 0.8]
inherits = Extrudr GreenTEC Pro; *PLA08PG*
+[filament:Extrudr GreenTEC Pro @XL]
+inherits = Extrudr GreenTEC Pro @PG; *PLAXL*
+
+[filament:Extrudr GreenTEC Pro @XL 0.6]
+inherits = Extrudr GreenTEC Pro @PG 0.6; *PLA06XL*
+
+[filament:Extrudr GreenTEC Pro @XL 0.8]
+inherits = Extrudr GreenTEC Pro @PG 0.8; *PLA08XL*
+
[filament:Extrudr GreenTEC Pro Carbon]
inherits = *PLA*; *04PLUS*
filament_vendor = Extrudr
@@ -6234,6 +6595,15 @@ inherits = Extrudr GreenTEC Pro Carbon; *PLA06PG*
[filament:Extrudr GreenTEC Pro Carbon @PG 0.8]
inherits = Extrudr GreenTEC Pro Carbon; *PLA08PG*
+[filament:Extrudr GreenTEC Pro Carbon @XL]
+inherits = Extrudr GreenTEC Pro Carbon @PG; *PLAXL*
+
+[filament:Extrudr GreenTEC Pro Carbon @XL 0.6]
+inherits = Extrudr GreenTEC Pro Carbon @PG 0.6; *PLA06XL*
+
+[filament:Extrudr GreenTEC Pro Carbon @XL 0.8]
+inherits = Extrudr GreenTEC Pro Carbon @PG 0.8; *PLA08XL*
+
[filament:Extrudr PLA NX1]
inherits = *PLA*
filament_vendor = Extrudr
@@ -6259,6 +6629,15 @@ inherits = Extrudr PLA NX1; *PLA06PG*
[filament:Extrudr PLA NX1 @PG 0.8]
inherits = Extrudr PLA NX1; *PLA08PG*
+[filament:Extrudr PLA NX1 @XL]
+inherits = Extrudr PLA NX1 @PG; *PLAXL*
+
+[filament:Extrudr PLA NX1 @XL 0.6]
+inherits = Extrudr PLA NX1 @PG; *PLA06XL*
+
+[filament:Extrudr PLA NX1 @XL 0.8]
+inherits = Extrudr PLA NX1 @PG; *PLA08XL*
+
[filament:Extrudr PLA NX2]
inherits = Extrudr PLA NX1
filament_cost = 23.63
@@ -6274,6 +6653,15 @@ inherits = Extrudr PLA NX2; *PLA06PG*
[filament:Extrudr PLA NX2 @PG 0.8]
inherits = Extrudr PLA NX2; *PLA08PG*
+[filament:Extrudr PLA NX2 @XL]
+inherits = Extrudr PLA NX2 @PG; *PLAXL*
+
+[filament:Extrudr PLA NX2 @XL 0.6]
+inherits = Extrudr PLA NX2 @PG 0.6; *PLA06XL*
+
+[filament:Extrudr PLA NX2 @XL 0.8]
+inherits = Extrudr PLA NX2 @PG 0.8; *PLA08XL*
+
[filament:Extrudr Flex Hard]
inherits = *FLEX*
filament_vendor = Extrudr
@@ -6289,27 +6677,31 @@ filament_wipe = nil
filament_spool_weight = 230
slowdown_below_layer_time = 20
-[filament:Extrudr Flex Hard @PG]
+[filament:Extrudr Flex Hard @XL]
+inherits = Extrudr Flex Hard; *FLEXXL*
+renamed_from = "Extrudr Flex Hard @PG"
+extrusion_multiplier = 1.1
+filament_retract_length = 2.5
+filament_retract_length_toolchange = 2.5
+
+[filament:Extrudr Flex Hard @XL 0.6]
+inherits = Extrudr Flex Hard @XL; *FLEX06XL*
+renamed_from = "Extrudr Flex Hard @PG 0.6"
+
+[filament:Extrudr Flex Hard @XL 0.8]
+inherits = Extrudr Flex Hard @XL; *FLEX08XL*
+renamed_from = "Extrudr Flex Hard @PG 0.8"
+
+[filament:Extrudr Flex Hard @MK4]
inherits = Extrudr Flex Hard; *FLEXPG*
extrusion_multiplier = 1.1
filament_retract_length = 2.5
-[filament:Extrudr Flex Hard @PG 0.6]
-inherits = Extrudr Flex Hard @PG; *FLEX06PG*
-
-[filament:Extrudr Flex Hard @PG 0.8]
-inherits = Extrudr Flex Hard @PG; *FLEX08PG*
-
-[filament:Extrudr Flex Hard @MK4]
-inherits = Extrudr Flex Hard; *FLEXMK4*
-extrusion_multiplier = 1.1
-filament_retract_length = 2.5
-
[filament:Extrudr Flex Hard @MK4 0.6]
-inherits = Extrudr Flex Hard @MK4; *FLEX06MK4*
+inherits = Extrudr Flex Hard @MK4; *FLEX06PG*
[filament:Extrudr Flex Hard @MK4 0.8]
-inherits = Extrudr Flex Hard @MK4; *FLEX08MK4*
+inherits = Extrudr Flex Hard @MK4; *FLEX08PG*
[filament:Extrudr Flex Medium]
inherits = *FLEX*
@@ -6326,27 +6718,31 @@ filament_wipe = nil
filament_spool_weight = 230
slowdown_below_layer_time = 20
-[filament:Extrudr Flex Medium @PG]
+[filament:Extrudr Flex Medium @XL]
+inherits = Extrudr Flex Medium; *FLEXXL*
+renamed_from = "Extrudr Flex Medium @PG"
+extrusion_multiplier = 1.1
+filament_retract_length = 2.5
+filament_retract_length_toolchange = 2.5
+
+[filament:Extrudr Flex Medium @XL 0.6]
+inherits = Extrudr Flex Medium @XL; *FLEX06XL*
+renamed_from = "Extrudr Flex Medium @PG 0.6"
+
+[filament:Extrudr Flex Medium @XL 0.8]
+inherits = Extrudr Flex Medium @XL; *FLEX08XL*
+renamed_from = "Extrudr Flex Medium @PG 0.8"
+
+[filament:Extrudr Flex Medium @MK4]
inherits = Extrudr Flex Medium; *FLEXPG*
extrusion_multiplier = 1.1
filament_retract_length = 2.5
-[filament:Extrudr Flex Medium @PG 0.6]
-inherits = Extrudr Flex Medium @PG; *FLEX06PG*
-
-[filament:Extrudr Flex Medium @PG 0.8]
-inherits = Extrudr Flex Medium @PG; *FLEX08PG*
-
-[filament:Extrudr Flex Medium @MK4]
-inherits = Extrudr Flex Medium; *FLEXMK4*
-extrusion_multiplier = 1.1
-filament_retract_length = 2.5
-
[filament:Extrudr Flex Medium @MK4 0.6]
-inherits = Extrudr Flex Medium @MK4; *FLEX06MK4*
+inherits = Extrudr Flex Medium @MK4; *FLEX06PG*
[filament:Extrudr Flex Medium @MK4 0.8]
-inherits = Extrudr Flex Medium @MK4; *FLEX08MK4*
+inherits = Extrudr Flex Medium @MK4; *FLEX08PG*
[filament:Extrudr Flex SemiSoft]
inherits = *FLEX*
@@ -6363,32 +6759,37 @@ filament_wipe = nil
filament_spool_weight = 230
slowdown_below_layer_time = 20
-[filament:Extrudr Flex SemiSoft @PG]
+[filament:Extrudr Flex SemiSoft @XL]
+inherits = Extrudr Flex SemiSoft; *FLEXXL*
+renamed_from = "Extrudr Flex SemiSoft @PG"
+extrusion_multiplier = 1.1
+filament_retract_length = 3
+filament_max_volumetric_speed = 3
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 3
+
+[filament:Extrudr Flex SemiSoft @XL 0.6]
+inherits = Extrudr Flex SemiSoft @XL; *FLEX06XL*
+renamed_from = "Extrudr Flex SemiSoft @PG 0.6"
+
+[filament:Extrudr Flex SemiSoft @XL 0.8]
+inherits = Extrudr Flex SemiSoft @XL; *FLEX08XL*
+renamed_from = "Extrudr Flex SemiSoft @PG 0.8"
+filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
+
+[filament:Extrudr Flex SemiSoft @MK4]
inherits = Extrudr Flex SemiSoft; *FLEXPG*
extrusion_multiplier = 1.1
filament_retract_length = 3
filament_max_volumetric_speed = 3
-[filament:Extrudr Flex SemiSoft @PG 0.6]
-inherits = Extrudr Flex SemiSoft @PG; *FLEX06PG*
-filament_max_volumetric_speed = 5
-
-[filament:Extrudr Flex SemiSoft @PG 0.8]
-inherits = Extrudr Flex SemiSoft @PG; *FLEX08PG*
-filament_max_volumetric_speed = 8
-
-[filament:Extrudr Flex SemiSoft @MK4]
-inherits = Extrudr Flex SemiSoft; *FLEXMK4*
-extrusion_multiplier = 1.1
-filament_retract_length = 3
-filament_max_volumetric_speed = 3
-
[filament:Extrudr Flex SemiSoft @MK4 0.6]
-inherits = Extrudr Flex SemiSoft @MK4; *FLEX06MK4*
+inherits = Extrudr Flex SemiSoft @MK4; *FLEX06PG*
filament_max_volumetric_speed = 5
[filament:Extrudr Flex SemiSoft @MK4 0.8]
-inherits = Extrudr Flex SemiSoft @MK4; *FLEX08MK4*
+inherits = Extrudr Flex SemiSoft @MK4; *FLEX08PG*
filament_max_volumetric_speed = 8
[filament:addnorth Adamant S1]
@@ -6418,34 +6819,41 @@ filament_spool_weight = 0
filament_retract_restart_extra = 0.1
filament_wipe = nil
-[filament:addnorth Adamant S1 @PG]
+[filament:addnorth Adamant S1 @XL]
+inherits = addnorth Adamant S1; *FLEXXL*
+renamed_from = "addnorth Adamant S1 @PG"
+filament_max_volumetric_speed = 3
+filament_retract_length = 1.5
+filament_retract_restart_extra = 0
+filament_retract_lift = 0.2
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 1.5
+
+[filament:addnorth Adamant S1 @XL 0.6]
+inherits = addnorth Adamant S1 @XL; *FLEX06XL*
+renamed_from = "addnorth Adamant S1 @PG 0.6"
+filament_max_volumetric_speed = 4.5
+filament_multitool_ramming_flow = 4.5
+
+[filament:addnorth Adamant S1 @XL 0.8]
+inherits = addnorth Adamant S1 @XL; *FLEX08XL*
+renamed_from = "addnorth Adamant S1 @PG 0.8"
+filament_max_volumetric_speed = 9
+filament_multitool_ramming_flow = 9
+
+[filament:addnorth Adamant S1 @MK4]
inherits = addnorth Adamant S1; *FLEXPG*
filament_max_volumetric_speed = 3
filament_retract_length = 1.5
filament_retract_restart_extra = 0
filament_retract_lift = 0.2
-[filament:addnorth Adamant S1 @PG 0.6]
-inherits = addnorth Adamant S1 @PG; *FLEX06PG*
-filament_max_volumetric_speed = 4.5
-
-[filament:addnorth Adamant S1 @PG 0.8]
-inherits = addnorth Adamant S1 @PG; *FLEX08PG*
-filament_max_volumetric_speed = 9
-
-[filament:addnorth Adamant S1 @MK4]
-inherits = addnorth Adamant S1; *FLEXMK4*
-filament_max_volumetric_speed = 3
-filament_retract_length = 1.5
-filament_retract_restart_extra = 0
-filament_retract_lift = 0.2
-
[filament:addnorth Adamant S1 @MK4 0.6]
-inherits = addnorth Adamant S1 @MK4; *FLEX06MK4*
+inherits = addnorth Adamant S1 @MK4; *FLEX06PG*
filament_max_volumetric_speed = 5.5
[filament:addnorth Adamant S1 @MK4 0.8]
-inherits = addnorth Adamant S1 @MK4; *FLEX08MK4*
+inherits = addnorth Adamant S1 @MK4; *FLEX08PG*
filament_max_volumetric_speed = 9
[filament:addnorth Adura X]
@@ -6475,37 +6883,34 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
filament_spool_weight = 0
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:addnorth Adura X @PG]
-inherits = addnorth Adura X; *PETPG*
+[filament:addnorth Adura X @XL]
+inherits = addnorth Adura X; *PETPG*; *PETXL*
+renamed_from = "addnorth Adura X @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
filament_max_volumetric_speed = 4
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/.*XL.*/ and ! single_extruder_multi_material
-[filament:addnorth Adura X @PG 0.6]
-inherits = addnorth Adura X @PG; *PET06PG*
+[filament:addnorth Adura X @XL 0.6]
+inherits = addnorth Adura X @XL; *PET06XL*
+renamed_from = "addnorth Adura X @PG 0.6"
filament_max_volumetric_speed = 6
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model=~/.*XL.*/ and ! single_extruder_multi_material
-[filament:addnorth Adura X @PG 0.8]
-inherits = addnorth Adura X @PG; *PET08PG*
+[filament:addnorth Adura X @XL 0.8]
+inherits = addnorth Adura X @XL; *PET08XL*
+renamed_from = "addnorth Adura X @PG 0.8"
filament_max_volumetric_speed = 8
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model=~/.*XL.*/ and ! single_extruder_multi_material
[filament:addnorth Adura X @MK4]
inherits = addnorth Adura X; *PETPG*
filament_max_volumetric_speed = 4
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/(MK4|MK4IS)/ and ! single_extruder_multi_material
[filament:addnorth Adura X @MK4 0.6]
inherits = addnorth Adura X @MK4; *PET06PG*
filament_max_volumetric_speed = 6
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model=~/(MK4|MK4IS)/ and ! single_extruder_multi_material
[filament:addnorth Adura X @MK4 0.8]
inherits = addnorth Adura X @MK4; *PET08PG*
filament_max_volumetric_speed = 8
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model=~/(MK4|MK4IS)/ and ! single_extruder_multi_material
[filament:addnorth Adura X @MINI]
inherits = addnorth Adura X
@@ -6554,6 +6959,15 @@ inherits = addnorth E-PLA; *PLA06PG*
[filament:addnorth E-PLA @PG 0.8]
inherits = addnorth E-PLA; *PLA08PG*
+[filament:addnorth E-PLA @XL]
+inherits = addnorth E-PLA @PG; *PLAXL*
+
+[filament:addnorth E-PLA @XL 0.6]
+inherits = addnorth E-PLA @PG 0.6; *PLA06XL*
+
+[filament:addnorth E-PLA @XL 0.8]
+inherits = addnorth E-PLA @PG 0.8; *PLA08XL*
+
[filament:addnorth ESD-PETG]
inherits = *PET*
filament_vendor = addnorth
@@ -6590,6 +7004,15 @@ filament_max_volumetric_speed = 3.5
inherits = addnorth ESD-PETG @PG; *PET08PG*
filament_max_volumetric_speed = 6
+[filament:addnorth ESD-PETG @XL]
+inherits = addnorth ESD-PETG @PG; *PETXL*
+
+[filament:addnorth ESD-PETG @XL 0.6]
+inherits = addnorth ESD-PETG @PG 0.6; *PET06XL*
+
+[filament:addnorth ESD-PETG @XL 0.8]
+inherits = addnorth ESD-PETG @PG 0.8; *PET08XL*
+
[filament:addnorth ESD-PETG @MINI]
inherits = addnorth ESD-PETG
filament_retract_length = nil
@@ -6631,30 +7054,37 @@ filament_deretract_speed = 25
filament_spool_weight = 0
filament_notes = "Use Magigoo PP bed adhesive or PP packing tape (on a cold printbed)."
-[filament:addnorth OBC Polyethylene @PG]
+[filament:addnorth OBC Polyethylene @XL]
+inherits = addnorth OBC Polyethylene; *FLEXXL*
+renamed_from = "addnorth OBC Polyethylene @PG"
+filament_max_volumetric_speed = 4
+filament_retract_length = 1.5
+filament_multitool_ramming_flow = 4
+filament_retract_length_toolchange = 1.5
+
+[filament:addnorth OBC Polyethylene @XL 0.6]
+inherits = addnorth OBC Polyethylene @XL; *FLEX06XL*
+renamed_from = "addnorth OBC Polyethylene @PG 0.6"
+filament_max_volumetric_speed = 6
+filament_multitool_ramming_flow = 6
+
+[filament:addnorth OBC Polyethylene @XL 0.8]
+inherits = addnorth OBC Polyethylene @XL; *FLEX08XL*
+renamed_from = "addnorth OBC Polyethylene @PG 0.8"
+filament_max_volumetric_speed = 10
+filament_multitool_ramming_flow = 10
+
+[filament:addnorth OBC Polyethylene @MK4]
inherits = addnorth OBC Polyethylene; *FLEXPG*
filament_max_volumetric_speed = 4
filament_retract_length = 1.5
-[filament:addnorth OBC Polyethylene @PG 0.6]
-inherits = addnorth OBC Polyethylene @PG; *FLEX06PG*
-filament_max_volumetric_speed = 6
-
-[filament:addnorth OBC Polyethylene @PG 0.8]
-inherits = addnorth OBC Polyethylene @PG; *FLEX08PG*
-filament_max_volumetric_speed = 10
-
-[filament:addnorth OBC Polyethylene @MK4]
-inherits = addnorth OBC Polyethylene; *FLEXMK4*
-filament_max_volumetric_speed = 4
-filament_retract_length = 1.5
-
[filament:addnorth OBC Polyethylene @MK4 0.6]
-inherits = addnorth OBC Polyethylene @MK4; *FLEX06MK4*
+inherits = addnorth OBC Polyethylene @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6
[filament:addnorth OBC Polyethylene @MK4 0.8]
-inherits = addnorth OBC Polyethylene @MK4; *FLEX08MK4*
+inherits = addnorth OBC Polyethylene @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:addnorth PETG]
@@ -6688,6 +7118,15 @@ inherits = addnorth PETG @PG; *PET06PG*
[filament:addnorth PETG @PG 0.8]
inherits = addnorth PETG @PG; *PET08PG*
+[filament:addnorth PETG @XL]
+inherits = addnorth PETG @PG; *PETXL*
+
+[filament:addnorth PETG @XL 0.6]
+inherits = addnorth PETG @PG 0.6; *PET06XL*
+
+[filament:addnorth PETG @XL 0.8]
+inherits = addnorth PETG @PG 0.8; *PET08XL*
+
[filament:addnorth PETG @MINI]
inherits = addnorth PETG
filament_retract_length = nil
@@ -6741,6 +7180,15 @@ filament_max_volumetric_speed = 7
inherits = addnorth Rigid X @PG; *PET08PG*
filament_max_volumetric_speed = 10
+[filament:addnorth Rigid X @XL]
+inherits = addnorth Rigid X @PG; *PETXL*; *04PLUSXL*
+
+[filament:addnorth Rigid X @XL 0.6]
+inherits = addnorth Rigid X @PG 0.6; *PET06XL*
+
+[filament:addnorth Rigid X @XL 0.8]
+inherits = addnorth Rigid X @PG 0.8; *PET08XL*
+
[filament:addnorth Rigid X @MINI]
inherits = addnorth Rigid X
filament_retract_length = nil
@@ -6784,6 +7232,15 @@ inherits = addnorth Textura; *PLA06PG*
[filament:addnorth Textura @PG 0.8]
inherits = addnorth Textura; *PLA08PG*
+[filament:addnorth Textura @XL]
+inherits = addnorth Textura @PG; *PLAXL*
+
+[filament:addnorth Textura @XL 0.6]
+inherits = addnorth Textura @PG 0.6; *PLA06XL*
+
+[filament:addnorth Textura @XL 0.8]
+inherits = addnorth Textura @PG 0.8; *PLA08XL*
+
[filament:addnorth Textura @MINI]
inherits = addnorth Textura
filament_retract_length = nil
@@ -6815,17 +7272,23 @@ compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI
[filament:Filamentworld ABS @PG]
inherits = Filamentworld ABS; *ABSPG*
first_layer_bed_temperature = 100
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Filamentworld ABS @PG 0.6]
inherits = Filamentworld ABS @PG; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Filamentworld ABS @PG 0.8]
inherits = Filamentworld ABS @PG; *ABS08PG*
first_layer_temperature = 240
temperature = 240
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Filamentworld ABS @XL]
+inherits = Filamentworld ABS @PG; *ABSXL*
+
+[filament:Filamentworld ABS @XL 0.6]
+inherits = Filamentworld ABS @PG 0.6; *ABS06XL*
+
+[filament:Filamentworld ABS @XL 0.8]
+inherits = Filamentworld ABS @PG 0.8; *ABS08XL*
[filament:Filamentworld ABS @MINI]
inherits = Filamentworld ABS
@@ -6868,6 +7331,15 @@ inherits = Filamentworld PETG @PG; *PET08PG*
first_layer_temperature = 240
temperature = 245
+[filament:Filamentworld PETG @XL]
+inherits = Filamentworld PETG @PG; *PETXL*
+
+[filament:Filamentworld PETG @XL 0.6]
+inherits = Filamentworld PETG @PG 0.6; *PET06XL*
+
+[filament:Filamentworld PETG @XL 0.8]
+inherits = Filamentworld PETG @PG 0.8; *PET08XL*
+
[filament:Filamentworld PETG @MINI]
inherits = Filamentworld PETG
filament_retract_length = nil
@@ -6900,6 +7372,15 @@ inherits = Filamentworld PLA; *PLA06PG*
[filament:Filamentworld PLA @PG 0.8]
inherits = Filamentworld PLA; *PLA08PG*
+[filament:Filamentworld PLA @XL]
+inherits = Filamentworld PLA @PG; *PLAXL*
+
+[filament:Filamentworld PLA @XL 0.6]
+inherits = Filamentworld PLA @PG 0.6; *PLA06XL*
+
+[filament:Filamentworld PLA @XL 0.8]
+inherits = Filamentworld PLA @PG 0.8; *PLA08XL*
+
[filament:Filament PM PETG]
inherits = *PET*
renamed_from = "Plasty Mladec PETG"
@@ -6918,6 +7399,15 @@ inherits = Filament PM PETG; *PET06PG*
[filament:Filament PM PETG @PG 0.8]
inherits = Filament PM PETG; *PET08PG*
+[filament:Filament PM PETG @XL]
+inherits = Filament PM PETG @PG; *PETXL*
+
+[filament:Filament PM PETG @XL 0.6]
+inherits = Filament PM PETG @PG 0.6; *PET06XL*
+
+[filament:Filament PM PETG @XL 0.8]
+inherits = Filament PM PETG @PG 0.8; *PET08XL*
+
[filament:Generic PLA]
inherits = *PLA*
filament_vendor = Generic
@@ -6927,18 +7417,27 @@ compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG
[filament:Generic PLA @PG]
inherits = Generic PLA; *PLAPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Generic PLA @PG 0.6]
inherits = Generic PLA; *PLA06PG*
filament_max_volumetric_speed = 15
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
[filament:Generic PLA @PG 0.8]
inherits = Generic PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+
+[filament:Generic PLA @XL]
+inherits = Generic PLA @PG; *PLAXL*
+
+[filament:Generic PLA @XL 0.6]
+inherits = Generic PLA @PG 0.6; *PLA06XL*
+
+[filament:Generic PLA @XL 0.8]
+inherits = Generic PLA @PG 0.8; *PLA08XL*
[filament:Generic PLA @PGIS]
inherits = Generic PLA @PG
@@ -6946,19 +7445,19 @@ renamed_from = "Generic PLA @MK4IS"
first_layer_temperature = 230
temperature = 220
slowdown_below_layer_time = 6
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Generic PLA @PGIS 0.6]
inherits = Generic PLA @PG 0.6
first_layer_temperature = 230
temperature = 220
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Generic PLA @PGIS 0.8]
inherits = Generic PLA @PG 0.8
first_layer_temperature = 230
temperature = 225
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
[filament:Generic PLA Silk @PGIS]
inherits = Generic PLA @PG
@@ -6968,19 +7467,19 @@ temperature = 225
slowdown_below_layer_time = 8
filament_max_volumetric_speed = 7
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.035{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Generic PLA Silk @PGIS 0.6]
inherits = Generic PLA Silk @PGIS
slowdown_below_layer_time = 15
filament_max_volumetric_speed = 9
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Generic PLA Silk @PGIS 0.8]
inherits = Generic PLA Silk @PGIS
slowdown_below_layer_time = 20
filament_max_volumetric_speed = 12
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
[filament:3D-Fuel Standard PLA]
inherits = *PLA*
@@ -7005,6 +7504,15 @@ filament_max_volumetric_speed = 16
first_layer_temperature = 210
temperature = 210
+[filament:3D-Fuel Standard PLA @XL]
+inherits = 3D-Fuel Standard PLA @PG; *PLAXL*
+
+[filament:3D-Fuel Standard PLA @XL 0.6]
+inherits = 3D-Fuel Standard PLA @PG 0.6; *PLA06XL*
+
+[filament:3D-Fuel Standard PLA @XL 0.8]
+inherits = 3D-Fuel Standard PLA @PG 0.8; *PLA08XL*
+
[filament:3D-Fuel EasiPrint PLA]
inherits = 3D-Fuel Standard PLA
filament_cost = 30.44
@@ -7023,6 +7531,15 @@ filament_max_volumetric_speed = 16
first_layer_temperature = 210
temperature = 210
+[filament:3D-Fuel EasiPrint PLA @XL]
+inherits = 3D-Fuel EasiPrint PLA @PG; *PLAXL*
+
+[filament:3D-Fuel EasiPrint PLA @XL 0.6]
+inherits = 3D-Fuel EasiPrint PLA @PG 0.6; *PLA06XL*
+
+[filament:3D-Fuel EasiPrint PLA @XL 0.8]
+inherits = 3D-Fuel EasiPrint PLA @PG 0.8; *PLA08XL*
+
[filament:3D-Fuel Pro PLA]
inherits = *PLA*
filament_vendor = 3D-Fuel
@@ -7047,6 +7564,15 @@ filament_max_volumetric_speed = 17
first_layer_temperature = 225
temperature = 225
+[filament:3D-Fuel Pro PLA @XL]
+inherits = 3D-Fuel Pro PLA @PG; *PLAXL*
+
+[filament:3D-Fuel Pro PLA @XL 0.6]
+inherits = 3D-Fuel Pro PLA @PG 0.6; *PLA06XL*
+
+[filament:3D-Fuel Pro PLA @XL 0.8]
+inherits = 3D-Fuel Pro PLA @PG 0.8; *PLA08XL*
+
[filament:3D-Fuel Buzzed]
inherits = 3D-Fuel Standard PLA
filament_cost = 44.27
@@ -7069,6 +7595,15 @@ filament_max_volumetric_speed = 12
first_layer_temperature = 210
temperature = 210
+[filament:3D-Fuel Buzzed @XL]
+inherits = 3D-Fuel Buzzed @PG; *PLAXL*
+
+[filament:3D-Fuel Buzzed @XL 0.6]
+inherits = 3D-Fuel Buzzed @PG 0.6; *PLA06XL*
+
+[filament:3D-Fuel Buzzed @XL 0.8]
+inherits = 3D-Fuel Buzzed @PG 0.8; *PLA08XL*
+
[filament:3D-Fuel Wound up]
inherits = 3D-Fuel Buzzed
filament_cost = 44.27
@@ -7091,30 +7626,42 @@ filament_max_volumetric_speed = 12
first_layer_temperature = 220
temperature = 220
+[filament:3D-Fuel Wound up @XL]
+inherits = 3D-Fuel Wound up @PG; *PLAXL*
+
+[filament:3D-Fuel Wound up @XL 0.6]
+inherits = 3D-Fuel Wound up @PG 0.6; *PLA06XL*
+
+[filament:3D-Fuel Wound up @XL 0.8]
+inherits = 3D-Fuel Wound up @PG 0.8; *PLA08XL*
+
[filament:3D-Fuel Workday ABS]
inherits = *ABSC*
filament_vendor = 3D-Fuel
filament_cost = 23.25
filament_density = 1.04
-[filament:3D-Fuel Workday ABS @PG]
-inherits = 3D-Fuel Workday ABS; *ABSPG*
+[filament:3D-Fuel Workday ABS @XL]
+inherits = 3D-Fuel Workday ABS; *ABSPG*; *ABSXL*
+renamed_from = "3D-Fuel Workday ABS @PG"
bed_temperature = 105
-[filament:3D-Fuel Workday ABS @PG 0.6]
-inherits = 3D-Fuel Workday ABS @PG; *ABS06PG*
+[filament:3D-Fuel Workday ABS @XL 0.6]
+inherits = 3D-Fuel Workday ABS @XL; *ABS06XL*
+renamed_from = "3D-Fuel Workday ABS @PG 0.6"
-[filament:3D-Fuel Workday ABS @PG 0.8]
-inherits = 3D-Fuel Workday ABS @PG; *ABS08PG*
+[filament:3D-Fuel Workday ABS @XL 0.8]
+inherits = 3D-Fuel Workday ABS @XL; *ABS08XL*
+renamed_from = "3D-Fuel Workday ABS @PG 0.8"
[filament:3D-Fuel Workday ABS @MK4]
-inherits = 3D-Fuel Workday ABS; *ABSMK4*
+inherits = 3D-Fuel Workday ABS; *ABSPG*
[filament:3D-Fuel Workday ABS @MK4 0.6]
-inherits = 3D-Fuel Workday ABS @MK4; *ABS06MK4*
+inherits = 3D-Fuel Workday ABS @MK4; *ABS06PG*
[filament:3D-Fuel Workday ABS @MK4 0.8]
-inherits = 3D-Fuel Workday ABS @MK4; *ABS08MK4*
+inherits = 3D-Fuel Workday ABS @MK4; *ABS08PG*
[filament:3D-Fuel Workday ABS @MINI]
inherits = 3D-Fuel Workday ABS; *ABSMINI*
@@ -7138,6 +7685,15 @@ filament_max_volumetric_speed = 14
inherits = Jessie PLA @PG; *PLA08PG*
filament_max_volumetric_speed = 17
+[filament:Jessie PLA @XL]
+inherits = Jessie PLA @PG; *PLAXL*
+
+[filament:Jessie PLA @XL 0.6]
+inherits = Jessie PLA @PG 0.6; *PLA06XL*
+
+[filament:Jessie PLA @XL 0.8]
+inherits = Jessie PLA @PG 0.8; *PLA08XL*
+
[filament:Jessie PETG]
inherits = *PET*
filament_vendor = Printed Solid
@@ -7151,7 +7707,7 @@ filament_max_volumetric_speed = 7
[filament:Jessie PETG @PG]
inherits = Jessie PETG; *PETPG*
-filament_max_volumetric_speed = 7
+filament_max_volumetric_speed = 8
[filament:Jessie PETG @PG 0.6]
inherits = Jessie PETG @PG; *PET06PG*
@@ -7163,6 +7719,15 @@ filament_max_volumetric_speed = 20
first_layer_temperature = 245
temperature = 255
+[filament:Jessie PETG @XL]
+inherits = Jessie PETG @PG; *PETXL*
+
+[filament:Jessie PETG @XL 0.6]
+inherits = Jessie PETG @PG 0.6; *PET06XL*
+
+[filament:Jessie PETG @XL 0.8]
+inherits = Jessie PETG @PG 0.8; *PET08XL*
+
[filament:Jessie PETG @MINI]
inherits = Jessie PETG; *PETMINI*
@@ -7182,6 +7747,15 @@ inherits = Devil Design PLA; *PLA06PG*
[filament:Devil Design PLA @PG 0.8]
inherits = Devil Design PLA; *PLA08PG*
+[filament:Devil Design PLA @XL]
+inherits = Devil Design PLA @PG; *PLAXL*
+
+[filament:Devil Design PLA @XL 0.6]
+inherits = Devil Design PLA @PG 0.6; *PLA06XL*
+
+[filament:Devil Design PLA @XL 0.8]
+inherits = Devil Design PLA @PG 0.8; *PLA08XL*
+
[filament:Devil Design PETG]
inherits = *PET*
filament_vendor = Devil Design
@@ -7202,6 +7776,15 @@ inherits = Devil Design PETG; *PET06PG*
[filament:Devil Design PETG @PG 0.8]
inherits = Devil Design PETG; *PET08PG*
+[filament:Devil Design PETG @XL]
+inherits = Devil Design PETG @PG; *PETXL*
+
+[filament:Devil Design PETG @XL 0.6]
+inherits = Devil Design PETG @PG 0.6; *PET06XL*
+
+[filament:Devil Design PETG @XL 0.8]
+inherits = Devil Design PETG @PG 0.8; *PET08XL*
+
[filament:Spectrum PLA]
inherits = *PLA*
filament_vendor = Spectrum
@@ -7217,6 +7800,15 @@ inherits = Spectrum PLA; *PLA06PG*
[filament:Spectrum PLA @PG 0.8]
inherits = Spectrum PLA; *PLA08PG*
+[filament:Spectrum PLA @XL]
+inherits = Spectrum PLA @PG; *PLAXL*
+
+[filament:Spectrum PLA @XL 0.6]
+inherits = Spectrum PLA @PG 0.6; *PLA06XL*
+
+[filament:Spectrum PLA @XL 0.8]
+inherits = Spectrum PLA @PG 0.8; *PLA08XL*
+
[filament:Spectrum PETG Matt]
inherits = *PET*
filament_vendor = Spectrum
@@ -7246,6 +7838,15 @@ inherits = Spectrum PETG Matt @PG; *PET06PG*
[filament:Spectrum PETG Matt @PG 0.8]
inherits = Spectrum PETG Matt @PG; *PET08PG*
+[filament:Spectrum PETG Matt @XL]
+inherits = Spectrum PETG Matt @PG; *PETXL*
+
+[filament:Spectrum PETG Matt @XL 0.6]
+inherits = Spectrum PETG Matt @PG 0.6; *PET06XL*
+
+[filament:Spectrum PETG Matt @XL 0.8]
+inherits = Spectrum PETG Matt @PG 0.8; *PET08XL*
+
[filament:Spectrum PETG Matt @MINI]
inherits = Spectrum PETG Matt; *PETMINI*
@@ -7278,6 +7879,15 @@ inherits = Spectrum PETG HT100 @PG; *PET06PG*
[filament:Spectrum PETG HT100 @PG 0.8]
inherits = Spectrum PETG HT100 @PG; *PET08PG*
+[filament:Spectrum PETG HT100 @XL]
+inherits = Spectrum PETG HT100 @PG; *PETXL*
+
+[filament:Spectrum PETG HT100 @XL 0.6]
+inherits = Spectrum PETG HT100 @PG 0.6; *PET06XL*
+
+[filament:Spectrum PETG HT100 @XL 0.8]
+inherits = Spectrum PETG HT100 @PG 0.8; *PET08XL*
+
[filament:Spectrum PETG HT100 @MINI]
inherits = Spectrum PETG HT100; *PETMINI*
bed_temperature = 100
@@ -7312,6 +7922,15 @@ inherits = Spectrum GreenyHT @PG; *PLA06PG*
[filament:Spectrum GreenyHT @PG 0.8]
inherits = Spectrum GreenyHT @PG; *PLA08PG*
+[filament:Spectrum GreenyHT @XL]
+inherits = Spectrum GreenyHT @PG; *PLAXL*
+
+[filament:Spectrum GreenyHT @XL 0.6]
+inherits = Spectrum GreenyHT @PG 0.6; *PLA06XL*
+
+[filament:Spectrum GreenyHT @XL 0.8]
+inherits = Spectrum GreenyHT @PG 0.8; *PLA08XL*
+
[filament:Spectrum ASA 275]
inherits = *ABSC*
filament_vendor = Spectrum
@@ -7325,15 +7944,21 @@ filament_density = 1.24
[filament:Spectrum ASA 275 @PG]
inherits = Spectrum ASA 275; *ABSPG*
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Spectrum ASA 275 @PG 0.6]
inherits = Spectrum ASA 275 @PG; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Spectrum ASA 275 @PG 0.8]
inherits = Spectrum ASA 275 @PG; *ABS08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Spectrum ASA 275 @XL]
+inherits = Spectrum ASA 275; *ABSPG*; *ABSXL*
+
+[filament:Spectrum ASA 275 @XL 0.6]
+inherits = Spectrum ASA 275 @XL; *ABS06XL*
+
+[filament:Spectrum ASA 275 @XL 0.8]
+inherits = Spectrum ASA 275 @XL; *ABS08XL*
[filament:Spectrum ASA 275 @MINI]
inherits = Spectrum ASA 275; *ABSMINI*
@@ -7351,25 +7976,26 @@ filament_type = ASA
filament_density = 1.24
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Spectrum ASA Kevlar @PG]
-inherits = Spectrum ASA Kevlar; *ABSPG*
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/.*XL.*/
+[filament:Spectrum ASA Kevlar @XL]
+inherits = Spectrum ASA Kevlar; *ABSPG*; *ABSXL*
+renamed_from = "Spectrum ASA Kevlar @PG"
-[filament:Spectrum ASA Kevlar @PG 0.6]
-inherits = Spectrum ASA Kevlar @PG; *ABS06PG*
+[filament:Spectrum ASA Kevlar @XL 0.6]
+inherits = Spectrum ASA Kevlar @XL; *ABS06XL*
+renamed_from = "Spectrum ASA Kevlar @PG 0.6"
-[filament:Spectrum ASA Kevlar @PG 0.8]
-inherits = Spectrum ASA Kevlar @PG; *ABS08PG*
+[filament:Spectrum ASA Kevlar @XL 0.8]
+inherits = Spectrum ASA Kevlar @XL; *ABS08XL*
+renamed_from = "Spectrum ASA Kevlar @PG 0.8"
[filament:Spectrum ASA Kevlar @MK4]
-inherits = Spectrum ASA Kevlar; *ABSMK4*
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/(MK4|MK4IS)/
+inherits = Spectrum ASA Kevlar; *ABSPG*
[filament:Spectrum ASA Kevlar @MK4 0.6]
-inherits = Spectrum ASA Kevlar @MK4; *ABS06MK4*
+inherits = Spectrum ASA Kevlar @MK4; *ABS06PG*
[filament:Spectrum ASA Kevlar @MK4 0.8]
-inherits = Spectrum ASA Kevlar @MK4; *ABS08MK4*
+inherits = Spectrum ASA Kevlar @MK4; *ABS08PG*
[filament:Spectrum ASA Kevlar @MINI]
inherits = Spectrum ASA Kevlar; *ABSMINI*
@@ -7396,6 +8022,15 @@ inherits = Spectrum Tough PLA @PG; *PLA06PG*
[filament:Spectrum Tough PLA @PG 0.8]
inherits = Spectrum Tough PLA @PG; *PLA08PG*
+[filament:Spectrum Tough PLA @XL]
+inherits = Spectrum Tough PLA @PG; *PLAXL*
+
+[filament:Spectrum Tough PLA @XL 0.6]
+inherits = Spectrum Tough PLA @PG 0.6; *PLA06XL*
+
+[filament:Spectrum Tough PLA @XL 0.8]
+inherits = Spectrum Tough PLA @PG 0.8; *PLA08XL*
+
[filament:Spectrum PLA PRO]
inherits = *PLA*
filament_vendor = Spectrum
@@ -7411,6 +8046,15 @@ inherits = Spectrum PLA PRO @PG; *PLA06PG*
[filament:Spectrum PLA PRO @PG 0.8]
inherits = Spectrum PLA PRO @PG; *PLA08PG*
+[filament:Spectrum PLA PRO @XL]
+inherits = Spectrum PLA PRO @PG; *PLAXL*
+
+[filament:Spectrum PLA PRO @XL 0.6]
+inherits = Spectrum PLA PRO @PG 0.6; *PLA06XL*
+
+[filament:Spectrum PLA PRO @XL 0.8]
+inherits = Spectrum PLA PRO @PG 0.8; *PLA08XL*
+
[filament:Spectrum PCTG]
inherits = *PET*
filament_vendor = Spectrum
@@ -7428,6 +8072,15 @@ inherits = Spectrum PCTG @PG; *PET06PG*
[filament:Spectrum PCTG @PG 0.8]
inherits = Spectrum PCTG @PG; *PET08PG*
+[filament:Spectrum PCTG @XL]
+inherits = Spectrum PCTG @PG; *PETXL*
+
+[filament:Spectrum PCTG @XL 0.6]
+inherits = Spectrum PCTG @PG 0.6; *PET06XL*
+
+[filament:Spectrum PCTG @XL 0.8]
+inherits = Spectrum PCTG @PG 0.8; *PET08XL*
+
[filament:Spectrum PCTG @MINI]
inherits = Spectrum PCTG; *PETMINI*
@@ -7442,7 +8095,33 @@ filament_retract_speed = nil
filament_retract_lift = nil
compatible_printers_condition = nozzle_diameter[0]>=0.35 and nozzle_diameter[0]!=0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
-[filament:Generic FLEX @PG]
+[filament:Generic FLEX @XL]
+inherits = Generic FLEX; *FLEXXL*
+filament_max_volumetric_speed = 3
+filament_retract_length = 2.5
+fan_always_on = 1
+min_fan_speed = 30
+max_fan_speed = 30
+cooling = 1
+filament_retract_lift = 0
+slowdown_below_layer_time = 10
+first_layer_temperature = 230
+temperature = 230
+extrusion_multiplier = 1.08
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 2.5
+
+[filament:Generic FLEX @XL 0.6]
+inherits = Generic FLEX @XL; *FLEX06XL*
+filament_max_volumetric_speed = 4
+filament_multitool_ramming_flow = 4
+
+[filament:Generic FLEX @XL 0.8]
+inherits = Generic FLEX @XL; *FLEX08XL*
+filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
+
+[filament:Generic FLEX @MK4]
inherits = Generic FLEX; *FLEXPG*
filament_max_volumetric_speed = 3
filament_retract_length = 2.5
@@ -7456,34 +8135,12 @@ first_layer_temperature = 230
temperature = 230
extrusion_multiplier = 1.08
-[filament:Generic FLEX @PG 0.6]
-inherits = Generic FLEX @PG; *FLEX06PG*
-filament_max_volumetric_speed = 4
-
-[filament:Generic FLEX @PG 0.8]
-inherits = Generic FLEX @PG; *FLEX08PG*
-filament_max_volumetric_speed = 8
-
-[filament:Generic FLEX @MK4]
-inherits = Generic FLEX; *FLEXMK4*
-filament_max_volumetric_speed = 3
-filament_retract_length = 2.5
-fan_always_on = 1
-min_fan_speed = 30
-max_fan_speed = 30
-cooling = 1
-filament_retract_lift = 0
-slowdown_below_layer_time = 10
-first_layer_temperature = 230
-temperature = 230
-extrusion_multiplier = 1.08
-
[filament:Generic FLEX @MK4 0.6]
-inherits = Generic FLEX @MK4; *FLEX06MK4*
+inherits = Generic FLEX @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6
[filament:Generic FLEX @MK4 0.8]
-inherits = Generic FLEX @MK4; *FLEX08MK4*
+inherits = Generic FLEX @MK4; *FLEX08PG*
filament_max_volumetric_speed = 9
[filament:Fillamentum Flexfill 92A]
@@ -7503,32 +8160,36 @@ min_fan_speed = 60
disable_fan_first_layers = 4
full_fan_speed_layer = 6
-[filament:Fillamentum Flexfill 92A @PG]
-inherits = Fillamentum Flexfill 92A; *FLEXPG*
+[filament:Fillamentum Flexfill 92A @XL]
+inherits = Fillamentum Flexfill 92A; *FLEXXL*
filament_max_volumetric_speed = 3
extrusion_multiplier = 1.1
filament_retract_length = 3.5
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 3.5
-[filament:Fillamentum Flexfill 92A @PG 0.6]
-inherits = Fillamentum Flexfill 92A @PG; *FLEX06PG*
+[filament:Fillamentum Flexfill 92A @XL 0.6]
+inherits = Fillamentum Flexfill 92A @XL; *FLEX06XL*
filament_max_volumetric_speed = 4.5
+filament_multitool_ramming_flow = 4.5
-[filament:Fillamentum Flexfill 92A @PG 0.8]
-inherits = Fillamentum Flexfill 92A @PG; *FLEX08PG*
+[filament:Fillamentum Flexfill 92A @XL 0.8]
+inherits = Fillamentum Flexfill 92A @XL; *FLEX08XL*
filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
[filament:Fillamentum Flexfill 92A @MK4]
-inherits = Fillamentum Flexfill 92A; *FLEXMK4*
+inherits = Fillamentum Flexfill 92A; *FLEXPG*
filament_max_volumetric_speed = 3.5
extrusion_multiplier = 1.1
filament_retract_length = 3.5
[filament:Fillamentum Flexfill 92A @MK4 0.6]
-inherits = Fillamentum Flexfill 92A @MK4; *FLEX06MK4*
+inherits = Fillamentum Flexfill 92A @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6.5
[filament:Fillamentum Flexfill 92A @MK4 0.8]
-inherits = Fillamentum Flexfill 92A @MK4; *FLEX08MK4*
+inherits = Fillamentum Flexfill 92A @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:AmazonBasics TPU]
@@ -7558,30 +8219,33 @@ min_print_speed = 15
slowdown_below_layer_time = 10
cooling = 1
-[filament:AmazonBasics TPU @PG]
+[filament:AmazonBasics TPU @XL]
+inherits = AmazonBasics TPU; *FLEXXL*
+filament_retract_length = 2.5
+extrusion_multiplier = 1.1
+filament_retract_length_toolchange = 2.5
+
+[filament:AmazonBasics TPU @XL 0.6]
+inherits = AmazonBasics TPU @XL; *FLEX06XL*
+filament_max_volumetric_speed = 5
+filament_multitool_ramming_flow = 5
+
+[filament:AmazonBasics TPU @XL 0.8]
+inherits = AmazonBasics TPU @XL; *FLEX08XL*
+filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
+
+[filament:AmazonBasics TPU @MK4]
inherits = AmazonBasics TPU; *FLEXPG*
filament_retract_length = 2.5
extrusion_multiplier = 1.1
-[filament:AmazonBasics TPU @PG 0.6]
-inherits = AmazonBasics TPU @PG; *FLEX06PG*
-filament_max_volumetric_speed = 5
-
-[filament:AmazonBasics TPU @PG 0.8]
-inherits = AmazonBasics TPU @PG; *FLEX08PG*
-filament_max_volumetric_speed = 8
-
-[filament:AmazonBasics TPU @MK4]
-inherits = AmazonBasics TPU; *FLEXMK4*
-filament_retract_length = 2.5
-extrusion_multiplier = 1.1
-
[filament:AmazonBasics TPU @MK4 0.6]
-inherits = AmazonBasics TPU @MK4; *FLEX06MK4*
+inherits = AmazonBasics TPU @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6.5
[filament:AmazonBasics TPU @MK4 0.8]
-inherits = AmazonBasics TPU @MK4; *FLEX08MK4*
+inherits = AmazonBasics TPU @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:SainSmart TPU]
@@ -7611,34 +8275,38 @@ min_print_speed = 15
slowdown_below_layer_time = 10
cooling = 1
-[filament:SainSmart TPU @PG]
+[filament:SainSmart TPU @XL]
+inherits = SainSmart TPU; *FLEXXL*
+filament_max_volumetric_speed = 5
+first_layer_temperature = 235
+temperature = 235
+filament_retract_length = 1.5
+filament_multitool_ramming_flow = 5
+filament_retract_length_toolchange = 1.5
+
+[filament:SainSmart TPU @XL 0.6]
+inherits = SainSmart TPU @XL; *FLEX06XL*
+filament_max_volumetric_speed = 6
+filament_multitool_ramming_flow = 6
+
+[filament:SainSmart TPU @XL 0.8]
+inherits = SainSmart TPU @XL; *FLEX08XL*
+filament_max_volumetric_speed = 9
+filament_multitool_ramming_flow = 9
+
+[filament:SainSmart TPU @MK4]
inherits = SainSmart TPU; *FLEXPG*
filament_max_volumetric_speed = 5
first_layer_temperature = 235
temperature = 235
filament_retract_length = 1.5
-[filament:SainSmart TPU @PG 0.6]
-inherits = SainSmart TPU @PG; *FLEX06PG*
-filament_max_volumetric_speed = 6
-
-[filament:SainSmart TPU @PG 0.8]
-inherits = SainSmart TPU @PG; *FLEX08PG*
-filament_max_volumetric_speed = 9
-
-[filament:SainSmart TPU @MK4]
-inherits = SainSmart TPU; *FLEXMK4*
-filament_max_volumetric_speed = 5
-first_layer_temperature = 235
-temperature = 235
-filament_retract_length = 1.5
-
[filament:SainSmart TPU @MK4 0.6]
-inherits = SainSmart TPU @MK4; *FLEX06MK4*
+inherits = SainSmart TPU @MK4; *FLEX06PG*
filament_max_volumetric_speed = 7
[filament:SainSmart TPU @MK4 0.8]
-inherits = SainSmart TPU @MK4; *FLEX08MK4*
+inherits = SainSmart TPU @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:NinjaTek NinjaFlex TPU]
@@ -7668,32 +8336,36 @@ min_print_speed = 10
slowdown_below_layer_time = 10
cooling = 1
-[filament:NinjaTek NinjaFlex TPU @PG]
-inherits = NinjaTek NinjaFlex TPU; *FLEXPG*
+[filament:NinjaTek NinjaFlex TPU @XL]
+inherits = NinjaTek NinjaFlex TPU; *FLEXXL*
filament_max_volumetric_speed = 3
filament_retract_length = 3.5
extrusion_multiplier = 1.12
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 3.5
-[filament:NinjaTek NinjaFlex TPU @PG 0.6]
-inherits = NinjaTek NinjaFlex TPU @PG; *FLEX06PG*
+[filament:NinjaTek NinjaFlex TPU @XL 0.6]
+inherits = NinjaTek NinjaFlex TPU @XL; *FLEX06XL*
filament_max_volumetric_speed = 4.5
+filament_multitool_ramming_flow = 4.5
-[filament:NinjaTek NinjaFlex TPU @PG 0.8]
-inherits = NinjaTek NinjaFlex TPU @PG; *FLEX08PG*
+[filament:NinjaTek NinjaFlex TPU @XL 0.8]
+inherits = NinjaTek NinjaFlex TPU @XL; *FLEX08XL*
filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
[filament:NinjaTek NinjaFlex TPU @MK4]
-inherits = NinjaTek NinjaFlex TPU; *FLEXMK4*
+inherits = NinjaTek NinjaFlex TPU; *FLEXPG*
filament_max_volumetric_speed = 3.5
filament_retract_length = 3.5
extrusion_multiplier = 1.12
[filament:NinjaTek NinjaFlex TPU @MK4 0.6]
-inherits = NinjaTek NinjaFlex TPU @MK4; *FLEX06MK4*
+inherits = NinjaTek NinjaFlex TPU @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6.5
[filament:NinjaTek NinjaFlex TPU @MK4 0.8]
-inherits = NinjaTek NinjaFlex TPU @MK4; *FLEX08MK4*
+inherits = NinjaTek NinjaFlex TPU @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:NinjaTek Cheetah TPU]
@@ -7707,30 +8379,34 @@ filament_deretract_speed = 25
first_layer_temperature = 240
temperature = 240
-[filament:NinjaTek Cheetah TPU @PG]
-inherits = NinjaTek Cheetah TPU; *FLEXPG*
+[filament:NinjaTek Cheetah TPU @XL]
+inherits = NinjaTek Cheetah TPU; *FLEXXL*
filament_max_volumetric_speed = 5
filament_retract_length = 2.2
+filament_multitool_ramming_flow = 5
+filament_retract_length_toolchange = 2.2
-[filament:NinjaTek Cheetah TPU @PG 0.6]
-inherits = NinjaTek Cheetah TPU @PG; *FLEX06PG*
+[filament:NinjaTek Cheetah TPU @XL 0.6]
+inherits = NinjaTek Cheetah TPU @XL; *FLEX06XL*
filament_max_volumetric_speed = 7
+filament_multitool_ramming_flow = 7
-[filament:NinjaTek Cheetah TPU @PG 0.8]
-inherits = NinjaTek Cheetah TPU @PG; *FLEX08PG*
+[filament:NinjaTek Cheetah TPU @XL 0.8]
+inherits = NinjaTek Cheetah TPU @XL; *FLEX08XL*
filament_max_volumetric_speed = 10
+filament_multitool_ramming_flow = 10
[filament:NinjaTek Cheetah TPU @MK4]
-inherits = NinjaTek Cheetah TPU; *FLEXMK4*
+inherits = NinjaTek Cheetah TPU; *FLEXPG*
filament_max_volumetric_speed = 6
filament_retract_length = 2.2
[filament:NinjaTek Cheetah TPU @MK4 0.6]
-inherits = NinjaTek Cheetah TPU @MK4; *FLEX06MK4*
+inherits = NinjaTek Cheetah TPU @MK4; *FLEX06PG*
filament_max_volumetric_speed = 8
[filament:NinjaTek Cheetah TPU @MK4 0.8]
-inherits = NinjaTek Cheetah TPU @MK4; *FLEX08MK4*
+inherits = NinjaTek Cheetah TPU @MK4; *FLEX08PG*
filament_max_volumetric_speed = 12
[filament:NinjaTek Cheetah TPU @MINI]
@@ -7771,30 +8447,34 @@ min_print_speed = 15
slowdown_below_layer_time = 10
cooling = 1
-[filament:Filatech FilaFlex40 @PG]
+[filament:Filatech FilaFlex40 @XL]
+inherits = Filatech FilaFlex40; *FLEXXL*
+filament_max_volumetric_speed = 4
+filament_retract_length = 2.5
+filament_multitool_ramming_flow = 4
+filament_retract_length_toolchange = 2.5
+
+[filament:Filatech FilaFlex40 @XL 0.6]
+inherits = Filatech FilaFlex40 @XL; *FLEX06XL*
+filament_max_volumetric_speed = 5
+filament_multitool_ramming_flow = 5
+
+[filament:Filatech FilaFlex40 @XL 0.8]
+inherits = Filatech FilaFlex40 @XL; *FLEX08XL*
+filament_max_volumetric_speed = 10
+filament_multitool_ramming_flow = 10
+
+[filament:Filatech FilaFlex40 @MK4]
inherits = Filatech FilaFlex40; *FLEXPG*
filament_max_volumetric_speed = 4
filament_retract_length = 2.5
-[filament:Filatech FilaFlex40 @PG 0.6]
-inherits = Filatech FilaFlex40 @PG; *FLEX06PG*
-filament_max_volumetric_speed = 5
-
-[filament:Filatech FilaFlex40 @PG 0.8]
-inherits = Filatech FilaFlex40 @PG; *FLEX08PG*
-filament_max_volumetric_speed = 10
-
-[filament:Filatech FilaFlex40 @MK4]
-inherits = Filatech FilaFlex40; *FLEXMK4*
-filament_max_volumetric_speed = 4
-filament_retract_length = 2.5
-
[filament:Filatech FilaFlex40 @MK4 0.6]
-inherits = Filatech FilaFlex40 @MK4; *FLEX06MK4*
+inherits = Filatech FilaFlex40 @MK4; *FLEX06PG*
filament_max_volumetric_speed = 5
[filament:Filatech FilaFlex40 @MK4 0.8]
-inherits = Filatech FilaFlex40 @MK4; *FLEX08MK4*
+inherits = Filatech FilaFlex40 @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:Filatech FilaFlex30]
@@ -7804,30 +8484,34 @@ filament_density = 1.15
extrusion_multiplier = 1.1
filament_cost =
-[filament:Filatech FilaFlex30 @PG]
+[filament:Filatech FilaFlex30 @XL]
+inherits = Filatech FilaFlex30; *FLEXXL*
+filament_max_volumetric_speed = 3.5
+filament_retract_length = 3
+filament_multitool_ramming_flow = 3.5
+filament_retract_length_toolchange = 3
+
+[filament:Filatech FilaFlex30 @XL 0.6]
+inherits = Filatech FilaFlex30 @XL; *FLEX06XL*
+filament_max_volumetric_speed = 5
+filament_multitool_ramming_flow = 5
+
+[filament:Filatech FilaFlex30 @XL 0.8]
+inherits = Filatech FilaFlex30 @XL; *FLEX08XL*
+filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
+
+[filament:Filatech FilaFlex30 @MK4]
inherits = Filatech FilaFlex30; *FLEXPG*
filament_max_volumetric_speed = 3.5
filament_retract_length = 3
-[filament:Filatech FilaFlex30 @PG 0.6]
-inherits = Filatech FilaFlex30 @PG; *FLEX06PG*
-filament_max_volumetric_speed = 5
-
-[filament:Filatech FilaFlex30 @PG 0.8]
-inherits = Filatech FilaFlex30 @PG; *FLEX08PG*
-filament_max_volumetric_speed = 8
-
-[filament:Filatech FilaFlex30 @MK4]
-inherits = Filatech FilaFlex30; *FLEXMK4*
-filament_max_volumetric_speed = 3.5
-filament_retract_length = 3
-
[filament:Filatech FilaFlex30 @MK4 0.6]
-inherits = Filatech FilaFlex30 @MK4; *FLEX06MK4*
+inherits = Filatech FilaFlex30 @MK4; *FLEX06PG*
filament_max_volumetric_speed = 7
[filament:Filatech FilaFlex30 @MK4 0.8]
-inherits = Filatech FilaFlex30 @MK4; *FLEX08MK4*
+inherits = Filatech FilaFlex30 @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:Filatech FilaFlex55]
@@ -7870,32 +8554,36 @@ min_fan_speed = 80
fan_always_on = 1
temperature = 235
-[filament:Filatech TPU @PG]
-inherits = Filatech TPU; *FLEXPG*
+[filament:Filatech TPU @XL]
+inherits = Filatech TPU; *FLEXXL*
filament_max_volumetric_speed = 4.5
first_layer_temperature = 235
filament_retract_length = 2.2
+filament_multitool_ramming_flow = 4.5
+filament_retract_length_toolchange = 2.2
-[filament:Filatech TPU @PG 0.6]
-inherits = Filatech TPU @PG; *FLEX06PG*
+[filament:Filatech TPU @XL 0.6]
+inherits = Filatech TPU @XL; *FLEX06XL*
filament_max_volumetric_speed = 5
+filament_multitool_ramming_flow = 5
-[filament:Filatech TPU @PG 0.8]
-inherits = Filatech TPU @PG; *FLEX08PG*
+[filament:Filatech TPU @XL 0.8]
+inherits = Filatech TPU @XL; *FLEX08XL*
filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
[filament:Filatech TPU @MK4]
-inherits = Filatech TPU; *FLEXMK4*
+inherits = Filatech TPU; *FLEXPG*
filament_max_volumetric_speed = 5.5
first_layer_temperature = 235
filament_retract_length = 2.2
[filament:Filatech TPU @MK4 0.6]
-inherits = Filatech TPU @MK4; *FLEX06MK4*
+inherits = Filatech TPU @MK4; *FLEX06PG*
filament_max_volumetric_speed = 7
[filament:Filatech TPU @MK4 0.8]
-inherits = Filatech TPU @MK4; *FLEX08MK4*
+inherits = Filatech TPU @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:Filatech ABS]
@@ -7905,24 +8593,27 @@ filament_cost =
extrusion_multiplier = 0.95
filament_density = 1.05
-[filament:Filatech ABS @PG]
-inherits = Filatech ABS; *ABSPG*
+[filament:Filatech ABS @XL]
+inherits = Filatech ABS; *ABSPG*; *ABSXL*
+renamed_from = "Filatech ABS @PG"
bed_temperature = 105
-[filament:Filatech ABS @PG 0.6]
-inherits = Filatech ABS @PG; *ABS06PG*
+[filament:Filatech ABS @XL 0.6]
+inherits = Filatech ABS @XL; *ABS06XL*
+renamed_from = "Filatech ABS @PG 0.6"
-[filament:Filatech ABS @PG 0.8]
-inherits = Filatech ABS @PG; *ABS08PG*
+[filament:Filatech ABS @XL 0.8]
+inherits = Filatech ABS @XL; *ABS08XL*
+renamed_from = "Filatech ABS @PG 0.8"
[filament:Filatech ABS @MK4]
-inherits = Filatech ABS; *ABSMK4*
+inherits = Filatech ABS; *ABSPG*
[filament:Filatech ABS @MK4 0.6]
-inherits = Filatech ABS @MK4; *ABS06MK4*
+inherits = Filatech ABS @MK4; *ABS06PG*
[filament:Filatech ABS @MK4 0.8]
-inherits = Filatech ABS @MK4; *ABS08MK4*
+inherits = Filatech ABS @MK4; *ABS08PG*
[filament:Filatech ABS @MINI]
inherits = Filatech ABS; *ABSMINI*
@@ -7940,15 +8631,21 @@ compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI
[filament:Filatech FilaCarbon @PG]
inherits = Filatech FilaCarbon; *ABSPG*; *04PLUSPG*
first_layer_bed_temperature = 100
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Filatech FilaCarbon @PG 0.6]
inherits = Filatech FilaCarbon @PG; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Filatech FilaCarbon @PG 0.8]
inherits = Filatech FilaCarbon @PG; *ABS08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Filatech FilaCarbon @XL]
+inherits = Filatech FilaCarbon @PG; *ABSXL*; *04PLUSXL*
+
+[filament:Filatech FilaCarbon @XL 0.6]
+inherits = Filatech FilaCarbon @PG 0.6; *ABS06XL*
+
+[filament:Filatech FilaCarbon @XL 0.8]
+inherits = Filatech FilaCarbon @PG 0.8; *ABS08XL*
[filament:Filatech FilaCarbon @MINI]
inherits = Filatech FilaCarbon; *ABSMINI*
@@ -7974,6 +8671,15 @@ inherits = Filatech FilaPLA; *PLA06PG*
[filament:Filatech FilaPLA @PG 0.8]
inherits = Filatech FilaPLA; *PLA08PG*
+[filament:Filatech FilaPLA @XL]
+inherits = Filatech FilaPLA @PG; *PLAXL*
+
+[filament:Filatech FilaPLA @XL 0.6]
+inherits = Filatech FilaPLA @PG 0.6; *PLA06XL*
+
+[filament:Filatech FilaPLA @XL 0.8]
+inherits = Filatech FilaPLA @PG 0.8; *PLA08XL*
+
[filament:Filatech PLA]
inherits = *PLA*
filament_vendor = Filatech
@@ -7991,6 +8697,15 @@ inherits = Filatech PLA; *PLA06PG*
[filament:Filatech PLA @PG 0.8]
inherits = Filatech PLA; *PLA08PG*
+[filament:Filatech PLA @XL]
+inherits = Filatech PLA @PG; *PLAXL*
+
+[filament:Filatech PLA @XL 0.6]
+inherits = Filatech PLA @PG 0.6; *PLA06XL*
+
+[filament:Filatech PLA @XL 0.8]
+inherits = Filatech PLA @PG 0.8; *PLA08XL*
+
[filament:Filatech PLA+]
inherits = Filatech PLA
filament_density = 1.24
@@ -8004,6 +8719,15 @@ inherits = Filatech PLA+; *PLA06PG*
[filament:Filatech PLA+ @PG 0.8]
inherits = Filatech PLA+; *PLA08PG*
+[filament:Filatech PLA+ @XL]
+inherits = Filatech PLA+ @PG; *PLAXL*
+
+[filament:Filatech PLA+ @XL 0.6]
+inherits = Filatech PLA+ @PG; *PLA06XL*
+
+[filament:Filatech PLA+ @XL 0.8]
+inherits = Filatech PLA+ @PG; *PLA08XL*
+
[filament:Filatech FilaTough]
inherits = Filatech ABS
filament_cost =
@@ -8017,15 +8741,21 @@ cooling = 0
[filament:Filatech FilaTough @PG]
inherits = Filatech FilaTough; *ABSPG*
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Filatech FilaTough @PG 0.6]
inherits = Filatech FilaTough; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Filatech FilaTough @PG 0.8]
inherits = Filatech FilaTough; *ABS08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Filatech FilaTough @XL]
+inherits = Filatech FilaTough @PG; *ABSXL*
+
+[filament:Filatech FilaTough @XL 0.6]
+inherits = Filatech FilaTough @PG 0.6; *ABS06XL*
+
+[filament:Filatech FilaTough @XL 0.8]
+inherits = Filatech FilaTough @PG 0.8; *ABS08XL*
[filament:Filatech HIPS]
inherits = Prusa HIPS
@@ -8039,8 +8769,9 @@ temperature = 225
bed_temperature = 110
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Filatech HIPS @PG]
-inherits = Filatech HIPS; *ABSPG*
+[filament:Filatech HIPS @XL]
+inherits = Filatech HIPS; *ABSPG*; *ABSXL*
+renamed_from = "Filatech HIPS @PG"
bridge_fan_speed = 50
cooling = 1
extrusion_multiplier = 1
@@ -8053,14 +8784,16 @@ min_fan_speed = 20
first_layer_bed_temperature = 100
bed_temperature = 105
-[filament:Filatech HIPS @PG 0.6]
-inherits = Filatech HIPS @PG; *ABS06PG*
+[filament:Filatech HIPS @XL 0.6]
+inherits = Filatech HIPS @XL; *ABS06XL*
+renamed_from = "Filatech HIPS @PG 0.6"
-[filament:Filatech HIPS @PG 0.8]
-inherits = Filatech HIPS @PG; *ABS08PG*
+[filament:Filatech HIPS @XL 0.8]
+inherits = Filatech HIPS @XL; *ABS08XL*
+renamed_from = "Filatech HIPS @PG 0.8"
[filament:Filatech HIPS @MK4]
-inherits = Filatech HIPS; *ABSMK4*
+inherits = Filatech HIPS; *ABSPG*
bridge_fan_speed = 50
cooling = 1
extrusion_multiplier = 1
@@ -8072,10 +8805,10 @@ max_fan_speed = 20
min_fan_speed = 20
[filament:Filatech HIPS @MK4 0.6]
-inherits = Filatech HIPS @MK4; *ABS06MK4*
+inherits = Filatech HIPS @MK4; *ABS06PG*
[filament:Filatech HIPS @MK4 0.8]
-inherits = Filatech HIPS @MK4; *ABS08MK4*
+inherits = Filatech HIPS @MK4; *ABS08PG*
[filament:Filatech HIPS @MINI]
inherits = Filatech HIPS; *ABSMINI*
@@ -8096,30 +8829,33 @@ filament_type = PA
filament_max_volumetric_speed = 8
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Filatech PA @PG]
-inherits = Filatech PA; *ABSPG*
+[filament:Filatech PA @XL]
+inherits = Filatech PA; *ABSPG*; *ABSXL*
+renamed_from = "Filatech PA @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
filament_max_volumetric_speed = 8
-[filament:Filatech PA @PG 0.6]
-inherits = Filatech PA @PG; *ABS06PG*
+[filament:Filatech PA @XL 0.6]
+inherits = Filatech PA @XL; *ABS06XL*
+renamed_from = "Filatech PA @PG 0.6"
filament_max_volumetric_speed = 10
-[filament:Filatech PA @PG 0.8]
-inherits = Filatech PA @PG; *ABS08PG*
+[filament:Filatech PA @XL 0.8]
+inherits = Filatech PA @XL; *ABS08XL*
+renamed_from = "Filatech PA @PG 0.8"
filament_max_volumetric_speed = 12
[filament:Filatech PA @MK4]
-inherits = Filatech PA; *ABSMK4*
+inherits = Filatech PA; *ABSPG*
filament_max_volumetric_speed = 8
[filament:Filatech PA @MK4 0.6]
-inherits = Filatech PA @MK4; *ABS06MK4*
+inherits = Filatech PA @MK4; *ABS06PG*
filament_max_volumetric_speed = 10
[filament:Filatech PA @MK4 0.8]
-inherits = Filatech PA @MK4; *ABS08MK4*
+inherits = Filatech PA @MK4; *ABS08PG*
filament_max_volumetric_speed = 12
[filament:Filatech PA @MK2]
@@ -8141,23 +8877,26 @@ bed_temperature = 115
filament_density = 1.2
filament_type = PC
-[filament:Filatech PC @PG]
-inherits = Filatech PC; *PCPG*
+[filament:Filatech PC @XL]
+inherits = Filatech PC; *PCPG*; *PCXL*
+renamed_from = "Filatech PC @PG"
-[filament:Filatech PC @PG 0.6]
-inherits = Filatech PC @PG; *PC06PG*
+[filament:Filatech PC @XL 0.6]
+inherits = Filatech PC @XL; *PC06XL*
+renamed_from = "Filatech PC @PG 0.6"
-[filament:Filatech PC @PG 0.8]
-inherits = Filatech PC @PG; *PC08PG*
+[filament:Filatech PC @XL 0.8]
+inherits = Filatech PC @XL; *PC08XL*
+renamed_from = "Filatech PC @PG 0.8"
[filament:Filatech PC @MK4]
-inherits = Filatech PC; *PCMK4*
+inherits = Filatech PC; *PCPG*
[filament:Filatech PC @MK4 0.6]
-inherits = Filatech PC @MK4; *PC06MK4*
+inherits = Filatech PC @MK4; *PC06PG*
[filament:Filatech PC @MK4 0.8]
-inherits = Filatech PC @MK4; *PC08MK4*
+inherits = Filatech PC @MK4; *PC08PG*
[filament:Filatech PC @MK2]
inherits = Filatech PC
@@ -8178,23 +8917,26 @@ cooling = 1
extrusion_multiplier = 0.95
disable_fan_first_layers = 6
-[filament:Filatech PC-ABS @PG]
-inherits = Filatech PC-ABS; *PCPG*
+[filament:Filatech PC-ABS @XL]
+inherits = Filatech PC-ABS; *PCPG*; *PCXL*
+renamed_from = "Filatech PC-ABS @PG"
-[filament:Filatech PC-ABS @PG 0.6]
-inherits = Filatech PC-ABS; *PC06PG*
+[filament:Filatech PC-ABS @XL 0.6]
+inherits = Filatech PC-ABS @XL; *PC06XL*
+renamed_from = "Filatech PC-ABS @PG 0.6"
-[filament:Filatech PC-ABS @PG 0.8]
-inherits = Filatech PC-ABS; *PC08PG*
+[filament:Filatech PC-ABS @XL 0.8]
+inherits = Filatech PC-ABS @XL; *PC08XL*
+renamed_from = "Filatech PC-ABS @PG 0.8"
[filament:Filatech PC-ABS @MK4]
-inherits = Filatech PC-ABS; *PCMK4*
+inherits = Filatech PC-ABS; *PCPG*
[filament:Filatech PC-ABS @MK4 0.6]
-inherits = Filatech PC-ABS @MK4; *PC06MK4*
+inherits = Filatech PC-ABS @MK4; *PC06PG*
[filament:Filatech PC-ABS @MK4 0.8]
-inherits = Filatech PC-ABS @MK4; *PC08MK4*
+inherits = Filatech PC-ABS @MK4; *PC08PG*
[filament:Filatech PC-ABS @MK2]
inherits = Filatech PC-ABS
@@ -8223,6 +8965,15 @@ inherits = Filatech PETG; *PET06PG*
[filament:Filatech PETG @PG 0.8]
inherits = Filatech PETG; *PET08PG*
+[filament:Filatech PETG @XL]
+inherits = Filatech PETG @PG; *PETXL*
+
+[filament:Filatech PETG @XL 0.6]
+inherits = Filatech PETG @PG 0.6; *PET06XL*
+
+[filament:Filatech PETG @XL 0.8]
+inherits = Filatech PETG @PG 0.8; *PET08XL*
+
[filament:Filatech PETG @MINI]
inherits = Filatech PETG; *PETMINI*
@@ -8241,6 +8992,15 @@ inherits = Filatech Wood-PLA; *PLA06PG*
[filament:Filatech Wood-PLA @PG 0.8]
inherits = Filatech Wood-PLA; *PLA08PG*
+[filament:Filatech Wood-PLA @XL]
+inherits = Filatech Wood-PLA @PG; *PLAXL*
+
+[filament:Filatech Wood-PLA @XL 0.6]
+inherits = Filatech Wood-PLA @PG 0.6; *PLA06XL*
+
+[filament:Filatech Wood-PLA @XL 0.8]
+inherits = Filatech Wood-PLA @PG 0.8; *PLA08XL*
+
[filament:Ultrafuse PET]
inherits = *PET*
filament_vendor = BASF
@@ -8275,6 +9035,15 @@ inherits = Ultrafuse PET; *PET06PG*
[filament:Ultrafuse PET @PG 0.8]
inherits = Ultrafuse PET; *PET08PG*
+[filament:Ultrafuse PET @XL]
+inherits = Ultrafuse PET @PG; *PETXL*
+
+[filament:Ultrafuse PET @XL 0.6]
+inherits = Ultrafuse PET @PG 0.6; *PET06XL*
+
+[filament:Ultrafuse PET @XL 0.8]
+inherits = Ultrafuse PET @PG 0.8; *PET08XL*
+
[filament:Ultrafuse PET @MINI]
inherits = Ultrafuse PET; *PETMINI*
@@ -8302,6 +9071,15 @@ inherits = Ultrafuse PRO1; *PLA06PG*
[filament:Ultrafuse PRO1 @PG 0.8]
inherits = Ultrafuse PRO1; *PLA08PG*
+[filament:Ultrafuse PRO1 @XL]
+inherits = Ultrafuse PRO1 @PG; *PLAXL*
+
+[filament:Ultrafuse PRO1 @XL 0.6]
+inherits = Ultrafuse PRO1 @PG 0.6; *PLA06XL*
+
+[filament:Ultrafuse PRO1 @XL 0.8]
+inherits = Ultrafuse PRO1 @PG 0.8; *PLA08XL*
+
[filament:Ultrafuse PRO1 @MINI]
inherits = Ultrafuse PRO1
filament_retract_length = nil
@@ -8325,25 +9103,28 @@ filament_retract_before_travel = 2
filament_wipe = 0
filament_retract_layer_change = 0
-[filament:Ultrafuse ABS @PG]
-inherits = Ultrafuse ABS; *ABSPG*
+[filament:Ultrafuse ABS @XL]
+inherits = Ultrafuse ABS; *ABSPG*; *ABSXL*
+renamed_from = "Ultrafuse ABS @PG"
first_layer_bed_temperature = 100
bed_temperature = 100
-[filament:Ultrafuse ABS @PG 0.6]
-inherits = Ultrafuse ABS @PG; *ABS06PG*
+[filament:Ultrafuse ABS @XL 0.6]
+inherits = Ultrafuse ABS @XL; *ABS06XL*
+renamed_from = "Ultrafuse ABS @PG 0.6"
-[filament:Ultrafuse ABS @PG 0.8]
-inherits = Ultrafuse ABS @PG; *ABS08PG*
+[filament:Ultrafuse ABS @XL 0.8]
+inherits = Ultrafuse ABS @XL; *ABS08XL*
+renamed_from = "Ultrafuse ABS @PG 0.8"
[filament:Ultrafuse ABS @MK4]
-inherits = Ultrafuse ABS; *ABSMK4*
+inherits = Ultrafuse ABS; *ABSPG*
[filament:Ultrafuse ABS @MK4 0.6]
-inherits = Ultrafuse ABS @MK4; *ABS06MK4*
+inherits = Ultrafuse ABS @MK4; *ABS06PG*
[filament:Ultrafuse ABS @MK4 0.8]
-inherits = Ultrafuse ABS @MK4; *ABS08MK4*
+inherits = Ultrafuse ABS @MK4; *ABS08PG*
[filament:Ultrafuse ABS @MINI]
inherits = Ultrafuse ABS; *ABSMINI*
@@ -8362,25 +9143,28 @@ filament_wipe = nil
filament_retract_layer_change = 0
filament_retract_lift = 0
-[filament:Ultrafuse ABS Fusion+ @PG]
-inherits = Ultrafuse ABS Fusion+; *ABSPG*
+[filament:Ultrafuse ABS Fusion+ @XL]
+inherits = Ultrafuse ABS Fusion+; *ABSPG*; *ABSXL*
+renamed_from = "Ultrafuse ABS Fusion+ @PG"
first_layer_bed_temperature = 100
bed_temperature = 100
-[filament:Ultrafuse ABS Fusion+ @PG 0.6]
-inherits = Ultrafuse ABS Fusion+ @PG; *ABS06PG*
+[filament:Ultrafuse ABS Fusion+ @XL 0.6]
+inherits = Ultrafuse ABS Fusion+ @XL; *ABS06XL*
+renamed_from = "Ultrafuse ABS Fusion+ @PG 0.6"
-[filament:Ultrafuse ABS Fusion+ @PG 0.8]
-inherits = Ultrafuse ABS Fusion+ @PG; *ABS08PG*
+[filament:Ultrafuse ABS Fusion+ @XL 0.8]
+inherits = Ultrafuse ABS Fusion+ @XL; *ABS08XL*
+renamed_from = "Ultrafuse ABS Fusion+ @PG 0.8"
[filament:Ultrafuse ABS Fusion+ @MK4]
-inherits = Ultrafuse ABS Fusion+; *ABSMK4*
+inherits = Ultrafuse ABS Fusion+; *ABSPG*
[filament:Ultrafuse ABS Fusion+ @MK4 0.6]
-inherits = Ultrafuse ABS Fusion+ @MK4; *ABS06MK4*
+inherits = Ultrafuse ABS Fusion+ @MK4; *ABS06PG*
[filament:Ultrafuse ABS Fusion+ @MK4 0.8]
-inherits = Ultrafuse ABS Fusion+ @MK4; *ABS08MK4*
+inherits = Ultrafuse ABS Fusion+ @MK4; *ABS08PG*
[filament:Ultrafuse ABS Fusion+ @MINI]
inherits = Ultrafuse ABS Fusion+; *ABSMINI*
@@ -8403,34 +9187,37 @@ disable_fan_first_layers = 4
filament_max_volumetric_speed = 5
filament_notes = "Material Description\nUltrafuse ASA is a high-performance thermoplastic with similar mechanical properties as ABS. ASA offers additional benefits such as high outdoor weather resistance. The UV resistance, toughness, and rigidity make it an ideal material to 3D-print outdoor fixtures and appliances without losing its properties or color. When also taking into account the high heat resistance and high chemical resistance, this filament is a good choice for many types of applications.\n\nPrinting Recommendations:\nApply Magigoo PC, 3D lac or Dimafix to a clean build plate to improve adhesion."
-[filament:Ultrafuse ASA @PG]
-inherits = Ultrafuse ASA; *ABSPG*
+[filament:Ultrafuse ASA @XL]
+inherits = Ultrafuse ASA; *ABSPG*; *ABSXL*
+renamed_from = "Ultrafuse ASA @PG"
first_layer_bed_temperature = 105
bed_temperature = 105
filament_max_volumetric_speed = 5
min_fan_speed = 15
max_fan_speed = 40
-[filament:Ultrafuse ASA @PG 0.6]
-inherits = Ultrafuse ASA @PG; *ABS06PG*
+[filament:Ultrafuse ASA @XL 0.6]
+inherits = Ultrafuse ASA @XL; *ABS06XL*
+renamed_from = "Ultrafuse ASA @PG 0.6"
filament_max_volumetric_speed = 9
-[filament:Ultrafuse ASA @PG 0.8]
-inherits = Ultrafuse ASA @PG; *ABS08PG*
+[filament:Ultrafuse ASA @XL 0.8]
+inherits = Ultrafuse ASA @XL; *ABS08XL*
+renamed_from = "Ultrafuse ASA @PG 0.8"
filament_max_volumetric_speed = 12
[filament:Ultrafuse ASA @MK4]
-inherits = Ultrafuse ASA; *ABSMK4*
+inherits = Ultrafuse ASA; *ABSPG*
filament_max_volumetric_speed = 5
min_fan_speed = 15
max_fan_speed = 40
[filament:Ultrafuse ASA @MK4 0.6]
-inherits = Ultrafuse ASA @MK4; *ABS06MK4*
+inherits = Ultrafuse ASA @MK4; *ABS06PG*
filament_max_volumetric_speed = 9
[filament:Ultrafuse ASA @MK4 0.8]
-inherits = Ultrafuse ASA @MK4; *ABS08MK4*
+inherits = Ultrafuse ASA @MK4; *ABS08PG*
filament_max_volumetric_speed = 12
[filament:Ultrafuse ASA @MINI]
@@ -8447,25 +9234,28 @@ max_fan_speed = 20
filament_soluble = 1
filament_notes = "Material Description\nUltrafuse HIPS is a high-quality engineering thermoplastic, which is well known in the 3D-printing industry as a support material for ABS. But this material has additional properties to offer like good impact resistance, good dimensional stability, and easy post-processing. HiPS is a great material to use as a support for ABS because there is a good compatibility between the two materials, and HIPS is an easy breakaway support. Now you have the opportunity to create ABS models with complex geometry. HIPS is easy to post process with glue or with sanding paper."
-[filament:Ultrafuse HIPS @PG]
-inherits = Ultrafuse HIPS; *ABSPG*
+[filament:Ultrafuse HIPS @XL]
+inherits = Ultrafuse HIPS; *ABSPG*; *ABSXL*
+renamed_from = "Ultrafuse HIPS @PG"
first_layer_bed_temperature = 100
bed_temperature = 100
-[filament:Ultrafuse HIPS @PG 0.6]
-inherits = Ultrafuse HIPS @PG; *ABS06PG*
+[filament:Ultrafuse HIPS @XL 0.6]
+inherits = Ultrafuse HIPS @XL; *ABS06XL*
+renamed_from = "Ultrafuse HIPS @PG 0.6"
-[filament:Ultrafuse HIPS @PG 0.8]
-inherits = Ultrafuse HIPS @PG; *ABS08PG*
+[filament:Ultrafuse HIPS @XL 0.8]
+inherits = Ultrafuse HIPS @XL; *ABS08XL*
+renamed_from = "Ultrafuse HIPS @PG 0.8"
[filament:Ultrafuse HIPS @MK4]
-inherits = Ultrafuse HIPS; *ABSMK4*
+inherits = Ultrafuse HIPS; *ABSPG*
[filament:Ultrafuse HIPS @MK4 0.6]
-inherits = Ultrafuse HIPS @MK4; *ABS06MK4*
+inherits = Ultrafuse HIPS @MK4; *ABS06PG*
[filament:Ultrafuse HIPS @MK4 0.8]
-inherits = Ultrafuse HIPS @MK4; *ABS08MK4*
+inherits = Ultrafuse HIPS @MK4; *ABS08PG*
[filament:Ultrafuse HIPS @MINI]
inherits = Ultrafuse HIPS; *ABSMINI*
@@ -8502,17 +9292,23 @@ filament_notes = "Material Description\nThe key features of Ultrafuse PA are the
[filament:Ultrafuse PA @PG]
inherits = Ultrafuse PA; *ABSPG*
filament_max_volumetric_speed = 8
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Ultrafuse PA @PG 0.6]
inherits = Ultrafuse PA @PG; *ABS06PG*
filament_max_volumetric_speed = 10
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Ultrafuse PA @PG 0.8]
inherits = Ultrafuse PA @PG; *ABS08PG*
filament_max_volumetric_speed = 12
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Ultrafuse PA @XL]
+inherits = Ultrafuse PA @PG; *ABSXL*
+
+[filament:Ultrafuse PA @XL 0.6]
+inherits = Ultrafuse PA @PG 0.6; *ABS06XL*
+
+[filament:Ultrafuse PA @XL 0.8]
+inherits = Ultrafuse PA @PG 0.8; *ABS08XL*
[filament:Ultrafuse PA6 GF30]
inherits = Ultrafuse PA
@@ -8550,6 +9346,12 @@ first_layer_temperature = 275
temperature = 275
compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+[filament:Ultrafuse PA6 GF30 @XL 0.6]
+inherits = Ultrafuse PA6 GF30 @PG 0.6; *ABS06XL*
+
+[filament:Ultrafuse PA6 GF30 @XL 0.8]
+inherits = Ultrafuse PA6 GF30 @PG 0.8; *ABS08XL*
+
[filament:Ultrafuse PAHT-CF15]
inherits = Ultrafuse PA6 GF30
filament_density = 1.23
@@ -8557,11 +9359,15 @@ filament_notes = "Material Description\nPAHT CF15 is a high-performance 3D print
[filament:Ultrafuse PAHT-CF15 @PG 0.6]
inherits = Ultrafuse PAHT-CF15; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Ultrafuse PAHT-CF15 @PG 0.8]
inherits = Ultrafuse PAHT-CF15; *ABS08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Ultrafuse PAHT-CF15 @XL 0.6]
+inherits = Ultrafuse PAHT-CF15 @PG 0.6; *ABS06XL*
+
+[filament:Ultrafuse PAHT-CF15 @XL 0.8]
+inherits = Ultrafuse PAHT-CF15 @PG 0.8; *ABS08XL*
[filament:Ultrafuse PC-ABS-FR]
inherits = Ultrafuse ABS
@@ -8582,30 +9388,33 @@ compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*
filament_notes = "Material Description\nUltrafuse® PC/ABS FR Black is a V-0 flame retardant blend of Polycarbonate and ABS – two of the most used thermoplastics for engineering & electrical applications. The combination of these two materials results in a premium material with a mix of the excellent mechanical properties of PC and the comparably low printing temperature of ABS. Combined with a halogen free flame retardant, parts printed with Ultrafuse® PC/ABS FR Black feature great tensile and impact strength, higher thermal resistance than ABS and can fulfill the requirements of the UL94 V-0 standard.\n\nPrinting Recommendations:\nApply Magigoo PC to a clean build plate to improve adhesion."
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.07{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
-[filament:Ultrafuse PC-ABS-FR @PG]
-inherits = Ultrafuse PC-ABS-FR; *ABSPG*
+[filament:Ultrafuse PC-ABS-FR @XL]
+inherits = Ultrafuse PC-ABS-FR; *ABSPG*; *ABSXL*
+renamed_from = "Ultrafuse PC-ABS-FR @PG"
first_layer_bed_temperature = 105
bed_temperature = 105
filament_max_volumetric_speed = 8
-[filament:Ultrafuse PC-ABS-FR @PG 0.6]
-inherits = Ultrafuse PC-ABS-FR @PG; *ABS06PG*
+[filament:Ultrafuse PC-ABS-FR @XL 0.6]
+inherits = Ultrafuse PC-ABS-FR @XL; *ABS06XL*
+renamed_from = "Ultrafuse PC-ABS-FR @PG 0.6"
filament_max_volumetric_speed = 10
-[filament:Ultrafuse PC-ABS-FR @PG 0.8]
-inherits = Ultrafuse PC-ABS-FR @PG; *ABS08PG*
+[filament:Ultrafuse PC-ABS-FR @XL 0.8]
+inherits = Ultrafuse PC-ABS-FR @XL; *ABS08XL*
+renamed_from = "Ultrafuse PC-ABS-FR @PG 0.8"
filament_max_volumetric_speed = 12
[filament:Ultrafuse PC-ABS-FR @MK4]
-inherits = Ultrafuse PC-ABS-FR; *ABSMK4*
+inherits = Ultrafuse PC-ABS-FR; *ABSPG*
filament_max_volumetric_speed = 8
[filament:Ultrafuse PC-ABS-FR @MK4 0.6]
-inherits = Ultrafuse PC-ABS-FR @MK4; *ABS06MK4*
+inherits = Ultrafuse PC-ABS-FR @MK4; *ABS06PG*
filament_max_volumetric_speed = 10
[filament:Ultrafuse PC-ABS-FR @MK4 0.8]
-inherits = Ultrafuse PC-ABS-FR @MK4; *ABS08MK4*
+inherits = Ultrafuse PC-ABS-FR @MK4; *ABS08PG*
filament_max_volumetric_speed = 12
[filament:Ultrafuse PET-CF15]
@@ -8643,6 +9452,12 @@ filament_max_volumetric_speed = 13
first_layer_temperature = 270
temperature = 275
+[filament:Ultrafuse PET-CF15 @XL 0.6]
+inherits = Ultrafuse PET-CF15 @PG 0.6; *PET06XL*
+
+[filament:Ultrafuse PET-CF15 @XL 0.8]
+inherits = Ultrafuse PET-CF15 @PG 0.8; *PET08XL*
+
[filament:Ultrafuse PLA]
inherits = *PLA*
filament_vendor = BASF
@@ -8659,6 +9474,15 @@ inherits = Ultrafuse PLA; *PLA06PG*
[filament:Ultrafuse PLA @PG 0.8]
inherits = Ultrafuse PLA; *PLA08PG*
+[filament:Ultrafuse PLA @XL]
+inherits = Ultrafuse PLA @PG; *PLAXL*
+
+[filament:Ultrafuse PLA @XL 0.6]
+inherits = Ultrafuse PLA @PG 0.6; *PLA06XL*
+
+[filament:Ultrafuse PLA @XL 0.8]
+inherits = Ultrafuse PLA @PG 0.8; *PLA08XL*
+
[filament:Ultrafuse PP]
inherits = Ultrafuse ABS
filament_density = 0.91
@@ -8687,17 +9511,23 @@ compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM
[filament:Ultrafuse PP @PG]
inherits = Ultrafuse PP; *ABSPG*
filament_max_volumetric_speed = 2.5
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Ultrafuse PP @PG 0.6]
inherits = Ultrafuse PP @PG; *ABS06PG*
filament_max_volumetric_speed = 4
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Ultrafuse PP @PG 0.8]
inherits = Ultrafuse PP @PG; *ABS08PG*
filament_max_volumetric_speed = 6
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Ultrafuse PP @XL]
+inherits = Ultrafuse PP; *ABSPG*; *ABSXL*
+
+[filament:Ultrafuse PP @XL 0.6]
+inherits = Ultrafuse PP @XL; *ABS06XL*
+
+[filament:Ultrafuse PP @XL 0.8]
+inherits = Ultrafuse PP @XL; *ABS08XL*
[filament:Ultrafuse PP-GF30]
inherits = Ultrafuse PP
@@ -8723,11 +9553,15 @@ compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI
[filament:Ultrafuse PP-GF30 @PG 0.6]
inherits = Ultrafuse PP; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Ultrafuse PP-GF30 @PG 0.8]
inherits = Ultrafuse PP; *ABS08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Ultrafuse PP-GF30 @XL 0.6]
+inherits = Ultrafuse PP-GF30 @PG 0.6; *ABS06XL*
+
+[filament:Ultrafuse PP-GF30 @XL 0.8]
+inherits = Ultrafuse PP-GF30 @PG 0.8; *ABS08XL*
[filament:Ultrafuse TPC-45D]
inherits = *FLEX*
@@ -8808,7 +9642,30 @@ first_layer_temperature = 225
temperature = 220
filament_notes = "Material Description\nUltrafuse® TPU 85A comes in its natural white color. Chemical properties (e.g. resistance against particular substances) and tolerance for solvents can be made available, if these factors are relevant for a specific application. Generally, these properties correspond to publicly available data on polyether based TPUs. This material is not FDA conform. Good flexibility at low temperature, good wear performance and good damping behavior are the key features of Ultrafuse® TPU 85A.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing."
-[filament:Ultrafuse TPU-85A @PG]
+[filament:Ultrafuse TPU-85A @XL]
+inherits = Ultrafuse TPU-85A; *FLEXXL*
+renamed_from = "Ultrafuse TPU-85A @PG"
+filament_max_volumetric_speed = 3
+extrusion_multiplier = 1.1
+first_layer_temperature = 220
+temperature = 215
+filament_retract_length = 3.5
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 3.5
+
+[filament:Ultrafuse TPU-85A @XL 0.6]
+inherits = Ultrafuse TPU-85A @XL; *FLEX06XL*
+renamed_from = "Ultrafuse TPU-85A @PG 0.6"
+filament_max_volumetric_speed = 4
+filament_multitool_ramming_flow = 4
+
+[filament:Ultrafuse TPU-85A @XL 0.8]
+inherits = Ultrafuse TPU-85A @XL; *FLEX08XL*
+renamed_from = "Ultrafuse TPU-85A @PG 0.8"
+filament_max_volumetric_speed = 7
+filament_multitool_ramming_flow = 7
+
+[filament:Ultrafuse TPU-85A @MK4]
inherits = Ultrafuse TPU-85A; *FLEXPG*
filament_max_volumetric_speed = 3
extrusion_multiplier = 1.1
@@ -8816,28 +9673,12 @@ first_layer_temperature = 220
temperature = 215
filament_retract_length = 3.5
-[filament:Ultrafuse TPU-85A @PG 0.6]
-inherits = Ultrafuse TPU-85A @PG; *FLEX06PG*
-filament_max_volumetric_speed = 4
-
-[filament:Ultrafuse TPU-85A @PG 0.8]
-inherits = Ultrafuse TPU-85A @PG; *FLEX08PG*
-filament_max_volumetric_speed = 7
-
-[filament:Ultrafuse TPU-85A @MK4]
-inherits = Ultrafuse TPU-85A; *FLEXMK4*
-filament_max_volumetric_speed = 3
-extrusion_multiplier = 1.1
-first_layer_temperature = 220
-temperature = 215
-filament_retract_length = 3.5
-
[filament:Ultrafuse TPU-85A @MK4 0.6]
-inherits = Ultrafuse TPU-85A @MK4; *FLEX06MK4*
+inherits = Ultrafuse TPU-85A @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6
[filament:Ultrafuse TPU-85A @MK4 0.8]
-inherits = Ultrafuse TPU-85A @MK4; *FLEX08MK4*
+inherits = Ultrafuse TPU-85A @MK4; *FLEX08PG*
filament_max_volumetric_speed = 8
[filament:Ultrafuse TPU-95A]
@@ -8847,30 +9688,37 @@ first_layer_temperature = 230
temperature = 225
filament_notes = "Material Description\nUltrafuse® TPU 95A comes with a well-balanced profile of flexibility and durability. On top of that, it allows for easier and faster printing then softer TPU grades. Parts printed with Ultrafuse® TPU 95A show a high elongation, good impact resistance, excellent layer adhesion and a good resistance to oils and common industrially used chemicals. Due to its good printing behavior, Ultrafuse® TPU 95A is a good choice for starting printing flexible materials on both direct drive and bowden style printers.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing."
-[filament:Ultrafuse TPU-95A @PG]
+[filament:Ultrafuse TPU-95A @XL]
+inherits = Ultrafuse TPU-95A; *FLEXXL*
+renamed_from = "Ultrafuse TPU-95A @PG"
+filament_max_volumetric_speed = 2.5
+filament_retract_length = 3
+filament_multitool_ramming_flow = 2.5
+filament_retract_length_toolchange = 3
+
+[filament:Ultrafuse TPU-95A @XL 0.6]
+inherits = Ultrafuse TPU-95A @XL; *FLEX06XL*
+renamed_from = "Ultrafuse TPU-95A @PG 0.6"
+filament_max_volumetric_speed = 3.5
+filament_multitool_ramming_flow = 3.5
+
+[filament:Ultrafuse TPU-95A @XL 0.8]
+inherits = Ultrafuse TPU-95A @XL; *FLEX08XL*
+renamed_from = "Ultrafuse TPU-95A @PG 0.8"
+filament_max_volumetric_speed = 6
+filament_multitool_ramming_flow = 6
+
+[filament:Ultrafuse TPU-95A @MK4]
inherits = Ultrafuse TPU-95A; *FLEXPG*
filament_max_volumetric_speed = 2.5
filament_retract_length = 3
-[filament:Ultrafuse TPU-95A @PG 0.6]
-inherits = Ultrafuse TPU-95A @PG; *FLEX06PG*
-filament_max_volumetric_speed = 3.5
-
-[filament:Ultrafuse TPU-95A @PG 0.8]
-inherits = Ultrafuse TPU-95A @PG; *FLEX08PG*
-filament_max_volumetric_speed = 6
-
-[filament:Ultrafuse TPU-95A @MK4]
-inherits = Ultrafuse TPU-95A; *FLEXMK4*
-filament_max_volumetric_speed = 2.5
-filament_retract_length = 3
-
[filament:Ultrafuse TPU-95A @MK4 0.6]
-inherits = Ultrafuse TPU-95A @MK4; *FLEX06MK4*
+inherits = Ultrafuse TPU-95A @MK4; *FLEX06PG*
filament_max_volumetric_speed = 5
[filament:Ultrafuse TPU-95A @MK4 0.8]
-inherits = Ultrafuse TPU-95A @MK4; *FLEX08MK4*
+inherits = Ultrafuse TPU-95A @MK4; *FLEX08PG*
filament_max_volumetric_speed = 7
[filament:Ultrafuse rPET]
@@ -8903,6 +9751,15 @@ filament_max_volumetric_speed = 18
first_layer_temperature = 235
temperature = 245
+[filament:Ultrafuse rPET @XL]
+inherits = Ultrafuse rPET @PG; *PETXL*
+
+[filament:Ultrafuse rPET @XL 0.6]
+inherits = Ultrafuse rPET @PG 0.6; *PET06XL*
+
+[filament:Ultrafuse rPET @XL 0.8]
+inherits = Ultrafuse rPET @PG 0.8; *PET08XL*
+
[filament:Ultrafuse Metal]
inherits = *ABSC*
renamed_from = "Ultrafuse 17-4 PH"
@@ -8929,13 +9786,17 @@ filament_colour = #FFFFFF
inherits = Ultrafuse Metal; *ABSPG*; *04PLUSPG*
filament_max_volumetric_speed = 4
start_filament_gcode = "M900 K0"
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Ultrafuse Metal @PG 0.6]
inherits = Ultrafuse Metal @PG; *ABS06PG*
filament_max_volumetric_speed = 4
start_filament_gcode = "M900 K0"
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Ultrafuse Metal @XL]
+inherits = Ultrafuse Metal @PG; *ABSXL*
+
+[filament:Ultrafuse Metal @XL 0.6]
+inherits = Ultrafuse Metal @PG 0.6; *ABS06XL*
[filament:Polymaker PC-Max]
inherits = *ABS*
@@ -8951,30 +9812,33 @@ temperature = 270
bridge_fan_speed = 0
filament_max_volumetric_speed = 8
-[filament:Polymaker PC-Max @PG]
-inherits = Polymaker PC-Max; *ABSPG*
+[filament:Polymaker PC-Max @XL]
+inherits = Polymaker PC-Max; *ABSXL*
+renamed_from = "Polymaker PC-Max @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
filament_max_volumetric_speed = 8
-[filament:Polymaker PC-Max @PG 0.6]
-inherits = Polymaker PC-Max @PG; *ABS06PG*
+[filament:Polymaker PC-Max @XL 0.6]
+inherits = Polymaker PC-Max @XL; *ABS06XL*
+renamed_from = "Polymaker PC-Max @PG 0.6"
filament_max_volumetric_speed = 12
-[filament:Polymaker PC-Max @PG 0.8]
-inherits = Polymaker PC-Max @PG; *ABS08PG*
+[filament:Polymaker PC-Max @XL 0.8]
+inherits = Polymaker PC-Max @XL; *ABS08XL*
+renamed_from = "Polymaker PC-Max @PG 0.8"
filament_max_volumetric_speed = 15
[filament:Polymaker PC-Max @MK4]
-inherits = Polymaker PC-Max; *ABSMK4*
+inherits = Polymaker PC-Max; *ABSPG*
filament_max_volumetric_speed = 8
[filament:Polymaker PC-Max @MK4 0.6]
-inherits = Polymaker PC-Max @MK4; *ABS06MK4*
+inherits = Polymaker PC-Max @MK4; *ABS06PG*
filament_max_volumetric_speed = 12
[filament:Polymaker PC-Max @MK4 0.8]
-inherits = Polymaker PC-Max @MK4; *ABS08MK4*
+inherits = Polymaker PC-Max @MK4; *ABS08PG*
filament_max_volumetric_speed = 15
[filament:PrimaSelect PVA+]
@@ -9010,6 +9874,15 @@ first_layer_temperature = 210
temperature = 210
filament_max_volumetric_speed = 8
+[filament:PrimaSelect PVA+ @XL]
+inherits = PrimaSelect PVA+ @PG; *PLAXL*; *PVAXL*
+
+[filament:PrimaSelect PVA+ @XL 0.6]
+inherits = PrimaSelect PVA+ @PG 0.6; *PLA06XL*; *PVAXL*
+
+[filament:PrimaSelect PVA+ @XL 0.8]
+inherits = PrimaSelect PVA+ @PG 0.8; *PLA08XL*; *PVAXL*
+
[filament:Prusa ABS]
inherits = *ABSC*
filament_vendor = Made for Prusa
@@ -9018,26 +9891,29 @@ filament_density = 1.08
filament_spool_weight = 230
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Prusa ABS @PG]
-inherits = Prusa ABS; *ABSPG*
+[filament:Prusa ABS @XL]
+inherits = Prusa ABS; *ABSPG*; *ABSXL*
+renamed_from = "Prusa ABS @PG"
bed_temperature = 105
-[filament:Prusa ABS @PG 0.6]
-inherits = Prusa ABS @PG; *ABS06PG*
+[filament:Prusa ABS @XL 0.6]
+inherits = Prusa ABS @XL; *ABS06XL*
+renamed_from = "Prusa ABS @PG 0.6"
-[filament:Prusa ABS @PG 0.8]
-inherits = Prusa ABS @PG; *ABS08PG*
+[filament:Prusa ABS @XL 0.8]
+inherits = Prusa ABS @XL; *ABS08XL*
+renamed_from = "Prusa ABS @PG 0.8"
first_layer_temperature = 265
temperature = 265
[filament:Prusa ABS @MK4]
-inherits = Prusa ABS; *ABSMK4*
+inherits = Prusa ABS; *ABSPG*
[filament:Prusa ABS @MK4 0.6]
-inherits = Prusa ABS @MK4; *ABS06MK4*
+inherits = Prusa ABS @MK4; *ABS06PG*
[filament:Prusa ABS @MK4 0.8]
-inherits = Prusa ABS @MK4; *ABS08MK4*
+inherits = Prusa ABS @MK4; *ABS08PG*
first_layer_temperature = 265
temperature = 265
@@ -9312,24 +10188,27 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
temperature = 230
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Generic HIPS @PG]
-inherits = Generic HIPS; *ABSPG*
+[filament:Generic HIPS @XL]
+inherits = Generic HIPS; *ABSPG*; *ABSXL*
+renamed_from = "Generic HIPS @PG"
bed_temperature = 105
-[filament:Generic HIPS @PG 0.6]
-inherits = Generic HIPS @PG; *ABS06PG*
+[filament:Generic HIPS @XL 0.6]
+inherits = Generic HIPS @XL; *ABS06XL*
+renamed_from = "Generic HIPS @PG 0.6"
-[filament:Generic HIPS @PG 0.8]
-inherits = Generic HIPS @PG; *ABS08PG*
+[filament:Generic HIPS @XL 0.8]
+inherits = Generic HIPS @XL; *ABS08XL*
+renamed_from = "Generic HIPS @PG 0.8"
[filament:Generic HIPS @MK4]
-inherits = Generic HIPS; *ABSMK4*
+inherits = Generic HIPS; *ABSPG*
[filament:Generic HIPS @MK4 0.6]
-inherits = Generic HIPS @MK4; *ABS06MK4*
+inherits = Generic HIPS @MK4; *ABS06PG*
[filament:Generic HIPS @MK4 0.8]
-inherits = Generic HIPS @MK4; *ABS08MK4*
+inherits = Generic HIPS @MK4; *ABS08PG*
[filament:Prusa PETG]
inherits = *PET*
@@ -9342,16 +10221,25 @@ compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=
[filament:Prusa PETG @PG]
inherits = Prusa PETG; *PETPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusa PETG @PG 0.6]
inherits = Prusa PETG; *PET06PG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
[filament:Prusa PETG @PG 0.8]
inherits = Prusa PETG; *PET08PG*
temperature = 250
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+
+[filament:Prusa PETG @XL]
+inherits = Prusa PETG @PG; *PETXL*
+
+[filament:Prusa PETG @XL 0.6]
+inherits = Prusa PETG @PG 0.6; *PET06XL*
+
+[filament:Prusa PETG @XL 0.8]
+inherits = Prusa PETG @PG 0.8; *PET08XL*
[filament:Prusa PETG @PGIS]
inherits = Generic PETG @PG
@@ -9365,7 +10253,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusa PETG @PGIS 0.6]
inherits = Generic PETG @PG 0.6
@@ -9375,7 +10263,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Prusa PETG @PGIS 0.8]
inherits = Generic PETG @PG 0.8
@@ -9385,7 +10273,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
[filament:Verbatim PETG]
inherits = *PET*
@@ -9404,6 +10292,15 @@ inherits = Verbatim PETG; *PET06PG*
[filament:Verbatim PETG @PG 0.8]
inherits = Verbatim PETG; *PET08PG*
+[filament:Verbatim PETG @XL]
+inherits = Verbatim PETG @PG; *PETXL*
+
+[filament:Verbatim PETG @XL 0.6]
+inherits = Verbatim PETG @PG 0.6; *PET06XL*
+
+[filament:Verbatim PETG @XL 0.8]
+inherits = Verbatim PETG @PG 0.8; *PET08XL*
+
[filament:Prusament PETG]
inherits = *PET*
filament_vendor = Prusa Polymers
@@ -9417,17 +10314,26 @@ compatible_printers_condition = nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=
[filament:Prusament PETG @PG]
inherits = Prusament PETG; *PETPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusament PETG @PG 0.6]
inherits = Prusament PETG; *PET06PG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
[filament:Prusament PETG @PG 0.8]
inherits = Prusament PETG; *PET08PG*
first_layer_temperature = 250
temperature = 260
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+
+[filament:Prusament PETG @XL]
+inherits = Prusament PETG @PG; *PETXL*
+
+[filament:Prusament PETG @XL 0.6]
+inherits = Prusament PETG @PG 0.6; *PET06XL*
+
+[filament:Prusament PETG @XL 0.8]
+inherits = Prusament PETG @PG 0.8; *PET08XL*
[filament:Prusament PETG @PGIS]
inherits = Prusament PETG @PG
@@ -9439,7 +10345,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusament PETG @PGIS 0.6]
inherits = Prusament PETG @PG 0.6
@@ -9447,7 +10353,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Prusament PETG @PGIS 0.8]
inherits = Prusament PETG @PG 0.8
@@ -9455,7 +10361,7 @@ filament_retract_length = 0.8
filament_wipe = 1
filament_retract_before_wipe = 20
filament_retract_lift = nil
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
[filament:Prusament PETG V0 certified]
inherits = Prusament PETG
@@ -9483,6 +10389,15 @@ inherits = Prusament PETG V0 @PG; *PET06PG*
[filament:Prusament PETG V0 @PG 0.8]
inherits = Prusament PETG V0 @PG; *PET08PG*
+[filament:Prusament PETG V0 @XL]
+inherits = Prusament PETG V0 @PG; *PETXL*
+
+[filament:Prusament PETG V0 @XL 0.6]
+inherits = Prusament PETG V0 @PG 0.6; *PET06XL*
+
+[filament:Prusament PETG V0 @XL 0.8]
+inherits = Prusament PETG V0 @PG 0.8; *PET08XL*
+
[filament:Prusament PETG V0 @MINI]
inherits = Prusament PETG V0 certified; *PETMINI*
filament_notes = ""
@@ -9507,6 +10422,15 @@ inherits = Prusament PETG Carbon Fiber @PG; *PET06PG*
[filament:Prusament PETG Carbon Fiber @PG 0.8]
inherits = Prusament PETG Carbon Fiber @PG; *PET08PG*
+[filament:Prusament PETG Carbon Fiber @XL]
+inherits = Prusament PETG Carbon Fiber @PG; *PETXL*; *04PLUSXL*
+
+[filament:Prusament PETG Carbon Fiber @XL 0.6]
+inherits = Prusament PETG Carbon Fiber @PG 0.6; *PET06XL*
+
+[filament:Prusament PETG Carbon Fiber @XL 0.8]
+inherits = Prusament PETG Carbon Fiber @PG 0.8; *PET08XL*
+
## [filament:Prusament PETG Tungsten 75%]
## inherits = *PET*
## filament_vendor = Prusa Polymers
@@ -9711,16 +10635,25 @@ compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG
[filament:Prusa PLA @PG]
inherits = Prusa PLA; *PLAPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusa PLA @PG 0.6]
inherits = Prusa PLA; *PLA06PG*
filament_max_volumetric_speed = 15.5
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
[filament:Prusa PLA @PG 0.8]
inherits = Prusa PLA; *PLA08PG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.8
+
+[filament:Prusa PLA @XL]
+inherits = Prusa PLA @PG; *PLAXL*
+
+[filament:Prusa PLA @XL 0.6]
+inherits = Prusa PLA @PG 0.6; *PLA06XL*
+
+[filament:Prusa PLA @XL 0.8]
+inherits = Prusa PLA @PG 0.8; *PLA08XL*
[filament:Prusa PLA @PGIS]
inherits = Prusa PLA @PG
@@ -9728,19 +10661,19 @@ renamed_from = "Prusa PLA @MK4IS"
first_layer_temperature = 230
temperature = 220
slowdown_below_layer_time = 6
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusa PLA @PGIS 0.6]
inherits = Prusa PLA @PG 0.6
first_layer_temperature = 230
temperature = 220
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Prusa PLA @PGIS 0.8]
inherits = Prusa PLA @PG 0.8
first_layer_temperature = 230
temperature = 230
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
[filament:Eolas Prints PLA]
@@ -9762,6 +10695,15 @@ inherits = Eolas Prints PLA; *PLA06PG*
[filament:Eolas Prints PLA @PG 0.8]
inherits = Eolas Prints PLA; *PLA08PG*
+[filament:Eolas Prints PLA @XL]
+inherits = Eolas Prints PLA @PG; *PLAXL*
+
+[filament:Eolas Prints PLA @XL 0.6]
+inherits = Eolas Prints PLA @PG 0.6; *PLA06XL*
+
+[filament:Eolas Prints PLA @XL 0.8]
+inherits = Eolas Prints PLA @PG 0.8; *PLA08XL*
+
[filament:Eolas Prints PLA Matte]
inherits = Eolas Prints PLA
filament_cost = 25.50
@@ -9777,6 +10719,15 @@ inherits = Eolas Prints PLA Matte; *PLA06PG*
[filament:Eolas Prints PLA Matte @PG 0.8]
inherits = Eolas Prints PLA Matte; *PLA08PG*
+[filament:Eolas Prints PLA Matte @XL]
+inherits = Eolas Prints PLA Matte @PG; *PLAXL*
+
+[filament:Eolas Prints PLA Matte @XL 0.6]
+inherits = Eolas Prints PLA Matte @PG 0.6; *PLA06XL*
+
+[filament:Eolas Prints PLA Matte @XL 0.8]
+inherits = Eolas Prints PLA Matte @PG 0.8; *PLA08XL*
+
[filament:Eolas Prints INGEO 850]
inherits = Eolas Prints PLA
filament_cost = 25.90
@@ -9791,6 +10742,15 @@ inherits = Eolas Prints INGEO 850; *PLA06PG*
[filament:Eolas Prints INGEO 850 @PG 0.8]
inherits = Eolas Prints INGEO 850; *PLA08PG*
+[filament:Eolas Prints INGEO 850 @XL]
+inherits = Eolas Prints INGEO 850 @PG; *PLAXL*
+
+[filament:Eolas Prints INGEO 850 @XL 0.6]
+inherits = Eolas Prints INGEO 850 @PG 0.6; *PLA06XL*
+
+[filament:Eolas Prints INGEO 850 @XL 0.8]
+inherits = Eolas Prints INGEO 850 @PG 0.8; *PLA08XL*
+
[filament:Eolas Prints INGEO 870]
inherits = Eolas Prints PLA
filament_cost = 25.90
@@ -9808,6 +10768,15 @@ inherits = Eolas Prints INGEO 870; *PLA06PG*
[filament:Eolas Prints INGEO 870 @PG 0.8]
inherits = Eolas Prints INGEO 870; *PLA08PG*
+[filament:Eolas Prints INGEO 870 @XL]
+inherits = Eolas Prints INGEO 870 @PG; *PLAXL*
+
+[filament:Eolas Prints INGEO 870 @XL 0.6]
+inherits = Eolas Prints INGEO 870 @PG 0.6; *PLA06XL*
+
+[filament:Eolas Prints INGEO 870 @XL 0.8]
+inherits = Eolas Prints INGEO 870 @PG 0.8; *PLA08XL*
+
[filament:Eolas Prints PETG]
inherits = *PET*
filament_vendor = Eolas Prints
@@ -9832,6 +10801,15 @@ inherits = Eolas Prints PETG; *PET06PG*
[filament:Eolas Prints PETG @PG 0.8]
inherits = Eolas Prints PETG; *PET08PG*
+[filament:Eolas Prints PETG @XL]
+inherits = Eolas Prints PETG @PG; *PETXL*
+
+[filament:Eolas Prints PETG @XL 0.6]
+inherits = Eolas Prints PETG @PG 0.6; *PET06XL*
+
+[filament:Eolas Prints PETG @XL 0.8]
+inherits = Eolas Prints PETG @PG 0.8; *PET08XL*
+
[filament:Eolas Prints PETG @MINI]
inherits = Eolas Prints PETG; *PETMINI*
@@ -9850,6 +10828,15 @@ inherits = Eolas Prints PETG - UV Resistant; *PET06PG*
[filament:Eolas Prints PETG - UV Resistant @PG 0.8]
inherits = Eolas Prints PETG - UV Resistant; *PET08PG*
+[filament:Eolas Prints PETG - UV Resistant @XL]
+inherits = Eolas Prints PETG - UV Resistant @PG; *PETXL*
+
+[filament:Eolas Prints PETG - UV Resistant @XL 0.6]
+inherits = Eolas Prints PETG - UV Resistant @PG 0.6; *PET06XL*
+
+[filament:Eolas Prints PETG - UV Resistant @XL 0.8]
+inherits = Eolas Prints PETG - UV Resistant @PG 0.8; *PET08XL*
+
[filament:Eolas Prints PETG - UV Resistant @MINI]
inherits = Eolas Prints PETG - UV Resistant; *PETMINI*
@@ -9866,27 +10853,31 @@ bed_temperature = 30
filament_retract_length = 0
extrusion_multiplier = 1.16
-[filament:Eolas Prints TPU 93A @PG]
+[filament:Eolas Prints TPU 93A @XL]
+inherits = Eolas Prints TPU 93A; *FLEXXL*
+renamed_from = "Eolas Prints TPU 93A @PG"
+extrusion_multiplier = 1.1
+filament_retract_length = 2.5
+filament_retract_length_toolchange = 2.5
+
+[filament:Eolas Prints TPU 93A @XL 0.6]
+inherits = Eolas Prints TPU 93A @XL; *FLEX06XL*
+renamed_from = "Eolas Prints TPU 93A @PG 0.6"
+
+[filament:Eolas Prints TPU 93A @PG 0.8]
+inherits = Eolas Prints TPU 93A @XL; *FLEX08XL*
+renamed_from = "Eolas Prints TPU 93A @PG 0.8"
+
+[filament:Eolas Prints TPU 93A @MK4]
inherits = Eolas Prints TPU 93A; *FLEXPG*
extrusion_multiplier = 1.1
filament_retract_length = 2.5
-[filament:Eolas Prints TPU 93A @PG 0.6]
-inherits = Eolas Prints TPU 93A @PG; *FLEX06PG*
-
-[filament:Eolas Prints TPU 93A @PG 0.8]
-inherits = Eolas Prints TPU 93A @PG; *FLEX08PG*
-
-[filament:Eolas Prints TPU 93A @MK4]
-inherits = Eolas Prints TPU 93A; *FLEXMK4*
-extrusion_multiplier = 1.1
-filament_retract_length = 2.5
-
[filament:Eolas Prints TPU 93A @MK4 0.6]
-inherits = Eolas Prints TPU 93A @MK4; *FLEX06MK4*
+inherits = Eolas Prints TPU 93A @MK4; *FLEX06PG*
[filament:Eolas Prints TPU 93A @MK4 0.8]
-inherits = Eolas Prints TPU 93A @MK4; *FLEX08MK4*
+inherits = Eolas Prints TPU 93A @MK4; *FLEX08PG*
[filament:Print With Smile PLA]
inherits = *PLA*
@@ -9910,6 +10901,17 @@ inherits = Print With Smile PLA; *PLA08PG*
first_layer_temperature = 215
temperature = 215
+[filament:Print With Smile PLA @XL]
+inherits = Print With Smile PLA @PG; *PLAXL*
+
+[filament:Print With Smile PLA @XL 0.6]
+inherits = Print With Smile PLA @PG 0.6; *PLA06XL*
+
+[filament:Print With Smile PLA @XL 0.8]
+inherits = Print With Smile PLA @PG 0.8; *PLA08XL*
+first_layer_temperature = 215
+temperature = 215
+
[filament:Print With Smile PETG]
inherits = *PET*
filament_vendor = Print With Smile
@@ -9935,6 +10937,15 @@ filament_max_volumetric_speed = 16
inherits = Print With Smile PETG; *PET08PG*
filament_max_volumetric_speed = 19
+[filament:Print With Smile PETG @XL]
+inherits = Print With Smile PETG @PG; *PETXL*
+
+[filament:Print With Smile PETG @XL 0.6]
+inherits = Print With Smile PETG @PG 0.6; *PET06XL*
+
+[filament:Print With Smile PETG @XL 0.8]
+inherits = Print With Smile PETG @PG 0.8; *PET08XL*
+
[filament:Print With Smile PETG @MINI]
inherits = Print With Smile PETG; *PETMINI*
@@ -9955,27 +10966,30 @@ filament_max_volumetric_speed = 11
[filament:Print With Smile ASA @MINI]
inherits = Print With Smile ASA; *ABSMINI*
-[filament:Print With Smile ASA @PG]
-inherits = Print With Smile ASA; *ABSPG*
+[filament:Print With Smile ASA @XL]
+inherits = Print With Smile ASA; *ABSPG*; *ABSXL*
+renamed_from = "Print With Smile ASA @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
-[filament:Print With Smile ASA @PG 0.6]
-inherits = Print With Smile ASA @PG; *ABS06PG*
+[filament:Print With Smile ASA @XL 0.6]
+inherits = Print With Smile ASA @XL; *ABS06XL*
+renamed_from = "Print With Smile ASA @PG 0.6"
-[filament:Print With Smile ASA @PG 0.8]
-inherits = Print With Smile ASA @PG; *ABS08PG*
+[filament:Print With Smile ASA @XL 0.8]
+inherits = Print With Smile ASA @XL; *ABS08XL*
+renamed_from = "Print With Smile ASA @PG 0.8"
first_layer_temperature = 255
temperature = 255
[filament:Print With Smile ASA @MK4]
-inherits = Print With Smile ASA; *ABSMK4*
+inherits = Print With Smile ASA; *ABSPG*
[filament:Print With Smile ASA @MK4 0.6]
-inherits = Print With Smile ASA @MK4; *ABS06MK4*
+inherits = Print With Smile ASA @MK4; *ABS06PG*
[filament:Print With Smile ASA @MK4 0.8]
-inherits = Print With Smile ASA @MK4; *ABS08MK4*
+inherits = Print With Smile ASA @MK4; *ABS08PG*
first_layer_temperature = 255
temperature = 255
@@ -9990,25 +11004,28 @@ temperature = 240
[filament:Print With Smile ABS @MINI]
inherits = Print With Smile ABS; *ABSMINI*
-[filament:Print With Smile ABS @PG]
-inherits = Print With Smile ABS; *ABSPG*
+[filament:Print With Smile ABS @XL]
+inherits = Print With Smile ABS; *ABSPG*; *ABSXL*
+renamed_from = "Print With Smile ABS @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
-[filament:Print With Smile ABS @PG 0.6]
-inherits = Print With Smile ABS @PG; *ABS06PG*
+[filament:Print With Smile ABS @XL 0.6]
+inherits = Print With Smile ABS @XL; *ABS06XL*
+renamed_from = "Print With Smile ABS @PG 0.6"
-[filament:Print With Smile ABS @PG 0.8]
-inherits = Print With Smile ABS @PG; *ABS08PG*
+[filament:Print With Smile ABS @XL 0.8]
+inherits = Print With Smile ABS @XL; *ABS08XL*
+renamed_from = "Print With Smile ABS @PG 0.8"
[filament:Print With Smile ABS @MK4]
-inherits = Print With Smile ABS; *ABSMK4*
+inherits = Print With Smile ABS; *ABSPG*
[filament:Print With Smile ABS @MK4 0.6]
-inherits = Print With Smile ABS @MK4; *ABS06MK4*
+inherits = Print With Smile ABS @MK4; *ABS06PG*
[filament:Print With Smile ABS @MK4 0.8]
-inherits = Print With Smile ABS @MK4; *ABS08MK4*
+inherits = Print With Smile ABS @MK4; *ABS08PG*
[filament:Print With Smile PETG CF]
inherits = Extrudr XPETG CF
@@ -10039,6 +11056,15 @@ filament_max_volumetric_speed = 6.5
inherits = Print With Smile PETG CF @PG; *PET08PG*
filament_max_volumetric_speed = 8
+[filament:Print With Smile PETG CF @XL]
+inherits = Print With Smile PETG CF @PG; *PETXL*
+
+[filament:Print With Smile PETG CF @XL 0.6]
+inherits = Print With Smile PETG CF @PG 0.6; *PET06XL*
+
+[filament:Print With Smile PETG CF @XL 0.8]
+inherits = Print With Smile PETG CF @PG 0.8; *PET08XL*
+
[filament:Print With Smile TPU96A]
inherits = *FLEX*
filament_vendor = Print With Smile
@@ -10055,30 +11081,37 @@ full_fan_speed_layer = 6
filament_retract_length = 1.2
filament_deretract_speed = 20
-[filament:Print With Smile TPU96A @PG]
-inherits = Print With Smile TPU96A; *FLEXPG*
+[filament:Print With Smile TPU96A @XL]
+inherits = Print With Smile TPU96A; *FLEXXL*
+renamed_from = "Print With Smile TPU96A @PG"
filament_retract_length = 2
filament_max_volumetric_speed = 2.5
+filament_multitool_ramming_flow = 2.5
+filament_retract_length_toolchange = 2
-[filament:Print With Smile TPU96A @PG 0.6]
-inherits = Print With Smile TPU96A @PG; *FLEX06PG*
+[filament:Print With Smile TPU96A @XL 0.6]
+inherits = Print With Smile TPU96A @XL; *FLEX06XL*
+renamed_from = "Print With Smile TPU96A @PG 0.6"
filament_max_volumetric_speed = 3.5
+filament_multitool_ramming_flow = 3.5
-[filament:Print With Smile TPU96A @PG 0.8]
-inherits = Print With Smile TPU96A @PG; *FLEX08PG*
+[filament:Print With Smile TPU96A @XL 0.8]
+inherits = Print With Smile TPU96A @XL; *FLEX08XL*
+renamed_from = "Print With Smile TPU96A @PG 0.8"
filament_max_volumetric_speed = 7
+filament_multitool_ramming_flow = 7
[filament:Print With Smile TPU96A @MK4]
-inherits = Print With Smile TPU96A; *FLEXMK4*
+inherits = Print With Smile TPU96A; *FLEXPG*
filament_retract_length = 2
filament_max_volumetric_speed = 3
[filament:Print With Smile TPU96A @MK4 0.6]
-inherits = Print With Smile TPU96A @MK4; *FLEX06MK4*
+inherits = Print With Smile TPU96A @MK4; *FLEX06PG*
filament_max_volumetric_speed = 5
[filament:Print With Smile TPU96A @MK4 0.8]
-inherits = Print With Smile TPU96A @MK4; *FLEX08MK4*
+inherits = Print With Smile TPU96A @MK4; *FLEX08PG*
filament_max_volumetric_speed = 8
[filament:Fiberlogy Easy PLA]
@@ -10100,6 +11133,15 @@ inherits = Fiberlogy Easy PLA; *PLA06PG*
[filament:Fiberlogy Easy PLA @PG 0.8]
inherits = Fiberlogy Easy PLA; *PLA08PG*
+[filament:Fiberlogy Easy PLA @XL]
+inherits = Fiberlogy Easy PLA @PG; *PLAXL*
+
+[filament:Fiberlogy Easy PLA @XL 0.6]
+inherits = Fiberlogy Easy PLA @PG 0.6; *PLA06XL*
+
+[filament:Fiberlogy Easy PLA @XL 0.8]
+inherits = Fiberlogy Easy PLA @PG 0.8; *PLA08XL*
+
[filament:Fiberlogy Easy PET-G]
inherits = *PET*
renamed_from = Fiberlogy PETG
@@ -10128,6 +11170,15 @@ inherits = Fiberlogy Easy PET-G; *PET06PG*
[filament:Fiberlogy Easy PET-G @PG 0.8]
inherits = Fiberlogy Easy PET-G; *PET08PG*
+[filament:Fiberlogy Easy PET-G @XL]
+inherits = Fiberlogy Easy PET-G @PG; *PETXL*
+
+[filament:Fiberlogy Easy PET-G @XL 0.6]
+inherits = Fiberlogy Easy PET-G @PG 0.6; *PET06XL*
+
+[filament:Fiberlogy Easy PET-G @XL 0.8]
+inherits = Fiberlogy Easy PET-G @PG 0.8; *PET08XL*
+
[filament:Fiberlogy ASA]
inherits = *ABS*
filament_vendor = Fiberlogy
@@ -10149,25 +11200,28 @@ filament_type = ASA
fan_below_layer_time = 30
disable_fan_first_layers = 5
-[filament:Fiberlogy ASA @PG]
-inherits = Fiberlogy ASA; *ABSPG*
+[filament:Fiberlogy ASA @XL]
+inherits = Fiberlogy ASA; *ABSPG*; *ABSXL*
+renamed_from = "Fiberlogy ASA @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
-[filament:Fiberlogy ASA @PG 0.6]
-inherits = Fiberlogy ASA @PG; *ABS06PG*
+[filament:Fiberlogy ASA @XL 0.6]
+inherits = Fiberlogy ASA @XL; *ABS06XL*
+renamed_from = "Fiberlogy ASA @PG 0.6"
-[filament:Fiberlogy ASA @PG 0.8]
-inherits = Fiberlogy ASA @PG; *ABS08PG*
+[filament:Fiberlogy ASA @XL 0.8]
+inherits = Fiberlogy ASA @XL; *ABS08XL*
+renamed_from = "Fiberlogy ASA @PG 0.8"
[filament:Fiberlogy ASA @MK4]
-inherits = Fiberlogy ASA; *ABSMK4*
+inherits = Fiberlogy ASA; *ABSPG*
[filament:Fiberlogy ASA @MK4 0.6]
-inherits = Fiberlogy ASA @MK4; *ABS06MK4*
+inherits = Fiberlogy ASA @MK4; *ABS06PG*
[filament:Fiberlogy ASA @MK4 0.8]
-inherits = Fiberlogy ASA @MK4; *ABS08MK4*
+inherits = Fiberlogy ASA @MK4; *ABS08PG*
[filament:Fiberlogy ASA @MINI]
inherits = Fiberlogy ASA; *ABSMINI*
@@ -10192,15 +11246,21 @@ disable_fan_first_layers = 5
[filament:Fiberlogy Easy ABS @PG]
inherits = Fiberlogy Easy ABS; *ABSPG*
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberlogy Easy ABS @PG 0.6]
inherits = Fiberlogy Easy ABS; *ABS06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberlogy Easy ABS @PG 0.8]
inherits = Fiberlogy Easy ABS; *ABS08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Fiberlogy Easy ABS @XL]
+inherits = Fiberlogy Easy ABS @PG; *ABSXL*
+
+[filament:Fiberlogy Easy ABS @XL 0.6]
+inherits = Fiberlogy Easy ABS @PG 0.6; *ABS06XL*
+
+[filament:Fiberlogy Easy ABS @XL 0.8]
+inherits = Fiberlogy Easy ABS @PG 0.8; *ABS08XL*
[filament:Fiberlogy Easy ABS @MINI]
inherits = Fiberlogy Easy ABS; *ABSMINI*
@@ -10238,6 +11298,15 @@ inherits = Fiberlogy CPE HT @PG; *PET06PG*
[filament:Fiberlogy CPE HT @PG 0.8]
inherits = Fiberlogy CPE HT @PG; *PET08PG*
+[filament:Fiberlogy CPE HT @XL]
+inherits = Fiberlogy CPE HT @PG; *PETXL*
+
+[filament:Fiberlogy CPE HT @XL 0.6]
+inherits = Fiberlogy CPE HT @PG 0.6; *PET06XL*
+
+[filament:Fiberlogy CPE HT @XL 0.8]
+inherits = Fiberlogy CPE HT @PG 0.8; *PET08XL*
+
[filament:Fiberlogy PCTG]
inherits = Fiberlogy CPE HT
filament_cost = 29.41
@@ -10260,6 +11329,15 @@ inherits = Fiberlogy PCTG; *PET06PG*
[filament:Fiberlogy PCTG @PG 0.8]
inherits = Fiberlogy PCTG; *PET08PG*
+[filament:Fiberlogy PCTG @XL]
+inherits = Fiberlogy PCTG @PG; *PETXL*
+
+[filament:Fiberlogy PCTG @XL 0.6]
+inherits = Fiberlogy PCTG @PG 0.6; *PET06XL*
+
+[filament:Fiberlogy PCTG @XL 0.8]
+inherits = Fiberlogy PCTG @PG 0.8; *PET08XL*
+
[filament:Fiberlogy PCTG @MINI]
inherits = Fiberlogy PCTG; *PETMINI*
@@ -10290,24 +11368,31 @@ min_print_speed = 15
cooling = 1
filament_spool_weight = 330
-[filament:Fiberlogy FiberFlex 40D @PG]
-inherits = Fiberlogy FiberFlex 40D; *FLEXPG*
+[filament:Fiberlogy FiberFlex 40D @XL]
+inherits = Fiberlogy FiberFlex 40D; *FLEXXL*
+renamed_from = "Fiberlogy FiberFlex 40D @PG"
filament_max_volumetric_speed = 3
filament_retract_length = 2.2
extrusion_multiplier = 1.1
first_layer_temperature = 220
temperature = 220
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 2.2
-[filament:Fiberlogy FiberFlex 40D @PG 0.6]
-inherits = Fiberlogy FiberFlex 40D @PG; *FLEX06PG*
+[filament:Fiberlogy FiberFlex 40D @XL 0.6]
+inherits = Fiberlogy FiberFlex 40D @XL; *FLEX06XL*
+renamed_from = "Fiberlogy FiberFlex 40D @PG 0.6"
filament_max_volumetric_speed = 4.5
+filament_multitool_ramming_flow = 4.5
-[filament:Fiberlogy FiberFlex 40D @PG 0.8]
-inherits = Fiberlogy FiberFlex 40D @PG; *FLEX08PG*
+[filament:Fiberlogy FiberFlex 40D @XL 0.8]
+inherits = Fiberlogy FiberFlex 40D @XL; *FLEX08XL*
+renamed_from = "Fiberlogy FiberFlex 40D @PG 0.8"
filament_max_volumetric_speed = 9
+filament_multitool_ramming_flow = 9
[filament:Fiberlogy FiberFlex 40D @MK4]
-inherits = Fiberlogy FiberFlex 40D; *FLEXMK4*
+inherits = Fiberlogy FiberFlex 40D; *FLEXPG*
filament_max_volumetric_speed = 4
filament_retract_length = 2.2
extrusion_multiplier = 1.1
@@ -10315,11 +11400,11 @@ first_layer_temperature = 220
temperature = 220
[filament:Fiberlogy FiberFlex 40D @MK4 0.6]
-inherits = Fiberlogy FiberFlex 40D @MK4; *FLEX06MK4*
+inherits = Fiberlogy FiberFlex 40D @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6
[filament:Fiberlogy FiberFlex 40D @MK4 0.8]
-inherits = Fiberlogy FiberFlex 40D @MK4; *FLEX08MK4*
+inherits = Fiberlogy FiberFlex 40D @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:Fiberlogy FiberFlex 40D @MINI]
@@ -10351,30 +11436,37 @@ filament_retract_before_travel = 2
filament_cost = 49.11
filament_retract_length = 1.2
-[filament:Fiberlogy MattFlex 40D @PG]
-inherits = Fiberlogy MattFlex 40D; *FLEXPG*
+[filament:Fiberlogy MattFlex 40D @XL]
+inherits = Fiberlogy MattFlex 40D; *FLEXXL*
+renamed_from = "Fiberlogy MattFlex 40D @PG"
filament_max_volumetric_speed = 3
filament_retract_length = 2.2
+filament_multitool_ramming_flow = 3
+filament_retract_length_toolchange = 2.2
-[filament:Fiberlogy MattFlex 40D @PG 0.6]
-inherits = Fiberlogy MattFlex 40D @PG; *FLEX06PG*
+[filament:Fiberlogy MattFlex 40D @XL 0.6]
+inherits = Fiberlogy MattFlex 40D @XL; *FLEX06XL*
+renamed_from = "Fiberlogy MattFlex 40D @PG 0.6"
filament_max_volumetric_speed = 4.5
+filament_multitool_ramming_flow = 4.5
-[filament:Fiberlogy MattFlex 40D @PG 0.8]
-inherits = Fiberlogy MattFlex 40D @PG; *FLEX08PG*
+[filament:Fiberlogy MattFlex 40D @XL 0.8]
+inherits = Fiberlogy MattFlex 40D @XL; *FLEX08XL*
+renamed_from = "Fiberlogy MattFlex 40D @PG 0.8"
filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
[filament:Fiberlogy MattFlex 40D @MK4]
-inherits = Fiberlogy MattFlex 40D; *FLEXMK4*
+inherits = Fiberlogy MattFlex 40D; *FLEXPG*
filament_max_volumetric_speed = 4
filament_retract_length = 2.2
[filament:Fiberlogy MattFlex 40D @MK4 0.6]
-inherits = Fiberlogy MattFlex 40D @MK4; *FLEX06MK4*
+inherits = Fiberlogy MattFlex 40D @MK4; *FLEX06PG*
filament_max_volumetric_speed = 6
[filament:Fiberlogy MattFlex 40D @MK4 0.8]
-inherits = Fiberlogy MattFlex 40D @MK4; *FLEX08MK4*
+inherits = Fiberlogy MattFlex 40D @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:Fiberlogy FiberFlex 30D]
@@ -10388,8 +11480,9 @@ max_fan_speed = 60
filament_density = 1.07
filament_retract_length = 1.2
-[filament:Fiberlogy FiberFlex 30D @PG]
-inherits = Fiberlogy FiberFlex 30D; *FLEXPG*
+[filament:Fiberlogy FiberFlex 30D @XL]
+inherits = Fiberlogy FiberFlex 30D; *FLEXXL*
+renamed_from = "Fiberlogy FiberFlex 30D @PG"
filament_max_volumetric_speed = 2.5
filament_retract_length = 3
first_layer_temperature = 220
@@ -10397,17 +11490,22 @@ temperature = 220
first_layer_bed_temperature = 55
bed_temperature = 55
extrusion_multiplier = 1.1
+filament_retract_length_toolchange = 3
-[filament:Fiberlogy FiberFlex 30D @PG 0.6]
-inherits = Fiberlogy FiberFlex 30D @PG; *FLEX06PG*
+[filament:Fiberlogy FiberFlex 30D @XL 0.6]
+inherits = Fiberlogy FiberFlex 30D @XL; *FLEX06XL*
+renamed_from = "Fiberlogy FiberFlex 30D @PG 0.6"
filament_max_volumetric_speed = 5
+filament_multitool_ramming_flow = 5
-[filament:Fiberlogy FiberFlex 30D @PG 0.8]
-inherits = Fiberlogy FiberFlex 30D @PG; *FLEX08PG*
+[filament:Fiberlogy FiberFlex 30D @XL 0.8]
+inherits = Fiberlogy FiberFlex 30D @XL; *FLEX08XL*
+renamed_from = "Fiberlogy FiberFlex 30D @PG 0.8"
filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
[filament:Fiberlogy FiberFlex 30D @MK4]
-inherits = Fiberlogy FiberFlex 30D; *FLEXMK4*
+inherits = Fiberlogy FiberFlex 30D; *FLEXPG*
filament_max_volumetric_speed = 3.5
filament_retract_length = 3
first_layer_temperature = 220
@@ -10417,11 +11515,11 @@ bed_temperature = 55
extrusion_multiplier = 1.1
[filament:Fiberlogy FiberFlex 30D @MK4 0.6]
-inherits = Fiberlogy FiberFlex 30D @MK4; *FLEX06MK4*
+inherits = Fiberlogy FiberFlex 30D @MK4; *FLEX06PG*
filament_max_volumetric_speed = 7
[filament:Fiberlogy FiberFlex 30D @MK4 0.8]
-inherits = Fiberlogy FiberFlex 30D @MK4; *FLEX08MK4*
+inherits = Fiberlogy FiberFlex 30D @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:Fiberlogy FiberSatin]
@@ -10441,6 +11539,15 @@ inherits = Fiberlogy FiberSatin; *PLA06PG*
[filament:Fiberlogy FiberSatin @PG 0.8]
inherits = Fiberlogy FiberSatin; *PLA08PG*
+[filament:Fiberlogy FiberSatin @XL]
+inherits = Fiberlogy FiberSatin @PG; *PLAXL*
+
+[filament:Fiberlogy FiberSatin @XL 0.6]
+inherits = Fiberlogy FiberSatin @PG 0.6; *PLA06XL*
+
+[filament:Fiberlogy FiberSatin @XL 0.8]
+inherits = Fiberlogy FiberSatin @PG 0.8; *PLA08XL*
+
[filament:Fiberlogy FiberSilk]
inherits = Fiberlogy FiberSatin
first_layer_temperature = 230
@@ -10458,6 +11565,15 @@ inherits = Fiberlogy FiberSilk; *PLA06PG*
[filament:Fiberlogy FiberSilk @PG 0.8]
inherits = Fiberlogy FiberSilk; *PLA08PG*
+[filament:Fiberlogy FiberSilk @XL]
+inherits = Fiberlogy FiberSilk @PG; *PLAXL*
+
+[filament:Fiberlogy FiberSilk @XL 0.6]
+inherits = Fiberlogy FiberSilk @PG 0.6; *PLA06XL*
+
+[filament:Fiberlogy FiberSilk @XL 0.8]
+inherits = Fiberlogy FiberSilk @PG 0.8; *PLA08XL*
+
[filament:Fiberlogy FiberWood]
inherits = Fiberlogy Easy PLA
first_layer_temperature = 185
@@ -10481,6 +11597,15 @@ filament_max_volumetric_speed = 15
first_layer_temperature = 195
temperature = 195
+[filament:Fiberlogy FiberWood @XL]
+inherits = Fiberlogy FiberWood @PG; *PLAXL*
+
+[filament:Fiberlogy FiberWood @XL 0.6]
+inherits = Fiberlogy FiberWood @PG 0.6; *PLA06XL*
+
+[filament:Fiberlogy FiberWood @XL 0.8]
+inherits = Fiberlogy FiberWood @PG 0.8; *PLA08XL*
+
[filament:Fiberlogy HD PLA]
inherits = Fiberlogy Easy PLA
first_layer_temperature = 230
@@ -10498,6 +11623,15 @@ inherits = Fiberlogy HD PLA; *PLA06PG*
[filament:Fiberlogy HD PLA @PG 0.8]
inherits = Fiberlogy HD PLA; *PLA08PG*
+[filament:Fiberlogy HD PLA @XL]
+inherits = Fiberlogy HD PLA @PG; *PLAXL*
+
+[filament:Fiberlogy HD PLA @XL 0.6]
+inherits = Fiberlogy HD PLA @PG 0.6; *PLA06XL*
+
+[filament:Fiberlogy HD PLA @XL 0.8]
+inherits = Fiberlogy HD PLA @PG 0.8; *PLA08XL*
+
[filament:Fiberlogy PLA Mineral]
inherits = Fiberlogy Easy PLA
first_layer_temperature = 195
@@ -10521,6 +11655,15 @@ filament_max_volumetric_speed = 14
first_layer_temperature = 200
temperature = 200
+[filament:Fiberlogy PLA Mineral @XL]
+inherits = Fiberlogy PLA Mineral @PG; *PLAXL*
+
+[filament:Fiberlogy PLA Mineral @XL 0.6]
+inherits = Fiberlogy PLA Mineral @PG 0.6; *PLA06XL*
+
+[filament:Fiberlogy PLA Mineral @XL 0.8]
+inherits = Fiberlogy PLA Mineral @PG 0.8; *PLA08XL*
+
[filament:Fiberlogy Impact PLA]
inherits = Fiberlogy HD PLA
filament_density = 1.22
@@ -10535,6 +11678,15 @@ inherits = Fiberlogy Impact PLA; *PLA06PG*
[filament:Fiberlogy Impact PLA @PG 0.8]
inherits = Fiberlogy Impact PLA; *PLA08PG*
+[filament:Fiberlogy Impact PLA @XL]
+inherits = Fiberlogy Impact PLA @PG; *PLAXL*
+
+[filament:Fiberlogy Impact PLA @XL 0.6]
+inherits = Fiberlogy Impact PLA @PG 0.6; *PLA06XL*
+
+[filament:Fiberlogy Impact PLA @XL 0.8]
+inherits = Fiberlogy Impact PLA @PG 0.8; *PLA08XL*
+
[filament:Fiberlogy Nylon PA12]
inherits = Fiberlogy ASA
filament_type = PA
@@ -10553,30 +11705,33 @@ filament_retract_lift = 0.2
filament_max_volumetric_speed = 6
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K26{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
-[filament:Fiberlogy Nylon PA12 @PG]
-inherits = Fiberlogy Nylon PA12; *ABSPG*
+[filament:Fiberlogy Nylon PA12 @XL]
+inherits = Fiberlogy Nylon PA12; *ABSPG*; *ABSXL*
+renamed_from = "Fiberlogy Nylon PA12 @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
filament_max_volumetric_speed = 6
-[filament:Fiberlogy Nylon PA12 @PG 0.6]
-inherits = Fiberlogy Nylon PA12 @PG; *ABS06PG*
+[filament:Fiberlogy Nylon PA12 @XL 0.6]
+inherits = Fiberlogy Nylon PA12 @XL; *ABS06XL*
+renamed_from = "Fiberlogy Nylon PA12 @PG 0.6"
filament_max_volumetric_speed = 8
-[filament:Fiberlogy Nylon PA12 @PG 0.8]
-inherits = Fiberlogy Nylon PA12 @PG; *ABS08PG*
+[filament:Fiberlogy Nylon PA12 @XL 0.8]
+inherits = Fiberlogy Nylon PA12 @XL; *ABS08XL*
+renamed_from = "Fiberlogy Nylon PA12 @PG 0.8"
filament_max_volumetric_speed = 11
[filament:Fiberlogy Nylon PA12 @MK4]
-inherits = Fiberlogy Nylon PA12; *ABSMK4*
+inherits = Fiberlogy Nylon PA12; *ABSPG*
filament_max_volumetric_speed = 6
[filament:Fiberlogy Nylon PA12 @MK4 0.6]
-inherits = Fiberlogy Nylon PA12 @MK4; *ABS06MK4*
+inherits = Fiberlogy Nylon PA12 @MK4; *ABS06PG*
filament_max_volumetric_speed = 8
[filament:Fiberlogy Nylon PA12 @MK4 0.8]
-inherits = Fiberlogy Nylon PA12 @MK4; *ABS08MK4*
+inherits = Fiberlogy Nylon PA12 @MK4; *ABS08PG*
filament_max_volumetric_speed = 11
[filament:Fiberlogy Nylon PA12+CF15]
@@ -10596,32 +11751,34 @@ fan_always_on = 0
filament_max_volumetric_speed = 8
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
-[filament:Fiberlogy Nylon PA12+CF15 @PG]
-inherits = Fiberlogy Nylon PA12+CF15; *ABSPG*; *04PLUSPG*
+[filament:Fiberlogy Nylon PA12+CF15 @XL]
+inherits = Fiberlogy Nylon PA12+CF15; *ABSPG*; *ABSXL*; *04PLUSXL*
+renamed_from = "Fiberlogy Nylon PA12+CF15 @PG"
first_layer_bed_temperature = 100
bed_temperature = 105
filament_max_volumetric_speed = 8
-compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/.*XL.*/ and ! single_extruder_multi_material
-[filament:Fiberlogy Nylon PA12+CF15 @PG 0.6]
-inherits = Fiberlogy Nylon PA12+CF15 @PG; *ABS06PG*
+[filament:Fiberlogy Nylon PA12+CF15 @XL 0.6]
+inherits = Fiberlogy Nylon PA12+CF15 @XL; *ABS06XL*
+renamed_from = "Fiberlogy Nylon PA12+CF15 @PG 0.6"
filament_max_volumetric_speed = 10
-[filament:Fiberlogy Nylon PA12+CF15 @PG 0.8]
-inherits = Fiberlogy Nylon PA12+CF15 @PG; *ABS08PG*
+[filament:Fiberlogy Nylon PA12+CF15 @XL 0.8]
+inherits = Fiberlogy Nylon PA12+CF15 @XL; *ABS08XL*
+renamed_from = "Fiberlogy Nylon PA12+CF15 @PG 0.8"
filament_max_volumetric_speed = 12
[filament:Fiberlogy Nylon PA12+CF15 @MK4]
-inherits = Fiberlogy Nylon PA12+CF15; *ABSMK4*; *04PLUSPG*
+inherits = Fiberlogy Nylon PA12+CF15; *ABSPG*; *04PLUSPG*
filament_max_volumetric_speed = 8
compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=~/(MK4|MK4IS)/ and ! single_extruder_multi_material
[filament:Fiberlogy Nylon PA12+CF15 @MK4 0.6]
-inherits = Fiberlogy Nylon PA12+CF15 @MK4; *ABS06MK4*
+inherits = Fiberlogy Nylon PA12+CF15 @MK4; *ABS06PG*
filament_max_volumetric_speed = 10
[filament:Fiberlogy Nylon PA12+CF15 @MK4 0.8]
-inherits = Fiberlogy Nylon PA12+CF15 @MK4; *ABS08MK4*
+inherits = Fiberlogy Nylon PA12+CF15 @MK4; *ABS08PG*
filament_max_volumetric_speed = 12
[filament:Fiberlogy Nylon PA12+GF15]
@@ -10629,16 +11786,19 @@ inherits = Fiberlogy Nylon PA12+CF15
filament_density = 1.13
filament_max_volumetric_speed = 8
-[filament:Fiberlogy Nylon PA12+GF15 @PG]
-inherits = Fiberlogy Nylon PA12+CF15 @PG
+[filament:Fiberlogy Nylon PA12+GF15 @XL]
+inherits = Fiberlogy Nylon PA12+CF15 @XL
+renamed_from = "Fiberlogy Nylon PA12+GF15 @PG"
filament_density = 1.13
-[filament:Fiberlogy Nylon PA12+GF15 @PG 0.6]
-inherits = Fiberlogy Nylon PA12+CF15 @PG 0.6
+[filament:Fiberlogy Nylon PA12+GF15 @XL 0.6]
+inherits = Fiberlogy Nylon PA12+CF15 @XL 0.6
+renamed_from = "Fiberlogy Nylon PA12+GF15 @PG 0.6"
filament_density = 1.13
-[filament:Fiberlogy Nylon PA12+GF15 @PG 0.8]
-inherits = Fiberlogy Nylon PA12+CF15 @PG 0.8
+[filament:Fiberlogy Nylon PA12+GF15 @XL 0.8]
+inherits = Fiberlogy Nylon PA12+CF15 @XL 0.8
+renamed_from = "Fiberlogy Nylon PA12+GF15 @PG 0.8"
filament_density = 1.13
[filament:Fiberlogy Nylon PA12+GF15 @MK4]
@@ -10679,19 +11839,25 @@ filament_max_volumetric_speed = 5
[filament:Fiberlogy PP @PG]
inherits = Fiberlogy PP; *ABSPG*
filament_max_volumetric_speed = 5
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberlogy PP @PG 0.6]
inherits = Fiberlogy PP @PG; *ABS06PG*
filament_max_volumetric_speed = 7
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberlogy PP @PG 0.8]
inherits = Fiberlogy PP @PG; *ABS08PG*
filament_max_volumetric_speed = 10
first_layer_temperature = 250
temperature = 250
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Fiberlogy PP @XL]
+inherits = Fiberlogy PP @PG; *ABSXL*
+
+[filament:Fiberlogy PP @XL 0.6]
+inherits = Fiberlogy PP @PG 0.6; *ABS06XL*
+
+[filament:Fiberlogy PP @XL 0.8]
+inherits = Fiberlogy PP @PG 0.8; *ABS08XL*
[filament:Filament PM PLA]
inherits = *PLA*
@@ -10713,6 +11879,15 @@ inherits = Filament PM PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:Filament PM PLA @XL]
+inherits = Filament PM PLA @PG; *PLAXL*
+
+[filament:Filament PM PLA @XL 0.6]
+inherits = Filament PM PLA @PG 0.6; *PLA06XL*
+
+[filament:Filament PM PLA @XL 0.8]
+inherits = Filament PM PLA @PG 0.8; *PLA08XL*
+
[filament:AmazonBasics PLA]
inherits = *PLA*
filament_vendor = AmazonBasics
@@ -10730,6 +11905,15 @@ inherits = AmazonBasics PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:AmazonBasics PLA @XL]
+inherits = AmazonBasics PLA @PG; *PLAXL*
+
+[filament:AmazonBasics PLA @XL 0.6]
+inherits = AmazonBasics PLA @PG 0.6; *PLA06XL*
+
+[filament:AmazonBasics PLA @XL 0.8]
+inherits = AmazonBasics PLA @PG 0.8; *PLA08XL*
+
[filament:Overture PLA]
inherits = *PLA*
filament_vendor = Overture
@@ -10748,6 +11932,15 @@ inherits = Overture PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:Overture PLA @XL]
+inherits = Overture PLA @PG; *PLAXL*
+
+[filament:Overture PLA @XL 0.6]
+inherits = Overture PLA @PG 0.6; *PLA06XL*
+
+[filament:Overture PLA @XL 0.8]
+inherits = Overture PLA @PG 0.8; *PLA08XL*
+
[filament:Hatchbox PLA]
inherits = *PLA*
filament_vendor = Hatchbox
@@ -10770,6 +11963,15 @@ inherits = Hatchbox PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:Hatchbox PLA @XL]
+inherits = Hatchbox PLA @PG; *PLAXL*
+
+[filament:Hatchbox PLA @XL 0.6]
+inherits = Hatchbox PLA @PG 0.6; *PLA06XL*
+
+[filament:Hatchbox PLA @XL 0.8]
+inherits = Hatchbox PLA @PG 0.8; *PLA08XL*
+
[filament:Esun PLA]
inherits = *PLA*
filament_vendor = Esun
@@ -10790,6 +11992,15 @@ inherits = Esun PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:Esun PLA @XL]
+inherits = Esun PLA @PG; *PLAXL*
+
+[filament:Esun PLA @XL 0.6]
+inherits = Esun PLA @PG 0.6; *PLA06XL*
+
+[filament:Esun PLA @XL 0.8]
+inherits = Esun PLA @PG 0.8; *PLA08XL*
+
[filament:Das Filament PLA]
inherits = *PLA*
filament_vendor = Das Filament
@@ -10807,6 +12018,15 @@ inherits = Das Filament PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:Das Filament PLA @XL]
+inherits = Das Filament PLA @PG; *PLAXL*
+
+[filament:Das Filament PLA @XL 0.6]
+inherits = Das Filament PLA @PG 0.6; *PLA06XL*
+
+[filament:Das Filament PLA @XL 0.8]
+inherits = Das Filament PLA @PG 0.8; *PLA08XL*
+
[filament:EUMAKERS PLA]
inherits = *PLA*
filament_vendor = EUMAKERS
@@ -10825,6 +12045,15 @@ inherits = EUMAKERS PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:EUMAKERS PLA @XL]
+inherits = EUMAKERS PLA @PG; *PLAXL*
+
+[filament:EUMAKERS PLA @XL 0.6]
+inherits = EUMAKERS PLA @PG 0.6; *PLA06XL*
+
+[filament:EUMAKERS PLA @XL 0.8]
+inherits = EUMAKERS PLA @PG 0.8; *PLA08XL*
+
[filament:Floreon3D PLA]
inherits = *PLA*
filament_vendor = Floreon3D
@@ -10842,6 +12071,15 @@ inherits = Floreon3D PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:Floreon3D PLA @XL]
+inherits = Floreon3D PLA @PG; *PLAXL*
+
+[filament:Floreon3D PLA @XL 0.6]
+inherits = Floreon3D PLA @PG 0.6; *PLA06XL*
+
+[filament:Floreon3D PLA @XL 0.8]
+inherits = Floreon3D PLA @PG 0.8; *PLA08XL*
+
[filament:Prusament PLA]
inherits = *PLA*
filament_vendor = Prusa Polymers
@@ -10854,31 +12092,40 @@ compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG
[filament:Prusament PLA @PG]
inherits = Prusament PLA; *PLAPG*
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusament PLA @PG 0.6]
inherits = Prusament PLA; *PLA06PG*
filament_max_volumetric_speed = 16
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_model!="MK4IS" and nozzle_diameter[0]==0.6
[filament:Prusament PLA @PG 0.8]
inherits = Prusament PLA; *PLA08PG*
first_layer_temperature = 230
temperature = 225
+[filament:Prusament PLA @XL]
+inherits = Prusament PLA @PG; *PLAXL*
+
+[filament:Prusament PLA @XL 0.6]
+inherits = Prusament PLA @PG 0.6; *PLA06XL*
+
+[filament:Prusament PLA @XL 0.8]
+inherits = Prusament PLA @PG 0.8; *PLA08XL*
+
[filament:Prusament PLA @PGIS]
inherits = Prusament PLA @PG
renamed_from = "Prusament PLA @MK4IS"
first_layer_temperature = 230
temperature = 225
slowdown_below_layer_time = 6
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusament PLA @PGIS 0.6]
inherits = Prusament PLA @PG 0.6
first_layer_temperature = 230
temperature = 225
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Prusament PLA Blend @PGIS]
inherits = Prusament PLA @PG
@@ -10888,20 +12135,20 @@ temperature = 225
filament_max_volumetric_speed = 7
slowdown_below_layer_time = 7
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.035{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6
[filament:Prusament PLA Blend @PGIS 0.6]
inherits = Prusament PLA Blend @PGIS
filament_max_volumetric_speed = 9
slowdown_below_layer_time = 14
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.6
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.6
[filament:Prusament PLA Blend @PGIS 0.8]
inherits = Prusament PLA Blend @PGIS
filament_max_volumetric_speed = 12
slowdown_below_layer_time = 20
temperature = 230
-compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_model=="MK4IS" and nozzle_diameter[0]==0.8
+compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.8
[filament:Prusament PVB]
inherits = *PLA*
@@ -10932,6 +12179,15 @@ inherits = Prusament PVB @PG; *PLA08PG*
first_layer_temperature = 225
temperature = 225
+[filament:Prusament PVB @XL]
+inherits = Prusament PVB @PG; *PLAXL*
+
+[filament:Prusament PVB @XL 0.6]
+inherits = Prusament PVB @PG 0.6; *PLA06XL*
+
+[filament:Prusament PVB @XL 0.8]
+inherits = Prusament PVB @PG 0.8; *PLA08XL*
+
[filament:*PLA MMU2*]
inherits = Prusa PLA
compatible_printers_condition = nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.25 and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material
@@ -11035,32 +12291,39 @@ full_fan_speed_layer = 6
filament_retract_length = 1.2
filament_deretract_speed = 20
-[filament:Fillamentum Flexfill 98A @PG]
-inherits = Fillamentum Flexfill 98A; *FLEXPG*
+[filament:Fillamentum Flexfill 98A @XL]
+inherits = Fillamentum Flexfill 98A; *FLEXXL*
+renamed_from = "Fillamentum Flexfill 98A @PG"
filament_max_volumetric_speed = 2.5
filament_retract_length = 3
extrusion_multiplier = 1.08
+filament_multitool_ramming_flow = 2.5
+filament_retract_length_toolchange = 3
-[filament:Fillamentum Flexfill 98A @PG 0.6]
-inherits = Fillamentum Flexfill 98A @PG; *FLEX06PG*
+[filament:Fillamentum Flexfill 98A @XL 0.6]
+inherits = Fillamentum Flexfill 98A @XL; *FLEX06XL*
+renamed_from = "Fillamentum Flexfill 98A @PG 0.6"
filament_max_volumetric_speed = 3
+filament_multitool_ramming_flow = 3
-[filament:Fillamentum Flexfill 98A @PG 0.8]
-inherits = Fillamentum Flexfill 98A @PG; *FLEX08PG*
+[filament:Fillamentum Flexfill 98A @XL 0.8]
+inherits = Fillamentum Flexfill 98A @XL; *FLEX08XL*
+renamed_from = "Fillamentum Flexfill 98A @PG 0.8"
filament_max_volumetric_speed = 8
+filament_multitool_ramming_flow = 8
[filament:Fillamentum Flexfill 98A @MK4]
-inherits = Fillamentum Flexfill 98A; *FLEXMK4*
+inherits = Fillamentum Flexfill 98A; *FLEXPG*
filament_max_volumetric_speed = 3
filament_retract_length = 3
extrusion_multiplier = 1.08
[filament:Fillamentum Flexfill 98A @MK4 0.6]
-inherits = Fillamentum Flexfill 98A @MK4; *FLEX06MK4*
+inherits = Fillamentum Flexfill 98A @MK4; *FLEX06PG*
filament_max_volumetric_speed = 4
[filament:Fillamentum Flexfill 98A @MK4 0.8]
-inherits = Fillamentum Flexfill 98A @MK4; *FLEX08MK4*
+inherits = Fillamentum Flexfill 98A @MK4; *FLEX08PG*
filament_max_volumetric_speed = 10
[filament:ColorFabb VarioShore TPU]
@@ -11074,12 +12337,15 @@ extrusion_multiplier = 0.85
first_layer_temperature = 220
temperature = 220
-[filament:ColorFabb VarioShore TPU @PG]
-inherits = ColorFabb VarioShore TPU; *FLEXPG*
+[filament:ColorFabb VarioShore TPU @XL]
+inherits = ColorFabb VarioShore TPU; *FLEXXL*
+renamed_from = "ColorFabb VarioShore TPU @PG"
filament_max_volumetric_speed = 1.5
+filament_multitool_ramming_flow = 1.5
+filament_retract_length_toolchange = nil
[filament:ColorFabb VarioShore TPU @MK4]
-inherits = ColorFabb VarioShore TPU; *FLEXMK4*
+inherits = ColorFabb VarioShore TPU; *FLEXPG*
filament_max_volumetric_speed = 1.5
[filament:Taulman Bridge]
@@ -11105,31 +12371,34 @@ min_fan_speed = 0
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-[filament:Taulman Bridge @PG]
-inherits = Taulman Bridge; *ABSPG*
+[filament:Taulman Bridge @XL]
+inherits = Taulman Bridge; *ABSPG*; *ABSXL*
+renamed_from = "Taulman Bridge @PG"
bed_temperature = 105
filament_max_volumetric_speed = 7
-[filament:Taulman Bridge @PG 0.6]
-inherits = Taulman Bridge @PG; *ABS06PG*
+[filament:Taulman Bridge @XL 0.6]
+inherits = Taulman Bridge @XL; *ABS06XL*
+renamed_from = "Taulman Bridge @PG 0.6"
filament_max_volumetric_speed = 9
-[filament:Taulman Bridge @PG 0.8]
-inherits = Taulman Bridge @PG; *ABS08PG*
+[filament:Taulman Bridge @XL 0.8]
+inherits = Taulman Bridge @XL; *ABS08XL*
+renamed_from = "Taulman Bridge @PG 0.8"
filament_max_volumetric_speed = 12
first_layer_temperature = 270
temperature = 270
[filament:Taulman Bridge @MK4]
-inherits = Taulman Bridge; *ABSMK4*
+inherits = Taulman Bridge; *ABSPG*
filament_max_volumetric_speed = 7
[filament:Taulman Bridge @MK4 0.6]
-inherits = Taulman Bridge @MK4; *ABS06MK4*
+inherits = Taulman Bridge @MK4; *ABS06PG*
filament_max_volumetric_speed = 9
[filament:Taulman Bridge @MK4 0.8]
-inherits = Taulman Bridge @MK4; *ABS08MK4*
+inherits = Taulman Bridge @MK4; *ABS08PG*
filament_max_volumetric_speed = 12
first_layer_temperature = 270
temperature = 270
@@ -11170,17 +12439,23 @@ temperature = 250
[filament:Fillamentum Nylon FX256 @PG]
inherits = Fillamentum Nylon FX256; *PAPG*
filament_max_volumetric_speed = 6
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fillamentum Nylon FX256 @PG 0.6]
inherits = Fillamentum Nylon FX256 @PG; *PA06PG*
filament_max_volumetric_speed = 8
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fillamentum Nylon FX256 @PG 0.8]
inherits = Fillamentum Nylon FX256 @PG; *PA08PG*
filament_max_volumetric_speed = 11
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Fillamentum Nylon FX256 @XL]
+inherits = Fillamentum Nylon FX256 @PG; *PAXL*
+
+[filament:Fillamentum Nylon FX256 @XL 0.6]
+inherits = Fillamentum Nylon FX256 @PG 0.6; *PA06XL*
+
+[filament:Fillamentum Nylon FX256 @XL 0.8]
+inherits = Fillamentum Nylon FX256 @PG 0.8; *PA08XL*
[filament:Fiberthree F3 PA Pure Pro]
inherits = *common*
@@ -11217,21 +12492,27 @@ inherits = Fiberthree F3 PA Pure Pro; *PAPG*
filament_max_volumetric_speed = 5
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA Pure Pro @PG 0.6]
inherits = Fiberthree F3 PA Pure Pro @PG; *PA06PG*
filament_max_volumetric_speed = 7
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA Pure Pro @PG 0.8]
inherits = Fiberthree F3 PA Pure Pro @PG; *PA08PG*
filament_max_volumetric_speed = 10
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Fiberthree F3 PA Pure Pro @XL]
+inherits = Fiberthree F3 PA Pure Pro @PG; *PAXL*
+
+[filament:Fiberthree F3 PA Pure Pro @XL 0.6]
+inherits = Fiberthree F3 PA Pure Pro @PG 0.6; *PA06XL*
+
+[filament:Fiberthree F3 PA Pure Pro @XL 0.8]
+inherits = Fiberthree F3 PA Pure Pro @PG 0.8; *PA08XL*
[filament:Fiberthree F3 PA-CF Pro]
inherits = *common*
@@ -11268,21 +12549,27 @@ inherits = Fiberthree F3 PA-CF Pro; *PAPG*
filament_max_volumetric_speed = 5
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA-CF Pro @PG 0.6]
inherits = Fiberthree F3 PA-CF Pro; *PA06PG*
filament_max_volumetric_speed = 7
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA-CF Pro @PG 0.8]
inherits = Fiberthree F3 PA-CF Pro; *PA08PG*
filament_max_volumetric_speed = 10
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Fiberthree F3 PA-CF Pro @XL]
+inherits = Fiberthree F3 PA-CF Pro @PG; *PAXL*
+
+[filament:Fiberthree F3 PA-CF Pro @XL 0.6]
+inherits = Fiberthree F3 PA-CF Pro @PG 0.6; *PA06XL*
+
+[filament:Fiberthree F3 PA-CF Pro @XL 0.8]
+inherits = Fiberthree F3 PA-CF Pro @PG 0.8; *PA08XL*
[filament:Fiberthree F3 PA-GF Pro]
inherits = Fiberthree F3 PA-CF Pro
@@ -11298,21 +12585,27 @@ inherits = Fiberthree F3 PA-GF Pro; *PAPG*
filament_max_volumetric_speed = 5
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA-GF Pro @PG 0.6]
inherits = Fiberthree F3 PA-GF Pro @PG; *PA06PG*
filament_max_volumetric_speed = 7
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA-GF Pro @PG 0.8]
inherits = Fiberthree F3 PA-GF Pro @PG; *PA08PG*
filament_max_volumetric_speed = 10
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Fiberthree F3 PA-GF Pro @XL]
+inherits = Fiberthree F3 PA-GF Pro @PG; *PAXL*
+
+[filament:Fiberthree F3 PA-GF Pro @XL 0.6]
+inherits = Fiberthree F3 PA-GF Pro @PG 0.6; *PA06XL*
+
+[filament:Fiberthree F3 PA-GF Pro @XL 0.8]
+inherits = Fiberthree F3 PA-GF Pro @PG 0.8; *PA08XL*
[filament:Fiberthree F3 PA-GF30 Pro]
inherits = Prusament PC Blend Carbon Fiber
@@ -11336,21 +12629,27 @@ inherits = Fiberthree F3 PA-GF30 Pro; *PAPG*
filament_max_volumetric_speed = 6
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA-GF30 Pro @PG 0.6]
inherits = Fiberthree F3 PA-GF30 Pro @PG; *PA06PG*
filament_max_volumetric_speed = 7.5
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Fiberthree F3 PA-GF30 Pro @PG 0.8]
inherits = Fiberthree F3 PA-GF30 Pro @PG; *PA08PG*
filament_max_volumetric_speed = 10
bed_temperature = 90
first_layer_bed_temperature = 90
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Fiberthree F3 PA-GF30 Pro @XL]
+inherits = Fiberthree F3 PA-GF30 Pro @PG; *PAXL*
+
+[filament:Fiberthree F3 PA-GF30 Pro @XL 0.6]
+inherits = Fiberthree F3 PA-GF30 Pro @PG 0.6; *PA06XL*
+
+[filament:Fiberthree F3 PA-GF30 Pro @XL 0.8]
+inherits = Fiberthree F3 PA-GF30 Pro @PG 0.8; *PA08XL*
[filament:Taulman T-Glase]
inherits = *PET*
@@ -11368,15 +12667,21 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
[filament:Taulman T-Glase @PG]
inherits = Taulman T-Glase; *PAPG*
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Taulman T-Glase @PG 0.6]
inherits = Taulman T-Glase @PG; *PA06PG*
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Taulman T-Glase @PG 0.8]
inherits = Taulman T-Glase @PG; *PA08PG*
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Taulman T-Glase @XL]
+inherits = Taulman T-Glase @PG; *PAXL*
+
+[filament:Taulman T-Glase @XL 0.6]
+inherits = Taulman T-Glase @PG 0.6; *PA06XL*
+
+[filament:Taulman T-Glase @XL 0.8]
+inherits = Taulman T-Glase @PG 0.8; *PA08XL*
[filament:Verbatim PLA]
inherits = *PLA*
@@ -11396,6 +12701,15 @@ inherits = Verbatim PLA; *PLA08PG*
first_layer_temperature = 220
temperature = 220
+[filament:Verbatim PLA @XL]
+inherits = Verbatim PLA @PG; *PLAXL*
+
+[filament:Verbatim PLA @XL 0.6]
+inherits = Verbatim PLA @PG 0.6; *PLA06XL*
+
+[filament:Verbatim PLA @XL 0.8]
+inherits = Verbatim PLA @PG 0.8; *PLA08XL*
+
[filament:Verbatim BVOH]
inherits = *common*
filament_vendor = Verbatim
@@ -11426,18 +12740,24 @@ first_layer_temperature = 215
temperature = 210
idle_temperature = 70
filament_max_volumetric_speed = 4
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Verbatim BVOH @PG 0.6]
inherits = Verbatim BVOH @PG; *ABS06PG*
filament_max_volumetric_speed = 5
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Verbatim BVOH @PG 0.8]
inherits = Verbatim BVOH @PG; *ABS08PG*
temperature = 215
filament_max_volumetric_speed = 8
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Verbatim BVOH @XL]
+inherits = Verbatim BVOH @PG; *ABSXL*; *PVAXL*
+
+[filament:Verbatim BVOH @XL 0.6]
+inherits = Verbatim BVOH @PG 0.6; *ABS06XL*; *PVAXL*
+
+[filament:Verbatim BVOH @XL 0.8]
+inherits = Verbatim BVOH @PG 0.8; *ABS08XL*; *PVAXL*
[filament:Verbatim BVOH @MMU]
inherits = Verbatim BVOH
@@ -11525,17 +12845,23 @@ temperature = 220
[filament:Verbatim PP @PG]
inherits = Verbatim PP; *ABSPG*
filament_max_volumetric_speed = 5
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Verbatim PP @PG 0.6]
inherits = Verbatim PP @PG; *ABS06PG*
filament_max_volumetric_speed = 7
-compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
[filament:Verbatim PP @PG 0.8]
inherits = Verbatim PP @PG; *ABS08PG*
filament_max_volumetric_speed = 10
-compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
+
+[filament:Verbatim PP @XL]
+inherits = Verbatim PP @PG; *ABSXL*
+
+[filament:Verbatim PP @XL 0.6]
+inherits = Verbatim PP @PG 0.6; *ABS06XL*
+
+[filament:Verbatim PP @XL 0.8]
+inherits = Verbatim PP @PG 0.8; *ABS08XL*
[filament:FormFutura Centaur PP]
inherits = *common*
@@ -11577,6 +12903,15 @@ filament_max_volumetric_speed = 8
first_layer_temperature = 240
temperature = 240
+[filament:FormFutura Centaur PP @XL]
+inherits = FormFutura Centaur PP @PG; *PETXL*
+
+[filament:FormFutura Centaur PP @XL 0.6]
+inherits = FormFutura Centaur PP @PG 0.6; *PET06XL*
+
+[filament:FormFutura Centaur PP @XL 0.8]
+inherits = FormFutura Centaur PP @PG 0.8; *PET08XL*
+
[filament:FormFutura Centaur PP @MINI]
inherits = FormFutura Centaur PP
filament_max_volumetric_speed = 3
@@ -17222,7 +18557,7 @@ printer_model = MINI
printer_technology = FFF
printer_variant = 0.4
printer_vendor =
-thumbnails = 16x16,220x124
+thumbnails = 16x16,220x124,640x480
bed_shape = 0x0,180x0,180x180,0x180
default_filament_profile = "Prusament PLA"
default_print_profile = 0.15mm QUALITY @MINI
@@ -17344,8 +18679,7 @@ retract_length = 0.8
start_gcode = M17 ; enable steppers\nM862.3 P "[printer_model]" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX" ? 210 : 170))} ; set extruder temp for bed leveling\nM109 T0 R{((filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX" ? 210 : 170))} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n
default_print_profile = 0.20mm QUALITY @XL 0.4
default_filament_profile = "Prusament PLA @PG"
-thumbnails = 16x16,313x173,440x240
-thumbnails_format = PNG
+thumbnails = 16x16/QOI, 313x173/QOI, 440x240/QOI, 640x480/PNG
gcode_flavor = marlin2
high_current_on_filament_swap = 0
retract_lift = 0.3
@@ -17369,7 +18703,7 @@ retract_restart_extra = 0,0,0,0,0
retract_restart_extra_toolchange = 0,0,0,0,0
wipe = 1,1,1,1,1
extruder_colour = #FF8000;#DB5182;#3EC0FF;#FF4F4F;#FBEB7D
-start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 T{initial_tool} S{((filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX" ? 210 : 170))}\n; Home XY\nG28 XY\n; try picking tools used in print\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z10 ; add Z clearance\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nP0 S1 L1 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move to the Z ready for purge\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E10 X40 Z0.2 F500 ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move away\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nP0 S1 L1 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move to the Z ready for purge\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E10 X140 Z0.2 F500 ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move away\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nP0 S1 L1 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move to the Z ready for purge\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E10 X220 Z0.2 F500 ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move away\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nP0 S1 L1 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move to the Z ready for purge\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E10 X320 Z0.2 F500 ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move away\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nP0 S1 L1 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move to the Z ready for purge\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E10 X320 Z0.2 F500 ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move away\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nP0 S1 L1 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\nG1 Z10 F720 ; move to the Z ready for purge\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E10 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F500 ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position\n
+start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX" ? 210 : 170))}\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position
end_gcode = G4 ; wait\n\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+5, max_print_height)}{endif} ; Move print head up\nP0 S1 ; park tool\nM84 ; disable motors\n\n; turn off extruder heaters\n{if is_extruder_used[0]} M104 T0 S0 {endif}\n{if is_extruder_used[1]} M104 T1 S0 {endif}\n{if is_extruder_used[2]} M104 T2 S0 {endif}\n{if is_extruder_used[3]} M104 T3 S0 {endif}\n{if is_extruder_used[4]} M104 T4 S0 {endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow percentage\nM84 ; disable motors\nM77 ; stop print timer\n; max_layer_z = [max_layer_z]
toolchange_gcode = ; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n{\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\n\nlocal speed_toolchange = max_speed_toolchange;\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n"G1 F" + (speed_toolchange * 60) + "\n";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n "P0 S1 L2 D0\n";\n "; " + layer_num + "\n";\n if layer_num == 0 then\n "M109 S" + first_layer_temperature[next_extruder] + " T" + next_extruder + "\n";\n else\n "M109 S" + temperature[next_extruder] + " T" + next_extruder + "\n";\n endif\nendif\n"T" + next_extruder + " S1 L0 D0\n";\n}
color_change_gcode = M600
@@ -17644,8 +18978,7 @@ retract_length = 0.8
start_gcode = M17 ; enable steppers\nM862.3 P "[printer_model]" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]=="PC" or filament_type[initial_tool]=="PA"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]=="FLEX"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%
default_print_profile = 0.20mm QUALITY @MK4 0.4
default_filament_profile = "Prusament PLA @PG"
-thumbnails = 16x16,313x173,440x240
-thumbnails_format = PNG
+thumbnails = 16x16/QOI, 313x173/QOI, 440x240/QOI, 640x480/PNG
gcode_flavor = marlin2
high_current_on_filament_swap = 0
retract_lift = 0.2
@@ -17738,9 +19071,9 @@ wipe = 0
retract_before_wipe = 80
retract_speed = 35
deretract_speed = 0
-start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]=="PC" or filament_type[initial_tool]=="PA"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]=="FLEX"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%
+start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.0.0+12056\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]=="PC" or filament_type[initial_tool]=="PA"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]=="FLEX"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%
end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]
-before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\nM74 W[extruded_weight_total]
+before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n
default_print_profile = 0.20mm SPEED @MK4IS 0.4
default_filament_profile = "Prusament PLA @MK4IS"
@@ -17808,6 +19141,99 @@ min_layer_height = 0.2
default_print_profile = 0.40mm QUALITY @MK4IS 0.8
default_filament_profile = "Prusament PLA @PG 0.8"
+; [printer:Original Prusa MK3.9 0.4 nozzle]
+; inherits = *commonMK4*
+; printer_model = MK3.9
+; printer_variant = 0.4
+; max_layer_height = 0.30
+; machine_limits_usage = emit_to_gcode
+; machine_max_acceleration_e = 2500,5000
+; machine_max_acceleration_extruding = 4000,2000
+; machine_max_acceleration_retracting = 1200,2000
+; machine_max_acceleration_travel = 4000,1250
+; machine_max_acceleration_x = 4000,2000
+; machine_max_acceleration_y = 4000,2000
+; machine_max_acceleration_z = 200,2000
+; machine_max_feedrate_e = 100,120
+; machine_max_feedrate_x = 300,100
+; machine_max_feedrate_y = 300,100
+; machine_max_feedrate_z = 40,12
+; machine_max_jerk_e = 10,1.5
+; machine_max_jerk_x = 8,8
+; machine_max_jerk_y = 8,8
+; machine_max_jerk_z = 2,0.4
+; machine_min_extruding_rate = 0,0
+; machine_min_travel_rate = 0,0
+; max_print_height = 220
+; printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK3.9\nPG
+; retract_length = 0.7
+; wipe = 0
+; retract_before_wipe = 80
+; retract_speed = 35
+; deretract_speed = 0
+; start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "[printer_model]" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.0.0+12056\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]=="PC" or filament_type[initial_tool]=="PA"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]=="FLEX"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%
+; end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]
+; before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n
+; default_print_profile = 0.20mm SPEED @MK4IS 0.4
+; default_filament_profile = "Prusament PLA @PGIS"
+
+; [printer:Original Prusa MK3.9 0.25 nozzle]
+; inherits = Original Prusa MK3.9 0.4 nozzle
+; printer_variant = 0.25
+; nozzle_diameter = 0.25
+; retract_length = 0.8
+; retract_lift = 0.15
+; max_layer_height = 0.15
+; min_layer_height = 0.05
+; default_print_profile = 0.12mm STRUCTURAL @MK4IS 0.25
+
+; [printer:Original Prusa MK3.9 0.3 nozzle]
+; inherits = Original Prusa MK3.9 0.4 nozzle
+; printer_variant = 0.3
+; nozzle_diameter = 0.3
+; retract_length = 0.7
+; max_layer_height = 0.22
+; min_layer_height = 0.05
+; default_print_profile = 0.16mm STRUCTURAL @MK4IS 0.3
+
+; [printer:Original Prusa MK3.9 0.5 nozzle]
+; inherits = Original Prusa MK3.9 0.4 nozzle
+; printer_variant = 0.5
+; nozzle_diameter = 0.5
+; retract_length = 0.7
+; max_layer_height = 0.32
+; min_layer_height = 0.07
+; deretract_speed = 25
+; wipe = 1
+; default_print_profile = 0.20mm SPEED @MK4IS 0.5
+
+; [printer:Original Prusa MK3.9 0.6 nozzle]
+; inherits = Original Prusa MK3.9 0.4 nozzle
+; printer_variant = 0.6
+; nozzle_diameter = 0.6
+; retract_length = 0.7
+; retract_lift = 0.2
+; max_layer_height = 0.40
+; min_layer_height = 0.15
+; deretract_speed = 25
+; wipe = 1
+; default_print_profile = 0.25mm SPEED @MK4IS 0.6
+
+; [printer:Original Prusa MK3.9 0.8 nozzle]
+; inherits = Original Prusa MK3.9 0.4 nozzle
+; printer_variant = 0.8
+; nozzle_diameter = 0.8
+; retract_length = 0.6
+; wipe = 1
+; retract_before_wipe = 50%
+; retract_lift = 0.25
+; retract_speed = 25
+; deretract_speed = 15
+; max_layer_height = 0.6
+; min_layer_height = 0.2
+; default_print_profile = 0.40mm QUALITY @MK4IS 0.8
+; default_filament_profile = "Prusament PLA @PG 0.8"
+
[printer:Original Prusa SL1]
printer_technology = SLA
printer_model = SL1
diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp
index 0d627aa837..f3441a8d62 100644
--- a/src/PrusaSlicer.cpp
+++ b/src/PrusaSlicer.cpp
@@ -2,8 +2,12 @@
// Why?
#define _WIN32_WINNT 0x0502
// The standard Windows includes.
- #define WIN32_LEAN_AND_MEAN
- #define NOMINMAX
+ #ifndef WIN32_LEAN_AND_MEAN
+ #define WIN32_LEAN_AND_MEAN
+ #endif // WIN32_LEAN_AND_MEAN
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif // NOMINMAX
#include
#include
#ifdef SLIC3R_GUI
@@ -763,6 +767,7 @@ bool CLI::setup(int argc, char **argv)
set_var_dir((path_resources / "icons").string());
set_local_dir((path_resources / "localization").string());
set_sys_shapes_dir((path_resources / "shapes").string());
+ set_custom_gcodes_dir((path_resources / "custom_gcodes").string());
// Parse all command line options into a DynamicConfig.
// If any option is unsupported, print usage and abort immediately.
diff --git a/src/PrusaSlicer_app_msvc.cpp b/src/PrusaSlicer_app_msvc.cpp
index 90bd2d89f2..06f15aa5ad 100644
--- a/src/PrusaSlicer_app_msvc.cpp
+++ b/src/PrusaSlicer_app_msvc.cpp
@@ -1,14 +1,16 @@
// Why?
#define _WIN32_WINNT 0x0502
// The standard Windows includes.
-#define WIN32_LEAN_AND_MEAN
-#define NOMINMAX
+#ifndef WIN32_LEAN_AND_MEAN
+ #define WIN32_LEAN_AND_MEAN
+#endif // WIN32_LEAN_AND_MEAN
+#ifndef NOMINMAX
+ #define NOMINMAX
+#endif // NOMINMAX
#include
#include
#include
-
-
#ifdef SLIC3R_GUI
extern "C"
{
diff --git a/src/clipper/clipper.cpp b/src/clipper/clipper.cpp
index cd51ccc103..6cbf45b79c 100644
--- a/src/clipper/clipper.cpp
+++ b/src/clipper/clipper.cpp
@@ -84,15 +84,24 @@ inline IntPoint IntPoint2d(cInt x, cInt y)
);
}
-inline cInt Round(double val)
+// Fast rounding upwards.
+inline double FRound(double a)
{
- double v = val < 0 ? val - 0.5 : val + 0.5;
+ // Why does Java Math.round(0.49999999999999994) return 1?
+ // https://stackoverflow.com/questions/9902968/why-does-math-round0-49999999999999994-return-1
+ return a == 0.49999999999999994 ? 0 : floor(a + 0.5);
+}
+
+template
+inline IType Round(double val)
+{
+ double v = FRound(val);
#if defined(CLIPPERLIB_INT32) && ! defined(NDEBUG)
static constexpr const double hi = 65536 * 16383;
if (v > hi || -v > hi)
throw clipperException("Coordinate outside allowed range");
#endif
- return static_cast(v);
+ return static_cast(v);
}
// Overriding the Eigen operators because we don't want to compare Z coordinate if IntPoint is 3 dimensional.
@@ -340,7 +349,7 @@ inline cInt TopX(TEdge &edge, const cInt currentY)
{
return (currentY == edge.Top.y()) ?
edge.Top.x() :
- edge.Bot.x() + Round(edge.Dx *(currentY - edge.Bot.y()));
+ edge.Bot.x() + Round(edge.Dx *(currentY - edge.Bot.y()));
}
//------------------------------------------------------------------------------
@@ -350,65 +359,53 @@ void IntersectPoint(TEdge &Edge1, TEdge &Edge2, IntPoint &ip)
ip.z() = 0;
#endif
- double b1, b2;
if (Edge1.Dx == Edge2.Dx)
{
ip.y() = Edge1.Curr.y();
ip.x() = TopX(Edge1, ip.y());
return;
}
- else if (Edge1.Delta.x() == 0)
+
+ int64_t y;
+ if (Edge1.Delta.x() == 0)
{
ip.x() = Edge1.Bot.x();
- if (IsHorizontal(Edge2))
- ip.y() = Edge2.Bot.y();
- else
- {
- b2 = Edge2.Bot.y() - (Edge2.Bot.x() / Edge2.Dx);
- ip.y() = Round(ip.x() / Edge2.Dx + b2);
- }
+ y = IsHorizontal(Edge2) ?
+ Edge2.Bot.y() :
+ Round(ip.x() / Edge2.Dx + Edge2.Bot.y() - (Edge2.Bot.x() / Edge2.Dx));
+
}
else if (Edge2.Delta.x() == 0)
{
ip.x() = Edge2.Bot.x();
- if (IsHorizontal(Edge1))
- ip.y() = Edge1.Bot.y();
- else
- {
- b1 = Edge1.Bot.y() - (Edge1.Bot.x() / Edge1.Dx);
- ip.y() = Round(ip.x() / Edge1.Dx + b1);
- }
- }
- else
+ y = IsHorizontal(Edge1) ?
+ Edge1.Bot.y() :
+ Round(ip.x() / Edge1.Dx + Edge1.Bot.y() - (Edge1.Bot.x() / Edge1.Dx));
+ }
+ else
{
- b1 = double(Edge1.Bot.x()) - double(Edge1.Bot.y()) * Edge1.Dx;
- b2 = double(Edge2.Bot.x()) - double(Edge2.Bot.y()) * Edge2.Dx;
+ double b1 = double(Edge1.Bot.x()) - double(Edge1.Bot.y()) * Edge1.Dx;
+ double b2 = double(Edge2.Bot.x()) - double(Edge2.Bot.y()) * Edge2.Dx;
double q = (b2-b1) / (Edge1.Dx - Edge2.Dx);
- ip.y() = Round(q);
- ip.x() = (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx)) ?
- Round(Edge1.Dx * q + b1) :
- Round(Edge2.Dx * q + b2);
+ y = Round(q);
+ ip.x() = (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx)) ?
+ Round(Edge1.Dx * q + b1) :
+ Round(Edge2.Dx * q + b2);
}
- if (ip.y() < Edge1.Top.y() || ip.y() < Edge2.Top.y())
+ ip.y() = cInt(y);
+ if (y < Edge1.Top.y() || y < Edge2.Top.y())
{
- if (Edge1.Top.y() > Edge2.Top.y())
- ip.y() = Edge1.Top.y();
- else
- ip.y() = Edge2.Top.y();
- if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
- ip.x() = TopX(Edge1, ip.y());
- else
- ip.x() = TopX(Edge2, ip.y());
- }
+ ip.y() = (Edge1.Top.y() > Edge2.Top.y() ? Edge1 : Edge2).Top.y();
+ y = ip.y();
+ ip.x() = TopX(std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx) ? Edge1 : Edge2, ip.y());
+ }
//finally, don't allow 'ip' to be BELOW curr.y() (ie bottom of scanbeam) ...
- if (ip.y() > Edge1.Curr.y())
+ if (y > Edge1.Curr.y())
{
ip.y() = Edge1.Curr.y();
//use the more vertical edge to derive X ...
- if (std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx))
- ip.x() = TopX(Edge2, ip.y()); else
- ip.x() = TopX(Edge1, ip.y());
+ ip.x() = TopX(std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx) ? Edge2 : Edge1, ip.y());
}
}
//------------------------------------------------------------------------------
@@ -3539,8 +3536,8 @@ void ClipperOffset::DoOffset(double delta)
for (cInt j = 1; j <= steps; j++)
{
m_destPoly.emplace_back(IntPoint2d(
- Round(m_srcPoly[0].x() + X * delta),
- Round(m_srcPoly[0].y() + Y * delta)));
+ Round(m_srcPoly[0].x() + X * delta),
+ Round(m_srcPoly[0].y() + Y * delta)));
double X2 = X;
X = X * m_cos - m_sin * Y;
Y = X2 * m_sin + Y * m_cos;
@@ -3552,8 +3549,8 @@ void ClipperOffset::DoOffset(double delta)
for (int j = 0; j < 4; ++j)
{
m_destPoly.emplace_back(IntPoint2d(
- Round(m_srcPoly[0].x() + X * delta),
- Round(m_srcPoly[0].y() + Y * delta)));
+ Round(m_srcPoly[0].x() + X * delta),
+ Round(m_srcPoly[0].y() + Y * delta)));
if (X < 0) X = 1;
else if (Y < 0) Y = 1;
else X = -1;
@@ -3606,9 +3603,9 @@ void ClipperOffset::DoOffset(double delta)
if (node.m_endtype == etOpenButt)
{
int j = len - 1;
- pt1 = IntPoint2d(Round(m_srcPoly[j].x() + m_normals[j].x() * delta), Round(m_srcPoly[j].y() + m_normals[j].y() * delta));
+ pt1 = IntPoint2d(Round(m_srcPoly[j].x() + m_normals[j].x() * delta), Round(m_srcPoly[j].y() + m_normals[j].y() * delta));
m_destPoly.emplace_back(pt1);
- pt1 = IntPoint2d(Round(m_srcPoly[j].x() - m_normals[j].x() * delta), Round(m_srcPoly[j].y() - m_normals[j].y() * delta));
+ pt1 = IntPoint2d(Round(m_srcPoly[j].x() - m_normals[j].x() * delta), Round(m_srcPoly[j].y() - m_normals[j].y() * delta));
m_destPoly.emplace_back(pt1);
}
else
@@ -3633,9 +3630,9 @@ void ClipperOffset::DoOffset(double delta)
if (node.m_endtype == etOpenButt)
{
- pt1 = IntPoint2d(Round(m_srcPoly[0].x() - m_normals[0].x() * delta), Round(m_srcPoly[0].y() - m_normals[0].y() * delta));
+ pt1 = IntPoint2d(Round(m_srcPoly[0].x() - m_normals[0].x() * delta), Round(m_srcPoly[0].y() - m_normals[0].y() * delta));
m_destPoly.emplace_back(pt1);
- pt1 = IntPoint2d(Round(m_srcPoly[0].x() + m_normals[0].x() * delta), Round(m_srcPoly[0].y() + m_normals[0].y() * delta));
+ pt1 = IntPoint2d(Round(m_srcPoly[0].x() + m_normals[0].x() * delta), Round(m_srcPoly[0].y() + m_normals[0].y() * delta));
m_destPoly.emplace_back(pt1);
}
else
@@ -3663,8 +3660,8 @@ void ClipperOffset::OffsetPoint(int j, int& k, JoinType jointype)
double cosA = (m_normals[k].x() * m_normals[j].x() + m_normals[j].y() * m_normals[k].y() );
if (cosA > 0) // angle => 0 degrees
{
- m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + m_normals[k].x() * m_delta),
- Round(m_srcPoly[j].y() + m_normals[k].y() * m_delta)));
+ m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + m_normals[k].x() * m_delta),
+ Round(m_srcPoly[j].y() + m_normals[k].y() * m_delta)));
return;
}
//else angle => 180 degrees
@@ -3674,11 +3671,11 @@ void ClipperOffset::OffsetPoint(int j, int& k, JoinType jointype)
if (m_sinA * m_delta < 0)
{
- m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + m_normals[k].x() * m_delta),
- Round(m_srcPoly[j].y() + m_normals[k].y() * m_delta)));
+ m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + m_normals[k].x() * m_delta),
+ Round(m_srcPoly[j].y() + m_normals[k].y() * m_delta)));
m_destPoly.emplace_back(m_srcPoly[j]);
- m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + m_normals[j].x() * m_delta),
- Round(m_srcPoly[j].y() + m_normals[j].y() * m_delta)));
+ m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + m_normals[j].x() * m_delta),
+ Round(m_srcPoly[j].y() + m_normals[j].y() * m_delta)));
}
else
switch (jointype)
@@ -3702,19 +3699,19 @@ void ClipperOffset::DoSquare(int j, int k)
double dx = std::tan(std::atan2(m_sinA,
m_normals[k].x() * m_normals[j].x() + m_normals[k].y() * m_normals[j].y()) / 4);
m_destPoly.emplace_back(IntPoint2d(
- Round(m_srcPoly[j].x() + m_delta * (m_normals[k].x() - m_normals[k].y() * dx)),
- Round(m_srcPoly[j].y() + m_delta * (m_normals[k].y() + m_normals[k].x() * dx))));
+ Round(m_srcPoly[j].x() + m_delta * (m_normals[k].x() - m_normals[k].y() * dx)),
+ Round(m_srcPoly[j].y() + m_delta * (m_normals[k].y() + m_normals[k].x() * dx))));
m_destPoly.emplace_back(IntPoint2d(
- Round(m_srcPoly[j].x() + m_delta * (m_normals[j].x() + m_normals[j].y() * dx)),
- Round(m_srcPoly[j].y() + m_delta * (m_normals[j].y() - m_normals[j].x() * dx))));
+ Round(m_srcPoly[j].x() + m_delta * (m_normals[j].x() + m_normals[j].y() * dx)),
+ Round(m_srcPoly[j].y() + m_delta * (m_normals[j].y() - m_normals[j].x() * dx))));
}
//------------------------------------------------------------------------------
void ClipperOffset::DoMiter(int j, int k, double r)
{
double q = m_delta / r;
- m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + (m_normals[k].x() + m_normals[j].x()) * q),
- Round(m_srcPoly[j].y() + (m_normals[k].y() + m_normals[j].y()) * q)));
+ m_destPoly.emplace_back(IntPoint2d(Round(m_srcPoly[j].x() + (m_normals[k].x() + m_normals[j].x()) * q),
+ Round(m_srcPoly[j].y() + (m_normals[k].y() + m_normals[j].y()) * q)));
}
//------------------------------------------------------------------------------
@@ -3722,21 +3719,21 @@ void ClipperOffset::DoRound(int j, int k)
{
double a = std::atan2(m_sinA,
m_normals[k].x() * m_normals[j].x() + m_normals[k].y() * m_normals[j].y());
- auto steps = std::max(Round(m_StepsPerRad * std::fabs(a)), 1);
+ auto steps = std::max(Round(m_StepsPerRad * std::fabs(a)), 1);
double X = m_normals[k].x(), Y = m_normals[k].y(), X2;
for (int i = 0; i < steps; ++i)
{
m_destPoly.emplace_back(IntPoint2d(
- Round(m_srcPoly[j].x() + X * m_delta),
- Round(m_srcPoly[j].y() + Y * m_delta)));
+ Round(m_srcPoly[j].x() + X * m_delta),
+ Round(m_srcPoly[j].y() + Y * m_delta)));
X2 = X;
X = X * m_cos - m_sin * Y;
Y = X2 * m_sin + Y * m_cos;
}
m_destPoly.emplace_back(IntPoint2d(
- Round(m_srcPoly[j].x() + m_normals[j].x() * m_delta),
- Round(m_srcPoly[j].y() + m_normals[j].y() * m_delta)));
+ Round(m_srcPoly[j].x() + m_normals[j].x() * m_delta),
+ Round(m_srcPoly[j].y() + m_normals[j].y() * m_delta)));
}
//------------------------------------------------------------------------------
diff --git a/src/libslic3r/AABBTreeLines.hpp b/src/libslic3r/AABBTreeLines.hpp
index f12e590d6f..3fdcda0c5c 100644
--- a/src/libslic3r/AABBTreeLines.hpp
+++ b/src/libslic3r/AABBTreeLines.hpp
@@ -349,7 +349,7 @@ public:
return dist;
}
- std::vector all_lines_in_radius(const Vec<2, Scalar> &point, Floating radius)
+ std::vector all_lines_in_radius(const Vec<2, Scalar> &point, Floating radius) const
{
return AABBTreeLines::all_lines_in_radius(this->lines, this->tree, point.template cast(), radius * radius);
}
diff --git a/src/libslic3r/BoundingBox.hpp b/src/libslic3r/BoundingBox.hpp
index b79d05d534..5e9575b015 100644
--- a/src/libslic3r/BoundingBox.hpp
+++ b/src/libslic3r/BoundingBox.hpp
@@ -73,7 +73,9 @@ private:
template>
static void construct(BoundingBoxType &out, It from, It to)
{
- if (from != to) {
+ if (from == to) {
+ out.defined = false;
+ } else {
auto it = from;
out.min = it->template cast();
out.max = out.min;
diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp
index de5f2dc9d5..b6cdf4dde7 100644
--- a/src/libslic3r/Brim.cpp
+++ b/src/libslic3r/Brim.cpp
@@ -495,8 +495,10 @@ static void make_inner_brim(const Print &print,
loops = union_pt_chained_outside_in(loops);
std::reverse(loops.begin(), loops.end());
- extrusion_entities_append_loops(brim.entities, std::move(loops), ExtrusionRole::Skirt, float(flow.mm3_per_mm()),
- float(flow.width()), float(print.skirt_first_layer_height()));
+ extrusion_entities_append_loops(brim.entities, std::move(loops),
+ ExtrusionAttributes{
+ ExtrusionRole::Skirt,
+ ExtrusionFlow{ float(flow.mm3_per_mm()), float(flow.width()), float(print.skirt_first_layer_height()) } });
}
// Produce brim lines around those objects, that have the brim enabled.
@@ -677,7 +679,9 @@ ExtrusionEntityCollection make_brim(const Print &print, PrintTryCancel try_cance
if (i + 1 == j && first_path.size() > 3 && first_path.front().x() == first_path.back().x() && first_path.front().y() == first_path.back().y()) {
auto *loop = new ExtrusionLoop();
brim.entities.emplace_back(loop);
- loop->paths.emplace_back(ExtrusionRole::Skirt, float(flow.mm3_per_mm()), float(flow.width()), float(print.skirt_first_layer_height()));
+ loop->paths.emplace_back(ExtrusionAttributes{
+ ExtrusionRole::Skirt,
+ ExtrusionFlow{ float(flow.mm3_per_mm()), float(flow.width()), float(print.skirt_first_layer_height()) } });
Points &points = loop->paths.front().polyline.points;
points.reserve(first_path.size());
for (const ClipperLib_Z::IntPoint &pt : first_path)
@@ -688,7 +692,9 @@ ExtrusionEntityCollection make_brim(const Print &print, PrintTryCancel try_cance
ExtrusionEntityCollection this_loop_trimmed;
this_loop_trimmed.entities.reserve(j - i);
for (; i < j; ++ i) {
- this_loop_trimmed.entities.emplace_back(new ExtrusionPath(ExtrusionRole::Skirt, float(flow.mm3_per_mm()), float(flow.width()), float(print.skirt_first_layer_height())));
+ this_loop_trimmed.entities.emplace_back(new ExtrusionPath({
+ ExtrusionRole::Skirt,
+ ExtrusionFlow{ float(flow.mm3_per_mm()), float(flow.width()), float(print.skirt_first_layer_height()) } }));
const ClipperLib_Z::Path &path = *loops_trimmed_order[i].first;
Points &points = dynamic_cast(this_loop_trimmed.entities.back())->polyline.points;
points.reserve(path.size());
@@ -704,7 +710,9 @@ ExtrusionEntityCollection make_brim(const Print &print, PrintTryCancel try_cance
}
}
} else {
- extrusion_entities_append_loops_and_paths(brim.entities, std::move(all_loops), ExtrusionRole::Skirt, float(flow.mm3_per_mm()), float(flow.width()), float(print.skirt_first_layer_height()));
+ extrusion_entities_append_loops_and_paths(brim.entities, std::move(all_loops),
+ ExtrusionAttributes{ ExtrusionRole::Skirt,
+ ExtrusionFlow{ float(flow.mm3_per_mm()), float(flow.width()), float(print.skirt_first_layer_height()) } });
}
make_inner_brim(print, top_level_objects_with_brim, bottom_layers_expolygons, brim);
diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index 1aa2eec86b..c4f2a5e64c 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -21,6 +21,11 @@ if (TARGET OpenVDB::openvdb)
set(OpenVDBUtils_SOURCES OpenVDBUtils.cpp OpenVDBUtils.hpp OpenVDBUtilsLegacy.hpp)
endif()
+find_package(LibBGCode REQUIRED COMPONENTS Convert)
+slic3r_remap_configs(LibBGCode::bgcode_core RelWithDebInfo Release)
+slic3r_remap_configs(LibBGCode::bgcode_binarize RelWithDebInfo Release)
+slic3r_remap_configs(LibBGCode::bgcode_convert RelWithDebInfo Release)
+
set(SLIC3R_SOURCES
pchheader.cpp
pchheader.hpp
@@ -151,8 +156,12 @@ set(SLIC3R_SOURCES
GCode/ConflictChecker.hpp
GCode/CoolingBuffer.cpp
GCode/CoolingBuffer.hpp
+ GCode/ExtrusionProcessor.cpp
+ GCode/ExtrusionProcessor.hpp
GCode/FindReplace.cpp
GCode/FindReplace.hpp
+ GCode/GCodeWriter.cpp
+ GCode/GCodeWriter.hpp
GCode/PostProcessor.cpp
GCode/PostProcessor.hpp
GCode/PressureEqualizer.cpp
@@ -165,10 +174,16 @@ set(SLIC3R_SOURCES
GCode/SpiralVase.hpp
GCode/SeamPlacer.cpp
GCode/SeamPlacer.hpp
+ GCode/SmoothPath.cpp
+ GCode/SmoothPath.hpp
GCode/ToolOrdering.cpp
GCode/ToolOrdering.hpp
+ GCode/Wipe.cpp
+ GCode/Wipe.hpp
GCode/WipeTower.cpp
GCode/WipeTower.hpp
+ GCode/WipeTowerIntegration.cpp
+ GCode/WipeTowerIntegration.hpp
GCode/GCodeProcessor.cpp
GCode/GCodeProcessor.hpp
GCode/AvoidCrossingPerimeters.cpp
@@ -179,10 +194,10 @@ set(SLIC3R_SOURCES
GCodeReader.hpp
# GCodeSender.cpp
# GCodeSender.hpp
- GCodeWriter.cpp
- GCodeWriter.hpp
Geometry.cpp
Geometry.hpp
+ Geometry/ArcWelder.cpp
+ Geometry/ArcWelder.hpp
Geometry/Bicubic.hpp
Geometry/Circle.cpp
Geometry/Circle.hpp
@@ -570,6 +585,7 @@ target_link_libraries(libslic3r
ZLIB::ZLIB
JPEG::JPEG
qoi
+ LibBGCode::bgcode_convert
)
if (APPLE)
diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp
index ff911c2853..63e2b3821e 100644
--- a/src/libslic3r/Config.cpp
+++ b/src/libslic3r/Config.cpp
@@ -37,12 +37,15 @@
#include
#include
#include
+#include
#include
#include
#include
#include
#include
+#include
+
//FIXME for GCodeFlavor and gcfMarlin (for forward-compatibility conversion)
// This is not nice, likely it would be better to pass the ConfigSubstitutionContext to handle_legacy().
#include "PrintConfig.hpp"
@@ -331,12 +334,9 @@ void ConfigDef::finalize()
if (def.type == coEnum) {
assert(def.enum_def);
assert(def.enum_def->is_valid_closed_enum());
- assert(def.gui_type != ConfigOptionDef::GUIType::i_enum_open &&
- def.gui_type != ConfigOptionDef::GUIType::f_enum_open &&
- def.gui_type != ConfigOptionDef::GUIType::select_open);
+ assert(! def.is_gui_type_enum_open());
def.enum_def->finalize_closed_enum();
- } else if (def.gui_type == ConfigOptionDef::GUIType::i_enum_open || def.gui_type == ConfigOptionDef::GUIType::f_enum_open ||
- def.gui_type == ConfigOptionDef::GUIType::select_open) {
+ } else if (def.is_gui_type_enum_open()) {
assert(def.enum_def);
assert(def.enum_def->is_valid_open_enum());
assert(def.gui_type != ConfigOptionDef::GUIType::i_enum_open || def.type == coInt || def.type == coInts);
@@ -740,11 +740,37 @@ void ConfigBase::setenv_() const
}
}
-ConfigSubstitutions ConfigBase::load(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule)
+ConfigSubstitutions ConfigBase::load(const std::string& filename, ForwardCompatibilitySubstitutionRule compatibility_rule)
{
- return is_gcode_file(file) ?
- this->load_from_gcode_file(file, compatibility_rule) :
- this->load_from_ini(file, compatibility_rule);
+ enum class EFileType
+ {
+ Ini,
+ AsciiGCode,
+ BinaryGCode
+ };
+
+ EFileType file_type;
+
+ if (is_gcode_file(filename)) {
+ FILE* file = boost::nowide::fopen(filename.c_str(), "rb");
+ if (file == nullptr)
+ throw Slic3r::RuntimeError(format("Error opening file %1%", filename));
+
+ std::vector cs_buffer(65536);
+ using namespace bgcode::core;
+ file_type = (is_valid_binary_gcode(*file, true, cs_buffer.data(), cs_buffer.size()) == EResult::Success) ? EFileType::BinaryGCode : EFileType::AsciiGCode;
+ fclose(file);
+ }
+ else
+ file_type = EFileType::Ini;
+
+ switch (file_type)
+ {
+ case EFileType::Ini: { return this->load_from_ini(filename, compatibility_rule); }
+ case EFileType::AsciiGCode: { return this->load_from_gcode_file(filename, compatibility_rule);}
+ case EFileType::BinaryGCode: { return this->load_from_binary_gcode_file(filename, compatibility_rule);}
+ default: { throw Slic3r::RuntimeError(format("Invalid file %1%", filename)); }
+ }
}
ConfigSubstitutions ConfigBase::load_from_ini(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule)
@@ -948,15 +974,15 @@ private:
};
// Load the config keys from the tail of a G-code file.
-ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule)
+ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &filename, ForwardCompatibilitySubstitutionRule compatibility_rule)
{
// Read a 64k block from the end of the G-code.
- boost::nowide::ifstream ifs(file, std::ifstream::binary);
+ boost::nowide::ifstream ifs(filename, std::ifstream::binary);
// Look for Slic3r or PrusaSlicer header.
// Look for the header across the whole file as the G-code may have been extended at the start by a post-processing script or the user.
bool has_delimiters = false;
{
- static constexpr const char slic3r_gcode_header[] = "; generated by Slic3r ";
+ static constexpr const char slic3r_gcode_header[] = "; generated by Slic3r ";
static constexpr const char prusaslicer_gcode_header[] = "; generated by PrusaSlicer ";
std::string header;
bool header_found = false;
@@ -1006,7 +1032,7 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
break;
}
if (! end_found)
- throw Slic3r::RuntimeError(format("Configuration block closing tag \"; prusaslicer_config = end\" not found when reading %1%", file));
+ throw Slic3r::RuntimeError(format("Configuration block closing tag \"; prusaslicer_config = end\" not found when reading %1%", filename));
std::string key, value;
while (reader.getline(line)) {
if (line == "; prusaslicer_config = begin") {
@@ -1029,7 +1055,7 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
}
}
if (! begin_found)
- throw Slic3r::RuntimeError(format("Configuration block opening tag \"; prusaslicer_config = begin\" not found when reading %1%", file));
+ throw Slic3r::RuntimeError(format("Configuration block opening tag \"; prusaslicer_config = begin\" not found when reading %1%", filename));
}
else
{
@@ -1037,8 +1063,8 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
// Try a heuristics reading the G-code from back.
ifs.seekg(0, ifs.end);
auto file_length = ifs.tellg();
- auto data_length = std::min(65535, file_length - header_end_pos);
- ifs.seekg(file_length - data_length, ifs.beg);
+ auto data_length = std::min(65535, file_length - header_end_pos);
+ ifs.seekg(file_length - data_length, ifs.beg);
std::vector data(size_t(data_length) + 1, 0);
ifs.read(data.data(), data_length);
ifs.close();
@@ -1046,7 +1072,48 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
}
if (key_value_pairs < 80)
- throw Slic3r::RuntimeError(format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs));
+ throw Slic3r::RuntimeError(format("Suspiciously low number of configuration values extracted from %1%: %2%", filename, key_value_pairs));
+ return std::move(substitutions_ctxt.substitutions);
+}
+
+ConfigSubstitutions ConfigBase::load_from_binary_gcode_file(const std::string& filename, ForwardCompatibilitySubstitutionRule compatibility_rule)
+{
+ ConfigSubstitutionContext substitutions_ctxt(compatibility_rule);
+
+ FilePtr file{ boost::nowide::fopen(filename.c_str(), "rb") };
+ if (file.f == nullptr)
+ throw Slic3r::RuntimeError(format("Error opening file %1%", filename));
+
+ using namespace bgcode::core;
+ using namespace bgcode::binarize;
+ std::vector cs_buffer(65536);
+ EResult res = is_valid_binary_gcode(*file.f, true, cs_buffer.data(), cs_buffer.size());
+ if (res != EResult::Success)
+ throw Slic3r::RuntimeError(format("File %1% does not contain a valid binary gcode\nError: %2%", filename,
+ std::string(translate_result(res))));
+
+ FileHeader file_header;
+ res = read_header(*file.f, file_header, nullptr);
+ if (res != EResult::Success)
+ throw Slic3r::RuntimeError(format("Error while reading file %1%: %2%", filename, std::string(translate_result(res))));
+
+ // searches for config block
+ BlockHeader block_header;
+ res = read_next_block_header(*file.f, file_header, block_header, EBlockType::SlicerMetadata, cs_buffer.data(), cs_buffer.size());
+ if (res != EResult::Success)
+ throw Slic3r::RuntimeError(format("Error while reading file %1%: %2%", filename, std::string(translate_result(res))));
+ if ((EBlockType)block_header.type != EBlockType::SlicerMetadata)
+ throw Slic3r::RuntimeError(format("Unable to find slicer metadata block in file %1%", filename));
+ SlicerMetadataBlock slicer_metadata_block;
+ res = slicer_metadata_block.read_data(*file.f, file_header, block_header);
+ if (res != EResult::Success)
+ throw Slic3r::RuntimeError(format("Error while reading file %1%: %2%", filename, std::string(translate_result(res))));
+
+ // extracts data from block
+ for (const auto& [key, value] : slicer_metadata_block.raw_data) {
+ this->set_deserialize(key, value, substitutions_ctxt);
+ }
+
return std::move(substitutions_ctxt.substitutions);
}
diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp
index 5b4e06b37c..09d283a327 100644
--- a/src/libslic3r/Config.hpp
+++ b/src/libslic3r/Config.hpp
@@ -1836,6 +1836,8 @@ public:
// Close parameter, string value could be one of the list values.
select_close,
};
+ static bool is_gui_type_enum_open(const GUIType gui_type)
+ { return gui_type == ConfigOptionDef::GUIType::i_enum_open || gui_type == ConfigOptionDef::GUIType::f_enum_open || gui_type == ConfigOptionDef::GUIType::select_open; }
// Identifier of this option. It is stored here so that it is accessible through the by_serialization_key_ordinal map.
t_config_option_key opt_key;
@@ -1853,6 +1855,8 @@ public:
// Create a default option to be inserted into a DynamicConfig.
ConfigOption* create_default_option() const;
+ bool is_scalar() const { return (int(this->type) & int(coVectorType)) == 0; }
+
template ConfigOption* load_option_from_archive(Archive &archive) const {
if (this->nullable) {
switch (this->type) {
@@ -1923,6 +1927,7 @@ public:
// Special values - "i_enum_open", "f_enum_open" to provide combo box for int or float selection,
// "select_open" - to open a selection dialog (currently only a serial port selection).
GUIType gui_type { GUIType::undefined };
+ bool is_gui_type_enum_open() const { return is_gui_type_enum_open(this->gui_type); }
// Usually empty. Otherwise "serialized" or "show_value"
// The flags may be combined.
// "serialized" - vector valued option is entered in a single edit field. Values are separated by a semicolon.
@@ -1986,7 +1991,7 @@ public:
void set_enum_values(GUIType gui_type, const std::initializer_list il) {
this->enum_def_new();
- assert(gui_type == GUIType::i_enum_open || gui_type == GUIType::f_enum_open || gui_type == GUIType::select_open);
+ assert(is_gui_type_enum_open(gui_type));
this->gui_type = gui_type;
enum_def->set_values(il);
}
@@ -2098,6 +2103,7 @@ public:
out.push_back(kvp.first);
return out;
}
+ bool empty() const { return options.empty(); }
// Iterate through all of the CLI options and write them to a stream.
std::ostream& print_cli_help(
@@ -2328,7 +2334,8 @@ public:
// Loading a "will be one day a legacy format" of configuration stored into 3MF or AMF.
// Accepts the same data as load_from_ini_string(), only with each configuration line possibly prefixed with a semicolon (G-code comment).
ConfigSubstitutions load_from_ini_string_commented(std::string &&data, ForwardCompatibilitySubstitutionRule compatibility_rule);
- ConfigSubstitutions load_from_gcode_file(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule);
+ ConfigSubstitutions load_from_gcode_file(const std::string &filename, ForwardCompatibilitySubstitutionRule compatibility_rule);
+ ConfigSubstitutions load_from_binary_gcode_file(const std::string& filename, ForwardCompatibilitySubstitutionRule compatibility_rule);
ConfigSubstitutions load(const boost::property_tree::ptree &tree, ForwardCompatibilitySubstitutionRule compatibility_rule);
void save(const std::string &file) const;
diff --git a/src/libslic3r/CustomGCode.cpp b/src/libslic3r/CustomGCode.cpp
index a3ec6cc069..7b950b8d7c 100644
--- a/src/libslic3r/CustomGCode.cpp
+++ b/src/libslic3r/CustomGCode.cpp
@@ -5,7 +5,7 @@
#include "CustomGCode.hpp"
#include "Config.hpp"
#include "GCode.hpp"
-#include "GCodeWriter.hpp"
+#include "GCode/GCodeWriter.hpp"
namespace Slic3r {
diff --git a/src/libslic3r/Extruder.cpp b/src/libslic3r/Extruder.cpp
index 7d08d98958..18b385b401 100644
--- a/src/libslic3r/Extruder.cpp
+++ b/src/libslic3r/Extruder.cpp
@@ -8,7 +8,7 @@
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/
#include "Extruder.hpp"
-#include "GCodeWriter.hpp"
+#include "GCode/GCodeWriter.hpp"
#include "PrintConfig.hpp"
namespace Slic3r {
@@ -25,6 +25,7 @@ Extruder::Extruder(unsigned int id, GCodeConfig *config) :
std::pair Extruder::extrude(double dE)
{
+ assert(! std::isnan(dE));
// in case of relative E distances we always reset to 0 before any output
if (m_config->use_relative_e_distances)
m_E = 0.;
@@ -46,7 +47,8 @@ std::pair Extruder::extrude(double dE)
value supplied will overwrite the previous one if any. */
std::pair Extruder::retract(double retract_length, double restart_extra)
{
- assert(restart_extra >= 0);
+ assert(! std::isnan(retract_length));
+ assert(! std::isnan(restart_extra) && restart_extra >= 0);
// in case of relative E distances we always reset to 0 before any output
if (m_config->use_relative_e_distances)
m_E = 0.;
diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp
index fa00a9a456..b5a9868e9b 100644
--- a/src/libslic3r/ExtrusionEntity.cpp
+++ b/src/libslic3r/ExtrusionEntity.cpp
@@ -9,6 +9,7 @@
#include "ExtrusionEntityCollection.hpp"
#include "ExPolygon.hpp"
#include "ClipperUtils.hpp"
+#include "Exception.hpp"
#include "Extruder.hpp"
#include "Flow.hpp"
#include
@@ -16,7 +17,7 @@
#include
namespace Slic3r {
-
+
void ExtrusionPath::intersect_expolygons(const ExPolygons &collection, ExtrusionEntityCollection* retval) const
{
this->_inflate_collection(intersection_pl(Polylines{ polyline }, collection), retval);
@@ -45,12 +46,12 @@ double ExtrusionPath::length() const
void ExtrusionPath::_inflate_collection(const Polylines &polylines, ExtrusionEntityCollection* collection) const
{
for (const Polyline &polyline : polylines)
- collection->entities.emplace_back(new ExtrusionPath(polyline, *this));
+ collection->entities.emplace_back(new ExtrusionPath(polyline, this->attributes()));
}
void ExtrusionPath::polygons_covered_by_width(Polygons &out, const float scaled_epsilon) const
{
- polygons_append(out, offset(this->polyline, float(scale_(this->width/2)) + scaled_epsilon));
+ polygons_append(out, offset(this->polyline, float(scale_(m_attributes.width/2)) + scaled_epsilon));
}
void ExtrusionPath::polygons_covered_by_spacing(Polygons &out, const float scaled_epsilon) const
@@ -58,8 +59,8 @@ void ExtrusionPath::polygons_covered_by_spacing(Polygons &out, const float scale
// Instantiating the Flow class to get the line spacing.
// Don't know the nozzle diameter, setting to zero. It shall not matter it shall be optimized out by the compiler.
bool bridge = this->role().is_bridge();
- assert(! bridge || this->width == this->height);
- auto flow = bridge ? Flow::bridging_flow(this->width, 0.f) : Flow(this->width, this->height, 0.f);
+ assert(! bridge || m_attributes.width == m_attributes.height);
+ auto flow = bridge ? Flow::bridging_flow(m_attributes.width, 0.f) : Flow(m_attributes.width, m_attributes.height, 0.f);
polygons_append(out, offset(this->polyline, 0.5f * float(flow.scaled_spacing()) + scaled_epsilon));
}
@@ -94,7 +95,7 @@ double ExtrusionMultiPath::min_mm3_per_mm() const
{
double min_mm3_per_mm = std::numeric_limits::max();
for (const ExtrusionPath &path : this->paths)
- min_mm3_per_mm = std::min(min_mm3_per_mm, path.mm3_per_mm);
+ min_mm3_per_mm = std::min(min_mm3_per_mm, path.min_mm3_per_mm());
return min_mm3_per_mm;
}
@@ -119,21 +120,34 @@ Polyline ExtrusionMultiPath::as_polyline() const
return out;
}
-bool ExtrusionLoop::make_clockwise()
+double ExtrusionLoop::area() const
{
- bool was_ccw = this->polygon().is_counter_clockwise();
- if (was_ccw) this->reverse();
- return was_ccw;
-}
-
-bool ExtrusionLoop::make_counter_clockwise()
-{
- bool was_cw = this->polygon().is_clockwise();
- if (was_cw) this->reverse();
- return was_cw;
+ double a = 0;
+ for (const ExtrusionPath &path : this->paths) {
+ assert(path.size() >= 2);
+ if (path.size() >= 2) {
+ // Assumming that the last point of one path segment is repeated at the start of the following path segment.
+ auto it = path.polyline.points.begin();
+ Point prev = *it ++;
+ for (; it != path.polyline.points.end(); ++ it) {
+ a += cross2(prev.cast(), it->cast());
+ prev = *it;
+ }
+ }
+ }
+ return a * 0.5;
}
void ExtrusionLoop::reverse()
+{
+#if 0
+ this->reverse_loop();
+#else
+ throw Slic3r::LogicError("ExtrusionLoop::reverse() must NOT be called");
+#endif
+}
+
+void ExtrusionLoop::reverse_loop()
{
for (ExtrusionPath &path : this->paths)
path.reverse();
@@ -255,8 +269,8 @@ void ExtrusionLoop::split_at(const Point &point, bool prefer_non_overhang, const
// now split path_idx in two parts
const ExtrusionPath &path = this->paths[path_idx];
- ExtrusionPath p1(path.role(), path.mm3_per_mm, path.width, path.height);
- ExtrusionPath p2(path.role(), path.mm3_per_mm, path.width, path.height);
+ ExtrusionPath p1(path.attributes());
+ ExtrusionPath p2(path.attributes());
path.polyline.split_at(p, &p1.polyline, &p2.polyline);
if (this->paths.size() == 1) {
@@ -323,7 +337,7 @@ double ExtrusionLoop::min_mm3_per_mm() const
{
double min_mm3_per_mm = std::numeric_limits::max();
for (const ExtrusionPath &path : this->paths)
- min_mm3_per_mm = std::min(min_mm3_per_mm, path.mm3_per_mm);
+ min_mm3_per_mm = std::min(min_mm3_per_mm, path.min_mm3_per_mm());
return min_mm3_per_mm;
}
diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp
index 55d476ea03..6238447c2c 100644
--- a/src/libslic3r/ExtrusionEntity.hpp
+++ b/src/libslic3r/ExtrusionEntity.hpp
@@ -10,10 +10,12 @@
#include "libslic3r.h"
#include "ExtrusionRole.hpp"
+#include "Flow.hpp"
#include "Polygon.hpp"
#include "Polyline.hpp"
#include
+#include
#include
#include
@@ -62,28 +64,91 @@ public:
virtual double total_volume() const = 0;
};
-typedef std::vector ExtrusionEntitiesPtr;
+using ExtrusionEntitiesPtr = std::vector;
+
+// Const reference for ordering extrusion entities without having to modify them.
+class ExtrusionEntityReference final
+{
+public:
+ ExtrusionEntityReference() = delete;
+ ExtrusionEntityReference(const ExtrusionEntity &extrusion_entity, bool flipped) :
+ m_extrusion_entity(&extrusion_entity), m_flipped(flipped) {}
+ ExtrusionEntityReference operator=(const ExtrusionEntityReference &rhs)
+ { m_extrusion_entity = rhs.m_extrusion_entity; m_flipped = rhs.m_flipped; return *this; }
+
+ const ExtrusionEntity& extrusion_entity() const { return *m_extrusion_entity; }
+ template
+ const Type* cast() const { return dynamic_cast(m_extrusion_entity); }
+ bool flipped() const { return m_flipped; }
+
+private:
+ const ExtrusionEntity *m_extrusion_entity;
+ bool m_flipped;
+};
+
+using ExtrusionEntityReferences = std::vector;
+
+struct ExtrusionFlow
+{
+ ExtrusionFlow() = default;
+ ExtrusionFlow(double mm3_per_mm, float width, float height) :
+ mm3_per_mm{ mm3_per_mm }, width{ width }, height{ height } {}
+ ExtrusionFlow(const Flow &flow) :
+ mm3_per_mm(flow.mm3_per_mm()), width(flow.width()), height(flow.height()) {}
+
+ // Volumetric velocity. mm^3 of plastic per mm of linear head motion. Used by the G-code generator.
+ double mm3_per_mm{ -1. };
+ // Width of the extrusion, used for visualization purposes.
+ float width{ -1.f };
+ // Height of the extrusion, used for visualization purposes.
+ float height{ -1.f };
+};
+
+inline bool operator==(const ExtrusionFlow &lhs, const ExtrusionFlow &rhs)
+{
+ return lhs.mm3_per_mm == rhs.mm3_per_mm && lhs.width == rhs.width && lhs.height == rhs.height;
+}
+
+struct OverhangAttributes {
+ float start_distance_from_prev_layer;
+ float end_distance_from_prev_layer;
+ float proximity_to_curled_lines; //value between 0 and 1
+};
+
+struct ExtrusionAttributes : ExtrusionFlow
+{
+ ExtrusionAttributes() = default;
+ ExtrusionAttributes(ExtrusionRole role) : role{ role } {}
+ ExtrusionAttributes(ExtrusionRole role, const Flow &flow) : role{ role }, ExtrusionFlow{ flow } {}
+ ExtrusionAttributes(ExtrusionRole role, const ExtrusionFlow &flow) : role{ role }, ExtrusionFlow{ flow } {}
+
+ // What is the role / purpose of this extrusion?
+ ExtrusionRole role{ ExtrusionRole::None };
+ // OVerhangAttributes are currently computed for perimeters if dynamic overhangs are enabled.
+ // They are used to control fan and print speed in export.
+ std::optional overhang_attributes;
+};
+
+inline bool operator==(const ExtrusionAttributes &lhs, const ExtrusionAttributes &rhs)
+{
+ return static_cast(lhs) == static_cast(rhs) &&
+ lhs.role == rhs.role;
+}
class ExtrusionPath : public ExtrusionEntity
{
public:
Polyline polyline;
- // Volumetric velocity. mm^3 of plastic per mm of linear head motion. Used by the G-code generator.
- double mm3_per_mm;
- // Width of the extrusion, used for visualization purposes.
- float width;
- // Height of the extrusion, used for visualization purposes.
- float height;
- ExtrusionPath(ExtrusionRole role) : mm3_per_mm(-1), width(-1), height(-1), m_role(role) {}
- ExtrusionPath(ExtrusionRole role, double mm3_per_mm, float width, float height) : mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {}
- ExtrusionPath(const ExtrusionPath& rhs) : polyline(rhs.polyline), mm3_per_mm(rhs.mm3_per_mm), width(rhs.width), height(rhs.height), m_role(rhs.m_role) {}
- ExtrusionPath(ExtrusionPath&& rhs) : polyline(std::move(rhs.polyline)), mm3_per_mm(rhs.mm3_per_mm), width(rhs.width), height(rhs.height), m_role(rhs.m_role) {}
- ExtrusionPath(const Polyline &polyline, const ExtrusionPath &rhs) : polyline(polyline), mm3_per_mm(rhs.mm3_per_mm), width(rhs.width), height(rhs.height), m_role(rhs.m_role) {}
- ExtrusionPath(Polyline &&polyline, const ExtrusionPath &rhs) : polyline(std::move(polyline)), mm3_per_mm(rhs.mm3_per_mm), width(rhs.width), height(rhs.height), m_role(rhs.m_role) {}
+ ExtrusionPath(ExtrusionRole role) : m_attributes{ role } {}
+ ExtrusionPath(const ExtrusionAttributes &attributes) : m_attributes(attributes) {}
+ ExtrusionPath(const ExtrusionPath &rhs) : polyline(rhs.polyline), m_attributes(rhs.m_attributes) {}
+ ExtrusionPath(ExtrusionPath &&rhs) : polyline(std::move(rhs.polyline)), m_attributes(rhs.m_attributes) {}
+ ExtrusionPath(const Polyline &polyline, const ExtrusionAttributes &attribs) : polyline(polyline), m_attributes(attribs) {}
+ ExtrusionPath(Polyline &&polyline, const ExtrusionAttributes &attribs) : polyline(std::move(polyline)), m_attributes(attribs) {}
- ExtrusionPath& operator=(const ExtrusionPath& rhs) { m_role = rhs.m_role; this->mm3_per_mm = rhs.mm3_per_mm; this->width = rhs.width; this->height = rhs.height; this->polyline = rhs.polyline; return *this; }
- ExtrusionPath& operator=(ExtrusionPath&& rhs) { m_role = rhs.m_role; this->mm3_per_mm = rhs.mm3_per_mm; this->width = rhs.width; this->height = rhs.height; this->polyline = std::move(rhs.polyline); return *this; }
+ ExtrusionPath& operator=(const ExtrusionPath &rhs) { this->polyline = rhs.polyline; m_attributes = rhs.m_attributes; return *this; }
+ ExtrusionPath& operator=(ExtrusionPath &&rhs) { this->polyline = std::move(rhs.polyline); m_attributes = rhs.m_attributes; return *this; }
ExtrusionEntity* clone() const override { return new ExtrusionPath(*this); }
// Create a new object, initialize it with this object using the move semantics.
@@ -104,35 +169,46 @@ public:
void clip_end(double distance);
void simplify(double tolerance);
double length() const override;
- ExtrusionRole role() const override { return m_role; }
+
+ const ExtrusionAttributes& attributes() const { return m_attributes; }
+ ExtrusionRole role() const override { return m_attributes.role; }
+ float width() const { return m_attributes.width; }
+ float height() const { return m_attributes.height; }
+ double mm3_per_mm() const { return m_attributes.mm3_per_mm; }
+ // Minimum volumetric velocity of this extrusion entity. Used by the constant nozzle pressure algorithm.
+ double min_mm3_per_mm() const override { return m_attributes.mm3_per_mm; }
+ std::optional& overhang_attributes_mutable() { return m_attributes.overhang_attributes; }
+
// Produce a list of 2D polygons covered by the extruded paths, offsetted by the extrusion width.
// Increase the offset by scaled_epsilon to achieve an overlap, so a union will produce no gaps.
- void polygons_covered_by_width(Polygons &out, const float scaled_epsilon) const override;
+ void polygons_covered_by_width(Polygons &out, const float scaled_epsilon) const override;
// Produce a list of 2D polygons covered by the extruded paths, offsetted by the extrusion spacing.
// Increase the offset by scaled_epsilon to achieve an overlap, so a union will produce no gaps.
// Useful to calculate area of an infill, which has been really filled in by a 100% rectilinear infill.
- void polygons_covered_by_spacing(Polygons &out, const float scaled_epsilon) const override;
- Polygons polygons_covered_by_width(const float scaled_epsilon = 0.f) const
+ void polygons_covered_by_spacing(Polygons &out, const float scaled_epsilon) const override;
+ Polygons polygons_covered_by_width(const float scaled_epsilon = 0.f) const
{ Polygons out; this->polygons_covered_by_width(out, scaled_epsilon); return out; }
- Polygons polygons_covered_by_spacing(const float scaled_epsilon = 0.f) const
+ Polygons polygons_covered_by_spacing(const float scaled_epsilon = 0.f) const
{ Polygons out; this->polygons_covered_by_spacing(out, scaled_epsilon); return out; }
- // Minimum volumetric velocity of this extrusion entity. Used by the constant nozzle pressure algorithm.
- double min_mm3_per_mm() const override { return this->mm3_per_mm; }
- Polyline as_polyline() const override { return this->polyline; }
- void collect_polylines(Polylines &dst) const override { if (! this->polyline.empty()) dst.emplace_back(this->polyline); }
- void collect_points(Points &dst) const override { append(dst, this->polyline.points); }
- double total_volume() const override { return mm3_per_mm * unscale(length()); }
+
+ Polyline as_polyline() const override { return this->polyline; }
+ void collect_polylines(Polylines &dst) const override { if (! this->polyline.empty()) dst.emplace_back(this->polyline); }
+ void collect_points(Points &dst) const override { append(dst, this->polyline.points); }
+ double total_volume() const override { return m_attributes.mm3_per_mm * unscale(length()); }
private:
- void _inflate_collection(const Polylines &polylines, ExtrusionEntityCollection* collection) const;
+ void _inflate_collection(const Polylines &polylines, ExtrusionEntityCollection* collection) const;
- ExtrusionRole m_role;
+ ExtrusionAttributes m_attributes;
};
class ExtrusionPathOriented : public ExtrusionPath
{
public:
- ExtrusionPathOriented(ExtrusionRole role, double mm3_per_mm, float width, float height) : ExtrusionPath(role, mm3_per_mm, width, height) {}
+ ExtrusionPathOriented(const ExtrusionAttributes &attribs) : ExtrusionPath(attribs) {}
+ ExtrusionPathOriented(const Polyline &polyline, const ExtrusionAttributes &attribs) : ExtrusionPath(polyline, attribs) {}
+ ExtrusionPathOriented(Polyline &&polyline, const ExtrusionAttributes &attribs) : ExtrusionPath(std::move(polyline), attribs) {}
+
ExtrusionEntity* clone() const override { return new ExtrusionPathOriented(*this); }
// Create a new object, initialize it with this object using the move semantics.
ExtrusionEntity* clone_move() override { return new ExtrusionPathOriented(std::move(*this)); }
@@ -199,7 +275,8 @@ class ExtrusionLoop : public ExtrusionEntity
public:
ExtrusionPaths paths;
- ExtrusionLoop(ExtrusionLoopRole role = elrDefault) : m_loop_role(role) {}
+ ExtrusionLoop() = default;
+ ExtrusionLoop(ExtrusionLoopRole role) : m_loop_role(role) {}
ExtrusionLoop(const ExtrusionPaths &paths, ExtrusionLoopRole role = elrDefault) : paths(paths), m_loop_role(role) {}
ExtrusionLoop(ExtrusionPaths &&paths, ExtrusionLoopRole role = elrDefault) : paths(std::move(paths)), m_loop_role(role) {}
ExtrusionLoop(const ExtrusionPath &path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role)
@@ -211,16 +288,21 @@ public:
ExtrusionEntity* clone() const override{ return new ExtrusionLoop (*this); }
// Create a new object, initialize it with this object using the move semantics.
ExtrusionEntity* clone_move() override { return new ExtrusionLoop(std::move(*this)); }
- bool make_clockwise();
- bool make_counter_clockwise();
- void reverse() override;
- const Point& first_point() const override { return this->paths.front().polyline.points.front(); }
- const Point& last_point() const override { assert(this->first_point() == this->paths.back().polyline.points.back()); return this->first_point(); }
- const Point& middle_point() const override { auto& path = this->paths[this->paths.size() / 2]; return path.polyline.points[path.polyline.size() / 2]; }
- Polygon polygon() const;
- double length() const override;
- bool split_at_vertex(const Point &point, const double scaled_epsilon = scaled(0.001));
- void split_at(const Point &point, bool prefer_non_overhang, const double scaled_epsilon = scaled(0.001));
+ double area() const;
+ bool is_counter_clockwise() const { return this->area() > 0; }
+ bool is_clockwise() const { return this->area() < 0; }
+ // Reverse shall never be called on ExtrusionLoop using a virtual function call, it is most likely never what one wants,
+ // as this->can_reverse() returns false for an ExtrusionLoop.
+ void reverse() override;
+ // Used by PerimeterGenerator to reorient extrusion loops.
+ void reverse_loop();
+ const Point& first_point() const override { return this->paths.front().polyline.points.front(); }
+ const Point& last_point() const override { assert(this->first_point() == this->paths.back().polyline.points.back()); return this->first_point(); }
+ const Point& middle_point() const override { auto& path = this->paths[this->paths.size() / 2]; return path.polyline.points[path.polyline.size() / 2]; }
+ Polygon polygon() const;
+ double length() const override;
+ bool split_at_vertex(const Point &point, const double scaled_epsilon = scaled(0.001));
+ void split_at(const Point &point, bool prefer_non_overhang, const double scaled_epsilon = scaled(0.001));
struct ClosestPathPoint {
size_t path_idx;
size_t segment_idx;
@@ -266,59 +348,51 @@ public:
#endif /* NDEBUG */
private:
- ExtrusionLoopRole m_loop_role;
+ ExtrusionLoopRole m_loop_role{ elrDefault };
};
-inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, ExtrusionRole role, double mm3_per_mm, float width, float height)
+inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, const ExtrusionAttributes &attributes)
{
dst.reserve(dst.size() + polylines.size());
for (Polyline &polyline : polylines)
- if (polyline.is_valid()) {
- dst.push_back(ExtrusionPath(role, mm3_per_mm, width, height));
- dst.back().polyline = polyline;
- }
+ if (polyline.is_valid())
+ dst.emplace_back(polyline, attributes);
}
-inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, ExtrusionRole role, double mm3_per_mm, float width, float height)
+inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, const ExtrusionAttributes &attributes)
{
dst.reserve(dst.size() + polylines.size());
for (Polyline &polyline : polylines)
- if (polyline.is_valid()) {
- dst.push_back(ExtrusionPath(role, mm3_per_mm, width, height));
- dst.back().polyline = std::move(polyline);
- }
+ if (polyline.is_valid())
+ dst.emplace_back(std::move(polyline), attributes);
polylines.clear();
}
-inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, const Polylines &polylines, ExtrusionRole role, double mm3_per_mm, float width, float height, bool can_reverse = true)
+inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, const Polylines &polylines, const ExtrusionAttributes &attributes, bool can_reverse = true)
{
dst.reserve(dst.size() + polylines.size());
for (const Polyline &polyline : polylines)
- if (polyline.is_valid()) {
- ExtrusionPath* extrusion_path = can_reverse ? new ExtrusionPath(role, mm3_per_mm, width, height) : new ExtrusionPathOriented(role, mm3_per_mm, width, height);
- dst.push_back(extrusion_path);
- extrusion_path->polyline = polyline;
- }
+ if (polyline.is_valid())
+ dst.emplace_back(can_reverse ? new ExtrusionPath(polyline, attributes) : new ExtrusionPathOriented(polyline, attributes));
}
-inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, Polylines &&polylines, ExtrusionRole role, double mm3_per_mm, float width, float height, bool can_reverse = true)
+inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, Polylines &&polylines, const ExtrusionAttributes &attributes, bool can_reverse = true)
{
dst.reserve(dst.size() + polylines.size());
for (Polyline &polyline : polylines)
- if (polyline.is_valid()) {
- ExtrusionPath *extrusion_path = can_reverse ? new ExtrusionPath(role, mm3_per_mm, width, height) : new ExtrusionPathOriented(role, mm3_per_mm, width, height);
- dst.push_back(extrusion_path);
- extrusion_path->polyline = std::move(polyline);
- }
+ if (polyline.is_valid())
+ dst.emplace_back(can_reverse ?
+ new ExtrusionPath(std::move(polyline), attributes) :
+ new ExtrusionPathOriented(std::move(polyline), attributes));
polylines.clear();
}
-inline void extrusion_entities_append_loops(ExtrusionEntitiesPtr &dst, Polygons &&loops, ExtrusionRole role, double mm3_per_mm, float width, float height)
+inline void extrusion_entities_append_loops(ExtrusionEntitiesPtr &dst, Polygons &&loops, const ExtrusionAttributes &attributes)
{
dst.reserve(dst.size() + loops.size());
for (Polygon &poly : loops) {
if (poly.is_valid()) {
- ExtrusionPath path(role, mm3_per_mm, width, height);
+ ExtrusionPath path(attributes);
path.polyline.points = std::move(poly.points);
path.polyline.points.push_back(path.polyline.points.front());
dst.emplace_back(new ExtrusionLoop(std::move(path)));
@@ -327,22 +401,14 @@ inline void extrusion_entities_append_loops(ExtrusionEntitiesPtr &dst, Polygons
loops.clear();
}
-inline void extrusion_entities_append_loops_and_paths(ExtrusionEntitiesPtr &dst, Polylines &&polylines, ExtrusionRole role, double mm3_per_mm, float width, float height)
+inline void extrusion_entities_append_loops_and_paths(ExtrusionEntitiesPtr &dst, Polylines &&polylines, const ExtrusionAttributes &attributes)
{
dst.reserve(dst.size() + polylines.size());
- for (Polyline &polyline : polylines) {
- if (polyline.is_valid()) {
- if (polyline.is_closed()) {
- ExtrusionPath extrusion_path(role, mm3_per_mm, width, height);
- extrusion_path.polyline = std::move(polyline);
- dst.emplace_back(new ExtrusionLoop(std::move(extrusion_path)));
- } else {
- ExtrusionPath *extrusion_path = new ExtrusionPath(role, mm3_per_mm, width, height);
- extrusion_path->polyline = std::move(polyline);
- dst.emplace_back(extrusion_path);
- }
- }
- }
+ for (Polyline &polyline : polylines)
+ if (polyline.is_valid())
+ dst.emplace_back(polyline.is_closed() ?
+ static_cast(new ExtrusionLoop(ExtrusionPath{ std::move(polyline), attributes })) :
+ static_cast(new ExtrusionPath(std::move(polyline), attributes)));
polylines.clear();
}
diff --git a/src/libslic3r/ExtrusionEntityCollection.cpp b/src/libslic3r/ExtrusionEntityCollection.cpp
index 4e75a70617..7d5e46c977 100644
--- a/src/libslic3r/ExtrusionEntityCollection.cpp
+++ b/src/libslic3r/ExtrusionEntityCollection.cpp
@@ -14,6 +14,7 @@
namespace Slic3r {
+#if 0
void filter_by_extrusion_role_in_place(ExtrusionEntitiesPtr &extrusion_entities, ExtrusionRole role)
{
if (role != ExtrusionRole::Mixed) {
@@ -25,6 +26,7 @@ void filter_by_extrusion_role_in_place(ExtrusionEntitiesPtr &extrusion_entities,
last);
}
}
+#endif
ExtrusionEntityCollection::ExtrusionEntityCollection(const ExtrusionPaths &paths)
: no_sort(false)
@@ -91,18 +93,6 @@ void ExtrusionEntityCollection::remove(size_t i)
this->entities.erase(this->entities.begin() + i);
}
-ExtrusionEntityCollection ExtrusionEntityCollection::chained_path_from(const ExtrusionEntitiesPtr& extrusion_entities, const Point &start_near, ExtrusionRole role)
-{
- // Return a filtered copy of the collection.
- ExtrusionEntityCollection out;
- out.entities = filter_by_extrusion_role(extrusion_entities, role);
- // Clone the extrusion entities.
- for (auto &ptr : out.entities)
- ptr = ptr->clone();
- chain_and_reorder_extrusion_entities(out.entities, &start_near);
- return out;
-}
-
void ExtrusionEntityCollection::polygons_covered_by_width(Polygons &out, const float scaled_epsilon) const
{
for (const ExtrusionEntity *entity : this->entities)
diff --git a/src/libslic3r/ExtrusionEntityCollection.hpp b/src/libslic3r/ExtrusionEntityCollection.hpp
index 6228c72989..477270adee 100644
--- a/src/libslic3r/ExtrusionEntityCollection.hpp
+++ b/src/libslic3r/ExtrusionEntityCollection.hpp
@@ -13,6 +13,7 @@
namespace Slic3r {
+#if 0
// Remove those items from extrusion_entities, that do not match role.
// Do nothing if role is mixed.
// Removed elements are NOT being deleted.
@@ -27,6 +28,7 @@ inline ExtrusionEntitiesPtr filter_by_extrusion_role(const ExtrusionEntitiesPtr
filter_by_extrusion_role_in_place(out, role);
return out;
}
+#endif
class ExtrusionEntityCollection : public ExtrusionEntity
{
@@ -102,9 +104,6 @@ public:
}
void replace(size_t i, const ExtrusionEntity &entity);
void remove(size_t i);
- static ExtrusionEntityCollection chained_path_from(const ExtrusionEntitiesPtr &extrusion_entities, const Point &start_near, ExtrusionRole role = ExtrusionRole::Mixed);
- ExtrusionEntityCollection chained_path_from(const Point &start_near, ExtrusionRole role = ExtrusionRole::Mixed) const
- { return this->no_sort ? *this : chained_path_from(this->entities, start_near, role); }
void reverse() override;
const Point& first_point() const override { return this->entities.front()->first_point(); }
const Point& last_point() const override { return this->entities.back()->last_point(); }
diff --git a/src/libslic3r/ExtrusionRole.hpp b/src/libslic3r/ExtrusionRole.hpp
index d092a95691..844c485f10 100644
--- a/src/libslic3r/ExtrusionRole.hpp
+++ b/src/libslic3r/ExtrusionRole.hpp
@@ -87,6 +87,7 @@ struct ExtrusionRole : public ExtrusionRoleModifiers
bool is_external_perimeter() const { return this->is_perimeter() && this->is_external(); }
bool is_infill() const { return this->ExtrusionRoleModifiers::has(ExtrusionRoleModifier::Infill); }
bool is_solid_infill() const { return this->is_infill() && this->ExtrusionRoleModifiers::has(ExtrusionRoleModifier::Solid); }
+ bool is_sparse_infill() const { return this->is_infill() && ! this->ExtrusionRoleModifiers::has(ExtrusionRoleModifier::Solid); }
bool is_external() const { return this->ExtrusionRoleModifiers::has(ExtrusionRoleModifier::External); }
bool is_bridge() const { return this->ExtrusionRoleModifiers::has(ExtrusionRoleModifier::Bridge); }
@@ -94,6 +95,9 @@ struct ExtrusionRole : public ExtrusionRoleModifiers
bool is_support_base() const { return this->is_support() && ! this->is_external(); }
bool is_support_interface() const { return this->is_support() && this->is_external(); }
bool is_mixed() const { return this->ExtrusionRoleModifiers::has(ExtrusionRoleModifier::Mixed); }
+
+ // Brim is currently marked as skirt.
+ bool is_skirt() const { return this->ExtrusionRoleModifiers::has(ExtrusionRoleModifier::Skirt); }
};
// Special flags describing loop
diff --git a/src/libslic3r/ExtrusionSimulator.cpp b/src/libslic3r/ExtrusionSimulator.cpp
index 2d577c6d42..6408c4b144 100644
--- a/src/libslic3r/ExtrusionSimulator.cpp
+++ b/src/libslic3r/ExtrusionSimulator.cpp
@@ -961,9 +961,9 @@ void ExtrusionSimulator::extrude_to_accumulator(const ExtrusionPath &path, const
polyline.reserve(path.polyline.points.size());
float scalex = float(viewport.size().x()) / float(bbox.size().x());
float scaley = float(viewport.size().y()) / float(bbox.size().y());
- float w = scale_(path.width) * scalex;
+ float w = scale_(path.width()) * scalex;
//float h = scale_(path.height) * scalex;
- w = scale_(path.mm3_per_mm / path.height) * scalex;
+ w = scale_(path.mm3_per_mm() / path.height()) * scalex;
// printf("scalex: %f, scaley: %f\n", scalex, scaley);
// printf("bbox: %d,%d %d,%d\n", bbox.min.x(), bbox.min.y, bbox.max.x(), bbox.max.y);
for (Points::const_iterator it = path.polyline.points.begin(); it != path.polyline.points.end(); ++ it) {
diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp
index f709fa715f..4f070140e8 100644
--- a/src/libslic3r/Fill/Fill.cpp
+++ b/src/libslic3r/Fill/Fill.cpp
@@ -543,19 +543,19 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
flow_mm3_per_mm = new_flow.mm3_per_mm();
flow_width = new_flow.width();
}
- // Save into layer.
- ExtrusionEntityCollection* eec = nullptr;
- auto fill_begin = uint32_t(layerm.fills().size());
- layerm.m_fills.entities.push_back(eec = new ExtrusionEntityCollection());
- // Only concentric fills are not sorted.
- eec->no_sort = f->no_sort();
- if (params.use_arachne) {
+ auto fill_begin = uint32_t(layerm.fills().size());
+ // Save into layer.
+ if (ExtrusionEntityCollection *eec = nullptr; params.use_arachne) {
for (const ThickPolyline &thick_polyline : thick_polylines) {
Flow new_flow = surface_fill.params.flow.with_spacing(float(f->spacing));
ExtrusionMultiPath multi_path = PerimeterGenerator::thick_polyline_to_multi_path(thick_polyline, surface_fill.params.extrusion_role, new_flow, scaled(0.05), float(SCALED_EPSILON));
// Append paths to collection.
if (!multi_path.empty()) {
+ layerm.m_fills.entities.push_back(eec = new ExtrusionEntityCollection());
+ // Only concentric fills are not sorted.
+ eec->no_sort = f->no_sort();
+
if (multi_path.paths.front().first_point() == multi_path.paths.back().last_point())
eec->entities.emplace_back(new ExtrusionLoop(std::move(multi_path.paths)));
else
@@ -565,10 +565,15 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
thick_polylines.clear();
} else {
+ layerm.m_fills.entities.push_back(eec = new ExtrusionEntityCollection());
+ // Only concentric fills are not sorted.
+ eec->no_sort = f->no_sort();
+
extrusion_entities_append_paths(
eec->entities, std::move(polylines),
- surface_fill.params.extrusion_role,
- flow_mm3_per_mm, float(flow_width), surface_fill.params.flow.height());
+ ExtrusionAttributes{ surface_fill.params.extrusion_role,
+ ExtrusionFlow{ flow_mm3_per_mm, float(flow_width), surface_fill.params.flow.height() }
+ });
}
insert_fills_into_islands(*this, uint32_t(surface_fill.region_id), fill_begin, uint32_t(layerm.fills().size()));
}
@@ -913,8 +918,9 @@ void Layer::make_ironing()
eec->no_sort = true;
extrusion_entities_append_paths(
eec->entities, std::move(polylines),
- ExtrusionRole::Ironing,
- flow_mm3_per_mm, extrusion_width, float(extrusion_height));
+ ExtrusionAttributes{ ExtrusionRole::Ironing,
+ ExtrusionFlow{ flow_mm3_per_mm, extrusion_width, float(extrusion_height) }
+ });
insert_fills_into_islands(*this, ironing_params.region_id, fill_begin, uint32_t(ironing_params.layerm->fills().size()));
}
}
diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 74a40afd9f..1e17f8395d 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -31,6 +31,7 @@
#include "GCode/PrintExtents.hpp"
#include "GCode/Thumbnails.hpp"
#include "GCode/WipeTower.hpp"
+#include "GCode/WipeTowerIntegration.hpp"
#include "Point.hpp"
#include "Polygon.hpp"
#include "PrintConfig.hpp"
@@ -41,12 +42,13 @@
#include "ClipperUtils.hpp"
#include "libslic3r.h"
#include "LocalesUtils.hpp"
-#include "libslic3r/format.hpp"
+#include "format.hpp"
#include
#include
#include
#include
+#include
#include
#include
@@ -128,7 +130,7 @@ namespace Slic3r {
return ok;
}
- std::string OozePrevention::pre_toolchange(GCode& gcodegen)
+ std::string OozePrevention::pre_toolchange(GCodeGenerator &gcodegen)
{
std::string gcode;
@@ -154,315 +156,28 @@ namespace Slic3r {
return gcode;
}
- std::string OozePrevention::post_toolchange(GCode& gcodegen)
+ std::string OozePrevention::post_toolchange(GCodeGenerator &gcodegen)
{
return (gcodegen.config().standby_temperature_delta.value != 0) ?
gcodegen.writer().set_temperature(this->_get_temp(gcodegen), true, gcodegen.writer().extruder()->id()) :
std::string();
}
- int OozePrevention::_get_temp(const GCode& gcodegen) const
+ int OozePrevention::_get_temp(const GCodeGenerator &gcodegen) const
{
- return (gcodegen.layer() == nullptr || gcodegen.layer()->id() == 0)
+ // First layer temperature should be used when on the first layer (obviously) and when
+ // "other layers" is set to zero (which means it should not be used).
+ return (gcodegen.layer() == nullptr || gcodegen.layer()->id() == 0
+ || gcodegen.config().temperature.get_at(gcodegen.writer().extruder()->id()) == 0)
? gcodegen.config().first_layer_temperature.get_at(gcodegen.writer().extruder()->id())
: gcodegen.config().temperature.get_at(gcodegen.writer().extruder()->id());
}
- std::string Wipe::wipe(GCode& gcodegen, bool toolchange)
- {
- std::string gcode;
- const Extruder &extruder = *gcodegen.writer().extruder();
-
- // Remaining quantized retraction length.
- if (double retract_length = extruder.retract_to_go(toolchange ? extruder.retract_length_toolchange() : extruder.retract_length());
- retract_length > 0 && this->path.size() >= 2) {
- // Reduce feedrate a bit; travel speed is often too high to move on existing material.
- // Too fast = ripping of existing material; too slow = short wipe path, thus more blob.
- const double wipe_speed = gcodegen.writer().config.travel_speed.value * 0.8;
- // Reduce retraction length a bit to avoid effective retraction speed to be greater than the configured one
- // due to rounding (TODO: test and/or better math for this).
- const double xy_to_e = 0.95 * extruder.retract_speed() / wipe_speed;
- // Start with the current position, which may be different from the wipe path start in case of loop clipping.
- Vec2d prev = gcodegen.point_to_gcode_quantized(gcodegen.last_pos());
- auto it = this->path.points.begin();
- Vec2d p = gcodegen.point_to_gcode_quantized(*(++ it));
- if (p != prev) {
- gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start) + "\n";
- auto end = this->path.points.end();
- bool done = false;
- for (; it != end && ! done; ++ it) {
- p = gcodegen.point_to_gcode_quantized(*it);
- double segment_length = (p - prev).norm();
- double dE = GCodeFormatter::quantize_e(xy_to_e * segment_length);
- if (dE > retract_length - EPSILON) {
- if (dE > retract_length + EPSILON)
- // Shorten the segment.
- p = prev + (p - prev) * (retract_length / dE);
- dE = retract_length;
- done = true;
- }
- //FIXME one shall not generate the unnecessary G1 Fxxx commands, here wipe_speed is a constant inside this cycle.
- // Is it here for the cooling markers? Or should it be outside of the cycle?
- gcode += gcodegen.writer().set_speed(wipe_speed * 60, {}, gcodegen.enable_cooling_markers() ? ";_WIPE" : "");
- gcode += gcodegen.writer().extrude_to_xy(p, -dE, "wipe and retract");
- prev = p;
- retract_length -= dE;
- }
- // add tag for processor
- gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_End) + "\n";
- gcodegen.set_last_pos(gcodegen.gcode_to_point(prev));
- }
- }
-
- // Prevent wiping again on the same path.
- this->reset_path();
- return gcode;
- }
-
- static inline Point wipe_tower_point_to_object_point(GCode& gcodegen, const Vec2f& wipe_tower_pt)
- {
- return Point(scale_(wipe_tower_pt.x() - gcodegen.origin()(0)), scale_(wipe_tower_pt.y() - gcodegen.origin()(1)));
- }
-
- std::string WipeTowerIntegration::append_tcr(GCode& gcodegen, const WipeTower::ToolChangeResult& tcr, int new_extruder_id, double z) const
- {
- if (new_extruder_id != -1 && new_extruder_id != tcr.new_tool)
- throw Slic3r::InvalidArgument("Error: WipeTowerIntegration::append_tcr was asked to do a toolchange it didn't expect.");
-
- std::string gcode;
-
- // Toolchangeresult.gcode assumes the wipe tower corner is at the origin (except for priming lines)
- // We want to rotate and shift all extrusions (gcode postprocessing) and starting and ending position
- float alpha = m_wipe_tower_rotation / 180.f * float(M_PI);
-
- auto transform_wt_pt = [&alpha, this](const Vec2f& pt) -> Vec2f {
- Vec2f out = Eigen::Rotation2Df(alpha) * pt;
- out += m_wipe_tower_pos;
- return out;
- };
-
- Vec2f start_pos = tcr.start_pos;
- Vec2f end_pos = tcr.end_pos;
- if (! tcr.priming) {
- start_pos = transform_wt_pt(start_pos);
- end_pos = transform_wt_pt(end_pos);
- }
-
- Vec2f wipe_tower_offset = tcr.priming ? Vec2f::Zero() : m_wipe_tower_pos;
- float wipe_tower_rotation = tcr.priming ? 0.f : alpha;
-
- std::string tcr_rotated_gcode = post_process_wipe_tower_moves(tcr, wipe_tower_offset, wipe_tower_rotation);
-
- gcode += gcodegen.writer().unlift(); // Make sure there is no z-hop (in most cases, there isn't).
-
- double current_z = gcodegen.writer().get_position().z();
- if (z == -1.) // in case no specific z was provided, print at current_z pos
- z = current_z;
-
- const bool needs_toolchange = gcodegen.writer().need_toolchange(new_extruder_id);
- const bool will_go_down = ! is_approx(z, current_z);
- const bool is_ramming = (gcodegen.config().single_extruder_multi_material)
- || (! gcodegen.config().single_extruder_multi_material && gcodegen.config().filament_multitool_ramming.get_at(tcr.initial_tool));
- const bool should_travel_to_tower = ! tcr.priming
- && (tcr.force_travel // wipe tower says so
- || ! needs_toolchange // this is just finishing the tower with no toolchange
- || is_ramming);
- if (should_travel_to_tower) {
- // FIXME: It would be better if the wipe tower set the force_travel flag for all toolchanges,
- // then we could simplify the condition and make it more readable.
- gcode += gcodegen.retract();
- gcodegen.m_avoid_crossing_perimeters.use_external_mp_once();
- gcode += gcodegen.travel_to(
- wipe_tower_point_to_object_point(gcodegen, start_pos),
- ExtrusionRole::Mixed,
- "Travel to a Wipe Tower");
- gcode += gcodegen.unretract();
- } else {
- // When this is multiextruder printer without any ramming, we can just change
- // the tool without travelling to the tower.
- }
-
- if (will_go_down) {
- gcode += gcodegen.writer().retract();
- gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer.");
- gcode += gcodegen.writer().unretract();
- }
-
- std::string toolchange_gcode_str;
- std::string deretraction_str;
- if (tcr.priming || (new_extruder_id >= 0 && needs_toolchange)) {
- if (is_ramming)
- gcodegen.m_wipe.reset_path(); // We don't want wiping on the ramming lines.
- toolchange_gcode_str = gcodegen.set_extruder(new_extruder_id, tcr.print_z); // TODO: toolchange_z vs print_z
- if (gcodegen.config().wipe_tower)
- deretraction_str = gcodegen.unretract();
- }
-
-
-
-
- // Insert the toolchange and deretraction gcode into the generated gcode.
- DynamicConfig config;
- config.set_key_value("toolchange_gcode", new ConfigOptionString(toolchange_gcode_str));
- config.set_key_value("deretraction_from_wipe_tower_generator", new ConfigOptionString(deretraction_str));
- std::string tcr_gcode, tcr_escaped_gcode = gcodegen.placeholder_parser_process("tcr_rotated_gcode", tcr_rotated_gcode, new_extruder_id, &config);
- unescape_string_cstyle(tcr_escaped_gcode, tcr_gcode);
- gcode += tcr_gcode;
- check_add_eol(toolchange_gcode_str);
-
- // A phony move to the end position at the wipe tower.
- gcodegen.writer().travel_to_xy(end_pos.cast());
- gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, end_pos));
- if (!is_approx(z, current_z)) {
- gcode += gcodegen.writer().retract();
- gcode += gcodegen.writer().travel_to_z(current_z, "Travel back up to the topmost object layer.");
- gcode += gcodegen.writer().unretract();
- }
-
- else {
- // Prepare a future wipe.
- gcodegen.m_wipe.reset_path();
- for (const Vec2f& wipe_pt : tcr.wipe_path)
- gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, transform_wt_pt(wipe_pt)));
- }
-
- // Let the planner know we are traveling between objects.
- gcodegen.m_avoid_crossing_perimeters.use_external_mp_once();
- return gcode;
- }
-
- // This function postprocesses gcode_original, rotates and moves all G1 extrusions and returns resulting gcode
- // Starting position has to be supplied explicitely (otherwise it would fail in case first G1 command only contained one coordinate)
- std::string WipeTowerIntegration::post_process_wipe_tower_moves(const WipeTower::ToolChangeResult& tcr, const Vec2f& translation, float angle) const
- {
- Vec2f extruder_offset = m_extruder_offsets[tcr.initial_tool].cast();
-
- std::istringstream gcode_str(tcr.gcode);
- std::string gcode_out;
- std::string line;
- Vec2f pos = tcr.start_pos;
- Vec2f transformed_pos = Eigen::Rotation2Df(angle) * pos + translation;
- Vec2f old_pos(-1000.1f, -1000.1f);
-
- while (gcode_str) {
- std::getline(gcode_str, line); // we read the gcode line by line
-
- // All G1 commands should be translated and rotated. X and Y coords are
- // only pushed to the output when they differ from last time.
- // WT generator can override this by appending the never_skip_tag
- if (boost::starts_with(line, "G1 ")) {
- bool never_skip = false;
- auto it = line.find(WipeTower::never_skip_tag());
- if (it != std::string::npos) {
- // remove the tag and remember we saw it
- never_skip = true;
- line.erase(it, it + WipeTower::never_skip_tag().size());
- }
- std::ostringstream line_out;
- std::istringstream line_str(line);
- line_str >> std::noskipws; // don't skip whitespace
- char ch = 0;
- line_str >> ch >> ch; // read the "G1"
- while (line_str >> ch) {
- if (ch == 'X' || ch == 'Y')
- line_str >> (ch == 'X' ? pos.x() : pos.y());
- else
- line_out << ch;
- }
-
- transformed_pos = Eigen::Rotation2Df(angle) * pos + translation;
-
- if (transformed_pos != old_pos || never_skip) {
- line = line_out.str();
- boost::trim_left(line); // Remove leading spaces
- std::ostringstream oss;
- oss << std::fixed << std::setprecision(3) << "G1";
- if (transformed_pos.x() != old_pos.x() || never_skip)
- oss << " X" << transformed_pos.x() - extruder_offset.x();
- if (transformed_pos.y() != old_pos.y() || never_skip)
- oss << " Y" << transformed_pos.y() - extruder_offset.y();
- if (! line.empty())
- oss << " ";
- line = oss.str() + line;
- old_pos = transformed_pos;
- }
- }
-
- gcode_out += line + "\n";
-
- // If this was a toolchange command, we should change current extruder offset
- if (line == "[toolchange_gcode]") {
- extruder_offset = m_extruder_offsets[tcr.new_tool].cast();
-
- // If the extruder offset changed, add an extra move so everything is continuous
- if (extruder_offset != m_extruder_offsets[tcr.initial_tool].cast()) {
- std::ostringstream oss;
- oss << std::fixed << std::setprecision(3)
- << "G1 X" << transformed_pos.x() - extruder_offset.x()
- << " Y" << transformed_pos.y() - extruder_offset.y()
- << "\n";
- gcode_out += oss.str();
- }
- }
- }
- return gcode_out;
- }
-
-
- std::string WipeTowerIntegration::prime(GCode& gcodegen)
- {
- std::string gcode;
- for (const WipeTower::ToolChangeResult& tcr : m_priming) {
- if (! tcr.extrusions.empty())
- gcode += append_tcr(gcodegen, tcr, tcr.new_tool);
- }
- return gcode;
- }
-
- std::string WipeTowerIntegration::tool_change(GCode& gcodegen, int extruder_id, bool finish_layer)
- {
- std::string gcode;
- assert(m_layer_idx >= 0);
- if (gcodegen.writer().need_toolchange(extruder_id) || finish_layer) {
- if (m_layer_idx < (int)m_tool_changes.size()) {
- if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size()))
- throw Slic3r::RuntimeError("Wipe tower generation failed, possibly due to empty first layer.");
-
- // Calculate where the wipe tower layer will be printed. -1 means that print z will not change,
- // resulting in a wipe tower with sparse layers.
- double wipe_tower_z = -1;
- bool ignore_sparse = false;
- if (gcodegen.config().wipe_tower_no_sparse_layers.value) {
- wipe_tower_z = m_last_wipe_tower_print_z;
- ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool && m_layer_idx != 0);
- if (m_tool_change_idx == 0 && !ignore_sparse)
- wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height;
- }
-
- if (!ignore_sparse) {
- gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z);
- m_last_wipe_tower_print_z = wipe_tower_z;
- }
- }
- }
- return gcode;
- }
-
- // Print is finished. Now it remains to unload the filament safely with ramming over the wipe tower.
- std::string WipeTowerIntegration::finalize(GCode& gcodegen)
- {
- std::string gcode;
- if (std::abs(gcodegen.writer().get_position().z() - m_final_purge.print_z) > EPSILON)
- gcode += gcodegen.change_layer(m_final_purge.print_z);
- gcode += append_tcr(gcodegen, m_final_purge, -1);
- return gcode;
- }
-
const std::vector ColorPrintColors::Colors = { "#C0392B", "#E67E22", "#F1C40F", "#27AE60", "#1ABC9C", "#2980B9", "#9B59B6" };
#define EXTRUDER_CONFIG(OPT) m_config.OPT.get_at(m_writer.extruder()->id())
-void GCode::PlaceholderParserIntegration::reset()
+void GCodeGenerator::PlaceholderParserIntegration::reset()
{
this->failed_templates.clear();
this->output_config.clear();
@@ -482,7 +197,7 @@ void GCode::PlaceholderParserIntegration::reset()
this->e_restart_extra.clear();
}
-void GCode::PlaceholderParserIntegration::init(const GCodeWriter &writer)
+void GCodeGenerator::PlaceholderParserIntegration::init(const GCodeWriter &writer)
{
this->reset();
const std::vector &extruders = writer.extruders();
@@ -518,7 +233,7 @@ void GCode::PlaceholderParserIntegration::init(const GCodeWriter &writer)
this->parser.set("zhop", this->opt_zhop);
}
-void GCode::PlaceholderParserIntegration::update_from_gcodewriter(const GCodeWriter &writer)
+void GCodeGenerator::PlaceholderParserIntegration::update_from_gcodewriter(const GCodeWriter &writer)
{
memcpy(this->position.data(), writer.get_position().data(), sizeof(double) * 3);
this->opt_position->values = this->position;
@@ -557,7 +272,7 @@ void GCode::PlaceholderParserIntegration::update_from_gcodewriter(const GCodeWri
}
// Throw if any of the output vector variables were resized by the script.
-void GCode::PlaceholderParserIntegration::validate_output_vector_variables()
+void GCodeGenerator::PlaceholderParserIntegration::validate_output_vector_variables()
{
if (this->opt_position->values.size() != 3)
throw Slic3r::RuntimeError("\"position\" output variable must not be resized by the script.");
@@ -573,9 +288,9 @@ void GCode::PlaceholderParserIntegration::validate_output_vector_variables()
// Collect pairs of object_layer + support_layer sorted by print_z.
// object_layer & support_layer are considered to be on the same print_z, if they are not further than EPSILON.
-GCode::ObjectsLayerToPrint GCode::collect_layers_to_print(const PrintObject& object)
+GCodeGenerator::ObjectsLayerToPrint GCodeGenerator::collect_layers_to_print(const PrintObject& object)
{
- GCode::ObjectsLayerToPrint layers_to_print;
+ GCodeGenerator::ObjectsLayerToPrint layers_to_print;
layers_to_print.reserve(object.layers().size() + object.support_layers().size());
/*
@@ -674,7 +389,7 @@ GCode::ObjectsLayerToPrint GCode::collect_layers_to_print(const PrintObject& obj
// Prepare for non-sequential printing of multiple objects: Support resp. object layers with nearly identical print_z
// will be printed for all objects at once.
// Return a list of items.
-std::vector> GCode::collect_layers_to_print(const Print& print)
+std::vector> GCodeGenerator::collect_layers_to_print(const Print& print)
{
struct OrderingItem {
coordf_t print_z;
@@ -723,7 +438,7 @@ std::vector> GCode::collect_laye
return layers_to_print;
}
-// free functions called by GCode::do_export()
+// free functions called by GCodeGenerator::do_export()
namespace DoExport {
// static void update_print_estimated_times_stats(const GCodeProcessor& processor, PrintStatistics& print_statistics)
// {
@@ -828,7 +543,7 @@ namespace DoExport {
}
} // namespace DoExport
-void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* result, ThumbnailsGeneratorCallback thumbnail_cb)
+void GCodeGenerator::do_export(Print* print, const char* path, GCodeProcessorResult* result, ThumbnailsGeneratorCallback thumbnail_cb)
{
CNumericLocalesSetter locales_setter;
@@ -866,6 +581,7 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu
m_processor.initialize(path_tmp);
m_processor.set_print(print);
+ m_processor.get_binary_data() = bgcode::binarize::BinaryData();
GCodeOutputStream file(boost::nowide::fopen(path_tmp.c_str(), "wb"), m_processor);
if (! file.is_open())
throw Slic3r::RuntimeError(std::string("G-code export to ") + path + " failed.\nCannot open the file for writing.\n");
@@ -923,7 +639,7 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu
print->set_done(psGCodeExport);
}
-// free functions called by GCode::_do_export()
+// free functions called by GCodeGenerator::_do_export()
namespace DoExport {
static void init_gcode_processor(const PrintConfig& config, GCodeProcessor& processor, bool& silent_time_estimator_enabled)
{
@@ -1000,66 +716,74 @@ namespace DoExport {
// Fill in print_statistics and return formatted string containing filament statistics to be inserted into G-code comment section.
static std::string update_print_stats_and_format_filament_stats(
const bool has_wipe_tower,
- const WipeTowerData &wipe_tower_data,
- const FullPrintConfig &config,
- const std::vector &extruders,
+ const WipeTowerData &wipe_tower_data,
+ const FullPrintConfig &config,
+ const std::vector &extruders,
unsigned int initial_extruder_id,
- PrintStatistics &print_statistics)
+ PrintStatistics &print_statistics,
+ bool export_binary_data,
+ bgcode::binarize::BinaryData &binary_data)
{
- std::string filament_stats_string_out;
+ std::string filament_stats_string_out;
- print_statistics.clear();
+ print_statistics.clear();
print_statistics.total_toolchanges = std::max(0, wipe_tower_data.number_of_toolchanges);
print_statistics.initial_extruder_id = initial_extruder_id;
std::vector filament_types;
- if (! extruders.empty()) {
- std::pair out_filament_used_mm ("; filament used [mm] = ", 0);
- std::pair out_filament_used_cm3("; filament used [cm3] = ", 0);
- std::pair out_filament_used_g ("; filament used [g] = ", 0);
- std::pair out_filament_cost ("; filament cost = ", 0);
- for (const Extruder &extruder : extruders) {
+ if (! extruders.empty()) {
+ std::pair out_filament_used_mm(PrintStatistics::FilamentUsedMmMask + " ", 0);
+ std::pair out_filament_used_cm3(PrintStatistics::FilamentUsedCm3Mask + " ", 0);
+ std::pair out_filament_used_g(PrintStatistics::FilamentUsedGMask + " ", 0);
+ std::pair out_filament_cost(PrintStatistics::FilamentCostMask + " ", 0);
+ for (const Extruder &extruder : extruders) {
print_statistics.printing_extruders.emplace_back(extruder.id());
filament_types.emplace_back(config.filament_type.get_at(extruder.id()));
- double used_filament = extruder.used_filament() + (has_wipe_tower ? wipe_tower_data.used_filament[extruder.id()] : 0.f);
- double extruded_volume = extruder.extruded_volume() + (has_wipe_tower ? wipe_tower_data.used_filament[extruder.id()] * 2.4052f : 0.f); // assumes 1.75mm filament diameter
- double filament_weight = extruded_volume * extruder.filament_density() * 0.001;
- double filament_cost = filament_weight * extruder.filament_cost() * 0.001;
+ double used_filament = extruder.used_filament() + (has_wipe_tower ? wipe_tower_data.used_filament[extruder.id()] : 0.f);
+ double extruded_volume = extruder.extruded_volume() + (has_wipe_tower ? wipe_tower_data.used_filament[extruder.id()] * 2.4052f : 0.f); // assumes 1.75mm filament diameter
+ double filament_weight = extruded_volume * extruder.filament_density() * 0.001;
+ double filament_cost = filament_weight * extruder.filament_cost() * 0.001;
auto append = [&extruder](std::pair &dst, const char *tmpl, double value) {
assert(is_decimal_separator_point());
- while (dst.second < extruder.id()) {
- // Fill in the non-printing extruders with zeros.
- dst.first += (dst.second > 0) ? ", 0" : "0";
- ++ dst.second;
- }
- if (dst.second > 0)
- dst.first += ", ";
- char buf[64];
- sprintf(buf, tmpl, value);
- dst.first += buf;
- ++ dst.second;
- };
- append(out_filament_used_mm, "%.2lf", used_filament);
- append(out_filament_used_cm3, "%.2lf", extruded_volume * 0.001);
- if (filament_weight > 0.) {
- print_statistics.total_weight = print_statistics.total_weight + filament_weight;
- append(out_filament_used_g, "%.2lf", filament_weight);
- if (filament_cost > 0.) {
- print_statistics.total_cost = print_statistics.total_cost + filament_cost;
- append(out_filament_cost, "%.2lf", filament_cost);
- }
- }
- print_statistics.total_used_filament += used_filament;
- print_statistics.total_extruded_volume += extruded_volume;
- print_statistics.total_wipe_tower_filament += has_wipe_tower ? used_filament - extruder.used_filament() : 0.;
- print_statistics.total_wipe_tower_cost += has_wipe_tower ? (extruded_volume - extruder.extruded_volume())* extruder.filament_density() * 0.001 * extruder.filament_cost() * 0.001 : 0.;
- }
- filament_stats_string_out += out_filament_used_mm.first;
- filament_stats_string_out += "\n" + out_filament_used_cm3.first;
- if (out_filament_used_g.second)
- filament_stats_string_out += "\n" + out_filament_used_g.first;
- if (out_filament_cost.second)
- filament_stats_string_out += "\n" + out_filament_cost.first;
+ while (dst.second < extruder.id()) {
+ // Fill in the non-printing extruders with zeros.
+ dst.first += (dst.second > 0) ? ", 0" : "0";
+ ++ dst.second;
+ }
+ if (dst.second > 0)
+ dst.first += ", ";
+ char buf[64];
+ sprintf(buf, tmpl, value);
+ dst.first += buf;
+ ++ dst.second;
+ };
+ if (!export_binary_data) {
+ append(out_filament_used_mm, "%.2lf", used_filament);
+ append(out_filament_used_cm3, "%.2lf", extruded_volume * 0.001);
+ }
+ if (filament_weight > 0.) {
+ print_statistics.total_weight = print_statistics.total_weight + filament_weight;
+ if (!export_binary_data)
+ append(out_filament_used_g, "%.2lf", filament_weight);
+ if (filament_cost > 0.) {
+ print_statistics.total_cost = print_statistics.total_cost + filament_cost;
+ if (!export_binary_data)
+ append(out_filament_cost, "%.2lf", filament_cost);
+ }
+ }
+ print_statistics.total_used_filament += used_filament;
+ print_statistics.total_extruded_volume += extruded_volume;
+ print_statistics.total_wipe_tower_filament += has_wipe_tower ? used_filament - extruder.used_filament() : 0.;
+ print_statistics.total_wipe_tower_cost += has_wipe_tower ? (extruded_volume - extruder.extruded_volume())* extruder.filament_density() * 0.001 * extruder.filament_cost() * 0.001 : 0.;
+ }
+ if (!export_binary_data) {
+ filament_stats_string_out += out_filament_used_mm.first;
+ filament_stats_string_out += "\n" + out_filament_used_cm3.first;
+ if (out_filament_used_g.second)
+ filament_stats_string_out += "\n" + out_filament_used_g.first;
+ if (out_filament_cost.second)
+ filament_stats_string_out += "\n" + out_filament_cost.first;
+ }
print_statistics.initial_filament_type = config.filament_type.get_at(initial_extruder_id);
std::sort(filament_types.begin(), filament_types.end());
print_statistics.printing_filament_types = filament_types.front();
@@ -1109,8 +833,130 @@ std::vector sort_object_instances_by_model_order(const Pri
return instances;
}
-void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGeneratorCallback thumbnail_cb)
+static inline bool arc_welder_enabled(const PrintConfig& print_config)
{
+ return
+ // Enabled
+ print_config.arc_fitting != ArcFittingType::Disabled &&
+ // Not a spiral vase print
+ !print_config.spiral_vase &&
+ // Presure equalizer not used
+ print_config.max_volumetric_extrusion_rate_slope_negative == 0. &&
+ print_config.max_volumetric_extrusion_rate_slope_positive == 0.;
+}
+
+static inline GCode::SmoothPathCache::InterpolationParameters interpolation_parameters(const PrintConfig& print_config)
+{
+ return {
+ scaled(print_config.gcode_resolution.value),
+ arc_welder_enabled(print_config) ? Geometry::ArcWelder::default_arc_length_percent_tolerance : 0
+ };
+}
+
+static inline GCode::SmoothPathCache smooth_path_interpolate_global(const Print& print)
+{
+ const GCode::SmoothPathCache::InterpolationParameters interpolation_params = interpolation_parameters(print.config());
+ GCode::SmoothPathCache out;
+ out.interpolate_add(print.skirt(), interpolation_params);
+ out.interpolate_add(print.brim(), interpolation_params);
+ return out;
+}
+
+void GCodeGenerator::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGeneratorCallback thumbnail_cb)
+{
+ const bool export_to_binary_gcode = print.full_print_config().option("gcode_binary")->value;
+ // if exporting gcode in binary format:
+ // we generate here the data to be passed to the post-processor, who is responsible to export them to file
+ // 1) generate the thumbnails
+ // 2) collect the config data
+ if (export_to_binary_gcode) {
+ bgcode::binarize::BinaryData& binary_data = m_processor.get_binary_data();
+
+ // Unit tests or command line slicing may not define "thumbnails" or "thumbnails_format".
+ // If "thumbnails_format" is not defined, export to PNG.
+ auto [thumbnails, errors] = GCodeThumbnails::make_and_check_thumbnail_list(print.full_print_config());
+
+ if (errors != enum_bitmask()) {
+ std::string error_str = format("Invalid thumbnails value:");
+ error_str += GCodeThumbnails::get_error_string(errors);
+ throw Slic3r::ExportError(error_str);
+ }
+
+ if (!thumbnails.empty())
+ GCodeThumbnails::generate_binary_thumbnails(
+ thumbnail_cb, binary_data.thumbnails, thumbnails,
+ [&print]() { print.throw_if_canceled(); });
+
+ // file data
+ binary_data.file_metadata.raw_data.emplace_back("Producer", std::string(SLIC3R_APP_NAME) + " " + std::string(SLIC3R_VERSION));
+
+ // config data
+ encode_full_config(print, binary_data.slicer_metadata.raw_data);
+
+ // printer data
+ binary_data.printer_metadata.raw_data.emplace_back("printer_model", print.config().printer_model.value); // duplicated into config data
+ std::string filament_types_str;
+ for (size_t i = 0; i < print.config().filament_type.values.size(); ++i) {
+ filament_types_str += print.config().filament_type.values[i];
+ if (i < print.config().filament_type.values.size() - 1)
+ filament_types_str += ";";
+ }
+ binary_data.printer_metadata.raw_data.emplace_back("filament_type", filament_types_str); // duplicated into config data
+ char buf[1024];
+ std::string nozzle_diameters_str;
+ for (size_t i = 0; i < print.config().nozzle_diameter.values.size(); ++i) {
+ sprintf(buf, i < print.config().nozzle_diameter.values.size() - 1 ? "%.2g," : "%.2g", print.config().nozzle_diameter.values[i]);
+ nozzle_diameters_str += buf;
+ }
+ binary_data.printer_metadata.raw_data.emplace_back("nozzle_diameter", nozzle_diameters_str); // duplicated into config data
+ std::string bed_temperatures_str;
+ for (size_t i = 0; i < print.config().bed_temperature.values.size(); ++i) {
+ sprintf(buf, i < print.config().bed_temperature.values.size() - 1 ? "%d," : "%d", print.config().bed_temperature.values[i]);
+ bed_temperatures_str += buf;
+ }
+ binary_data.printer_metadata.raw_data.emplace_back("bed_temperature", bed_temperatures_str); // duplicated into config data
+
+ const DynamicPrintConfig& cfg = print.full_print_config();
+ if (auto opt = cfg.option("brim_width"); opt != nullptr) {
+ sprintf(buf, "%.2g", dynamic_cast(opt)->value);
+ binary_data.printer_metadata.raw_data.emplace_back("brim_width", buf); // duplicated into config data
+ }
+ if (auto opt = cfg.option("fill_density"); opt != nullptr) {
+ sprintf(buf, "%.2g%%", dynamic_cast(opt)->value);
+ binary_data.printer_metadata.raw_data.emplace_back("fill_density", buf); // duplicated into config data
+ }
+ if (auto opt = cfg.option("layer_height"); opt != nullptr) {
+ sprintf(buf, "%.2g", dynamic_cast(opt)->value);
+ binary_data.printer_metadata.raw_data.emplace_back("layer_height", buf); // duplicated into config data
+ }
+ if (auto opt = cfg.option("temperature"); opt != nullptr) {
+ auto values = dynamic_cast(opt)->values;
+ std::string temperatures_str;
+ for (size_t i = 0; i < values.size(); ++i) {
+ sprintf(buf, i < values.size() - 1 ? "%d," : "%d", values[i]);
+ temperatures_str += buf;
+ }
+ binary_data.printer_metadata.raw_data.emplace_back("temperature", temperatures_str); // duplicated into config data
+ }
+ if (auto opt = cfg.option("ironing"); opt != nullptr)
+ binary_data.printer_metadata.raw_data.emplace_back("ironing", dynamic_cast(opt)->value ? "1" : "0"); // duplicated into config data
+ if (auto opt = cfg.option("support_material"); opt != nullptr)
+ binary_data.printer_metadata.raw_data.emplace_back("support_material", dynamic_cast(opt)->value ? "1" : "0"); // duplicated into config data
+ if (auto opt = cfg.option("extruder_colour"); opt != nullptr) {
+ auto values = dynamic_cast(opt)->values;
+ std::string extruder_colours_str;
+ if (values.size() == 1 && values.front().empty())
+ extruder_colours_str = "\"\"";
+ else {
+ for (size_t i = 0; i < values.size(); ++i) {
+ sprintf(buf, i < values.size() - 1 ? "%s;" : "%s", values[i].c_str());
+ extruder_colours_str += buf;
+ }
+ }
+ binary_data.printer_metadata.raw_data.emplace_back("extruder_colour", extruder_colours_str); // duplicated into config data
+ }
+ }
+
// modifies m_silent_time_estimator_enabled
DoExport::init_gcode_processor(print.config(), m_processor, m_silent_time_estimator_enabled);
@@ -1164,19 +1010,25 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
this->m_avoid_crossing_curled_overhangs.init_bed_shape(get_bed_shape(print.config()));
}
- // Write information on the generator.
- file.write_format("; %s\n\n", Slic3r::header_slic3r_generated().c_str());
+ if (!export_to_binary_gcode)
+ // Write information on the generator.
+ file.write_format("; %s\n\n", Slic3r::header_slic3r_generated().c_str());
- // Unit tests or command line slicing may not define "thumbnails" or "thumbnails_format".
- // If "thumbnails_format" is not defined, export to PNG.
- if (const auto [thumbnails, thumbnails_format] = std::make_pair(
- print.full_print_config().option("thumbnails"),
- print.full_print_config().option>("thumbnails_format"));
- thumbnails)
- GCodeThumbnails::export_thumbnails_to_file(
- thumbnail_cb, thumbnails->values, thumbnails_format ? thumbnails_format->value : GCodeThumbnailsFormat::PNG,
- [&file](const char* sz) { file.write(sz); },
- [&print]() { print.throw_if_canceled(); });
+ if (! export_to_binary_gcode) {
+ // if exporting gcode in ascii format, generate the thumbnails here
+ auto [thumbnails, errors] = GCodeThumbnails::make_and_check_thumbnail_list(print.full_print_config());
+
+ if (errors != enum_bitmask()) {
+ std::string error_str = format("Invalid thumbnails value:");
+ error_str += GCodeThumbnails::get_error_string(errors);
+ throw Slic3r::ExportError(error_str);
+ }
+
+ if (!thumbnails.empty())
+ GCodeThumbnails::export_thumbnails_to_file(thumbnail_cb, thumbnails,
+ [&file](const char* sz) { file.write(sz); },
+ [&print]() { print.throw_if_canceled(); });
+ }
// Write notes (content of the Print Settings tab -> Notes)
{
@@ -1198,20 +1050,22 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
const double layer_height = first_object->config().layer_height.value;
assert(! print.config().first_layer_height.percent);
const double first_layer_height = print.config().first_layer_height.value;
- for (size_t region_id = 0; region_id < print.num_print_regions(); ++ region_id) {
- const PrintRegion ®ion = print.get_print_region(region_id);
- file.write_format("; external perimeters extrusion width = %.2fmm\n", region.flow(*first_object, frExternalPerimeter, layer_height).width());
- file.write_format("; perimeters extrusion width = %.2fmm\n", region.flow(*first_object, frPerimeter, layer_height).width());
- file.write_format("; infill extrusion width = %.2fmm\n", region.flow(*first_object, frInfill, layer_height).width());
- file.write_format("; solid infill extrusion width = %.2fmm\n", region.flow(*first_object, frSolidInfill, layer_height).width());
- file.write_format("; top infill extrusion width = %.2fmm\n", region.flow(*first_object, frTopSolidInfill, layer_height).width());
- if (print.has_support_material())
- file.write_format("; support material extrusion width = %.2fmm\n", support_material_flow(first_object).width());
- if (print.config().first_layer_extrusion_width.value > 0)
- file.write_format("; first layer extrusion width = %.2fmm\n", region.flow(*first_object, frPerimeter, first_layer_height, true).width());
- file.write_format("\n");
+ if (!export_to_binary_gcode) {
+ for (size_t region_id = 0; region_id < print.num_print_regions(); ++ region_id) {
+ const PrintRegion ®ion = print.get_print_region(region_id);
+ file.write_format("; external perimeters extrusion width = %.2fmm\n", region.flow(*first_object, frExternalPerimeter, layer_height).width());
+ file.write_format("; perimeters extrusion width = %.2fmm\n", region.flow(*first_object, frPerimeter, layer_height).width());
+ file.write_format("; infill extrusion width = %.2fmm\n", region.flow(*first_object, frInfill, layer_height).width());
+ file.write_format("; solid infill extrusion width = %.2fmm\n", region.flow(*first_object, frSolidInfill, layer_height).width());
+ file.write_format("; top infill extrusion width = %.2fmm\n", region.flow(*first_object, frTopSolidInfill, layer_height).width());
+ if (print.has_support_material())
+ file.write_format("; support material extrusion width = %.2fmm\n", support_material_flow(first_object).width());
+ if (print.config().first_layer_extrusion_width.value > 0)
+ file.write_format("; first layer extrusion width = %.2fmm\n", region.flow(*first_object, frPerimeter, first_layer_height, true).width());
+ file.write_format("\n");
+ }
+ print.throw_if_canceled();
}
- print.throw_if_canceled();
// adds tags for time estimators
if (print.config().remaining_times.value)
@@ -1306,6 +1160,10 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
this->placeholder_parser().set("total_toolchanges", std::max(0, print.wipe_tower_data().number_of_toolchanges)); // Check for negative toolchanges (single extruder mode) and set to 0 (no tool change).
{
BoundingBoxf bbox(print.config().bed_shape.values);
+ assert(bbox.defined);
+ if (! bbox.defined)
+ // This should not happen, but let's make the compiler happy.
+ bbox.min = bbox.max = Vec2d::Zero();
this->placeholder_parser().set("print_bed_min", new ConfigOptionFloats({ bbox.min.x(), bbox.min.y() }));
this->placeholder_parser().set("print_bed_max", new ConfigOptionFloats({ bbox.max.x(), bbox.max.y() }));
this->placeholder_parser().set("print_bed_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() }));
@@ -1369,6 +1227,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
file.write(this->set_extruder(initial_extruder_id, 0.));
}
+ GCode::SmoothPathCache smooth_path_cache_global = smooth_path_interpolate_global(print);
+
// Do all objects for each layer.
if (print.config().complete_objects.value) {
size_t finished_objects = 0;
@@ -1413,7 +1273,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
// Process all layers of a single object instance (sequential mode) with a parallel pipeline:
// Generate G-code, run the filters (vase mode, cooling buffer), run the G-code analyser
// and export G-code into file.
- this->process_layers(print, tool_ordering, collect_layers_to_print(object), *print_object_instance_sequential_active - object.instances().data(), file);
+ this->process_layers(print, tool_ordering, collect_layers_to_print(object),
+ *print_object_instance_sequential_active - object.instances().data(),
+ smooth_path_cache_global, file);
++ finished_objects;
// Flag indicating whether the nozzle temperature changes from 1st to 2nd layer were performed.
// Reset it when starting another object from 1st layer.
@@ -1426,7 +1288,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
std::vector> layers_to_print = collect_layers_to_print(print);
// Prusa Multi-Material wipe tower.
if (has_wipe_tower && ! layers_to_print.empty()) {
- m_wipe_tower.reset(new WipeTowerIntegration(print.config(), *print.wipe_tower_data().priming.get(), print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get()));
+ m_wipe_tower = std::make_unique(print.config(), *print.wipe_tower_data().priming.get(), print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get());
file.write(m_writer.travel_to_z(first_layer_height + m_config.z_offset.value, "Move to the first layer height"));
if (print.config().single_extruder_multi_material_priming) {
file.write(m_wipe_tower->prime(*this));
@@ -1469,7 +1331,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
// Process all layers of all objects (non-sequential mode) with a parallel pipeline:
// Generate G-code, run the filters (vase mode, cooling buffer), run the G-code analyser
// and export G-code into file.
- this->process_layers(print, tool_ordering, print_object_instances_ordering, layers_to_print, file);
+ this->process_layers(print, tool_ordering, print_object_instances_ordering, layers_to_print,
+ smooth_path_cache_global, file);
if (m_wipe_tower)
// Purge the extruder, pull out the active filament.
file.write(m_wipe_tower->finalize(*this));
@@ -1516,48 +1379,85 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
print.throw_if_canceled();
// Get filament stats.
- file.write(DoExport::update_print_stats_and_format_filament_stats(
- // Const inputs
+ const std::string filament_stats_string_out = DoExport::update_print_stats_and_format_filament_stats(
+ // Const inputs
has_wipe_tower, print.wipe_tower_data(),
this->config(),
m_writer.extruders(),
initial_extruder_id,
// Modifies
- print.m_print_statistics));
- file.write("\n");
- file.write_format("; total filament used [g] = %.2lf\n", print.m_print_statistics.total_weight);
- file.write_format("; total filament cost = %.2lf\n", print.m_print_statistics.total_cost);
- if (print.m_print_statistics.total_toolchanges > 0)
- file.write_format("; total toolchanges = %i\n", print.m_print_statistics.total_toolchanges);
- file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder).c_str());
+ print.m_print_statistics,
+ export_to_binary_gcode,
+ m_processor.get_binary_data()
+ );
- // Append full config, delimited by two 'phony' configuration keys prusaslicer_config = begin and prusaslicer_config = end.
- // The delimiters are structured as configuration key / value pairs to be parsable by older versions of PrusaSlicer G-code viewer.
- {
- file.write("\n; prusaslicer_config = begin\n");
- std::string full_config;
- append_full_config(print, full_config);
- if (!full_config.empty())
- file.write(full_config);
- file.write("; prusaslicer_config = end\n");
+ if (!export_to_binary_gcode)
+ file.write(filament_stats_string_out);
+
+ if (export_to_binary_gcode) {
+ bgcode::binarize::BinaryData& binary_data = m_processor.get_binary_data();
+ if (print.m_print_statistics.total_toolchanges > 0)
+ binary_data.print_metadata.raw_data.emplace_back("total toolchanges", std::to_string(print.m_print_statistics.total_toolchanges));
+ char buf[1024];
+ sprintf(buf, "%.2lf", m_max_layer_z);
+ binary_data.printer_metadata.raw_data.emplace_back("max_layer_z", buf);
+ }
+ else {
+ // if exporting gcode in ascii format, statistics export is done here
+ file.write("\n");
+ file.write_format(PrintStatistics::TotalFilamentUsedGValueMask.c_str(), print.m_print_statistics.total_weight);
+ file.write_format(PrintStatistics::TotalFilamentCostValueMask.c_str(), print.m_print_statistics.total_cost);
+ if (print.m_print_statistics.total_toolchanges > 0)
+ file.write_format("; total toolchanges = %i\n", print.m_print_statistics.total_toolchanges);
+ file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder).c_str());
+
+ // if exporting gcode in ascii format, config export is done here
+ // Append full config, delimited by two 'phony' configuration keys prusaslicer_config = begin and prusaslicer_config = end.
+ // The delimiters are structured as configuration key / value pairs to be parsable by older versions of PrusaSlicer G-code viewer.
+ {
+ file.write("\n; prusaslicer_config = begin\n");
+ std::string full_config;
+ append_full_config(print, full_config);
+ if (!full_config.empty())
+ file.write(full_config);
+ file.write("; prusaslicer_config = end\n");
+ }
}
print.throw_if_canceled();
}
+// Fill in cache of smooth paths for perimeters, fills and supports of the given object layers.
+// Based on params, the paths are either decimated to sparser polylines, or interpolated with circular arches.
+void GCodeGenerator::smooth_path_interpolate(
+ const ObjectLayerToPrint &object_layer_to_print,
+ const GCode::SmoothPathCache::InterpolationParameters ¶ms,
+ GCode::SmoothPathCache &out)
+{
+ if (const Layer *layer = object_layer_to_print.object_layer; layer) {
+ for (const LayerRegion *layerm : layer->regions()) {
+ out.interpolate_add(layerm->perimeters(), params);
+ out.interpolate_add(layerm->fills(), params);
+ }
+ }
+ if (const SupportLayer *layer = object_layer_to_print.support_layer; layer)
+ out.interpolate_add(layer->support_fills, params);
+}
+
// Process all layers of all objects (non-sequential mode) with a parallel pipeline:
// Generate G-code, run the filters (vase mode, cooling buffer), run the G-code analyser
// and export G-code into file.
-void GCode::process_layers(
+void GCodeGenerator::process_layers(
const Print &print,
const ToolOrdering &tool_ordering,
const std::vector &print_object_instances_ordering,
const std::vector> &layers_to_print,
+ const GCode::SmoothPathCache &smooth_path_cache_global,
GCodeOutputStream &output_stream)
{
- // The pipeline is variable: The vase mode filter is optional.
size_t layer_to_print_idx = 0;
- const auto generator = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order,
- [this, &print, &tool_ordering, &print_object_instances_ordering, &layers_to_print, &layer_to_print_idx](tbb::flow_control& fc) -> LayerResult {
+ const GCode::SmoothPathCache::InterpolationParameters interpolation_params = interpolation_parameters(print.config());
+ const auto smooth_path_interpolator = tbb::make_filter>(slic3r_tbb_filtermode::serial_in_order,
+ [this, &print, &layers_to_print, &layer_to_print_idx, &interpolation_params](tbb::flow_control &fc) -> std::pair {
if (layer_to_print_idx >= layers_to_print.size()) {
if ((!m_pressure_equalizer && layer_to_print_idx == layers_to_print.size()) || (m_pressure_equalizer && layer_to_print_idx == (layers_to_print.size() + 1))) {
fc.stop();
@@ -1565,23 +1465,41 @@ void GCode::process_layers(
} else {
// Pressure equalizer need insert empty input. Because it returns one layer back.
// Insert NOP (no operation) layer;
- ++layer_to_print_idx;
- return LayerResult::make_nop_layer_result();
+ return { ++ layer_to_print_idx, {} };
}
} else {
- const std::pair &layer = layers_to_print[layer_to_print_idx++];
+ print.throw_if_canceled();
+ size_t idx = layer_to_print_idx ++;
+ GCode::SmoothPathCache smooth_path_cache;
+ for (const ObjectLayerToPrint &l : layers_to_print[idx].second)
+ GCodeGenerator::smooth_path_interpolate(l, interpolation_params, smooth_path_cache);
+ return { idx, std::move(smooth_path_cache) };
+ }
+ });
+ const auto generator = tbb::make_filter, LayerResult>(slic3r_tbb_filtermode::serial_in_order,
+ [this, &print, &tool_ordering, &print_object_instances_ordering, &layers_to_print, &smooth_path_cache_global](
+ std::pair in) -> LayerResult {
+ size_t layer_to_print_idx = in.first;
+ if (layer_to_print_idx == layers_to_print.size()) {
+ // Pressure equalizer need insert empty input. Because it returns one layer back.
+ // Insert NOP (no operation) layer;
+ return LayerResult::make_nop_layer_result();
+ } else {
+ const std::pair &layer = layers_to_print[layer_to_print_idx];
const LayerTools& layer_tools = tool_ordering.tools_for_layer(layer.first);
if (m_wipe_tower && layer_tools.has_wipe_tower)
m_wipe_tower->next_layer();
print.throw_if_canceled();
- return this->process_layer(print, layer.second, layer_tools, &layer == &layers_to_print.back(), &print_object_instances_ordering, size_t(-1));
+ return this->process_layer(print, layer.second, layer_tools,
+ GCode::SmoothPathCaches{ smooth_path_cache_global, in.second },
+ &layer == &layers_to_print.back(), &print_object_instances_ordering, size_t(-1));
}
});
+ // The pipeline is variable: The vase mode filter is optional.
const auto spiral_vase = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order,
[spiral_vase = this->m_spiral_vase.get()](LayerResult in) -> LayerResult {
if (in.nop_layer_result)
return in;
-
spiral_vase->enable(in.spiral_vase_enable);
return { spiral_vase->process_layer(std::move(in.gcode)), in.layer_id, in.spiral_vase_enable, in.cooling_buffer_flush};
});
@@ -1604,45 +1522,40 @@ void GCode::process_layers(
[&output_stream](std::string s) { output_stream.write(s); }
);
+ tbb::filter pipeline_to_layerresult = smooth_path_interpolator & generator;
+ if (m_spiral_vase)
+ pipeline_to_layerresult = pipeline_to_layerresult & spiral_vase;
+ if (m_pressure_equalizer)
+ pipeline_to_layerresult = pipeline_to_layerresult & pressure_equalizer;
+
+ tbb::filter pipeline_to_string = cooling;
+ if (m_find_replace)
+ pipeline_to_string = pipeline_to_string & find_replace;
+
// It registers a handler that sets locales to "C" before any TBB thread starts participating in tbb::parallel_pipeline.
// Handler is unregistered when the destructor is called.
TBBLocalesSetter locales_setter;
-
// The pipeline elements are joined using const references, thus no copying is performed.
output_stream.find_replace_supress();
- if (m_spiral_vase && m_find_replace && m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & spiral_vase & pressure_equalizer & cooling & find_replace & output);
- else if (m_spiral_vase && m_find_replace)
- tbb::parallel_pipeline(12, generator & spiral_vase & cooling & find_replace & output);
- else if (m_spiral_vase && m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & spiral_vase & pressure_equalizer & cooling & output);
- else if (m_find_replace && m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & pressure_equalizer & cooling & find_replace & output);
- else if (m_spiral_vase)
- tbb::parallel_pipeline(12, generator & spiral_vase & cooling & output);
- else if (m_find_replace)
- tbb::parallel_pipeline(12, generator & cooling & find_replace & output);
- else if (m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & pressure_equalizer & cooling & output);
- else
- tbb::parallel_pipeline(12, generator & cooling & output);
+ tbb::parallel_pipeline(12, pipeline_to_layerresult & pipeline_to_string & output);
output_stream.find_replace_enable();
}
// Process all layers of a single object instance (sequential mode) with a parallel pipeline:
// Generate G-code, run the filters (vase mode, cooling buffer), run the G-code analyser
// and export G-code into file.
-void GCode::process_layers(
+void GCodeGenerator::process_layers(
const Print &print,
const ToolOrdering &tool_ordering,
ObjectsLayerToPrint layers_to_print,
const size_t single_object_idx,
+ const GCode::SmoothPathCache &smooth_path_cache_global,
GCodeOutputStream &output_stream)
{
- // The pipeline is variable: The vase mode filter is optional.
size_t layer_to_print_idx = 0;
- const auto generator = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order,
- [this, &print, &tool_ordering, &layers_to_print, &layer_to_print_idx, single_object_idx](tbb::flow_control& fc) -> LayerResult {
+ const GCode::SmoothPathCache::InterpolationParameters interpolation_params = interpolation_parameters(print.config());
+ const auto smooth_path_interpolator = tbb::make_filter> (slic3r_tbb_filtermode::serial_in_order,
+ [this, &print, &layers_to_print, &layer_to_print_idx, interpolation_params](tbb::flow_control &fc) -> std::pair {
if (layer_to_print_idx >= layers_to_print.size()) {
if ((!m_pressure_equalizer && layer_to_print_idx == layers_to_print.size()) || (m_pressure_equalizer && layer_to_print_idx == (layers_to_print.size() + 1))) {
fc.stop();
@@ -1650,15 +1563,32 @@ void GCode::process_layers(
} else {
// Pressure equalizer need insert empty input. Because it returns one layer back.
// Insert NOP (no operation) layer;
- ++layer_to_print_idx;
- return LayerResult::make_nop_layer_result();
+ return { ++ layer_to_print_idx, {} };
}
} else {
- ObjectLayerToPrint &layer = layers_to_print[layer_to_print_idx ++];
print.throw_if_canceled();
- return this->process_layer(print, { std::move(layer) }, tool_ordering.tools_for_layer(layer.print_z()), &layer == &layers_to_print.back(), nullptr, single_object_idx);
+ size_t idx = layer_to_print_idx ++;
+ GCode::SmoothPathCache smooth_path_cache;
+ GCodeGenerator::smooth_path_interpolate(layers_to_print[idx], interpolation_params, smooth_path_cache);
+ return { idx, std::move(smooth_path_cache) };
}
});
+ const auto generator = tbb::make_filter, LayerResult>(slic3r_tbb_filtermode::serial_in_order,
+ [this, &print, &tool_ordering, &layers_to_print, &smooth_path_cache_global, single_object_idx](std::pair in) -> LayerResult {
+ size_t layer_to_print_idx = in.first;
+ if (layer_to_print_idx == layers_to_print.size()) {
+ // Pressure equalizer need insert empty input. Because it returns one layer back.
+ // Insert NOP (no operation) layer;
+ return LayerResult::make_nop_layer_result();
+ } else {
+ ObjectLayerToPrint &layer = layers_to_print[layer_to_print_idx];
+ print.throw_if_canceled();
+ return this->process_layer(print, { std::move(layer) }, tool_ordering.tools_for_layer(layer.print_z()),
+ GCode::SmoothPathCaches{ smooth_path_cache_global, in.second },
+ &layer == &layers_to_print.back(), nullptr, single_object_idx);
+ }
+ });
+ // The pipeline is variable: The vase mode filter is optional.
const auto spiral_vase = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order,
[spiral_vase = this->m_spiral_vase.get()](LayerResult in)->LayerResult {
if (in.nop_layer_result)
@@ -1684,37 +1614,57 @@ void GCode::process_layers(
[&output_stream](std::string s) { output_stream.write(s); }
);
+ tbb::filter pipeline_to_layerresult = smooth_path_interpolator & generator;
+ if (m_spiral_vase)
+ pipeline_to_layerresult = pipeline_to_layerresult & spiral_vase;
+ if (m_pressure_equalizer)
+ pipeline_to_layerresult = pipeline_to_layerresult & pressure_equalizer;
+
+ tbb::filter pipeline_to_string = cooling;
+ if (m_find_replace)
+ pipeline_to_string = pipeline_to_string & find_replace;
+
// It registers a handler that sets locales to "C" before any TBB thread starts participating in tbb::parallel_pipeline.
// Handler is unregistered when the destructor is called.
TBBLocalesSetter locales_setter;
-
// The pipeline elements are joined using const references, thus no copying is performed.
output_stream.find_replace_supress();
- if (m_spiral_vase && m_find_replace && m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & spiral_vase & pressure_equalizer & cooling & find_replace & output);
- else if (m_spiral_vase && m_find_replace)
- tbb::parallel_pipeline(12, generator & spiral_vase & cooling & find_replace & output);
- else if (m_spiral_vase && m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & spiral_vase & pressure_equalizer & cooling & output);
- else if (m_find_replace && m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & pressure_equalizer & cooling & find_replace & output);
- else if (m_spiral_vase)
- tbb::parallel_pipeline(12, generator & spiral_vase & cooling & output);
- else if (m_find_replace)
- tbb::parallel_pipeline(12, generator & cooling & find_replace & output);
- else if (m_pressure_equalizer)
- tbb::parallel_pipeline(12, generator & pressure_equalizer & cooling & output);
- else
- tbb::parallel_pipeline(12, generator & cooling & output);
+ tbb::parallel_pipeline(12, pipeline_to_layerresult & pipeline_to_string & output);
output_stream.find_replace_enable();
}
-std::string GCode::placeholder_parser_process(
+std::string GCodeGenerator::placeholder_parser_process(
const std::string &name,
const std::string &templ,
unsigned int current_extruder_id,
const DynamicConfig *config_override)
{
+#ifndef NDEBUG // CHECK_CUSTOM_GCODE_PLACEHOLDERS
+ if (config_override) {
+ const auto& custom_gcode_placeholders = custom_gcode_specific_placeholders();
+
+ // 1-st check: custom G-code "name" have to be present in s_CustomGcodeSpecificOptions;
+ //if (custom_gcode_placeholders.count(name) > 0) {
+ // const auto& placeholders = custom_gcode_placeholders.at(name);
+ if (auto it = custom_gcode_placeholders.find(name); it != custom_gcode_placeholders.end()) {
+ const auto& placeholders = it->second;
+
+ for (const std::string& key : config_override->keys()) {
+ // 2-nd check: "key" have to be present in s_CustomGcodeSpecificOptions for "name" custom G-code ;
+ if (std::find(placeholders.begin(), placeholders.end(), key) == placeholders.end())
+ throw Slic3r::PlaceholderParserError(format("\"%s\" placeholder for \"%s\" custom G-code \n"
+ "needs to be added to s_CustomGcodeSpecificOptions", key.c_str(), name.c_str()));
+ // 3-rd check: "key" have to be present in CustomGcodeSpecificConfigDef for "key" placeholder;
+ if (!custom_gcode_specific_config_def.has(key))
+ throw Slic3r::PlaceholderParserError(format("Definition of \"%s\" placeholder \n"
+ "needs to be added to CustomGcodeSpecificConfigDef", key.c_str()));
+ }
+ }
+ else
+ throw Slic3r::PlaceholderParserError(format("\"%s\" custom G-code needs to be added to s_CustomGcodeSpecificOptions", name.c_str()));
+ }
+#endif
+
PlaceholderParserIntegration &ppi = m_placeholder_parser_integration;
try {
ppi.update_from_gcodewriter(m_writer);
@@ -1823,7 +1773,7 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc
// Print the machine envelope G-code for the Marlin firmware based on the "machine_max_xxx" parameters.
// Do not process this piece of G-code by the time estimator, it already knows the values through another sources.
-void GCode::print_machine_envelope(GCodeOutputStream &file, Print &print)
+void GCodeGenerator::print_machine_envelope(GCodeOutputStream &file, Print &print)
{
const GCodeFlavor flavor = print.config().gcode_flavor.value;
if ( (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware || flavor == gcfRepRapFirmware)
@@ -1884,7 +1834,7 @@ void GCode::print_machine_envelope(GCodeOutputStream &file, Print &print)
// Only do that if the start G-code does not already contain any M-code controlling an extruder temperature.
// M140 - Set Extruder Temperature
// M190 - Set Extruder Temperature and Wait
-void GCode::_print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
+void GCodeGenerator::_print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
{
bool autoemit = print.config().autoemit_temperature_commands;
// Initial bed temperature based on the first extruder.
@@ -1906,7 +1856,7 @@ void GCode::_print_first_layer_bed_temperature(GCodeOutputStream &file, Print &p
// M104 - Set Extruder Temperature
// M109 - Set Extruder Temperature and Wait
// RepRapFirmware: G10 Sxx
-void GCode::_print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
+void GCodeGenerator::_print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
{
bool autoemit = print.config().autoemit_temperature_commands;
// Is the bed temperature set by the provided custom G-code?
@@ -1944,7 +1894,7 @@ void GCode::_print_first_layer_extruder_temperatures(GCodeOutputStream &file, Pr
}
}
-std::vector GCode::sort_print_object_instances(
+std::vector GCodeGenerator::sort_print_object_instances(
const std::vector &object_layers,
// Ordering must be defined for normal (non-sequential print).
const std::vector *ordering,
@@ -1985,7 +1935,7 @@ namespace ProcessLayer
{
static std::string emit_custom_gcode_per_print_z(
- GCode &gcodegen,
+ GCodeGenerator &gcodegen,
const CustomGCode::Item *custom_gcode,
unsigned int current_extruder_id,
// ID of the first extruder printing this layer.
@@ -2138,11 +2088,12 @@ namespace Skirt {
// In non-sequential mode, process_layer is called per each print_z height with all object and support layers accumulated.
// For multi-material prints, this routine minimizes extruder switches by gathering extruder specific extrusion paths
// and performing the extruder specific extrusions together.
-LayerResult GCode::process_layer(
+LayerResult GCodeGenerator::process_layer(
const Print &print,
// Set of object & print layers of the same PrintObject and with the same print_z.
const ObjectsLayerToPrint &layers,
const LayerTools &layer_tools,
+ const GCode::SmoothPathCaches &smooth_path_caches,
const bool last_layer,
// Pairs of PrintObject index and its instance index.
const std::vector *ordering,
@@ -2286,10 +2237,6 @@ LayerResult GCode::process_layer(
}
}
- for (const ObjectLayerToPrint &layer_to_print : layers) {
- m_extrusion_quality_estimator.prepare_for_new_layer(layer_to_print.object_layer);
- }
-
// Extrude the skirt, brim, support, perimeters, infill ordered by the extruders.
for (unsigned int extruder_id : layer_tools.extruders)
{
@@ -2309,13 +2256,11 @@ LayerResult GCode::process_layer(
double mm3_per_mm = layer_skirt_flow.mm3_per_mm();
for (size_t i = loops.first; i < loops.second; ++i) {
// Adjust flow according to this layer's layer height.
- ExtrusionLoop loop = *dynamic_cast(print.skirt().entities[i]);
- for (ExtrusionPath &path : loop.paths) {
- path.height = layer_skirt_flow.height();
- path.mm3_per_mm = mm3_per_mm;
- }
//FIXME using the support_material_speed of the 1st object printed.
- gcode += this->extrude_loop(loop, "skirt"sv, m_config.support_material_speed.value);
+ gcode += this->extrude_skirt(dynamic_cast(*print.skirt().entities[i]),
+ // Override of skirt extrusion parameters. extrude_skirt() will fill in the extrusion width.
+ ExtrusionFlow{ mm3_per_mm, 0., layer_skirt_flow.height() },
+ smooth_path_caches.global(), "skirt"sv, m_config.support_material_speed.value);
}
m_avoid_crossing_perimeters.use_external_mp(false);
// Allow a straight travel move to the first object point if this is the first layer (but don't in next layers).
@@ -2327,9 +2272,8 @@ LayerResult GCode::process_layer(
if (! m_brim_done) {
this->set_origin(0., 0.);
m_avoid_crossing_perimeters.use_external_mp();
- for (const ExtrusionEntity *ee : print.brim().entities) {
- gcode += this->extrude_entity(*ee, "brim"sv, m_config.support_material_speed.value);
- }
+ for (const ExtrusionEntity *ee : print.brim().entities)
+ gcode += this->extrude_entity({ *ee, false }, smooth_path_caches.global(), "brim"sv, m_config.support_material_speed.value);
m_brim_done = true;
m_avoid_crossing_perimeters.use_external_mp(false);
// Allow a straight travel move to the first object point.
@@ -2346,7 +2290,7 @@ LayerResult GCode::process_layer(
for (const InstanceToPrint &instance : instances_to_print)
this->process_layer_single_object(
gcode, extruder_id, instance,
- layers[instance.object_layer_to_print_id], layer_tools,
+ layers[instance.object_layer_to_print_id], layer_tools, smooth_path_caches.layer_local(),
is_anything_overridden, true /* print_wipe_extrusions */);
if (gcode_size_old < gcode.size())
gcode+="; PURGING FINISHED\n";
@@ -2355,7 +2299,7 @@ LayerResult GCode::process_layer(
for (const InstanceToPrint &instance : instances_to_print)
this->process_layer_single_object(
gcode, extruder_id, instance,
- layers[instance.object_layer_to_print_id], layer_tools,
+ layers[instance.object_layer_to_print_id], layer_tools, smooth_path_caches.layer_local(),
is_anything_overridden, false /* print_wipe_extrusions */);
}
@@ -2373,7 +2317,7 @@ static inline bool comment_is_perimeter(const std::string_view comment) {
return comment.data() == comment_perimeter.data() && comment.size() == comment_perimeter.size();
}
-void GCode::process_layer_single_object(
+void GCodeGenerator::process_layer_single_object(
// output
std::string &gcode,
// Index of the extruder currently active.
@@ -2384,6 +2328,8 @@ void GCode::process_layer_single_object(
const ObjectLayerToPrint &layer_to_print,
// Container for extruder overrides (when wiping into object or infill).
const LayerTools &layer_tools,
+ // Optional smooth path interpolating extrusion polylines.
+ const GCode::SmoothPathCache &smooth_path_cache,
// Is any extrusion possibly marked as wiping extrusion?
const bool is_anything_overridden,
// Round 1 (wiping into object or infill) or round 2 (normal extrusions).
@@ -2422,8 +2368,6 @@ void GCode::process_layer_single_object(
const PrintObject &print_object = print_instance.print_object;
const Print &print = *print_object.print();
- m_extrusion_quality_estimator.set_current_object(&print_object);
-
if (! print_wipe_extrusions && layer_to_print.support_layer != nullptr)
if (const SupportLayer &support_layer = *layer_to_print.support_layer; ! support_layer.support_fills.entities.empty()) {
ExtrusionRole role = support_layer.support_fills.role();
@@ -2456,9 +2400,16 @@ void GCode::process_layer_single_object(
init_layer_delayed();
m_layer = layer_to_print.support_layer;
m_object_layer_over_raft = false;
- gcode += this->extrude_support(
- // support_extrusion_role is ExtrusionRole::SupportMaterial, ExtrusionRole::SupportMaterialInterface or ExtrusionRole::Mixed for all extrusion paths.
- support_layer.support_fills.chained_path_from(m_last_pos, extrude_support ? (extrude_interface ? ExtrusionRole::Mixed : ExtrusionRole::SupportMaterial) : ExtrusionRole::SupportMaterialInterface));
+ ExtrusionEntitiesPtr entities_cache;
+ const ExtrusionEntitiesPtr &entities = extrude_support && extrude_interface ? support_layer.support_fills.entities : entities_cache;
+ if (! extrude_support || ! extrude_interface) {
+ auto role = extrude_support ? ExtrusionRole::SupportMaterial : ExtrusionRole::SupportMaterialInterface;
+ entities_cache.reserve(support_layer.support_fills.entities.size());
+ for (ExtrusionEntity *ee : support_layer.support_fills.entities)
+ if (ee->role() == role)
+ entities_cache.emplace_back(ee);
+ }
+ gcode += this->extrude_support(chain_extrusion_references(entities), smooth_path_cache);
}
}
@@ -2516,16 +2467,13 @@ void GCode::process_layer_single_object(
if (! temp_fill_extrusions.empty()) {
init_layer_delayed();
m_config.apply(region.config());
- //FIXME The source extrusions may be reversed, thus modifying the extrusions! Is it a problem? How about the initial G-code preview?
- // Will parallel access of initial G-code preview to these extrusions while reordering them at backend cause issues?
- chain_and_reorder_extrusion_entities(temp_fill_extrusions, &m_last_pos);
const auto extrusion_name = ironing ? "ironing"sv : "infill"sv;
- for (const ExtrusionEntity *fill : temp_fill_extrusions)
- if (auto *eec = dynamic_cast(fill); eec) {
- for (const ExtrusionEntity *ee : eec->chained_path_from(m_last_pos).entities)
- gcode += this->extrude_entity(*ee, extrusion_name);
+ for (const ExtrusionEntityReference &fill : chain_extrusion_references(temp_fill_extrusions, &m_last_pos))
+ if (auto *eec = dynamic_cast(&fill.extrusion_entity()); eec) {
+ for (const ExtrusionEntityReference &ee : chain_extrusion_references(*eec, &m_last_pos, fill.flipped()))
+ gcode += this->extrude_entity(ee, smooth_path_cache, extrusion_name);
} else
- gcode += this->extrude_entity(*fill, extrusion_name);
+ gcode += this->extrude_entity(fill, smooth_path_cache, extrusion_name);
}
};
@@ -2539,6 +2487,8 @@ void GCode::process_layer_single_object(
const PrintRegion ®ion = print.get_print_region(layerm.region().print_region_id());
bool first = true;
for (uint32_t perimeter_id : island.perimeters) {
+ // Extrusions inside islands are expected to be ordered already.
+ // Don't reorder them.
assert(dynamic_cast(layerm.perimeters().entities[perimeter_id]));
if (const auto *eec = static_cast(layerm.perimeters().entities[perimeter_id]);
shall_print_this_extrusion_collection(eec, region)) {
@@ -2550,7 +2500,8 @@ void GCode::process_layer_single_object(
m_config.apply(region.config());
}
for (const ExtrusionEntity *ee : *eec)
- gcode += this->extrude_entity(*ee, comment_perimeter, -1.);
+ // Don't reorder, don't flip.
+ gcode += this->extrude_entity({ *ee, false }, smooth_path_cache, comment_perimeter, -1.);
}
}
};
@@ -2591,16 +2542,25 @@ void GCode::process_layer_single_object(
gcode += std::string("; stop printing object ") + print_object.model_object()->name + " id:" + std::to_string(object_id) + " copy " + std::to_string(print_instance.instance_id) + "\n";
}
-void GCode::apply_print_config(const PrintConfig &print_config)
+void GCodeGenerator::apply_print_config(const PrintConfig &print_config)
{
m_writer.apply_print_config(print_config);
m_config.apply(print_config);
m_scaled_resolution = scaled(print_config.gcode_resolution.value);
}
-void GCode::append_full_config(const Print &print, std::string &str)
+void GCodeGenerator::append_full_config(const Print &print, std::string &str)
{
- const DynamicPrintConfig &cfg = print.full_print_config();
+ std::vector> config;
+ encode_full_config(print, config);
+ for (const auto& [key, value] : config) {
+ str += "; " + key + " = " + value + "\n";
+ }
+}
+
+void GCodeGenerator::encode_full_config(const Print& print, std::vector>& config)
+{
+ const DynamicPrintConfig& cfg = print.full_print_config();
// Sorted list of config keys, which shall not be stored into the G-code. Initializer list.
static constexpr auto banned_keys = {
"compatible_printers"sv,
@@ -2611,40 +2571,33 @@ void GCode::append_full_config(const Print &print, std::string &str)
"printhost_cafile"sv
};
assert(std::is_sorted(banned_keys.begin(), banned_keys.end()));
- auto is_banned = [](const std::string &key) {
+ auto is_banned = [](const std::string& key) {
return std::binary_search(banned_keys.begin(), banned_keys.end(), key);
};
- for (const std::string &key : cfg.keys())
- if (! is_banned(key) && ! cfg.option(key)->is_nil())
- str += "; " + key + " = " + cfg.opt_serialize(key) + "\n";
+ config.reserve(config.size() + cfg.keys().size());
+ for (const std::string& key : cfg.keys()) {
+ if (!is_banned(key) && !cfg.option(key)->is_nil())
+ config.emplace_back(key, cfg.opt_serialize(key));
+ }
+ config.shrink_to_fit();
}
-void GCode::set_extruders(const std::vector &extruder_ids)
+void GCodeGenerator::set_extruders(const std::vector &extruder_ids)
{
m_writer.set_extruders(extruder_ids);
-
- // enable wipe path generation if any extruder has wipe enabled
- m_wipe.enable = false;
- for (auto id : extruder_ids)
- if (m_config.wipe.get_at(id)) {
- m_wipe.enable = true;
- break;
- }
+ m_wipe.init(this->config(), extruder_ids);
}
-void GCode::set_origin(const Vec2d &pointf)
+void GCodeGenerator::set_origin(const Vec2d &pointf)
{
// if origin increases (goes towards right), last_pos decreases because it goes towards left
- const Point translate(
- scale_(m_origin(0) - pointf(0)),
- scale_(m_origin(1) - pointf(1))
- );
- m_last_pos += translate;
- m_wipe.path.translate(translate);
+ const auto offset = Point::new_scale(m_origin - pointf);
+ m_last_pos += offset;
+ m_wipe.offset_path(offset);
m_origin = pointf;
}
-std::string GCode::preamble()
+std::string GCodeGenerator::preamble()
{
std::string gcode = m_writer.preamble();
@@ -2657,8 +2610,8 @@ std::string GCode::preamble()
return gcode;
}
-// called by GCode::process_layer()
-std::string GCode::change_layer(coordf_t print_z)
+// called by GCodeGenerator::process_layer()
+std::string GCodeGenerator::change_layer(coordf_t print_z)
{
std::string gcode;
if (m_layer_count > 0)
@@ -2680,198 +2633,180 @@ std::string GCode::change_layer(coordf_t print_z)
return gcode;
}
-std::string GCode::extrude_loop(ExtrusionLoop loop, const std::string_view description, double speed)
+#ifndef NDEBUG
+static inline bool validate_smooth_path(const GCode::SmoothPath &smooth_path, bool loop)
{
- // get a copy; don't modify the orientation of the original loop object otherwise
- // next copies (if any) would not detect the correct orientation
-
- // extrude all loops ccw
- bool was_clockwise = loop.make_counter_clockwise();
-
- // find the point of the loop that is closest to the current extruder position
- // or randomize if requested
- Point last_pos = this->last_pos();
+ for (auto it = std::next(smooth_path.begin()); it != smooth_path.end(); ++ it) {
+ assert(it->path.size() >= 2);
+ assert(std::prev(it)->path.back().point == it->path.front().point);
+ }
+ assert(! loop || smooth_path.front().path.front().point == smooth_path.back().path.back().point);
+ return true;
+}
+#endif //NDEBUG
+std::string GCodeGenerator::extrude_loop(const ExtrusionLoop &loop_src, const GCode::SmoothPathCache &smooth_path_cache, const std::string_view description, double speed)
+{
+ // Extrude all loops CCW.
+ bool is_hole = loop_src.is_clockwise();
+ Point seam_point = this->last_pos();
if (! m_config.spiral_vase && comment_is_perimeter(description)) {
assert(m_layer != nullptr);
- m_seam_placer.place_seam(m_layer, loop, m_config.external_perimeters_first, this->last_pos());
- } else
- // Because the G-code export has 1um resolution, don't generate segments shorter than 1.5 microns,
- // thus empty path segments will not be produced by G-code export.
- loop.split_at(last_pos, false, scaled(0.0015));
-
- for (auto it = std::next(loop.paths.begin()); it != loop.paths.end(); ++it) {
- assert(it->polyline.points.size() >= 2);
- assert(std::prev(it)->polyline.last_point() == it->polyline.first_point());
+ seam_point = m_seam_placer.place_seam(m_layer, loop_src, m_config.external_perimeters_first, this->last_pos());
}
- assert(loop.paths.front().first_point() == loop.paths.back().last_point());
+ // Because the G-code export has 1um resolution, don't generate segments shorter than 1.5 microns,
+ // thus empty path segments will not be produced by G-code export.
+ GCode::SmoothPath smooth_path = smooth_path_cache.resolve_or_fit_split_with_seam(
+ loop_src, is_hole, m_scaled_resolution, seam_point, scaled(0.0015));
- // clip the path to avoid the extruder to get exactly on the first point of the loop;
+ // Clip the path to avoid the extruder to get exactly on the first point of the loop;
// if polyline was shorter than the clipping distance we'd get a null polyline, so
- // we discard it in that case
- double clip_length = m_enable_loop_clipping ?
- scale_(EXTRUDER_CONFIG(nozzle_diameter)) * LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER :
- 0;
+ // we discard it in that case.
+ if (m_enable_loop_clipping)
+ clip_end(smooth_path, scale_(EXTRUDER_CONFIG(nozzle_diameter)) * LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER);
- // get paths
- ExtrusionPaths paths;
- loop.clip_end(clip_length, &paths);
- if (paths.empty()) return "";
+ if (smooth_path.empty())
+ return {};
- // apply the small perimeter speed
- if (paths.front().role().is_perimeter() && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1)
+ assert(validate_smooth_path(smooth_path, ! m_enable_loop_clipping));
+
+ // Apply the small perimeter speed.
+ if (loop_src.paths.front().role().is_perimeter() && loop_src.length() <= SMALL_PERIMETER_LENGTH && speed == -1)
speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed);
- // extrude along the path
+ // Extrude along the smooth path.
std::string gcode;
- for (ExtrusionPath &path : paths) {
- path.simplify(m_scaled_resolution);
- gcode += this->_extrude(path, description, speed);
- }
+ for (const GCode::SmoothPathElement &el : smooth_path)
+ gcode += this->_extrude(el.path_attributes, el.path, description, speed);
// reset acceleration
- gcode += m_writer.set_print_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5));
+ gcode += m_writer.set_print_acceleration(fast_round_up(m_config.default_acceleration.value));
- if (m_wipe.enable) {
- m_wipe.path = paths.front().polyline;
-
- for (auto it = std::next(paths.begin()); it != paths.end(); ++it) {
- if (it->role().is_bridge())
- break; // Don't perform a wipe on bridges.
-
- assert(it->polyline.points.size() >= 2);
- assert(m_wipe.path.points.back() == it->polyline.first_point());
- if (m_wipe.path.points.back() != it->polyline.first_point())
- break; // ExtrusionLoop is interrupted in some place.
-
- m_wipe.path.points.insert(m_wipe.path.points.end(), it->polyline.points.begin() + 1, it->polyline.points.end());
- }
- }
-
- // make a little move inwards before leaving loop
- if (paths.back().role().is_external_perimeter() && m_layer != NULL && m_config.perimeters.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) {
- // detect angle between last and first segment
- // the side depends on the original winding order of the polygon (left for contours, right for holes)
- //FIXME improve the algorithm in case the loop is tiny.
- //FIXME improve the algorithm in case the loop is split into segments with a low number of points (see the Point b query).
- // Angle from the 2nd point to the last point.
- double angle_inside = angle(paths.front().polyline.points[1] - paths.front().first_point(),
- *(paths.back().polyline.points.end()-3) - paths.front().first_point());
- assert(angle_inside >= -M_PI && angle_inside <= M_PI);
- // 3rd of this angle will be taken, thus make the angle monotonic before interpolation.
- if (was_clockwise) {
- if (angle_inside > 0)
- angle_inside -= 2.0 * M_PI;
- } else {
- if (angle_inside < 0)
- angle_inside += 2.0 * M_PI;
- }
-
- // create the destination point along the first segment and rotate it
- // we make sure we don't exceed the segment length because we don't know
- // the rotation of the second segment so we might cross the object boundary
- Vec2d p1 = paths.front().polyline.points.front().cast();
- Vec2d p2 = paths.front().polyline.points[1].cast();
- Vec2d v = p2 - p1;
- double nd = scale_(EXTRUDER_CONFIG(nozzle_diameter));
- double l2 = v.squaredNorm();
- // Shift by no more than a nozzle diameter.
- //FIXME Hiding the seams will not work nicely for very densely discretized contours!
- Point pt = ((nd * nd >= l2) ? p2 : (p1 + v * (nd / sqrt(l2)))).cast();
- // Rotate pt inside around the seam point.
- pt.rotate(angle_inside / 3., paths.front().polyline.points.front());
- // generate the travel move
- gcode += m_writer.travel_to_xy(this->point_to_gcode(pt), "move inwards before travel");
+ if (m_wipe.enabled()) {
+ // Wipe will hide the seam.
+ m_wipe.set_path(std::move(smooth_path), false);
+ } else if (loop_src.paths.back().role().is_external_perimeter() && m_layer != nullptr && m_config.perimeters.value > 1) {
+ // Only wipe inside if the wipe along the perimeter is disabled.
+ // Make a little move inwards before leaving loop.
+ if (std::optional pt = wipe_hide_seam(smooth_path, is_hole, scale_(EXTRUDER_CONFIG(nozzle_diameter))); pt)
+ // Generate the seam hiding travel move.
+ gcode += m_writer.travel_to_xy(this->point_to_gcode(*pt), "move inwards before travel");
}
return gcode;
}
-std::string GCode::extrude_multi_path(ExtrusionMultiPath multipath, const std::string_view description, double speed)
+std::string GCodeGenerator::extrude_skirt(
+ const ExtrusionLoop &loop_src, const ExtrusionFlow &extrusion_flow_override,
+ const GCode::SmoothPathCache &smooth_path_cache, const std::string_view description, double speed)
{
- for (auto it = std::next(multipath.paths.begin()); it != multipath.paths.end(); ++it) {
+ assert(loop_src.is_counter_clockwise());
+ GCode::SmoothPath smooth_path = smooth_path_cache.resolve_or_fit_split_with_seam(
+ loop_src, false, m_scaled_resolution, this->last_pos(), scaled(0.0015));
+
+ // Clip the path to avoid the extruder to get exactly on the first point of the loop;
+ // if polyline was shorter than the clipping distance we'd get a null polyline, so
+ // we discard it in that case.
+ if (m_enable_loop_clipping)
+ clip_end(smooth_path, scale_(EXTRUDER_CONFIG(nozzle_diameter)) * LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER);
+
+ if (smooth_path.empty())
+ return {};
+
+ assert(validate_smooth_path(smooth_path, ! m_enable_loop_clipping));
+
+ // Extrude along the smooth path.
+ std::string gcode;
+ for (GCode::SmoothPathElement &el : smooth_path) {
+ // Override extrusion parameters.
+ el.path_attributes.mm3_per_mm = extrusion_flow_override.mm3_per_mm;
+ el.path_attributes.height = extrusion_flow_override.height;
+ gcode += this->_extrude(el.path_attributes, el.path, description, speed);
+ }
+
+ // reset acceleration
+ gcode += m_writer.set_print_acceleration(fast_round_up(m_config.default_acceleration.value));
+
+ if (m_wipe.enabled())
+ // Wipe will hide the seam.
+ m_wipe.set_path(std::move(smooth_path), false);
+
+ return gcode;
+}
+
+std::string GCodeGenerator::extrude_multi_path(const ExtrusionMultiPath &multipath, bool reverse, const GCode::SmoothPathCache &smooth_path_cache, const std::string_view description, double speed)
+{
+#ifndef NDEBUG
+ for (auto it = std::next(multipath.paths.begin()); it != multipath.paths.end(); ++ it) {
assert(it->polyline.points.size() >= 2);
assert(std::prev(it)->polyline.last_point() == it->polyline.first_point());
}
+#endif // NDEBUG
+ GCode::SmoothPath smooth_path = smooth_path_cache.resolve_or_fit(multipath, reverse, m_scaled_resolution);
+
// extrude along the path
std::string gcode;
- for (ExtrusionPath path : multipath.paths) {
- path.simplify(m_scaled_resolution);
- gcode += this->_extrude(path, description, speed);
- }
- if (m_wipe.enable) {
- m_wipe.path = std::move(multipath.paths.back().polyline);
- m_wipe.path.reverse();
-
- for (auto it = std::next(multipath.paths.rbegin()); it != multipath.paths.rend(); ++it) {
- if (it->role().is_bridge())
- break; // Do not perform a wipe on bridges.
-
- assert(it->polyline.points.size() >= 2);
- assert(m_wipe.path.points.back() == it->polyline.last_point());
- if (m_wipe.path.points.back() != it->polyline.last_point())
- break; // ExtrusionMultiPath is interrupted in some place.
-
- m_wipe.path.points.insert(m_wipe.path.points.end(), it->polyline.points.rbegin() + 1, it->polyline.points.rend());
- }
- }
+ for (GCode::SmoothPathElement &el : smooth_path)
+ gcode += this->_extrude(el.path_attributes, el.path, description, speed);
+ m_wipe.set_path(std::move(smooth_path), true);
// reset acceleration
gcode += m_writer.set_print_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
return gcode;
}
-std::string GCode::extrude_entity(const ExtrusionEntity &entity, const std::string_view description, double speed)
+std::string GCodeGenerator::extrude_entity(const ExtrusionEntityReference &entity, const GCode::SmoothPathCache &smooth_path_cache, const std::string_view description, double speed)
{
- if (const ExtrusionPath* path = dynamic_cast(&entity))
- return this->extrude_path(*path, description, speed);
- else if (const ExtrusionMultiPath* multipath = dynamic_cast(&entity))
- return this->extrude_multi_path(*multipath, description, speed);
- else if (const ExtrusionLoop* loop = dynamic_cast(&entity))
- return this->extrude_loop(*loop, description, speed);
+ if (const ExtrusionPath *path = dynamic_cast(&entity.extrusion_entity()))
+ return this->extrude_path(*path, entity.flipped(), smooth_path_cache, description, speed);
+ else if (const ExtrusionMultiPath *multipath = dynamic_cast(&entity.extrusion_entity()))
+ return this->extrude_multi_path(*multipath, entity.flipped(), smooth_path_cache, description, speed);
+ else if (const ExtrusionLoop *loop = dynamic_cast(&entity.extrusion_entity()))
+ return this->extrude_loop(*loop, smooth_path_cache, description, speed);
else
throw Slic3r::InvalidArgument("Invalid argument supplied to extrude()");
- return "";
+ return {};
}
-std::string GCode::extrude_path(ExtrusionPath path, std::string_view description, double speed)
+std::string GCodeGenerator::extrude_path(const ExtrusionPath &path, bool reverse, const GCode::SmoothPathCache &smooth_path_cache, std::string_view description, double speed)
{
- path.simplify(m_scaled_resolution);
- std::string gcode = this->_extrude(path, description, speed);
- if (m_wipe.enable) {
- m_wipe.path = std::move(path.polyline);
- m_wipe.path.reverse();
- }
+ Geometry::ArcWelder::Path smooth_path = smooth_path_cache.resolve_or_fit(path, reverse, m_scaled_resolution);
+ std::string gcode = this->_extrude(path.attributes(), smooth_path, description, speed);
+ Geometry::ArcWelder::reverse(smooth_path);
+ m_wipe.set_path(std::move(smooth_path));
// reset acceleration
gcode += m_writer.set_print_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
return gcode;
}
-std::string GCode::extrude_support(const ExtrusionEntityCollection &support_fills)
+std::string GCodeGenerator::extrude_support(const ExtrusionEntityReferences &support_fills, const GCode::SmoothPathCache &smooth_path_cache)
{
static constexpr const auto support_label = "support material"sv;
static constexpr const auto support_interface_label = "support material interface"sv;
std::string gcode;
- if (! support_fills.entities.empty()) {
+ if (! support_fills.empty()) {
const double support_speed = m_config.support_material_speed.value;
const double support_interface_speed = m_config.support_material_interface_speed.get_abs_value(support_speed);
- for (const ExtrusionEntity *ee : support_fills.entities) {
- ExtrusionRole role = ee->role();
+ for (const ExtrusionEntityReference &eref : support_fills) {
+ ExtrusionRole role = eref.extrusion_entity().role();
assert(role == ExtrusionRole::SupportMaterial || role == ExtrusionRole::SupportMaterialInterface);
const auto label = (role == ExtrusionRole::SupportMaterial) ? support_label : support_interface_label;
const double speed = (role == ExtrusionRole::SupportMaterial) ? support_speed : support_interface_speed;
- const ExtrusionPath *path = dynamic_cast(ee);
+ const ExtrusionPath *path = dynamic_cast(&eref.extrusion_entity());
if (path)
- gcode += this->extrude_path(*path, label, speed);
+ gcode += this->extrude_path(*path, eref.flipped(), smooth_path_cache, label, speed);
+ else if (const ExtrusionMultiPath *multipath = dynamic_cast(&eref.extrusion_entity()); multipath)
+ gcode += this->extrude_multi_path(*multipath, eref.flipped(), smooth_path_cache, label, speed);
else {
- const ExtrusionMultiPath *multipath = dynamic_cast(ee);
- if (multipath)
- gcode += this->extrude_multi_path(*multipath, label, speed);
- else {
- const ExtrusionEntityCollection *eec = dynamic_cast(ee);
- assert(eec);
- if (eec)
- gcode += this->extrude_support(*eec);
+ const ExtrusionEntityCollection *eec = dynamic_cast(&eref.extrusion_entity());
+ assert(eec);
+ if (eec) {
+ //FIXME maybe order the support here?
+ ExtrusionEntityReferences refs;
+ refs.reserve(eec->entities.size());
+ std::transform(eec->entities.begin(), eec->entities.end(), std::back_inserter(refs),
+ [flipped = eref.flipped()](const ExtrusionEntity *ee) { return ExtrusionEntityReference{ *ee, flipped }; });
+ gcode += this->extrude_support(refs, smooth_path_cache);
}
}
}
@@ -2879,17 +2814,17 @@ std::string GCode::extrude_support(const ExtrusionEntityCollection &support_fill
return gcode;
}
-bool GCode::GCodeOutputStream::is_error() const
+bool GCodeGenerator::GCodeOutputStream::is_error() const
{
return ::ferror(this->f);
}
-void GCode::GCodeOutputStream::flush()
+void GCodeGenerator::GCodeOutputStream::flush()
{
::fflush(this->f);
}
-void GCode::GCodeOutputStream::close()
+void GCodeGenerator::GCodeOutputStream::close()
{
if (this->f) {
::fclose(this->f);
@@ -2897,7 +2832,7 @@ void GCode::GCodeOutputStream::close()
}
}
-void GCode::GCodeOutputStream::write(const char *what)
+void GCodeGenerator::GCodeOutputStream::write(const char *what)
{
if (what != nullptr) {
//FIXME don't allocate a string, maybe process a batch of lines?
@@ -2908,13 +2843,13 @@ void GCode::GCodeOutputStream::write(const char *what)
}
}
-void GCode::GCodeOutputStream::writeln(const std::string &what)
+void GCodeGenerator::GCodeOutputStream::writeln(const std::string &what)
{
if (! what.empty())
this->write(what.back() == '\n' ? what : what + '\n');
}
-void GCode::GCodeOutputStream::write_format(const char* format, ...)
+void GCodeGenerator::GCodeOutputStream::write_format(const char* format, ...)
{
va_list args;
va_start(args, format);
@@ -2946,18 +2881,22 @@ void GCode::GCodeOutputStream::write_format(const char* format, ...)
va_end(args);
}
-std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view description, double speed)
+std::string GCodeGenerator::_extrude(
+ const ExtrusionAttributes &path_attr,
+ const Geometry::ArcWelder::Path &path,
+ const std::string_view description,
+ double speed)
{
std::string gcode;
- const std::string_view description_bridge = path.role().is_bridge() ? " (bridge)"sv : ""sv;
+ const std::string_view description_bridge = path_attr.role.is_bridge() ? " (bridge)"sv : ""sv;
// go to first point of extrusion path
- if (!m_last_pos_defined || m_last_pos != path.first_point()) {
+ if (!m_last_pos_defined || m_last_pos != path.front().point) {
std::string comment = "move to first ";
comment += description;
comment += description_bridge;
comment += " point";
- gcode += this->travel_to(path.first_point(), path.role(), comment);
+ gcode += this->travel_to(path.front().point, path_attr.role, comment);
}
// compensate retraction
@@ -2970,17 +2909,17 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
acceleration = m_config.first_layer_acceleration.value;
} else if (this->object_layer_over_raft() && m_config.first_layer_acceleration_over_raft.value > 0) {
acceleration = m_config.first_layer_acceleration_over_raft.value;
- } else if (m_config.bridge_acceleration.value > 0 && path.role().is_bridge()) {
+ } else if (m_config.bridge_acceleration.value > 0 && path_attr.role.is_bridge()) {
acceleration = m_config.bridge_acceleration.value;
- } else if (m_config.top_solid_infill_acceleration > 0 && path.role() == ExtrusionRole::TopSolidInfill) {
+ } else if (m_config.top_solid_infill_acceleration > 0 && path_attr.role == ExtrusionRole::TopSolidInfill) {
acceleration = m_config.top_solid_infill_acceleration.value;
- } else if (m_config.solid_infill_acceleration > 0 && path.role().is_solid_infill()) {
+ } else if (m_config.solid_infill_acceleration > 0 && path_attr.role.is_solid_infill()) {
acceleration = m_config.solid_infill_acceleration.value;
- } else if (m_config.infill_acceleration.value > 0 && path.role().is_infill()) {
+ } else if (m_config.infill_acceleration.value > 0 && path_attr.role.is_infill()) {
acceleration = m_config.infill_acceleration.value;
- } else if (m_config.external_perimeter_acceleration > 0 && path.role().is_external_perimeter()) {
+ } else if (m_config.external_perimeter_acceleration > 0 && path_attr.role.is_external_perimeter()) {
acceleration = m_config.external_perimeter_acceleration.value;
- } else if (m_config.perimeter_acceleration.value > 0 && path.role().is_perimeter()) {
+ } else if (m_config.perimeter_acceleration.value > 0 && path_attr.role.is_perimeter()) {
acceleration = m_config.perimeter_acceleration.value;
} else {
acceleration = m_config.default_acceleration.value;
@@ -2989,36 +2928,36 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
}
// calculate extrusion length per distance unit
- double e_per_mm = m_writer.extruder()->e_per_mm3() * path.mm3_per_mm;
+ double e_per_mm = m_writer.extruder()->e_per_mm3() * path_attr.mm3_per_mm;
if (m_writer.extrusion_axis().empty())
// gcfNoExtrusion
e_per_mm = 0;
// set speed
if (speed == -1) {
- if (path.role() == ExtrusionRole::Perimeter) {
+ if (path_attr.role == ExtrusionRole::Perimeter) {
speed = m_config.get_abs_value("perimeter_speed");
- } else if (path.role() == ExtrusionRole::ExternalPerimeter) {
+ } else if (path_attr.role == ExtrusionRole::ExternalPerimeter) {
speed = m_config.get_abs_value("external_perimeter_speed");
- } else if (path.role().is_bridge()) {
- assert(path.role().is_perimeter() || path.role() == ExtrusionRole::BridgeInfill);
+ } else if (path_attr.role.is_bridge()) {
+ assert(path_attr.role.is_perimeter() || path_attr.role == ExtrusionRole::BridgeInfill);
speed = m_config.get_abs_value("bridge_speed");
- } else if (path.role() == ExtrusionRole::InternalInfill) {
+ } else if (path_attr.role == ExtrusionRole::InternalInfill) {
speed = m_config.get_abs_value("infill_speed");
- } else if (path.role() == ExtrusionRole::SolidInfill) {
+ } else if (path_attr.role == ExtrusionRole::SolidInfill) {
speed = m_config.get_abs_value("solid_infill_speed");
- } else if (path.role() == ExtrusionRole::TopSolidInfill) {
+ } else if (path_attr.role == ExtrusionRole::TopSolidInfill) {
speed = m_config.get_abs_value("top_solid_infill_speed");
- } else if (path.role() == ExtrusionRole::Ironing) {
+ } else if (path_attr.role == ExtrusionRole::Ironing) {
speed = m_config.get_abs_value("ironing_speed");
- } else if (path.role() == ExtrusionRole::GapFill) {
+ } else if (path_attr.role == ExtrusionRole::GapFill) {
speed = m_config.get_abs_value("gap_fill_speed");
} else {
throw Slic3r::InvalidArgument("Invalid speed");
}
}
if (m_volumetric_speed != 0. && speed == 0)
- speed = m_volumetric_speed / path.mm3_per_mm;
+ speed = m_volumetric_speed / path_attr.mm3_per_mm;
if (this->on_first_layer())
speed = m_config.get_abs_value("first_layer_speed", speed);
else if (this->object_layer_over_raft())
@@ -3027,54 +2966,36 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
// cap speed with max_volumetric_speed anyway (even if user is not using autospeed)
speed = std::min(
speed,
- m_config.max_volumetric_speed.value / path.mm3_per_mm
+ m_config.max_volumetric_speed.value / path_attr.mm3_per_mm
);
}
if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) {
// cap speed with max_volumetric_speed anyway (even if user is not using autospeed)
speed = std::min(
speed,
- EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm
+ EXTRUDER_CONFIG(filament_max_volumetric_speed) / path_attr.mm3_per_mm
);
}
- bool variable_speed_or_fan_speed = false;
- std::vector new_points{};
- if ((this->m_config.enable_dynamic_overhang_speeds || this->config().enable_dynamic_fan_speeds.get_at(m_writer.extruder()->id())) &&
- !this->on_first_layer() && path.role().is_perimeter()) {
- std::vector> overhangs_with_speeds = {{100, ConfigOptionFloatOrPercent{speed, false}}};
- if (this->m_config.enable_dynamic_overhang_speeds) {
- overhangs_with_speeds = {{0, m_config.overhang_speed_0},
- {25, m_config.overhang_speed_1},
- {50, m_config.overhang_speed_2},
- {75, m_config.overhang_speed_3},
- {100, ConfigOptionFloatOrPercent{speed, false}}};
- }
-
- std::vector> overhang_w_fan_speeds = {{100, ConfigOptionInts{0}}};
- if (this->m_config.enable_dynamic_fan_speeds.get_at(m_writer.extruder()->id())) {
- overhang_w_fan_speeds = {{0, m_config.overhang_fan_speed_0},
- {25, m_config.overhang_fan_speed_1},
- {50, m_config.overhang_fan_speed_2},
- {75, m_config.overhang_fan_speed_3},
- {100, ConfigOptionInts{0}}};
- }
-
+ std::pair dynamic_speed_and_fan_speed{-1, -1};
+ if (path_attr.overhang_attributes.has_value()) {
double external_perim_reference_speed = m_config.get_abs_value("external_perimeter_speed");
if (external_perim_reference_speed == 0)
- external_perim_reference_speed = m_volumetric_speed / path.mm3_per_mm;
+ external_perim_reference_speed = m_volumetric_speed / path_attr.mm3_per_mm;
if (m_config.max_volumetric_speed.value > 0)
- external_perim_reference_speed = std::min(external_perim_reference_speed, m_config.max_volumetric_speed.value / path.mm3_per_mm);
+ external_perim_reference_speed = std::min(external_perim_reference_speed,
+ m_config.max_volumetric_speed.value / path_attr.mm3_per_mm);
if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) {
external_perim_reference_speed = std::min(external_perim_reference_speed,
- EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm);
+ EXTRUDER_CONFIG(filament_max_volumetric_speed) / path_attr.mm3_per_mm);
}
- new_points = m_extrusion_quality_estimator.estimate_speed_from_extrusion_quality(path, overhangs_with_speeds, overhang_w_fan_speeds,
- m_writer.extruder()->id(), external_perim_reference_speed,
- speed);
- variable_speed_or_fan_speed = std::any_of(new_points.begin(), new_points.end(),
- [speed](const ProcessedPoint &p) { return p.speed != speed || p.fan_speed != 0; });
+ dynamic_speed_and_fan_speed = ExtrusionProcessor::calculate_overhang_speed(path_attr, this->m_config, m_writer.extruder()->id(),
+ external_perim_reference_speed, speed);
+ }
+
+ if (dynamic_speed_and_fan_speed.first > -1) {
+ speed = dynamic_speed_and_fan_speed.first;
}
double F = speed * 60; // convert mm/sec to mm/min
@@ -3082,7 +3003,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
// extrude arc or line
if (m_enable_extrusion_role_markers)
{
- if (GCodeExtrusionRole role = extrusion_role_to_gcode_extrusion_role(path.role()); role != m_last_extrusion_role)
+ if (GCodeExtrusionRole role = extrusion_role_to_gcode_extrusion_role(path_attr.role); role != m_last_extrusion_role)
{
m_last_extrusion_role = role;
if (m_enable_extrusion_role_markers)
@@ -3100,29 +3021,29 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
bool last_was_wipe_tower = (m_last_processor_extrusion_role == GCodeExtrusionRole::WipeTower);
assert(is_decimal_separator_point());
- if (GCodeExtrusionRole role = extrusion_role_to_gcode_extrusion_role(path.role()); role != m_last_processor_extrusion_role) {
+ if (GCodeExtrusionRole role = extrusion_role_to_gcode_extrusion_role(path_attr.role); role != m_last_processor_extrusion_role) {
m_last_processor_extrusion_role = role;
char buf[64];
sprintf(buf, ";%s%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role).c_str(), gcode_extrusion_role_to_string(m_last_processor_extrusion_role).c_str());
gcode += buf;
}
- if (last_was_wipe_tower || m_last_width != path.width) {
- m_last_width = path.width;
+ if (last_was_wipe_tower || m_last_width != path_attr.width) {
+ m_last_width = path_attr.width;
gcode += std::string(";") + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Width)
+ float_to_string_decimal_point(m_last_width) + "\n";
}
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
- if (last_was_wipe_tower || (m_last_mm3_per_mm != path.mm3_per_mm)) {
- m_last_mm3_per_mm = path.mm3_per_mm;
+ if (last_was_wipe_tower || (m_last_mm3_per_mm != path_attr.mm3_per_mm)) {
+ m_last_mm3_per_mm = path_attr.mm3_per_mm;
gcode += std::string(";") + GCodeProcessor::Mm3_Per_Mm_Tag
+ float_to_string_decimal_point(m_last_mm3_per_mm) + "\n";
}
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
- if (last_was_wipe_tower || std::abs(m_last_height - path.height) > EPSILON) {
- m_last_height = path.height;
+ if (last_was_wipe_tower || std::abs(m_last_height - path_attr.height) > EPSILON) {
+ m_last_height = path_attr.height;
gcode += std::string(";") + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height)
+ float_to_string_decimal_point(m_last_height) + "\n";
@@ -3130,72 +3051,85 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
std::string cooling_marker_setspeed_comments;
if (m_enable_cooling_markers) {
- if (path.role().is_bridge())
+ if (path_attr.role.is_bridge())
gcode += ";_BRIDGE_FAN_START\n";
else
cooling_marker_setspeed_comments = ";_EXTRUDE_SET_SPEED";
- if (path.role() == ExtrusionRole::ExternalPerimeter)
+ if (path_attr.role == ExtrusionRole::ExternalPerimeter)
cooling_marker_setspeed_comments += ";_EXTERNAL_PERIMETER";
}
- if (!variable_speed_or_fan_speed) {
- // F is mm per minute.
- gcode += m_writer.set_speed(F, "", cooling_marker_setspeed_comments);
- double path_length = 0.;
- std::string comment;
- if (m_config.gcode_comments) {
- comment = description;
- comment += description_bridge;
+ // F is mm per minute.
+ gcode += m_writer.set_speed(F, "", cooling_marker_setspeed_comments);
+ if (dynamic_speed_and_fan_speed.second >= 0)
+ gcode += ";_SET_FAN_SPEED" + std::to_string(int(dynamic_speed_and_fan_speed.second)) + "\n";
+ double path_length = 0.;
+ std::string comment;
+ if (m_config.gcode_comments) {
+ comment = description;
+ comment += description_bridge;
+ }
+ Vec2d prev = this->point_to_gcode_quantized(path.front().point);
+ auto it = path.begin();
+ auto end = path.end();
+ const bool emit_radius = m_config.arc_fitting == ArcFittingType::EmitRadius;
+ for (++ it; it != end; ++ it) {
+ Vec2d p = this->point_to_gcode_quantized(it->point);
+ // Center of the radius to be emitted into the G-code: Either by radius or by center offset.
+ double radius = 0;
+ Vec2d ij;
+ if (it->radius != 0) {
+ // Extrude an arc.
+ assert(m_config.arc_fitting == ArcFittingType::EmitCenter ||
+ m_config.arc_fitting == ArcFittingType::EmitRadius);
+ radius = unscaled(it->radius);
+ if (emit_radius) {
+ // Only quantize radius if emitting it directly into G-code. Otherwise use the exact radius for calculating the IJ values.
+ radius = GCodeFormatter::quantize_xyzf(radius);
+ } else {
+ // Calculate quantized IJ circle center offset.
+ ij = GCodeFormatter::quantize(Vec2d(
+ Geometry::ArcWelder::arc_center(prev.cast(), p.cast(), double(radius), it->ccw())
+ - prev));
+ if (ij == Vec2d::Zero())
+ // Don't extrude a degenerated circle.
+ radius = 0;
+ }
}
- Vec2d prev = this->point_to_gcode_quantized(path.polyline.points.front());
- auto it = path.polyline.points.begin();
- auto end = path.polyline.points.end();
- for (++ it; it != end; ++ it) {
- Vec2d p = this->point_to_gcode_quantized(*it);
- const double line_length = (p - prev).norm();
+ if (radius == 0) {
+ // Extrude line segment.
+ if (const double line_length = (p - prev).norm(); line_length > 0) {
+ path_length += line_length;
+ gcode += m_writer.extrude_to_xy(p, e_per_mm * line_length, comment);
+ }
+ } else {
+ double angle = Geometry::ArcWelder::arc_angle(prev.cast(), p.cast(), double(radius));
+ assert(angle > 0);
+ const double line_length = angle * std::abs(radius);
path_length += line_length;
- gcode += m_writer.extrude_to_xy(p, e_per_mm * line_length, comment);
- prev = p;
+ const double dE = e_per_mm * line_length;
+ assert(dE > 0);
+ gcode += emit_radius ?
+ m_writer.extrude_to_xy_G2G3R(p, radius, it->ccw(), dE, comment) :
+ m_writer.extrude_to_xy_G2G3IJ(p, ij, it->ccw(), dE, comment);
}
- } else {
- std::string marked_comment;
- if (m_config.gcode_comments) {
- marked_comment = description;
- marked_comment += description_bridge;
- }
- double last_set_speed = new_points[0].speed * 60.0;
- double last_set_fan_speed = new_points[0].fan_speed;
- gcode += m_writer.set_speed(last_set_speed, "", cooling_marker_setspeed_comments);
- gcode += "\n;_SET_FAN_SPEED" + std::to_string(int(last_set_fan_speed)) + "\n";
- Vec2d prev = this->point_to_gcode_quantized(new_points[0].p);
- for (size_t i = 1; i < new_points.size(); i++) {
- const ProcessedPoint &processed_point = new_points[i];
- Vec2d p = this->point_to_gcode_quantized(processed_point.p);
- const double line_length = (p - prev).norm();
- gcode += m_writer.extrude_to_xy(p, e_per_mm * line_length, marked_comment);
- prev = p;
- double new_speed = processed_point.speed * 60.0;
- if (last_set_speed != new_speed) {
- gcode += m_writer.set_speed(new_speed, "", cooling_marker_setspeed_comments);
- last_set_speed = new_speed;
- }
- if (last_set_fan_speed != processed_point.fan_speed) {
- last_set_fan_speed = processed_point.fan_speed;
- gcode += "\n;_SET_FAN_SPEED" + std::to_string(int(last_set_fan_speed)) + "\n";
- }
- }
- gcode += "\n;_RESET_FAN_SPEED\n";
+ prev = p;
}
if (m_enable_cooling_markers)
- gcode += path.role().is_bridge() ? ";_BRIDGE_FAN_END\n" : ";_EXTRUDE_END\n";
+ gcode += path_attr.role.is_bridge() ? ";_BRIDGE_FAN_END" : ";_EXTRUDE_END";
- this->set_last_pos(path.last_point());
+ if (dynamic_speed_and_fan_speed.second >= 0)
+ gcode += ";_RESET_FAN_SPEED";
+
+ gcode += "\n";
+
+ this->set_last_pos(path.back().point);
return gcode;
}
// This method accepts &point in print coordinates.
-std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string comment)
+std::string GCodeGenerator::travel_to(const Point &point, ExtrusionRole role, std::string comment)
{
/* Define the travel move as a line between current position and the taget point.
This is expressed in print coordinates, so it will need to be translated by
@@ -3277,7 +3211,7 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string
return gcode;
}
-bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role)
+bool GCodeGenerator::needs_retraction(const Polyline &travel, ExtrusionRole role)
{
if (! m_writer.extruder() || travel.length() < scale_(EXTRUDER_CONFIG(retract_before_travel))) {
// skip retraction if the move is shorter than the configured threshold
@@ -3316,7 +3250,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role)
return true;
}
-std::string GCode::retract(bool toolchange)
+std::string GCodeGenerator::retract(bool toolchange)
{
std::string gcode;
@@ -3342,7 +3276,7 @@ std::string GCode::retract(bool toolchange)
return gcode;
}
-std::string GCode::set_extruder(unsigned int extruder_id, double print_z)
+std::string GCodeGenerator::set_extruder(unsigned int extruder_id, double print_z)
{
if (!m_writer.need_toolchange(extruder_id))
return "";
@@ -3379,7 +3313,12 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z)
unsigned int old_extruder_id = m_writer.extruder()->id();
const std::string &end_filament_gcode = m_config.end_filament_gcode.get_at(old_extruder_id);
if (! end_filament_gcode.empty()) {
- gcode += placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id);
+ DynamicConfig config;
+ config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
+ config.set_key_value("layer_z", new ConfigOptionFloat(m_writer.get_position().z() - m_config.z_offset.value));
+ config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z));
+ config.set_key_value("filament_extruder_id", new ConfigOptionInt(int(old_extruder_id)));
+ gcode += placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id, &config);
check_add_eol(gcode);
}
}
@@ -3444,20 +3383,7 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z)
}
// convert a model-space scaled point into G-code coordinates
-Vec2d GCode::point_to_gcode(const Point &point) const
-{
- Vec2d extruder_offset = EXTRUDER_CONFIG(extruder_offset);
- return unscaled(point) + m_origin - extruder_offset;
-}
-
-Vec2d GCode::point_to_gcode_quantized(const Point &point) const
-{
- Vec2d p = this->point_to_gcode(point);
- return { GCodeFormatter::quantize_xyzf(p.x()), GCodeFormatter::quantize_xyzf(p.y()) };
-}
-
-// convert a model-space scaled point into G-code coordinates
-Point GCode::gcode_to_point(const Vec2d &point) const
+Point GCodeGenerator::gcode_to_point(const Vec2d &point) const
{
Vec2d pt = point - m_origin;
if (const Extruder *extruder = m_writer.extruder(); extruder)
diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp
index dbbfc1e6b9..ae1cc333b1 100644
--- a/src/libslic3r/GCode.hpp
+++ b/src/libslic3r/GCode.hpp
@@ -19,18 +19,22 @@
#include "JumpPointSearch.hpp"
#include "libslic3r.h"
#include "ExPolygon.hpp"
-#include "GCodeWriter.hpp"
#include "Layer.hpp"
#include "Point.hpp"
#include "PlaceholderParser.hpp"
#include "PrintConfig.hpp"
+#include "Geometry/ArcWelder.hpp"
#include "GCode/AvoidCrossingPerimeters.hpp"
#include "GCode/CoolingBuffer.hpp"
#include "GCode/FindReplace.hpp"
+#include "GCode/GCodeWriter.hpp"
+#include "GCode/PressureEqualizer.hpp"
#include "GCode/RetractWhenCrossingPerimeters.hpp"
+#include "GCode/SmoothPath.hpp"
#include "GCode/SpiralVase.hpp"
#include "GCode/ToolOrdering.hpp"
-#include "GCode/WipeTower.hpp"
+#include "GCode/Wipe.hpp"
+#include "GCode/WipeTowerIntegration.hpp"
#include "GCode/SeamPlacer.hpp"
#include "GCode/GCodeProcessor.hpp"
#include "EdgeGrid.hpp"
@@ -40,12 +44,12 @@
#include