Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_trafo_matrix_rebase

This commit is contained in:
enricoturri1966 2022-06-06 14:57:09 +02:00
commit 904e3a874e
23 changed files with 978 additions and 268 deletions

View File

@ -1,3 +1,5 @@
min_slic3r_version = 2.5.0-alpha0
0.1.5 Added Ender-3 S1 Pro
min_slic3r_version = 2.4.1 min_slic3r_version = 2.4.1
0.1.4 Added Ender-3 Pro. Added M25 support for some printers. 0.1.4 Added Ender-3 Pro. Added M25 support for some printers.
min_slic3r_version = 2.4.0-rc min_slic3r_version = 2.4.0-rc

View File

@ -5,7 +5,7 @@
name = Creality name = Creality
# Configuration version of this file. Config file will only be installed, if the config_version differs. # 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. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.1.4 config_version = 0.1.5
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -21,7 +21,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender3_bed.stl bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3BLTOUCH] [printer_model:ENDER3BLTOUCH]
name = Creality Ender-3 BLTouch name = Creality Ender-3 BLTouch
@ -30,7 +30,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender3_bed.stl bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3PRO] [printer_model:ENDER3PRO]
name = Creality Ender-3 Pro name = Creality Ender-3 Pro
@ -39,7 +39,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender3_bed.stl bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3V2] [printer_model:ENDER3V2]
name = Creality Ender-3 V2 name = Creality Ender-3 V2
@ -48,7 +48,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender3v2_bed.stl bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3S1] [printer_model:ENDER3S1]
name = Creality Ender-3 S1 name = Creality Ender-3 S1
@ -57,7 +57,16 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender3v2_bed.stl bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3S1PRO]
name = Creality Ender-3 S1 Pro
variants = 0.4
technology = FFF
family = ENDER
bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3MAX] [printer_model:ENDER3MAX]
name = Creality Ender-3 Max name = Creality Ender-3 Max
@ -66,7 +75,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = cr10v2_bed.stl bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER4] [printer_model:ENDER4]
name = Creality Ender-4 name = Creality Ender-4
@ -75,7 +84,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender3v2_bed.stl bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER5] [printer_model:ENDER5]
name = Creality Ender-5 name = Creality Ender-5
@ -84,7 +93,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender3_bed.stl bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER5PLUS] [printer_model:ENDER5PLUS]
name = Creality Ender-5 Plus name = Creality Ender-5 Plus
@ -93,7 +102,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender5plus_bed.stl bed_model = ender5plus_bed.stl
bed_texture = ender5plus.svg bed_texture = ender5plus.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER6] [printer_model:ENDER6]
name = Creality Ender-6 name = Creality Ender-6
@ -102,7 +111,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender6_bed.stl bed_model = ender6_bed.stl
bed_texture = ender6.svg bed_texture = ender6.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER7] [printer_model:ENDER7]
name = Creality Ender-7 name = Creality Ender-7
@ -111,7 +120,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender7_bed.stl bed_model = ender7_bed.stl
bed_texture = ender7.svg bed_texture = ender7.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER2] [printer_model:ENDER2]
name = Creality Ender-2 name = Creality Ender-2
@ -120,7 +129,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender2_bed.stl bed_model = ender2_bed.stl
bed_texture = ender2.svg bed_texture = ender2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER2PRO] [printer_model:ENDER2PRO]
name = Creality Ender-2 Pro name = Creality Ender-2 Pro
@ -129,7 +138,7 @@ technology = FFF
family = ENDER family = ENDER
bed_model = ender2pro_bed.stl bed_model = ender2pro_bed.stl
bed_texture = ender2pro.svg bed_texture = ender2pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR5PRO] [printer_model:CR5PRO]
name = Creality CR-5 Pro name = Creality CR-5 Pro
@ -138,7 +147,7 @@ technology = FFF
family = CR family = CR
bed_model = cr5pro_bed.stl bed_model = cr5pro_bed.stl
bed_texture = cr5pro.svg bed_texture = cr5pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR5PROH] [printer_model:CR5PROH]
name = Creality CR-5 Pro H name = Creality CR-5 Pro H
@ -147,7 +156,7 @@ technology = FFF
family = CR family = CR
bed_model = cr5pro_bed.stl bed_model = cr5pro_bed.stl
bed_texture = cr5pro.svg bed_texture = cr5pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR6SE] [printer_model:CR6SE]
name = Creality CR-6 SE name = Creality CR-6 SE
@ -156,7 +165,7 @@ technology = FFF
family = CR family = CR
bed_model = cr6se_bed.stl bed_model = cr6se_bed.stl
bed_texture = cr6se.svg bed_texture = cr6se.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR6MAX] [printer_model:CR6MAX]
name = Creality CR-6 Max name = Creality CR-6 Max
@ -165,7 +174,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10s4_bed.stl bed_model = cr10s4_bed.stl
bed_texture = cr10s4.svg bed_texture = cr10s4.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10SMART] [printer_model:CR10SMART]
name = Creality CR-10 SMART name = Creality CR-10 SMART
@ -174,7 +183,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10v2_bed.stl bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10MINI] [printer_model:CR10MINI]
name = Creality CR-10 Mini name = Creality CR-10 Mini
@ -183,7 +192,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10mini_bed.stl bed_model = cr10mini_bed.stl
bed_texture = cr10mini.svg bed_texture = cr10mini.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10MAX] [printer_model:CR10MAX]
name = Creality CR-10 Max name = Creality CR-10 Max
@ -192,7 +201,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10max_bed.stl bed_model = cr10max_bed.stl
bed_texture = cr10max.svg bed_texture = cr10max.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10] [printer_model:CR10]
name = Creality CR-10 name = Creality CR-10
@ -201,7 +210,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10_bed.stl bed_model = cr10_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10V2] [printer_model:CR10V2]
name = Creality CR-10 V2 name = Creality CR-10 V2
@ -210,7 +219,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10v2_bed.stl bed_model = cr10v2_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10V3] [printer_model:CR10V3]
name = Creality CR-10 V3 name = Creality CR-10 V3
@ -219,7 +228,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10v2_bed.stl bed_model = cr10v2_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10S] [printer_model:CR10S]
name = Creality CR-10 S name = Creality CR-10 S
@ -228,7 +237,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10_bed.stl bed_model = cr10_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10SPRO] [printer_model:CR10SPRO]
name = Creality CR-10 S Pro name = Creality CR-10 S Pro
@ -237,7 +246,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10v2_bed.stl bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10SPROV2] [printer_model:CR10SPROV2]
name = Creality CR-10 S Pro V2 name = Creality CR-10 S Pro V2
@ -246,7 +255,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10v2_bed.stl bed_model = cr10v2_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10S4] [printer_model:CR10S4]
name = Creality CR-10 S4 name = Creality CR-10 S4
@ -255,7 +264,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10s4_bed.stl bed_model = cr10s4_bed.stl
bed_texture = cr10s4.svg bed_texture = cr10s4.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10S5] [printer_model:CR10S5]
name = Creality CR-10 S5 name = Creality CR-10 S5
@ -264,7 +273,7 @@ technology = FFF
family = CR family = CR
bed_model = cr10s5_bed.stl bed_model = cr10s5_bed.stl
bed_texture = cr10s5.svg bed_texture = cr10s5.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR20] [printer_model:CR20]
name = Creality CR-20 name = Creality CR-20
@ -273,7 +282,7 @@ technology = FFF
family = CR family = CR
bed_model = ender3_bed.stl bed_model = ender3_bed.stl
bed_texture = cr20.svg bed_texture = cr20.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR20PRO] [printer_model:CR20PRO]
name = Creality CR-20 Pro name = Creality CR-20 Pro
@ -282,7 +291,7 @@ technology = FFF
family = CR family = CR
bed_model = ender3_bed.stl bed_model = ender3_bed.stl
bed_texture = cr20.svg bed_texture = cr20.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR200B] [printer_model:CR200B]
name = Creality CR-200B name = Creality CR-200B
@ -291,7 +300,7 @@ technology = FFF
family = CR family = CR
bed_model = cr200b_bed.stl bed_model = cr200b_bed.stl
bed_texture = cr200b.svg bed_texture = cr200b.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR8] [printer_model:CR8]
name = Creality CR-8 name = Creality CR-8
@ -300,7 +309,7 @@ technology = FFF
family = CR family = CR
bed_model = cr8_bed.stl bed_model = cr8_bed.stl
bed_texture = cr8.svg bed_texture = cr8.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
#[printer_model:CRX] #[printer_model:CRX]
#name = Creality CR-X #name = Creality CR-X
@ -309,7 +318,7 @@ default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @
#family = CR-X #family = CR-X
#bed_model = cr10v2_bed.stl #bed_model = cr10v2_bed.stl
#bed_texture = cr10spro.svg #bed_texture = cr10spro.svg
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY #default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
#[printer_model:CRXPRO] #[printer_model:CRXPRO]
#name = Creality CR-X Pro #name = Creality CR-X Pro
@ -318,7 +327,7 @@ default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @
#family = CR-X #family = CR-X
#bed_model = cr10v2_bed.stl #bed_model = cr10v2_bed.stl
#bed_texture = cr10spro.svg #bed_texture = cr10spro.svg
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY #default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:SERMOOND1] [printer_model:SERMOOND1]
name = Creality Sermoon-D1 name = Creality Sermoon-D1
@ -327,7 +336,7 @@ technology = FFF
family = SERMOON family = SERMOON
bed_model = sermoond1_bed.stl bed_model = sermoond1_bed.stl
bed_texture = sermoond1.svg bed_texture = sermoond1.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
# All presets starting with asterisk, for example *common*, are intermediate and they will # All presets starting with asterisk, for example *common*, are intermediate and they will
# not make it into the user interface. # not make it into the user interface.
@ -842,6 +851,17 @@ filament_cost = 27.44
filament_density = 1.29 filament_density = 1.29
filament_colour = #C7F935 filament_colour = #C7F935
[filament:Verbatim PLA @CREALITY]
inherits = *PLA*
filament_vendor = Verbatim
temperature = 205
bed_temperature = 60
first_layer_temperature = 210
first_layer_bed_temperature = 60
filament_cost = 22.99
filament_density = 1.24
filament_colour = #001ca8
# Common printer preset # Common printer preset
[printer:*common*] [printer:*common*]
printer_technology = FFF printer_technology = FFF
@ -989,6 +1009,13 @@ max_print_height = 270
printer_model = ENDER3S1 printer_model = ENDER3S1
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_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1 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_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1
[printer:Creality Ender-3 S1 Pro]
inherits = *common*; *pauseprint*; *spriteextruder*
bed_shape = 5x0,215x0,215x220,5x220
max_print_height = 270
printer_model = ENDER3S1PRO
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_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1PRO
[printer:Creality Ender-3 Max] [printer:Creality Ender-3 Max]
inherits = *common*; *pauseprint* inherits = *common*; *pauseprint*
retract_length = 6 retract_length = 6

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -1,4 +1,6 @@
min_slic3r_version = 2.3.1-beta min_slic3r_version = 2.5.0-alpha0
0.0.4 Improve Proton X profiles, Add Proton XE-750 printer
min_slic3r_version = 2.4.1
0.0.3 Set default filament profile. 0.0.3 Set default filament profile.
0.0.2 Improved start gcode, changed filename format 0.0.2 Improved start gcode, changed filename format
0.0.1 Initial version 0.0.1 Initial version

View File

@ -3,7 +3,7 @@
[vendor] [vendor]
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = INAT name = INAT
config_version = 0.0.3 config_version = 0.0.4
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/INAT/ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/INAT/
### ###
@ -24,9 +24,16 @@ technology = FFF
family = Proton family = Proton
default_materials = PLA @PROTON_X default_materials = PLA @PROTON_X
[printer_model:PROTON_XE750]
name = INAT Proton XE-750
variants = 0.4
technology = FFF
family = Proton
default_materials = PLA @PROTON_XE750
### ###
### QUALITY DEFINITIONS ### COMMON QUALITY DEFINITIONS
### ###
[print:*common*] [print:*common*]
@ -35,14 +42,15 @@ layer_height = 0.2
first_layer_height = 0.2 first_layer_height = 0.2
perimeters = 3 perimeters = 3
spiral_vase = 0 spiral_vase = 0
top_solid_layers = 4 top_solid_layers = 5
bottom_solid_layers = 3 bottom_solid_layers = 3
top_solid_min_thickness = 0.8 top_solid_min_thickness = 1
bottom_solid_min_thickness = 0.6 bottom_solid_min_thickness = 0.6
extra_perimeters = 1 extra_perimeters = 1
ensure_vertical_shell_thickness = 1 ensure_vertical_shell_thickness = 1
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
thin_walls = 0 thin_walls = 0
thick_bridges = 0
overhangs = 1 overhangs = 1
seam_position = aligned seam_position = aligned
external_perimeters_first = 0 external_perimeters_first = 0
@ -76,7 +84,9 @@ support_material_auto = 1
support_material_threshold = 0 support_material_threshold = 0
support_material_enforce_layers = 0 support_material_enforce_layers = 0
raft_layers = 0 raft_layers = 0
support_material_contact_distance = 0.2 support_material_style = grid
support_material_contact_distance = 0.25
support_material_bottom_contact_distance = 0.3
support_material_pattern = rectilinear support_material_pattern = rectilinear
support_material_with_sheath = 0 support_material_with_sheath = 0
support_material_spacing = 5 support_material_spacing = 5
@ -92,8 +102,8 @@ perimeter_speed = 60
small_perimeter_speed = 75% small_perimeter_speed = 75%
external_perimeter_speed = 50% external_perimeter_speed = 50%
infill_speed = 80 infill_speed = 80
solid_infill_speed = 100% solid_infill_speed = 80%
top_solid_infill_speed = 30 top_solid_infill_speed = 20
support_material_speed = 80 support_material_speed = 80
support_material_interface_speed = 100% support_material_interface_speed = 100%
bridge_speed = 60 bridge_speed = 60
@ -126,7 +136,7 @@ infill_overlap = 25%
bridge_flow_ratio = 1 bridge_flow_ratio = 1
slice_closing_radius = 0.049 slice_closing_radius = 0.049
resolution = 0 resolution = 0
xy_size_compensation = 0 xy_size_compensation = -0.05
elefant_foot_compensation = 0.3 elefant_foot_compensation = 0.3
clip_multipart_objects = 0 clip_multipart_objects = 0
#output #output
@ -138,47 +148,50 @@ gcode_label_objects = 0
output_filename_format = {input_filename_base}_{filament_type[0]}.gcode output_filename_format = {input_filename_base}_{filament_type[0]}.gcode
[print:0.2mm Standard @PROTON_X] [print:*common 0.2mm Standard @INAT*]
inherits = *common* inherits = *common*
[print:0.2mm Strong @PROTON_X] [print:*common 0.2mm Strong @INAT*]
inherits = *common* inherits = *common*
fill_density = 50% fill_density = 50%
perimeters = 6 perimeters = 6
[print:0.2mm Advanced Material @PROTON_X] [print:*common 0.2mm Advanced Material @INAT*]
inherits = *common* inherits = *common*
bottom_solid_layers = 5 bottom_solid_layers = 5
top_solid_layers = 6 top_solid_layers = 6
skirts = 0 skirts = 0
brim_width = 30 brim_width = 20
infill_speed = 60 infill_speed = 60
support_material_speed = 60 support_material_speed = 60
travel_speed = 100 travel_speed = 100
first_layer_speed = 20 first_layer_speed = 20
elefant_foot_compensation = 0 elefant_foot_compensation = 0
[print:0.12mm Fine @PROTON_X] [print:*common 0.12mm Fine @INAT*]
inherits = *common* inherits = *common*
layer_height = 0.12
bottom_solid_layers = 7 bottom_solid_layers = 7
top_solid_layers = 7 top_solid_layers = 7
infill_every_layers = 2 infill_every_layers = 2
perimeter_speed = 50 perimeter_speed = 50
infill_speed = 50 infill_speed = 50
[print:0.32mm Draft @PROTON_X] [print:*common 0.32mm Draft @INAT*]
inherits = *common* inherits = *common*
layer_height = 0.32
perimeter_speed = 80 perimeter_speed = 80
external_perimeter_speed = 75% external_perimeter_speed = 75%
infill_speed = 100 infill_speed = 100
top_solid_infill_speed = 60 top_solid_infill_speed = 60
fill_density = 15% fill_density = 15%
support_material_style = snug
### ###
### PRINTER DEFINITIONS ### COMMON PRINTER DEFINITIONS
### ###
[printer:*common*] [printer:*proton_x_common*]
printer_vendor = INAT s.r.o. printer_vendor = INAT s.r.o.
default_filament_profile = "PLA @PROTON_X" default_filament_profile = "PLA @PROTON_X"
#general #general
@ -206,14 +219,14 @@ machine_max_feedrate_z = 10,10
machine_max_feedrate_e = 100,100 machine_max_feedrate_e = 100,100
machine_max_acceleration_x = 500,500 machine_max_acceleration_x = 500,500
machine_max_acceleration_y = 500,500 machine_max_acceleration_y = 500,500
machine_max_acceleration_z = 100,100 machine_max_acceleration_z = 200,200
machine_max_acceleration_e = 2000,2000 machine_max_acceleration_e = 8000,8000
machine_max_acceleration_extruding = 1000,1000 machine_max_acceleration_extruding = 1000,1000
machine_max_acceleration_retracting = 1500,1500 machine_max_acceleration_retracting = 8000,8000
machine_max_jerk_x = 8,8 machine_max_jerk_x = 8,8
machine_max_jerk_y = 8,8 machine_max_jerk_y = 8,8
machine_max_jerk_z = 1,1 machine_max_jerk_z = 3,3
machine_max_jerk_e = 2.5,2.5 machine_max_jerk_e = 10,10
machine_min_extruding_rate = 5 machine_min_extruding_rate = 5
#extruder 1 #extruder 1
nozzle_diameter = 0.4 nozzle_diameter = 0.4
@ -233,24 +246,65 @@ wipe = 1
retract_before_wipe = 100% retract_before_wipe = 100%
[printer:Proton X Rail] [printer:*proton_xe750_common*]
inherits = *common* printer_vendor = INAT s.r.o.
printer_model = PROTON_X_RAIL default_filament_profile = "PLA @PROTON_XE750"
printer_variant = 0.4 #general
default_print_profile = 0.2mm Standard @PROTON_X printer_technology = FFF
gcode_flavor = marlin bed_shape = 0x0,600x0,600x500,0x500
machine_max_acceleration_y = 800,800 max_print_height = 750
z_offset = 0
[printer:Proton X Rod] extruders_count = 2
inherits = *common*
printer_model = PROTON_X_ROD
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_X
gcode_flavor = marlin gcode_flavor = marlin
silent_mode = 0
remaining_times = 1
use_relative_e_distances = 0
use_firmware_retraction = 0
use_volumetric_e = 0
variable_layer_height = 1
#gcodes
start_gcode = G28 ;Home\nG0 Z10 F1000\nG29\nG0 X0 Y0 Z30 F6000\nM84 E\nM0\nG1 Z15.0 F6000 ;Move the platform down 15mm\n
end_gcode = M400\nM104 S0\nM140 S0\nM107\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X R5\nG0 Y300 F2000\nM84\nG4 S180\nM81 S30\n
color_change_gcode = M600
#limits
machine_limits_usage = emit_to_gcode
machine_max_feedrate_x = 200,200
machine_max_feedrate_y = 200,200
machine_max_feedrate_z = 10,10
machine_max_feedrate_e = 100,100
machine_max_acceleration_x = 1500,1500
machine_max_acceleration_y = 1500,1500
machine_max_acceleration_z = 500,500
machine_max_acceleration_e = 20000,20000
machine_max_acceleration_extruding = 2000,2000
machine_max_acceleration_retracting = 8000,8000
machine_max_jerk_x = 12,12
machine_max_jerk_y = 12,12
machine_max_jerk_z = 3,3
machine_max_jerk_e = 20,20
machine_min_extruding_rate = 5
#extruder 1
nozzle_diameter = 0.4,0.4
min_layer_height = 0.05,0.05
max_layer_height = 0.33,0.33
extruder_offset = 0x0,0x0
retract_length = 1.5,1.5
retract_lift = 0.6,0.6
retract_lift_above = 0,0
retract_lift_below = 0,0
retract_speed = 45,45
deretract_speed = 0,0
retract_restart_extra = 0,0
retract_before_travel = 2,2
retract_layer_change = 0,0
wipe = 1,1
retract_before_wipe = 100%,100%
retract_length_toolchange = 37,37
extruder_colour = #33CC33;#3399FF
### ###
### MATERIAL DEFINITIONS ### COMMON MATERIAL DEFINITIONS
### ###
[filament:*common*] [filament:*common*]
@ -272,7 +326,7 @@ min_print_speed = 10
filament_soluble = 0 filament_soluble = 0
[filament:PLA @PROTON_X] [filament:*common PLA @INAT*]
inherits = *common* inherits = *common*
temperature = 210 temperature = 210
bed_temperature = 60 bed_temperature = 60
@ -281,11 +335,12 @@ first_layer_bed_temperature = 60
filament_type = PLA filament_type = PLA
filament_cost = 20 filament_cost = 20
filament_density = 1.25 filament_density = 1.25
fan_always_on = 1
min_fan_speed = 50 min_fan_speed = 50
max_fan_speed = 100 max_fan_speed = 100
[filament:PETG @PROTON_X] [filament:*common PETG @INAT*]
inherits = *common* inherits = *common*
temperature = 240 temperature = 240
bed_temperature = 80 bed_temperature = 80
@ -294,10 +349,11 @@ first_layer_bed_temperature = 80
filament_type = PETG filament_type = PETG
filament_cost = 25 filament_cost = 25
filament_density = 1.27 filament_density = 1.27
min_fan_speed = 0 fan_always_on = 1
min_fan_speed = 25
max_fan_speed = 50 max_fan_speed = 50
[filament:ABS @PROTON_X] [filament:*common ABS @INAT*]
inherits = *common* inherits = *common*
temperature = 235 temperature = 235
bed_temperature = 100 bed_temperature = 100
@ -309,7 +365,7 @@ filament_density = 1.01
cooling = 0 cooling = 0
bridge_fan_speed = 0 bridge_fan_speed = 0
[filament:ASA @PROTON_X] [filament:*common ASA @INAT*]
inherits = *common* inherits = *common*
temperature = 240 temperature = 240
bed_temperature = 110 bed_temperature = 110
@ -320,7 +376,7 @@ filament_cost = 22
filament_density = 1.07 filament_density = 1.07
cooling = 0 cooling = 0
[filament:TPE @PROTON_X] [filament:*common TPE @INAT*]
inherits = *common* inherits = *common*
temperature = 220 temperature = 220
bed_temperature = 40 bed_temperature = 40
@ -334,7 +390,7 @@ max_fan_speed = 50
filament_retract_length = 0.8 filament_retract_length = 0.8
filament_retract_speed = 25 filament_retract_speed = 25
[filament:HIPS @PROTON_X] [filament:*common HIPS @INAT*]
inherits = *common* inherits = *common*
temperature = 245 temperature = 245
bed_temperature = 100 bed_temperature = 100
@ -347,7 +403,7 @@ min_fan_speed = 0
max_fan_speed = 50 max_fan_speed = 50
filament_soluble = 1 filament_soluble = 1
[filament:Nylon @PROTON_X] [filament:*common Nylon @INAT*]
inherits = *common* inherits = *common*
temperature = 235 temperature = 235
bed_temperature = 130 bed_temperature = 130
@ -359,19 +415,19 @@ filament_density = 1.01
cooling = 0 cooling = 0
bridge_fan_speed = 0 bridge_fan_speed = 0
[filament:PC @PROTON_X] [filament:*common PC @INAT*]
inherits = *common* inherits = *common*
temperature = 270 temperature = 270
bed_temperature = 130 bed_temperature = 115
first_layer_temperature = 270 first_layer_temperature = 270
first_layer_bed_temperature = 130 first_layer_bed_temperature = 115
filament_type = PC filament_type = PC
filament_cost = 65 filament_cost = 65
filament_density = 1.19 filament_density = 1.19
cooling = 0 cooling = 0
bridge_fan_speed = 0 bridge_fan_speed = 0
[filament:CPE @PROTON_X] [filament:*common CPE @INAT*]
inherits = *common* inherits = *common*
temperature = 280 temperature = 280
bed_temperature = 90 bed_temperature = 90
@ -383,7 +439,7 @@ filament_density = 1.27
cooling = 0 cooling = 0
bridge_fan_speed = 0 bridge_fan_speed = 0
[filament:PEEK @PROTON_X] [filament:*common PEEK @INAT*]
inherits = *common* inherits = *common*
temperature = 440 temperature = 440
bed_temperature = 150 bed_temperature = 150
@ -395,7 +451,7 @@ filament_density = 1.3
cooling = 0 cooling = 0
bridge_fan_speed = 0 bridge_fan_speed = 0
[filament:PEI @PROTON_X] [filament:*common PEI @INAT*]
inherits = *common* inherits = *common*
temperature = 400 temperature = 400
bed_temperature = 150 bed_temperature = 150
@ -407,7 +463,7 @@ filament_density = 1.27
cooling = 0 cooling = 0
bridge_fan_speed = 0 bridge_fan_speed = 0
[filament:Polymaker PolyMide CoPA @PROTON_X] [filament:*common Polymaker PolyMide CoPA @INAT*]
inherits = *common* inherits = *common*
filament_vendor = Polymaker filament_vendor = Polymaker
temperature = 265 temperature = 265
@ -419,7 +475,7 @@ filament_cost = 93
filament_density = 1.12 filament_density = 1.12
cooling = 0 cooling = 0
[filament:Polymaker PolyMide PA6-CF @PROTON_X] [filament:*common Polymaker PolyMide PA6-CF @INAT*]
inherits = *common* inherits = *common*
filament_vendor = Polymaker filament_vendor = Polymaker
temperature = 300 temperature = 300
@ -431,7 +487,7 @@ filament_cost = 95
filament_density = 1.17 filament_density = 1.17
cooling = 0 cooling = 0
[filament:Polymaker PolyMide PA6-GF @PROTON_X] [filament:*common Polymaker PolyMide PA6-GF @INAT*]
inherits = *common* inherits = *common*
filament_vendor = Polymaker filament_vendor = Polymaker
temperature = 300 temperature = 300
@ -443,20 +499,21 @@ filament_cost = 95
filament_density = 1.2 filament_density = 1.2
cooling = 0 cooling = 0
[filament:Devil Design PETG @PROTON_X] [filament:*common Devil Design PETG @INAT*]
inherits = *common* inherits = *common*
filament_vendor = Devil Design filament_vendor = Devil Design
temperature = 250 temperature = 245
bed_temperature = 80 bed_temperature = 80
first_layer_temperature = 250 first_layer_temperature = 245
first_layer_bed_temperature = 80 first_layer_bed_temperature = 80
filament_type = PETG filament_type = PETG
filament_cost = 22 filament_cost = 22
filament_density = 1.23 filament_density = 1.23
min_fan_speed = 0 fan_always_on = 1
min_fan_speed = 25
max_fan_speed = 50 max_fan_speed = 50
[filament:Filament PM PETG FRJet @PROTON_X] [filament:*common Filament PM PETG FRJet @INAT*]
inherits = *common* inherits = *common*
filament_vendor = Filament PM filament_vendor = Filament PM
temperature = 250 temperature = 250
@ -467,3 +524,207 @@ filament_type = PETG
filament_cost = 45.5 filament_cost = 45.5
filament_density = 1.27 filament_density = 1.27
cooling = 0 cooling = 0
######
###### PROTON X PRINTERS
######
[printer:Proton X Rail]
inherits = *proton_x_common*
printer_model = PROTON_X_RAIL
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_X
gcode_flavor = marlin
machine_max_acceleration_x = 800,800
machine_max_acceleration_y = 800,800
machine_max_jerk_x = 10,10
machine_max_jerk_y = 10,10
[printer:Proton X Rod]
inherits = *proton_x_common*
printer_model = PROTON_X_ROD
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_X
gcode_flavor = marlin
[print:0.2mm Standard @PROTON_X]
inherits = *common 0.2mm Standard @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.2mm Strong @PROTON_X]
inherits = *common 0.2mm Strong @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.2mm Advanced Material @PROTON_X]
inherits = *common 0.2mm Advanced Material @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.12mm Fine @PROTON_X]
inherits = *common 0.12mm Fine @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.32mm Draft @PROTON_X]
inherits = *common 0.32mm Draft @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PLA @PROTON_X]
inherits =*common PLA @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PETG @PROTON_X]
inherits =*common PETG @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:ABS @PROTON_X]
inherits =*common ABS @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:ASA @PROTON_X]
inherits =*common ASA @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:TPE @PROTON_X]
inherits =*common TPE @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:HIPS @PROTON_X]
inherits =*common HIPS @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Nylon @PROTON_X]
inherits =*common Nylon @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PC @PROTON_X]
inherits =*common PC @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:CPE @PROTON_X]
inherits =*common CPE @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PEEK @PROTON_X]
inherits =*common PEEK @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PEI @PROTON_X]
inherits =*common PEI @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Polymaker PolyMide CoPA @PROTON_X]
inherits =*common Polymaker PolyMide CoPA @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Polymaker PolyMide PA6-CF @PROTON_X]
inherits =*common Polymaker PolyMide PA6-CF @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Polymaker PolyMide PA6-GF @PROTON_X]
inherits =*common Polymaker PolyMide PA6-GF @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Devil Design PETG @PROTON_X]
inherits =*common Devil Design PETG @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Filament PM PETG FRJet @PROTON_X]
inherits =*common Filament PM PETG FRJet @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
######### #########
######### Proton XE 750 #########
######### #########
[printer:Proton XE-750]
inherits = *proton_xe750_common*
printer_model = PROTON_XE750
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_XE750
gcode_flavor = marlin
[print:0.2mm Standard @PROTON_XE750]
inherits = *common 0.2mm Standard @INAT*
compatible_printers = "Proton XE-750"
[print:0.2mm Strong @PROTON_XE750]
inherits = *common 0.2mm Strong @INAT*
compatible_printers = "Proton XE-750"
[print:0.2mm Advanced Material @PROTON_XE750]
inherits = *common 0.2mm Advanced Material @INAT*
compatible_printers = "Proton XE-750"
[print:0.12mm Fine @PROTON_XE750]
inherits = *common 0.12mm Fine @INAT*
compatible_printers = "Proton XE-750"
[print:0.32mm Draft @PROTON_XE750]
inherits = *common 0.32mm Draft @INAT*
compatible_printers = "Proton XE-750"
[filament:*start_end_gcode @PROTON_XE750*]
start_filament_gcode = "; Filament start gcode BEGIN\nM104 S[temperature[current_extruder]]\nG4 S20\n; Filament start gcode END\n"
end_filament_gcode = "; Filament end gcode BEGIN\nG0 X-5 Y250 F10000\nM104 S{temperature[current_extruder] - 50}\n; Filament end gcode END\n"
compatible_printers = "Proton XE-750"
[filament:PLA @PROTON_XE750]
inherits =*common PLA @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PETG @PROTON_XE750]
inherits =*common PETG @INAT*; *start_end_gcode @PROTON_XE750*
[filament:ABS @PROTON_XE750]
inherits =*common ABS @INAT*; *start_end_gcode @PROTON_XE750*
[filament:ASA @PROTON_XE750]
inherits =*common ASA @INAT*; *start_end_gcode @PROTON_XE750*
[filament:TPE @PROTON_XE750]
inherits =*common TPE @INAT*; *start_end_gcode @PROTON_XE750*
[filament:HIPS @PROTON_XE750]
inherits =*common HIPS @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Nylon @PROTON_XE750]
inherits =*common Nylon @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PC @PROTON_XE750]
inherits =*common PC @INAT*; *start_end_gcode @PROTON_XE750*
[filament:CPE @PROTON_XE750]
inherits =*common CPE @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PEEK @PROTON_XE750]
inherits =*common PEEK @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PEI @PROTON_XE750]
inherits =*common PEI @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Polymaker PolyMide CoPA @PROTON_XE750]
inherits =*common Polymaker PolyMide CoPA @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Polymaker PolyMide PA6-CF @PROTON_XE750]
inherits =*common Polymaker PolyMide PA6-CF @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Polymaker PolyMide PA6-GF @PROTON_XE750]
inherits =*common Polymaker PolyMide PA6-GF @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Devil Design PETG @PROTON_XE750]
inherits =*common Devil Design PETG @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Filament PM PETG FRJet @PROTON_XE750]
inherits =*common Filament PM PETG FRJet @INAT*; *start_end_gcode @PROTON_XE750*

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -1,11 +1,12 @@
#ifndef ASTAR_HPP #ifndef ASTAR_HPP
#define ASTAR_HPP #define ASTAR_HPP
#include <cmath> // std::isinf() is here
#include <unordered_map>
#include "libslic3r/Point.hpp" #include "libslic3r/Point.hpp"
#include "libslic3r/MutablePriorityQueue.hpp" #include "libslic3r/MutablePriorityQueue.hpp"
#include <unordered_map>
namespace Slic3r { namespace astar { namespace Slic3r { namespace astar {
// Input interface for the Astar algorithm. Specialize this struct for a // Input interface for the Astar algorithm. Specialize this struct for a
@ -34,6 +35,8 @@ template<class T> struct TracerTraits_
// Get the estimated distance heuristic from node 'n' to the destination. // Get the estimated distance heuristic from node 'n' to the destination.
// This is referred to as the h value in AStar context. // This is referred to as the h value in AStar context.
// If node 'n' is the goal, this function should return a negative value. // If node 'n' is the goal, this function should return a negative value.
// Note that this heuristic should be admissible (never bigger than the real
// cost) in order for Astar to work.
static float goal_heuristic(const T &tracer, const Node &n) static float goal_heuristic(const T &tracer, const Node &n)
{ {
return tracer.goal_heuristic(n); return tracer.goal_heuristic(n);
@ -50,131 +53,132 @@ template<class T> struct TracerTraits_
template<class T> template<class T>
using TracerNodeT = typename TracerTraits_<remove_cvref_t<T>>::Node; using TracerNodeT = typename TracerTraits_<remove_cvref_t<T>>::Node;
namespace detail { constexpr size_t Unassigned = size_t(-1);
// Helper functions dispatching calls through the TracerTraits_ interface
template<class T> using TracerTraits = TracerTraits_<remove_cvref_t<T>>; template<class Tracer>
struct QNode // Queue node. Keeps track of scores g, and h
template<class T, class Fn>
void foreach_reachable(const T &tracer, const TracerNodeT<T> &from, Fn &&fn)
{ {
TracerTraits<T>::foreach_reachable(tracer, from, fn); TracerNodeT<Tracer> node; // The actual node itself
} size_t queue_id; // Position in the open queue or Unassigned if closed
size_t parent; // unique id of the parent or Unassigned
template<class T> float g, h;
float trace_distance(const T &tracer, const TracerNodeT<T> &a, const TracerNodeT<T> &b) float f() const { return g + h; }
{
return TracerTraits<T>::distance(tracer, a, b);
}
template<class T> QNode(TracerNodeT<Tracer> n = {},
float goal_heuristic(const T &tracer, const TracerNodeT<T> &n) size_t p = Unassigned,
{ float gval = std::numeric_limits<float>::infinity(),
return TracerTraits<T>::goal_heuristic(tracer, n); float hval = 0.f)
} : node{std::move(n)}, parent{p}, queue_id{Unassigned}, g{gval}, h{hval}
{}
template<class T> };
size_t unique_id(const T &tracer, const TracerNodeT<T> &n)
{
return TracerTraits<T>::unique_id(tracer, n);
}
} // namespace astar_detail
// Run the AStar algorithm on a tracer implementation. // Run the AStar algorithm on a tracer implementation.
// The 'tracer' argument encapsulates the domain (grid, point cloud, etc...) // The 'tracer' argument encapsulates the domain (grid, point cloud, etc...)
// The 'source' argument is the starting node. // The 'source' argument is the starting node.
// The 'out' argument is the output iterator into which the output nodes are // The 'out' argument is the output iterator into which the output nodes are
// written. // written. For performance reasons, the order is reverse, from the destination
// Note that no destination node is given. The tracer's goal_heuristic() method // to the source -- (destination included, source is not).
// should return a negative value if a node is a destination node. // The 'cached_nodes' argument is an optional associative container to hold a
template<class Tracer, class It> // QNode entry for each visited node. Any compatible container can be used
bool search_route(const Tracer &tracer, const TracerNodeT<Tracer> &source, It out) // (like std::map or maps with different allocators, even a sufficiently large
// std::vector).
//
// Note that no destination node is given in the signature. The tracer's
// goal_heuristic() method should return a negative value if a node is a
// destination node.
template<class Tracer,
class It,
class NodeMap = std::unordered_map<size_t, QNode<Tracer>>>
bool search_route(const Tracer &tracer,
const TracerNodeT<Tracer> &source,
It out,
NodeMap &&cached_nodes = {})
{ {
using namespace detail; using Node = TracerNodeT<Tracer>;
using QNode = QNode<Tracer>;
using TracerTraits = TracerTraits_<remove_cvref_t<Tracer>>;
using Node = TracerNodeT<Tracer>; struct LessPred { // Comparison functor needed by the priority queue
enum class QueueType { Open, Closed, None }; NodeMap &m;
struct QNode // Queue node. Keeps track of scores g, and h
{
Node node; // The actual node itself
QueueType qtype = QueueType::None; // Which queue holds this node
float g = 0.f, h = 0.f;
float f() const { return g + h; }
};
// TODO: apply a linear memory allocator
using QMap = std::unordered_map<size_t, QNode>;
// The traversed nodes are stored here encapsulated in QNodes
QMap cached_nodes;
struct LessPred { // Comparison functor needed by MutablePriorityQueue
QMap &m;
bool operator ()(size_t node_a, size_t node_b) { bool operator ()(size_t node_a, size_t node_b) {
auto ait = m.find(node_a); return m[node_a].f() < m[node_b].f();
auto bit = m.find(node_b);
assert (ait != m.end() && bit != m.end());
return ait->second.f() < bit->second.f();
} }
}; };
auto qopen = auto qopen = make_mutable_priority_queue<size_t, true>(
make_mutable_priority_queue<size_t, false>([](size_t, size_t){}, [&cached_nodes](size_t el, size_t qidx) {
LessPred{cached_nodes}); cached_nodes[el].queue_id = qidx;
},
LessPred{cached_nodes});
auto qclosed = QNode initial{source, /*parent = */ Unassigned, /*g = */0.f};
make_mutable_priority_queue<size_t, false>([](size_t, size_t){}, size_t source_id = TracerTraits::unique_id(tracer, source);
LessPred{cached_nodes}); cached_nodes[source_id] = initial;
qopen.push(source_id);
QNode initial{source, QueueType::Open}; size_t goal_id = TracerTraits::goal_heuristic(tracer, source) < 0.f ?
cached_nodes.insert({unique_id(tracer, source), initial}); source_id :
qopen.push(unique_id(tracer, source)); Unassigned;
bool goal_reached = false; while (goal_id == Unassigned && !qopen.empty()) {
while (!goal_reached && !qopen.empty()) {
size_t q_id = qopen.top(); size_t q_id = qopen.top();
qopen.pop(); qopen.pop();
QNode q = cached_nodes.at(q_id); QNode &q = cached_nodes[q_id];
foreach_reachable(tracer, q.node, [&](const Node &nd) { // This should absolutely be initialized in the cache already
if (goal_reached) return goal_reached; assert(!std::isinf(q.g));
TracerTraits::foreach_reachable(tracer, q.node, [&](const Node &succ_nd) {
if (goal_id != Unassigned)
return true;
float h = TracerTraits::goal_heuristic(tracer, succ_nd);
float dst = TracerTraits::distance(tracer, q.node, succ_nd);
size_t succ_id = TracerTraits::unique_id(tracer, succ_nd);
QNode qsucc_nd{succ_nd, q_id, q.g + dst, h};
float h = goal_heuristic(tracer, nd);
if (h < 0.f) { if (h < 0.f) {
goal_reached = true; goal_id = succ_id;
cached_nodes[succ_id] = qsucc_nd;
} else { } else {
float dst = trace_distance(tracer, q.node, nd); // If succ_id is not in cache, it gets created with g = infinity
QNode qnd{nd, QueueType::None, q.g + dst, h}; QNode &prev_nd = cached_nodes[succ_id];
size_t qnd_id = unique_id(tracer, nd);
auto it = cached_nodes.find(qnd_id); if (qsucc_nd.g < prev_nd.g) {
// new route is better, apply it:
if (it == cached_nodes.end() || // Save the old queue id, it would be lost after the next line
(it->second.qtype != QueueType::None && qnd.f() < it->second.f())) { size_t queue_id = prev_nd.queue_id;
qnd.qtype = QueueType::Open;
cached_nodes.insert_or_assign(qnd_id, qnd); // The cache needs to be updated either way
qopen.push(qnd_id); prev_nd = qsucc_nd;
if (queue_id == decltype(qopen)::invalid_id())
// was in closed or unqueued, rescheduling
qopen.push(succ_id);
else // was in open, updating
qopen.update(queue_id);
} }
} }
return goal_reached; return goal_id != Unassigned;
}); });
q.qtype = QueueType::Closed;
cached_nodes.insert_or_assign(q_id, q);
qclosed.push(q_id);
// write the output
*out = q.node;
++out;
} }
return goal_reached; // Write the output, do not reverse. Clients can do so if they need to.
if (goal_id != Unassigned) {
const QNode *q = &cached_nodes[goal_id];
while (q->parent != Unassigned) {
assert(!std::isinf(q->g)); // Uninitialized nodes are NOT allowed
*out = q->node;
++out;
q = &cached_nodes[q->parent];
}
}
return goal_id != Unassigned;
} }
}} // namespace Slic3r::astar }} // namespace Slic3r::astar

View File

@ -230,8 +230,13 @@ static std::string appconfig_md5_hash_line(const std::string_view data)
return "# MD5 checksum " + md5_digest_str + "\n"; return "# MD5 checksum " + md5_digest_str + "\n";
}; };
struct ConfigFileInfo {
bool correct_checksum {false};
bool contains_null {false};
};
// Assume that the last line with the comment inside the config file contains a checksum and that the user didn't modify the config file. // Assume that the last line with the comment inside the config file contains a checksum and that the user didn't modify the config file.
static bool verify_config_file_checksum(boost::nowide::ifstream &ifs) static ConfigFileInfo check_config_file_and_verify_checksum(boost::nowide::ifstream &ifs)
{ {
auto read_whole_config_file = [&ifs]() -> std::string { auto read_whole_config_file = [&ifs]() -> std::string {
std::stringstream ss; std::stringstream ss;
@ -240,7 +245,8 @@ static bool verify_config_file_checksum(boost::nowide::ifstream &ifs)
}; };
ifs.seekg(0, boost::nowide::ifstream::beg); ifs.seekg(0, boost::nowide::ifstream::beg);
std::string whole_config = read_whole_config_file(); const std::string whole_config = read_whole_config_file();
const bool contains_null = whole_config.find_first_of('\0') != std::string::npos;
// The checksum should be on the last line in the config file. // The checksum should be on the last line in the config file.
if (size_t last_comment_pos = whole_config.find_last_of('#'); last_comment_pos != std::string::npos) { if (size_t last_comment_pos = whole_config.find_last_of('#'); last_comment_pos != std::string::npos) {
@ -249,9 +255,9 @@ static bool verify_config_file_checksum(boost::nowide::ifstream &ifs)
// When the checksum isn't found, the checksum was not saved correctly, it was removed or it is an older config file without the checksum. // When the checksum isn't found, the checksum was not saved correctly, it was removed or it is an older config file without the checksum.
// If the checksum is incorrect, then the file was either not saved correctly or modified. // If the checksum is incorrect, then the file was either not saved correctly or modified.
if (std::string_view(whole_config.c_str() + last_comment_pos, whole_config.size() - last_comment_pos) == appconfig_md5_hash_line({ whole_config.data(), last_comment_pos })) if (std::string_view(whole_config.c_str() + last_comment_pos, whole_config.size() - last_comment_pos) == appconfig_md5_hash_line({ whole_config.data(), last_comment_pos }))
return true; return {true, contains_null};
} }
return false; return {false, contains_null};
} }
#endif #endif
@ -269,14 +275,25 @@ std::string AppConfig::load(const std::string &path)
ifs.open(path); ifs.open(path);
#ifdef WIN32 #ifdef WIN32
// Verify the checksum of the config file without taking just for debugging purpose. // Verify the checksum of the config file without taking just for debugging purpose.
if (!verify_config_file_checksum(ifs)) const ConfigFileInfo config_file_info = check_config_file_and_verify_checksum(ifs);
BOOST_LOG_TRIVIAL(info) << "The configuration file " << path << if (!config_file_info.correct_checksum)
" has a wrong MD5 checksum or the checksum is missing. This may indicate a file corruption or a harmless user edit."; BOOST_LOG_TRIVIAL(info)
<< "The configuration file " << path
<< " has a wrong MD5 checksum or the checksum is missing. This may indicate a file corruption or a harmless user edit.";
if (!config_file_info.correct_checksum && config_file_info.contains_null) {
BOOST_LOG_TRIVIAL(info) << "The configuration file " + path + " is corrupted, because it is contains null characters.";
throw Slic3r::CriticalException("The configuration file contains null characters.");
}
ifs.seekg(0, boost::nowide::ifstream::beg); ifs.seekg(0, boost::nowide::ifstream::beg);
#endif #endif
pt::read_ini(ifs, tree); try {
} catch (pt::ptree_error& ex) { pt::read_ini(ifs, tree);
} catch (pt::ptree_error &ex) {
throw Slic3r::CriticalException(ex.what());
}
} catch (Slic3r::CriticalException &ex) {
#ifdef WIN32 #ifdef WIN32
// The configuration file is corrupted, try replacing it with the backup configuration. // The configuration file is corrupted, try replacing it with the backup configuration.
ifs.close(); ifs.close();
@ -284,29 +301,29 @@ std::string AppConfig::load(const std::string &path)
if (boost::filesystem::exists(backup_path)) { if (boost::filesystem::exists(backup_path)) {
// Compute checksum of the configuration backup file and try to load configuration from it when the checksum is correct. // Compute checksum of the configuration backup file and try to load configuration from it when the checksum is correct.
boost::nowide::ifstream backup_ifs(backup_path); boost::nowide::ifstream backup_ifs(backup_path);
if (!verify_config_file_checksum(backup_ifs)) { if (const ConfigFileInfo config_file_info = check_config_file_and_verify_checksum(backup_ifs); !config_file_info.correct_checksum || config_file_info.contains_null) {
BOOST_LOG_TRIVIAL(error) << format("Both \"%1%\" and \"%2%\" are corrupted. It isn't possible to restore configuration from the backup.", path, backup_path); BOOST_LOG_TRIVIAL(error) << format(R"(Both "%1%" and "%2%" are corrupted. It isn't possible to restore configuration from the backup.)", path, backup_path);
backup_ifs.close(); backup_ifs.close();
boost::filesystem::remove(backup_path); boost::filesystem::remove(backup_path);
} else if (std::string error_message; copy_file(backup_path, path, error_message, false) != SUCCESS) { } else if (std::string error_message; copy_file(backup_path, path, error_message, false) != SUCCESS) {
BOOST_LOG_TRIVIAL(error) << format("Configuration file \"%1%\" is corrupted. Failed to restore from backup \"%2%\": %3%", path, backup_path, error_message); BOOST_LOG_TRIVIAL(error) << format(R"(Configuration file "%1%" is corrupted. Failed to restore from backup "%2%": %3%)", path, backup_path, error_message);
backup_ifs.close(); backup_ifs.close();
boost::filesystem::remove(backup_path); boost::filesystem::remove(backup_path);
} else { } else {
BOOST_LOG_TRIVIAL(info) << format("Configuration file \"%1%\" was corrupted. It has been succesfully restored from the backup \"%2%\".", path, backup_path); BOOST_LOG_TRIVIAL(info) << format(R"(Configuration file "%1%" was corrupted. It has been successfully restored from the backup "%2%".)", path, backup_path);
// Try parse configuration file after restore from backup. // Try parse configuration file after restore from backup.
try { try {
ifs.open(path); ifs.open(path);
pt::read_ini(ifs, tree); pt::read_ini(ifs, tree);
recovered = true; recovered = true;
} catch (pt::ptree_error& ex) { } catch (pt::ptree_error& ex) {
BOOST_LOG_TRIVIAL(info) << format("Failed to parse configuration file \"%1%\" after it has been restored from backup: %2%", path, ex.what()); BOOST_LOG_TRIVIAL(info) << format(R"(Failed to parse configuration file "%1%" after it has been restored from backup: %2%)", path, ex.what());
} }
} }
} else } else
#endif // WIN32 #endif // WIN32
BOOST_LOG_TRIVIAL(info) << format("Failed to parse configuration file \"%1%\": %2%", path, ex.what()); BOOST_LOG_TRIVIAL(info) << format(R"(Failed to parse configuration file "%1%": %2%)", path, ex.what());
if (! recovered) { if (!recovered) {
// Report the initial error of parsing PrusaSlicer.ini. // Report the initial error of parsing PrusaSlicer.ini.
// Error while parsing config file. We'll customize the error message and rethrow to be displayed. // Error while parsing config file. We'll customize the error message and rethrow to be displayed.
// ! But to avoid the use of _utf8 (related to use of wxWidgets) // ! But to avoid the use of _utf8 (related to use of wxWidgets)

View File

@ -1,20 +1,25 @@
#include "../Print.hpp" #include "../Print.hpp"
#include "../ShortestPath.hpp"
#include "FillLightning.hpp" #include "FillLightning.hpp"
#include "Lightning/Generator.hpp" #include "Lightning/Generator.hpp"
#include "../Surface.hpp"
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <numeric>
namespace Slic3r::FillLightning { namespace Slic3r::FillLightning {
Polylines Filler::fill_surface(const Surface *surface, const FillParams &params) void Filler::_fill_surface_single(
const FillParams &params,
unsigned int thickness_layers,
const std::pair<float, Point> &direction,
ExPolygon expolygon,
Polylines &polylines_out)
{ {
const Layer &layer = generator->getTreesForLayer(this->layer_id); const Layer &layer = generator->getTreesForLayer(this->layer_id);
return layer.convertToLines(to_polygons(surface->expolygon), generator->infilll_extrusion_width()); Polylines fill_lines = layer.convertToLines(to_polygons(expolygon), scaled<coord_t>(0.5 * this->spacing - this->overlap));
if (params.dont_connect() || fill_lines.size() <= 1) {
append(polylines_out, chain_polylines(std::move(fill_lines)));
} else
connect_infill(std::move(fill_lines), expolygon, polylines_out, this->spacing, params);
} }
void GeneratorDeleter::operator()(Generator *p) { void GeneratorDeleter::operator()(Generator *p) {

View File

@ -24,8 +24,13 @@ public:
Generator *generator { nullptr }; Generator *generator { nullptr };
protected: protected:
Fill* clone() const override { return new Filler(*this); } Fill* clone() const override { return new Filler(*this); }
// Perform the fill.
Polylines fill_surface(const Surface *surface, const FillParams &params) override; void _fill_surface_single(const FillParams &params,
unsigned int thickness_layers,
const std::pair<float, Point> &direction,
ExPolygon expolygon,
Polylines &polylines_out) override;
// Let the G-code export reoder the infill lines. // Let the G-code export reoder the infill lines.
bool no_sort() const override { return false; } bool no_sort() const override { return false; }
}; };

View File

@ -176,7 +176,7 @@ protected:
const Point offset_loc = loc - m_grid_range.min; const Point offset_loc = loc - m_grid_range.min;
const size_t flat_idx = m_grid_size.x() * offset_loc.y() + offset_loc.x(); const size_t flat_idx = m_grid_size.x() * offset_loc.y() + offset_loc.x();
assert(offset_loc.x() >= 0 && offset_loc.y() >= 0); assert(offset_loc.x() >= 0 && offset_loc.y() >= 0);
assert(flat_idx < m_grid_size.y() * m_grid_size.x()); assert(flat_idx < size_t(m_grid_size.y() * m_grid_size.x()));
return flat_idx; return flat_idx;
} }
}; };

View File

@ -7,7 +7,6 @@
#include "../../ClipperUtils.hpp" #include "../../ClipperUtils.hpp"
#include "../../Layer.hpp" #include "../../Layer.hpp"
#include "../../Print.hpp" #include "../../Print.hpp"
#include "../../Surface.hpp"
/* Possible future tasks/optimizations,etc.: /* Possible future tasks/optimizations,etc.:
* - Improve connecting heuristic to favor connecting to shorter trees * - Improve connecting heuristic to favor connecting to shorter trees
@ -54,8 +53,6 @@ Generator::Generator(const PrintObject &print_object, const std::function<void()
void Generator::generateInitialInternalOverhangs(const PrintObject &print_object, const std::function<void()> &throw_on_cancel_callback) void Generator::generateInitialInternalOverhangs(const PrintObject &print_object, const std::function<void()> &throw_on_cancel_callback)
{ {
m_overhang_per_layer.resize(print_object.layers().size()); m_overhang_per_layer.resize(print_object.layers().size());
// FIXME: It can be adjusted to improve bonding between infill and perimeters.
const float infill_wall_offset = 0;// m_infill_extrusion_width;
Polygons infill_area_above; Polygons infill_area_above;
//Iterate from top to bottom, to subtract the overhang areas above from the overhang areas on the layer below, to get only overhang in the top layer where it is overhanging. //Iterate from top to bottom, to subtract the overhang areas above from the overhang areas on the layer below, to get only overhang in the top layer where it is overhanging.
@ -65,7 +62,7 @@ void Generator::generateInitialInternalOverhangs(const PrintObject &print_object
for (const LayerRegion* layerm : print_object.get_layer(layer_nr)->regions()) for (const LayerRegion* layerm : print_object.get_layer(layer_nr)->regions())
for (const Surface& surface : layerm->fill_surfaces.surfaces) for (const Surface& surface : layerm->fill_surfaces.surfaces)
if (surface.surface_type == stInternal || surface.surface_type == stInternalVoid) if (surface.surface_type == stInternal || surface.surface_type == stInternalVoid)
append(infill_area_here, infill_wall_offset == 0 ? surface.expolygon : offset(surface.expolygon, infill_wall_offset)); infill_area_here.emplace_back(surface.expolygon);
//Remove the part of the infill area that is already supported by the walls. //Remove the part of the infill area that is already supported by the walls.
Polygons overhang = diff(offset(infill_area_here, -float(m_wall_supporting_radius)), infill_area_above); Polygons overhang = diff(offset(infill_area_here, -float(m_wall_supporting_radius)), infill_area_above);
@ -84,8 +81,6 @@ const Layer& Generator::getTreesForLayer(const size_t& layer_id) const
void Generator::generateTrees(const PrintObject &print_object, const std::function<void()> &throw_on_cancel_callback) void Generator::generateTrees(const PrintObject &print_object, const std::function<void()> &throw_on_cancel_callback)
{ {
m_lightning_layers.resize(print_object.layers().size()); m_lightning_layers.resize(print_object.layers().size());
// FIXME: It can be adjusted to improve bonding between infill and perimeters.
const coord_t infill_wall_offset = 0;// m_infill_extrusion_width;
std::vector<Polygons> infill_outlines(print_object.layers().size(), Polygons()); std::vector<Polygons> infill_outlines(print_object.layers().size(), Polygons());
@ -95,7 +90,7 @@ void Generator::generateTrees(const PrintObject &print_object, const std::functi
for (const LayerRegion *layerm : print_object.get_layer(layer_id)->regions()) for (const LayerRegion *layerm : print_object.get_layer(layer_id)->regions())
for (const Surface &surface : layerm->fill_surfaces.surfaces) for (const Surface &surface : layerm->fill_surfaces.surfaces)
if (surface.surface_type == stInternal || surface.surface_type == stInternalVoid) if (surface.surface_type == stInternal || surface.surface_type == stInternalVoid)
append(infill_outlines[layer_id], infill_wall_offset == 0 ? surface.expolygon : offset(surface.expolygon, infill_wall_offset)); infill_outlines[layer_id].emplace_back(surface.expolygon);
} }
// For various operations its beneficial to quickly locate nearby features on the polygon: // For various operations its beneficial to quickly locate nearby features on the polygon:
@ -125,7 +120,8 @@ void Generator::generateTrees(const PrintObject &print_object, const std::functi
if (const BoundingBox &outlines_locator_bbox = outlines_locator.bbox(); outlines_locator_bbox.defined) if (const BoundingBox &outlines_locator_bbox = outlines_locator.bbox(); outlines_locator_bbox.defined)
below_outlines_bbox.merge(outlines_locator_bbox); below_outlines_bbox.merge(outlines_locator_bbox);
below_outlines_bbox.merge(get_extents(current_lightning_layer.tree_roots).inflated(SCALED_EPSILON)); if (!current_lightning_layer.tree_roots.empty())
below_outlines_bbox.merge(get_extents(current_lightning_layer.tree_roots).inflated(SCALED_EPSILON));
outlines_locator.set_bbox(below_outlines_bbox); outlines_locator.set_bbox(below_outlines_bbox);
outlines_locator.create(below_outlines, locator_cell_size); outlines_locator.create(below_outlines, locator_cell_size);

View File

@ -433,15 +433,14 @@ static unsigned int moveInside(const Polygons& polygons, Point& from, int distan
} }
#endif #endif
// Returns 'added someting'. Polylines Layer::convertToLines(const Polygons& limit_to_outline, const coord_t line_overlap) const
Polylines Layer::convertToLines(const Polygons& limit_to_outline, const coord_t line_width) const
{ {
if (tree_roots.empty()) if (tree_roots.empty())
return {}; return {};
Polylines result_lines; Polylines result_lines;
for (const auto &tree : tree_roots) for (const auto &tree : tree_roots)
tree->convertToPolylines(result_lines, line_width); tree->convertToPolylines(result_lines, line_overlap);
return intersection_pl(result_lines, limit_to_outline); return intersection_pl(result_lines, limit_to_outline);
} }

View File

@ -80,7 +80,7 @@ public:
coord_t wall_supporting_radius coord_t wall_supporting_radius
); );
Polylines convertToLines(const Polygons& limit_to_outline, coord_t line_width) const; Polylines convertToLines(const Polygons& limit_to_outline, coord_t line_overlap) const;
coord_t getWeightedDistance(const Point& boundary_loc, const Point& unsupported_location); coord_t getWeightedDistance(const Point& boundary_loc, const Point& unsupported_location);

View File

@ -347,12 +347,12 @@ coord_t Node::prune(const coord_t& pruning_distance)
return max_distance_pruned; return max_distance_pruned;
} }
void Node::convertToPolylines(Polylines &output, const coord_t line_width) const void Node::convertToPolylines(Polylines &output, const coord_t line_overlap) const
{ {
Polylines result; Polylines result;
result.emplace_back(); result.emplace_back();
convertToPolylines(0, result); convertToPolylines(0, result);
removeJunctionOverlap(result, line_width); removeJunctionOverlap(result, line_overlap);
append(output, std::move(result)); append(output, std::move(result));
} }
@ -376,10 +376,10 @@ void Node::convertToPolylines(size_t long_line_idx, Polylines &output) const
} }
} }
void Node::removeJunctionOverlap(Polylines &result_lines, const coord_t line_width) const void Node::removeJunctionOverlap(Polylines &result_lines, const coord_t line_overlap) const
{ {
const coord_t reduction = line_width / 2; // TODO make configurable? const coord_t reduction = line_overlap;
size_t res_line_idx = 0; size_t res_line_idx = 0;
while (res_line_idx < result_lines.size()) { while (res_line_idx < result_lines.size()) {
Polyline &polyline = result_lines[res_line_idx]; Polyline &polyline = result_lines[res_line_idx];
if (polyline.size() <= 1) { if (polyline.size() <= 1) {

View File

@ -46,7 +46,7 @@ public:
{ {
struct EnableMakeShared : public Node struct EnableMakeShared : public Node
{ {
EnableMakeShared(Arg&&...arg) : Node(std::forward<Arg>(arg)...) {} explicit EnableMakeShared(Arg&&...arg) : Node(std::forward<Arg>(arg)...) {}
}; };
return std::make_shared<EnableMakeShared>(std::forward<Arg>(arg)...); return std::make_shared<EnableMakeShared>(std::forward<Arg>(arg)...);
} }
@ -179,16 +179,16 @@ public:
*/ */
bool hasOffspring(const NodeSPtr& to_be_checked) const; bool hasOffspring(const NodeSPtr& to_be_checked) const;
protected:
Node() = delete; // Don't allow empty contruction Node() = delete; // Don't allow empty contruction
protected:
/*! /*!
* Construct a new node, either for insertion in a tree or as root. * Construct a new node, either for insertion in a tree or as root.
* \param p The physical location in the 2D layer that this node represents. * \param p The physical location in the 2D layer that this node represents.
* Connecting other nodes to this node indicates that a line segment should * Connecting other nodes to this node indicates that a line segment should
* be drawn between those two physical positions. * be drawn between those two physical positions.
*/ */
Node(const Point& p, const std::optional<Point>& last_grounding_location = std::nullopt); explicit Node(const Point& p, const std::optional<Point>& last_grounding_location = std::nullopt);
/*! /*!
* Copy this node and its entire sub-tree. * Copy this node and its entire sub-tree.
@ -239,7 +239,7 @@ public:
* *
* \param output all branches in this tree connected into polylines * \param output all branches in this tree connected into polylines
*/ */
void convertToPolylines(Polylines &output, coord_t line_width) const; void convertToPolylines(Polylines &output, coord_t line_overlap) const;
/*! If this was ever a direct child of the root, it'll have a previous grounding location. /*! If this was ever a direct child of the root, it'll have a previous grounding location.
* *
@ -260,7 +260,7 @@ protected:
*/ */
void convertToPolylines(size_t long_line_idx, Polylines &output) const; void convertToPolylines(size_t long_line_idx, Polylines &output) const;
void removeJunctionOverlap(Polylines &polylines, coord_t line_width) const; void removeJunctionOverlap(Polylines &polylines, coord_t line_overlap) const;
bool m_is_root; bool m_is_root;
Point m_p; Point m_p;

View File

@ -35,6 +35,8 @@
#include "SVG.hpp" #include "SVG.hpp"
#include <tbb/parallel_for.h> #include <tbb/parallel_for.h>
#include <tbb/task_scheduler_observer.h>
#include <tbb/enumerable_thread_specific.h>
// Intel redesigned some TBB interface considerably when merging TBB with their oneAPI set of libraries, see GH #7332. // Intel redesigned some TBB interface considerably when merging TBB with their oneAPI set of libraries, see GH #7332.
// We are using quite an old TBB 2017 U7. Before we update our build servers, let's use the old API, which is deprecated in up to date TBB. // We are using quite an old TBB 2017 U7. Before we update our build servers, let's use the old API, which is deprecated in up to date TBB.
@ -1488,6 +1490,32 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
print.throw_if_canceled(); print.throw_if_canceled();
} }
// For unknown reasons and in sporadic cases when GCode export is processing, some participating thread
// in tbb::parallel_pipeline has not set locales to "C", probably because this thread is newly spawned.
// So in this class method on_scheduler_entry is called for every thread before it starts participating
// in tbb::parallel_pipeline to ensure that locales are set correctly
// For tbb::parallel_pipeline, it seems that on_scheduler_entry is called for every layer and every filter.
// We ensure using thread-local storage that locales will be set to "C" just once for any participating thread.
class TBBLocalesSetter : public tbb::task_scheduler_observer
{
public:
TBBLocalesSetter() { this->observe(true); }
~TBBLocalesSetter() override { this->observe(false); };
void on_scheduler_entry(bool is_worker) override
{
if (bool &is_locales_sets = m_is_locales_sets.local(); !is_locales_sets) {
// Set locales of the worker thread to "C".
set_c_locales();
is_locales_sets = true;
}
}
private:
tbb::enumerable_thread_specific<bool, tbb::cache_aligned_allocator<bool>, tbb::ets_key_usage_type::ets_key_per_instance> m_is_locales_sets{false};
};
// Process all layers of all objects (non-sequential mode) with a parallel pipeline: // 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 // Generate G-code, run the filters (vase mode, cooling buffer), run the G-code analyser
// and export G-code into file. // and export G-code into file.
@ -1531,6 +1559,10 @@ void GCode::process_layers(
[&output_stream](std::string s) { output_stream.write(s); } [&output_stream](std::string s) { output_stream.write(s); }
); );
// 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. // The pipeline elements are joined using const references, thus no copying is performed.
output_stream.find_replace_supress(); output_stream.find_replace_supress();
if (m_spiral_vase && m_find_replace) if (m_spiral_vase && m_find_replace)
@ -1584,6 +1616,10 @@ void GCode::process_layers(
[&output_stream](std::string s) { output_stream.write(s); } [&output_stream](std::string s) { output_stream.write(s); }
); );
// 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. // The pipeline elements are joined using const references, thus no copying is performed.
output_stream.find_replace_supress(); output_stream.find_replace_supress();
if (m_spiral_vase && m_find_replace) if (m_spiral_vase && m_find_replace)

View File

@ -43,6 +43,25 @@ std::string float_to_string_decimal_point(double value, int precision = -1);
//std::string float_to_string_decimal_point(float value, int precision = -1); //std::string float_to_string_decimal_point(float value, int precision = -1);
double string_to_double_decimal_point(const std::string_view str, size_t* pos = nullptr); double string_to_double_decimal_point(const std::string_view str, size_t* pos = nullptr);
// Set locales to "C".
inline void set_c_locales()
{
#ifdef _WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
std::setlocale(LC_ALL, "C");
#else
// We are leaking some memory here, because the newlocale() produced memory will never be released.
// This is not a problem though, as there will be a maximum one worker thread created per physical thread.
uselocale(newlocale(
#ifdef __APPLE__
LC_ALL_MASK
#else // some Unix / Linux / BSD
LC_ALL
#endif
, "C", nullptr));
#endif
}
} // namespace Slic3r } // namespace Slic3r
#endif // slic3r_LocalesUtils_hpp_ #endif // slic3r_LocalesUtils_hpp_

View File

@ -15,6 +15,7 @@
#include "Thread.hpp" #include "Thread.hpp"
#include "Utils.hpp" #include "Utils.hpp"
#include "LocalesUtils.hpp"
namespace Slic3r { namespace Slic3r {
@ -234,21 +235,8 @@ void name_tbb_thread_pool_threads_set_locale()
std::ostringstream name; std::ostringstream name;
name << "slic3r_tbb_" << range.begin(); name << "slic3r_tbb_" << range.begin();
set_current_thread_name(name.str().c_str()); set_current_thread_name(name.str().c_str());
// Set locales of the worker thread to "C". // Set locales of the worker thread to "C".
#ifdef _WIN32 set_c_locales();
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
std::setlocale(LC_ALL, "C");
#else
// We are leaking some memory here, because the newlocale() produced memory will never be released.
// This is not a problem though, as there will be a maximum one worker thread created per physical thread.
uselocale(newlocale(
#ifdef __APPLE__
LC_ALL_MASK
#else // some Unix / Linux / BSD
LC_ALL
#endif
, "C", nullptr));
#endif
} }
}); });
} }

View File

@ -38,22 +38,18 @@ class PlaterWorker: public Worker {
void update_status(int st, const std::string &msg = "") override void update_status(int st, const std::string &msg = "") override
{ {
wxWakeUpIdle();
ctl.update_status(st, msg); ctl.update_status(st, msg);
wxWakeUpIdle();
// If the worker is not using additional threads, the UI
// is refreshed with this call. If the worker is running
// in it's own thread, the yield should not have any
// visible effects.
wxYieldIfNeeded();
} }
bool was_canceled() const override { return ctl.was_canceled(); } bool was_canceled() const override { return ctl.was_canceled(); }
std::future<void> call_on_main_thread(std::function<void()> fn) override std::future<void> call_on_main_thread(std::function<void()> fn) override
{ {
auto ftr = ctl.call_on_main_thread(std::move(fn));
wxWakeUpIdle(); wxWakeUpIdle();
return ctl.call_on_main_thread(std::move(fn));
return ftr;
} }
} wctl{c}; } wctl{c};

View File

@ -62,7 +62,15 @@ protected:
std::future<void> call_on_main_thread(std::function<void()> fn) override std::future<void> call_on_main_thread(std::function<void()> fn) override
{ {
return std::async(std::launch::deferred, [fn]{ fn(); }); std::future<void> ftr = std::async(std::launch::deferred, [fn]{ fn(); });
// So, it seems that the destructor of std::future will not call the
// packaged function. The future needs to be accessed at least ones
// or waited upon. Calling wait() instead of get() will keep the
// returned future's state valid.
ftr.wait();
return ftr;
} }
public: public:

View File

@ -7,12 +7,42 @@
using namespace Slic3r; using namespace Slic3r;
struct PointGridTracer { TEST_CASE("Testing basic invariants of AStar", "[AStar]") {
struct DummyTracer {
using Node = int;
int goal = 0;
float distance(int a, int b) const { return a - b; }
float goal_heuristic(int n) const { return n == goal ? -1.f : 0.f; }
size_t unique_id(int n) const { return n; }
void foreach_reachable(int, std::function<bool(int)>) const {}
};
std::vector<int> out;
SECTION("Output is empty when source is also the destination") {
bool found = astar::search_route(DummyTracer{}, 0, std::back_inserter(out));
REQUIRE(out.empty());
REQUIRE(found);
}
SECTION("Return false when there is no route to destination") {
bool found = astar::search_route(DummyTracer{}, 1, std::back_inserter(out));
REQUIRE(!found);
REQUIRE(out.empty());
}
}
struct PointGridTracer3D {
using Node = size_t; using Node = size_t;
const PointGrid<float> &grid; const PointGrid<float> &grid;
size_t final; size_t final;
PointGridTracer(const PointGrid<float> &g, size_t goal) : PointGridTracer3D(const PointGrid<float> &g, size_t goal) :
grid{g}, final{goal} {} grid{g}, final{goal} {}
template<class Fn> template<class Fn>
@ -49,14 +79,328 @@ struct PointGridTracer {
size_t unique_id(size_t n) const { return n; } size_t unique_id(size_t n) const { return n; }
}; };
template<class Node, class Cmp = std::less<Node>>
bool has_duplicates(const std::vector<Node> &res, Cmp cmp = {})
{
auto cpy = res;
std::sort(cpy.begin(), cpy.end(), cmp);
auto it = std::unique(cpy.begin(), cpy.end());
return it != cpy.end();
}
TEST_CASE("astar algorithm test over 3D point grid", "[AStar]") { TEST_CASE("astar algorithm test over 3D point grid", "[AStar]") {
auto vol = BoundingBox3Base<Vec3f>{{0.f, 0.f, 0.f}, {1.f, 1.f, 1.f}}; auto vol = BoundingBox3Base<Vec3f>{{0.f, 0.f, 0.f}, {1.f, 1.f, 1.f}};
auto pgrid = point_grid(ex_seq, vol, {0.1f, 0.1f, 0.1f}); auto pgrid = point_grid(ex_seq, vol, {0.1f, 0.1f, 0.1f});
PointGridTracer pgt{pgrid, pgrid.point_count() - 1}; size_t target = pgrid.point_count() - 1;
PointGridTracer3D pgt{pgrid, target};
std::vector<size_t> out; std::vector<size_t> out;
bool found = astar::search_route(pgt, size_t(0), std::back_inserter(out)); bool found = astar::search_route(pgt, 0, std::back_inserter(out));
REQUIRE(found); REQUIRE(found);
REQUIRE(!out.empty());
REQUIRE(out.front() == target);
#ifndef NDEBUG
std::cout << "Route taken: ";
for (auto it = out.rbegin(); it != out.rend(); ++it) {
std::cout << "(" << pgrid.get_coord(*it).transpose() << ") ";
}
std::cout << std::endl;
#endif
REQUIRE(!has_duplicates(out)); // No duplicates in output
}
enum CellValue {ON, OFF};
struct CellGridTracer2D_AllDirs {
using Node = Vec2i;
static constexpr auto Cols = size_t(5);
static constexpr auto Rows = size_t(8);
static constexpr size_t GridSize = Cols * Rows;
const std::array<std::array<CellValue, Cols>, Rows> &grid;
Vec2i goal;
CellGridTracer2D_AllDirs(const std::array<std::array<CellValue, Cols>, Rows> &g,
const Vec2i &goal_)
: grid{g}, goal{goal_}
{}
template<class Fn>
void foreach_reachable(const Vec2i &src, Fn &&fn) const
{
auto is_inside = [](const Vec2i& v) { return v.x() >= 0 && v.x() < Cols && v.y() >= 0 && v.y() < Rows; };
if (Vec2i crd = src + Vec2i{0, 1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{1, 0}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{1, 1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{0, -1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{-1, 0}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{-1, -1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{1, -1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{-1, 1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
}
float distance(const Vec2i & a, const Vec2i & b) const { return (a - b).squaredNorm(); }
float goal_heuristic(const Vec2i & n) const { return n == goal ? -1.f : (n - goal).squaredNorm(); }
size_t unique_id(const Vec2i & n) const { return n.y() * Cols + n.x(); }
};
struct CellGridTracer2D_Axis {
using Node = Vec2i;
static constexpr auto Cols = size_t(5);
static constexpr auto Rows = size_t(8);
static constexpr size_t GridSize = Cols * Rows;
const std::array<std::array<CellValue, Cols>, Rows> &grid;
Vec2i goal;
CellGridTracer2D_Axis(
const std::array<std::array<CellValue, Cols>, Rows> &g,
const Vec2i &goal_)
: grid{g}, goal{goal_}
{}
template<class Fn>
void foreach_reachable(const Vec2i &src, Fn &&fn) const
{
auto is_inside = [](const Vec2i& v) { return v.x() >= 0 && v.x() < Cols && v.y() >= 0 && v.y() < Rows; };
if (Vec2i crd = src + Vec2i{0, 1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{0, -1}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{1, 0}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
if (Vec2i crd = src + Vec2i{-1, 0}; is_inside(crd) && grid[crd.y()] [crd.x()] == ON) fn(crd);
}
float distance(const Vec2i & a, const Vec2i & b) const { return (a - b).squaredNorm(); }
float goal_heuristic(const Vec2i &n) const
{
int manhattan_dst = std::abs(n.x() - goal.x()) +
std::abs(n.y() - goal.y());
return n == goal ? -1.f : manhattan_dst;
}
size_t unique_id(const Vec2i & n) const { return n.y() * Cols + n.x(); }
};
using TestClasses = std::tuple< CellGridTracer2D_AllDirs, CellGridTracer2D_Axis >;
TEMPLATE_LIST_TEST_CASE("Astar should avoid simple barrier", "[AStar]", TestClasses) {
std::array<std::array<CellValue, 5>, 8> grid = {{
{ON , ON , ON , ON , ON},
{ON , ON , ON , ON , ON},
{ON , ON , ON , ON , ON},
{ON , ON , ON , ON , ON},
{ON , ON , ON , ON , ON},
{ON , OFF, OFF, OFF, ON},
{ON , ON , ON , ON , ON},
{ON , ON , ON , ON , ON}
}};
Vec2i dst = {2, 0};
TestType cgt{grid, dst};
std::vector<Vec2i> out;
bool found = astar::search_route(cgt, {2, 7}, std::back_inserter(out));
REQUIRE(found);
REQUIRE(!out.empty());
REQUIRE(out.front() == dst);
REQUIRE(!has_duplicates(out, [](const Vec2i &a, const Vec2i &b) {
return a.x() == b.x() ? a.y() < b.y() : a.x() < b.x();
}));
#ifndef NDEBUG
std::cout << "Route taken: ";
for (auto it = out.rbegin(); it != out.rend(); ++it) {
std::cout << "(" << it->transpose() << ") ";
}
std::cout << std::endl;
#endif
}
TEMPLATE_LIST_TEST_CASE("Astar should manage to avoid arbitrary barriers", "[AStar]", TestClasses) {
std::array<std::array<CellValue, 5>, 8> grid = {{
{ON , ON , ON , ON , ON},
{ON , ON , ON , OFF, ON},
{OFF, OFF, ON , OFF, ON},
{ON , ON , ON , OFF, ON},
{ON , OFF, ON , OFF, ON},
{ON , OFF, ON , ON , ON},
{ON , OFF, ON , OFF, ON},
{ON , ON , ON , ON , ON}
}};
Vec2i dst = {0, 0};
TestType cgt{grid, dst};
std::vector<Vec2i> out;
bool found = astar::search_route(cgt, {0, 7}, std::back_inserter(out));
REQUIRE(found);
REQUIRE(!out.empty());
REQUIRE(out.front() == dst);
REQUIRE(!has_duplicates(out, [](const Vec2i &a, const Vec2i &b) {
return a.x() == b.x() ? a.y() < b.y() : a.x() < b.x();
}));
#ifndef NDEBUG
std::cout << "Route taken: ";
for (auto it = out.rbegin(); it != out.rend(); ++it) {
std::cout << "(" << it->transpose() << ") ";
}
std::cout << std::endl;
#endif
}
TEMPLATE_LIST_TEST_CASE("Astar should find the way out of a labyrinth", "[AStar]", TestClasses) {
std::array<std::array<CellValue, 5>, 8> grid = {{
{ON , ON , ON , ON , ON },
{ON , OFF, OFF, OFF, OFF},
{ON , ON , ON , ON , ON },
{OFF, OFF, OFF, OFF, ON },
{ON , ON , ON , ON , ON },
{ON , OFF, OFF, OFF, OFF},
{ON , ON , ON , ON , ON },
{OFF, OFF, OFF, OFF, ON }
}};
Vec2i dst = {4, 0};
TestType cgt{grid, dst};
std::vector<Vec2i> out;
bool found = astar::search_route(cgt, {4, 7}, std::back_inserter(out));
REQUIRE(found);
REQUIRE(!out.empty());
REQUIRE(out.front() == dst);
REQUIRE(!has_duplicates(out, [](const Vec2i &a, const Vec2i &b) {
return a.x() == b.x() ? a.y() < b.y() : a.x() < b.x();
}));
#ifndef NDEBUG
std::cout << "Route taken: ";
for (auto it = out.rbegin(); it != out.rend(); ++it) {
std::cout << "(" << it->transpose() << ") ";
}
std::cout << std::endl;
#endif
}
TEST_CASE("Zero heuristic function should result in dijsktra's algo", "[AStar]")
{
struct GraphTracer {
using Node = size_t;
using QNode = astar::QNode<GraphTracer>;
struct Edge
{
size_t to_id = size_t(-1);
float cost = 0.f;
bool operator <(const Edge &e) const { return to_id < e.to_id; }
};
struct ENode: public QNode {
std::vector<Edge> edges;
ENode(size_t node_id, std::initializer_list<Edge> edgelist)
: QNode{node_id}, edges(edgelist)
{}
ENode &operator=(const QNode &q)
{
assert(node == q.node);
g = q.g;
h = q.h;
parent = q.parent;
queue_id = q.queue_id;
return *this;
}
};
// Example graph from
// https://www.geeksforgeeks.org/dijkstras-shortest-path-algorithm-greedy-algo-7/?ref=lbp
std::vector<ENode> nodes = {
{0, {{1, 4.f}, {7, 8.f}}},
{1, {{0, 4.f}, {2, 8.f}, {7, 11.f}}},
{2, {{1, 8.f}, {3, 7.f}, {5, 4.f}, {8, 2.f}}},
{3, {{2, 7.f}, {4, 9.f}, {5, 14.f}}},
{4, {{3, 9.f}, {5, 10.f}}},
{5, {{2, 4.f}, {3, 14.f}, {4, 10.f}, {6, 2.f}}},
{6, {{5, 2.f}, {7, 1.f}, {8, 6.f}}},
{7, {{0, 8.f}, {1, 11.f}, {6, 1.f}, {8, 7.f}}},
{8, {{2, 2.f}, {6, 6.f}, {7, 7.f}}}
};
float distance(size_t a, size_t b) const {
float ret = std::numeric_limits<float>::infinity();
if (a < nodes.size()) {
auto it = std::lower_bound(nodes[a].edges.begin(),
nodes[a].edges.end(),
Edge{b, 0.f});
if (it != nodes[a].edges.end()) {
ret = it->cost;
}
}
return ret;
}
float goal_heuristic(size_t) const { return 0.f; }
size_t unique_id(size_t n) const { return n; }
void foreach_reachable(size_t n, std::function<bool(int)> fn) const
{
if (n < nodes.size()) {
for (const Edge &e : nodes[n].edges)
fn(e.to_id);
}
}
} graph;
std::vector<size_t> out;
// 'graph.nodes' is able to be a node cache (it simulates an associative container)
bool found = astar::search_route(graph, size_t(0), std::back_inserter(out), graph.nodes);
// But should not crash or loop infinitely.
REQUIRE(!found);
// Without a destination, there is no output. But the algorithm should halt.
REQUIRE(out.empty());
// Source node should have it's parent unset
REQUIRE(graph.nodes[0].parent == astar::Unassigned);
// All other nodes should have their parents set
for (size_t i = 1; i < graph.nodes.size(); ++i)
REQUIRE(graph.nodes[i].parent != astar::Unassigned);
std::array<float, 9> ref_distances = {0.f, 4.f, 12.f, 19.f, 21.f,
11.f, 9.f, 8.f, 14.f};
// Try to trace each node back to the source node. Each of them should
// arrive to the source within less hops than the full number of nodes.
for (size_t i = 0, k = 0; i < graph.nodes.size(); ++i, k = 0) {
GraphTracer::QNode *q = &graph.nodes[i];
REQUIRE(q->g == Approx(ref_distances[i]));
while (k++ < graph.nodes.size() && q->parent != astar::Unassigned)
q = &graph.nodes[q->parent];
REQUIRE(q->parent == astar::Unassigned);
}
} }

View File

@ -4,7 +4,8 @@ add_executable(${_TEST_NAME}_tests
slic3r_jobs_tests.cpp slic3r_jobs_tests.cpp
) )
target_link_libraries(${_TEST_NAME}_tests test_common libslic3r_gui libslic3r) # mold linker for successful linking needs also to link TBB library and link it before libslic3r.
target_link_libraries(${_TEST_NAME}_tests test_common TBB::tbb libslic3r_gui libslic3r)
if (MSVC) if (MSVC)
target_link_libraries(${_TEST_NAME}_tests Setupapi.lib) target_link_libraries(${_TEST_NAME}_tests Setupapi.lib)
endif () endif ()