Merge branch 'master' into lm_sla_supports_auto2

This commit is contained in:
Lukas Matena 2019-02-19 10:15:16 +01:00
commit 023b788777
44 changed files with 3347 additions and 2635 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Before After
Before After

View file

@ -1,8 +1,14 @@
min_slic3r_version = 1.42.0-alpha6
0.8.0-alpha6
min_slic3r_version = 1.42.0-alpha min_slic3r_version = 1.42.0-alpha
0.8.0-alpha
0.4.0-alpha4 Updated SLA profiles 0.4.0-alpha4 Updated SLA profiles
0.4.0-alpha3 Update of SLA profiles 0.4.0-alpha3 Update of SLA profiles
0.4.0-alpha2 First SLA profiles 0.4.0-alpha2 First SLA profiles
min_slic3r_version = 1.41.3-alpha
0.4.0 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
min_slic3r_version = 1.41.1 min_slic3r_version = 1.41.1
0.3.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
0.3.3 Prusament PETG released 0.3.3 Prusament PETG released
0.3.2 New MK2.5 and MK3 FW versions 0.3.2 New MK2.5 and MK3 FW versions
0.3.1 New MK2.5 and MK3 FW versions 0.3.1 New MK2.5 and MK3 FW versions
@ -34,6 +40,7 @@ min_slic3r_version = 1.41.0-alpha
0.2.0-alpha1 added initial profiles for the i3 MK3 Multi Material Upgrade 2.0 0.2.0-alpha1 added initial profiles for the i3 MK3 Multi Material Upgrade 2.0
0.2.0-alpha moved machine limits from the start G-code to the new print profile parameters 0.2.0-alpha moved machine limits from the start G-code to the new print profile parameters
min_slic3r_version = 1.40.0 min_slic3r_version = 1.40.0
0.1.12 New MK2.5 and MK3 FW versions
0.1.11 fw version changed to 3.3.1 0.1.11 fw version changed to 3.3.1
0.1.10 MK3 jerk and acceleration update 0.1.10 MK3 jerk and acceleration update
0.1.9 edited support extrusion width for 0.25 and 0.6 nozzles 0.1.9 edited support extrusion width for 0.25 and 0.6 nozzles

View file

@ -5,7 +5,7 @@
name = Prusa Research name = Prusa Research
# 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 Slic3r configuration to be downgraded. # This means, the server may force the Slic3r configuration to be downgraded.
config_version = 0.4.0-alpha4 config_version = 0.8.0-alpha
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://raw.githubusercontent.com/prusa3d/Slic3r-settings/master/live/PrusaResearch/ config_update_url = https://raw.githubusercontent.com/prusa3d/Slic3r-settings/master/live/PrusaResearch/
@ -15,40 +15,71 @@ config_update_url = https://raw.githubusercontent.com/prusa3d/Slic3r-settings/ma
#for example by the melt zone size, or whether the nozzle is hardened. #for example by the melt zone size, or whether the nozzle is hardened.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
[printer_model:MK3S]
name = Original Prusa i3 MK3S
variants = 0.4; 0.25; 0.6
technology = FFF
family = MK3
[printer_model:MK3] [printer_model:MK3]
name = Original Prusa i3 MK3 name = Original Prusa i3 MK3
variants = 0.4; 0.25; 0.6 variants = 0.4; 0.25; 0.6
technology = FFF technology = FFF
family = MK3
[printer_model:MK3SMMU2S]
name = Original Prusa i3 MK3S MMU2S
variants = 0.4
technology = FFF
family = MK3
[printer_model:MK3MMU2]
name = Original Prusa i3 MK3 MMU2
variants = 0.4
technology = FFF
family = MK3
[printer_model:MK2.5S]
name = Original Prusa i3 MK2.5S
variants = 0.4; 0.25; 0.6
technology = FFF
family = MK2.5
[printer_model:MK2.5] [printer_model:MK2.5]
name = Original Prusa i3 MK2.5 name = Original Prusa i3 MK2.5
variants = 0.4; 0.25; 0.6 variants = 0.4; 0.25; 0.6
technology = FFF technology = FFF
family = MK2.5
[printer_model:MK2S] [printer_model:MK2.5SMMU2S]
name = Original Prusa i3 MK2/S name = Original Prusa i3 MK2.5S MMU2S
variants = 0.4; 0.25; 0.6
technology = FFF
[printer_model:MK3MMU2]
name = Original Prusa i3 MK3 MMU 2.0
variants = 0.4 variants = 0.4
technology = FFF technology = FFF
family = MK2.5
[printer_model:MK2SMM]
name = Original Prusa i3 MK2/S MMU 1.0
variants = 0.4; 0.6
technology = FFF
[printer_model:MK2.5MMU2] [printer_model:MK2.5MMU2]
name = Original Prusa i3 MK2.5 MMU 2.0 name = Original Prusa i3 MK2.5 MMU2
variants = 0.4 variants = 0.4
technology = FFF technology = FFF
family = MK2.5
[printer_model:MK2S]
name = Original Prusa i3 MK2S
variants = 0.4; 0.25; 0.6
technology = FFF
family = MK2
[printer_model:MK2SMM]
name = Original Prusa i3 MK2S MMU1
variants = 0.4; 0.6
technology = FFF
family = MK2
[printer_model:SL1] [printer_model:SL1]
name = Original Prusa SL1 name = Original Prusa SL1
variants = default variants = default
technology = SLA technology = SLA
family = SL1
# 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.
@ -197,6 +228,7 @@ support_material_interface_spacing = 0.1
support_material_synchronize_layers = 1 support_material_synchronize_layers = 1
support_material_threshold = 80 support_material_threshold = 80
support_material_with_sheath = 1 support_material_with_sheath = 1
wipe_tower_bridging = 8
# XXXXXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.05mm ---XXX # XXX--- 0.05mm ---XXX
@ -232,11 +264,15 @@ inherits = *0.05mm*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1
infill_extrusion_width = 0.5 infill_extrusion_width = 0.5
# MK3 #
[print:0.05mm ULTRADETAIL MK3] [print:0.05mm ULTRADETAIL MK3]
inherits = *0.05mm*; *MK3* inherits = *0.05mm*; *MK3*
fill_pattern = gyroid
fill_density = 15%
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material
top_infill_extrusion_width = 0.4 top_infill_extrusion_width = 0.4
# MK2 #
[print:0.05mm ULTRADETAIL 0.25 nozzle] [print:0.05mm ULTRADETAIL 0.25 nozzle]
inherits = *0.05mm*; *0.25nozzle* inherits = *0.05mm*; *0.25nozzle*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 and num_extruders==1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 and num_extruders==1
@ -248,14 +284,53 @@ small_perimeter_speed = 15
solid_infill_speed = 20 solid_infill_speed = 20
support_material_speed = 20 support_material_speed = 20
# MK3 #
[print:0.05mm ULTRADETAIL 0.25 nozzle MK3] [print:0.05mm ULTRADETAIL 0.25 nozzle MK3]
inherits = *0.05mm*; *0.25nozzle*; *MK3* inherits = *0.05mm*; *0.25nozzle*; *MK3*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25 and num_extruders==1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25 and num_extruders==1
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.07mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.07mm*]
inherits = *common*
bottom_solid_layers = 8
bridge_acceleration = 300
bridge_flow_ratio = 0.7
bridge_speed = 20
default_acceleration = 500
external_perimeter_speed = 20
fill_density = 15%
first_layer_acceleration = 500
gap_fill_speed = 20
infill_acceleration = 800
infill_speed = 40
max_print_speed = 80
small_perimeter_speed = 20
solid_infill_speed = 40
support_material_extrusion_width = 0.3
support_material_spacing = 1.5
layer_height = 0.07
perimeter_acceleration = 300
perimeter_speed = 30
perimeters = 3
support_material_speed = 40
top_solid_infill_speed = 30
top_solid_layers = 11
# MK3 #
[print:0.07mm ULTRADETAIL MK3]
inherits = *0.07mm*; *MK3*
fill_pattern = gyroid
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material
top_infill_extrusion_width = 0.4
# XXXXXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.10mm ---XXX # XXX--- 0.10mm ---XXX
# XXXXXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXXXXX
# MK2 #
[print:*0.10mm*] [print:*0.10mm*]
inherits = *common* inherits = *common*
bottom_solid_layers = 7 bottom_solid_layers = 7
@ -265,6 +340,7 @@ layer_height = 0.1
perimeter_acceleration = 800 perimeter_acceleration = 800
top_solid_layers = 9 top_solid_layers = 9
# MK2 #
[print:0.10mm DETAIL] [print:0.10mm DETAIL]
inherits = *0.10mm* inherits = *0.10mm*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1
@ -274,19 +350,23 @@ infill_speed = 60
perimeter_speed = 50 perimeter_speed = 50
solid_infill_speed = 50 solid_infill_speed = 50
# MK3 #
[print:0.10mm DETAIL MK3] [print:0.10mm DETAIL MK3]
inherits = *0.10mm*; *MK3* inherits = *0.10mm*; *MK3*
bridge_speed = 30 bridge_speed = 30
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material
external_perimeter_speed = 35 external_perimeter_speed = 25
infill_acceleration = 1250 infill_acceleration = 1250
infill_speed = 200 infill_speed = 80
max_print_speed = 200 max_print_speed = 200
perimeter_speed = 45 perimeter_speed = 45
solid_infill_speed = 200 solid_infill_speed = 80
top_infill_extrusion_width = 0.4 top_infill_extrusion_width = 0.4
top_solid_infill_speed = 50 top_solid_infill_speed = 40
fill_pattern = gyroid
fill_density = 15%
# MK2 #
[print:0.10mm DETAIL 0.25 nozzle] [print:0.10mm DETAIL 0.25 nozzle]
inherits = *0.10mm*; *0.25nozzle* inherits = *0.10mm*; *0.25nozzle*
bridge_acceleration = 600 bridge_acceleration = 600
@ -300,6 +380,7 @@ small_perimeter_speed = 15
solid_infill_speed = 40 solid_infill_speed = 40
top_solid_infill_speed = 30 top_solid_infill_speed = 30
# MK3 #
[print:0.10mm DETAIL 0.25 nozzle MK3] [print:0.10mm DETAIL 0.25 nozzle MK3]
inherits = *0.10mm*; *0.25nozzle*; *MK3* inherits = *0.10mm*; *0.25nozzle*; *MK3*
bridge_speed = 30 bridge_speed = 30
@ -312,6 +393,7 @@ perimeter_speed = 45
solid_infill_speed = 200 solid_infill_speed = 200
top_solid_infill_speed = 50 top_solid_infill_speed = 50
# MK3 #
[print:0.10mm DETAIL 0.6 nozzle MK3] [print:0.10mm DETAIL 0.6 nozzle MK3]
inherits = *0.10mm*; *0.6nozzle*; *MK3* inherits = *0.10mm*; *0.6nozzle*; *MK3*
bridge_speed = 30 bridge_speed = 30
@ -341,6 +423,7 @@ solid_infill_speed = 50
top_infill_extrusion_width = 0.4 top_infill_extrusion_width = 0.4
top_solid_layers = 7 top_solid_layers = 7
# MK2 #
[print:0.15mm 100mms Linear Advance] [print:0.15mm 100mms Linear Advance]
inherits = *0.15mm* inherits = *0.15mm*
bridge_flow_ratio = 0.95 bridge_flow_ratio = 0.95
@ -354,11 +437,13 @@ solid_infill_speed = 100
support_material_speed = 60 support_material_speed = 60
top_solid_infill_speed = 70 top_solid_infill_speed = 70
# MK2 #
[print:0.15mm OPTIMAL] [print:0.15mm OPTIMAL]
inherits = *0.15mm* inherits = *0.15mm*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4
top_infill_extrusion_width = 0.45 top_infill_extrusion_width = 0.45
# MK2 #
[print:0.15mm OPTIMAL 0.25 nozzle] [print:0.15mm OPTIMAL 0.25 nozzle]
inherits = *0.15mm*; *0.25nozzle* inherits = *0.15mm*; *0.25nozzle*
bridge_acceleration = 600 bridge_acceleration = 600
@ -373,11 +458,27 @@ small_perimeter_speed = 15
solid_infill_speed = 40 solid_infill_speed = 40
top_solid_infill_speed = 30 top_solid_infill_speed = 30
# MK2 #
[print:0.15mm OPTIMAL 0.6 nozzle] [print:0.15mm OPTIMAL 0.6 nozzle]
inherits = *0.15mm*; *0.6nozzle* inherits = *0.15mm*; *0.6nozzle*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6
[print:0.15mm OPTIMAL MK3] # MK3 #
[print:0.15mm QUALITY MK3]
inherits = *0.15mm*; *MK3*
bridge_speed = 30
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 25
infill_acceleration = 1250
infill_speed = 80
max_print_speed = 200
perimeter_speed = 45
solid_infill_speed = 80
top_solid_infill_speed = 40
fill_pattern = gyroid
fill_density = 15%
[print:0.15mm SPEED MK3]
inherits = *0.15mm*; *MK3* inherits = *0.15mm*; *MK3*
bridge_speed = 30 bridge_speed = 30
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
@ -385,14 +486,15 @@ external_perimeter_speed = 35
infill_acceleration = 1250 infill_acceleration = 1250
infill_speed = 200 infill_speed = 200
max_print_speed = 200 max_print_speed = 200
perimeter_speed = 45 perimeter_speed = 60
solid_infill_speed = 200 solid_infill_speed = 200
top_solid_infill_speed = 50 top_solid_infill_speed = 50
[print:0.15mm OPTIMAL MK3 SOLUBLE FULL] # MK3 MMU #
inherits = 0.15mm OPTIMAL MK3; *soluble_support* [print:0.15mm SOLUBLE FULL MK3]
inherits = 0.15mm SPEED MK3; *soluble_support*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder
support_material_extruder = 5 support_material_extruder = 5
support_material_interface_extruder = 5 support_material_interface_extruder = 5
perimeter_speed = 40 perimeter_speed = 40
@ -400,31 +502,35 @@ solid_infill_speed = 40
top_infill_extrusion_width = 0.45 top_infill_extrusion_width = 0.45
top_solid_infill_speed = 30 top_solid_infill_speed = 30
[print:0.15mm OPTIMAL MK3 SOLUBLE INTERFACE] # MK3 MMU #
inherits = 0.15mm OPTIMAL MK3 SOLUBLE FULL [print:0.15mm SOLUBLE INTERFACE MK3]
notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder inherits = 0.15mm SOLUBLE FULL MK3
notes = Set your soluble extruder in Multiple Extruders > Support material/raft interface extruder
support_material_extruder = 0 support_material_extruder = 0
support_material_interface_layers = 3 support_material_interface_layers = 3
support_material_with_sheath = 0 support_material_with_sheath = 0
# MK2 MMU #
[print:0.15mm OPTIMAL SOLUBLE FULL] [print:0.15mm OPTIMAL SOLUBLE FULL]
inherits = *0.15mm*; *soluble_support* inherits = *0.15mm*; *soluble_support*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 and num_extruders>1
external_perimeter_speed = 25 external_perimeter_speed = 25
notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder
perimeter_speed = 40 perimeter_speed = 40
solid_infill_speed = 40 solid_infill_speed = 40
top_infill_extrusion_width = 0.45 top_infill_extrusion_width = 0.45
top_solid_infill_speed = 30 top_solid_infill_speed = 30
# MK2 MMU #
[print:0.15mm OPTIMAL SOLUBLE INTERFACE] [print:0.15mm OPTIMAL SOLUBLE INTERFACE]
inherits = 0.15mm OPTIMAL SOLUBLE FULL inherits = 0.15mm OPTIMAL SOLUBLE FULL
notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder notes = Set your soluble extruder in Multiple Extruders > Support material/raft interface extruder
support_material_extruder = 0 support_material_extruder = 0
support_material_interface_layers = 3 support_material_interface_layers = 3
support_material_with_sheath = 0 support_material_with_sheath = 0
support_material_xy_spacing = 80% support_material_xy_spacing = 80%
# MK3 #
[print:0.15mm OPTIMAL 0.25 nozzle MK3] [print:0.15mm OPTIMAL 0.25 nozzle MK3]
inherits = *0.15mm*; *0.25nozzle*; *MK3* inherits = *0.15mm*; *0.25nozzle*; *MK3*
bridge_speed = 30 bridge_speed = 30
@ -451,6 +557,7 @@ solid_infill_speed = 50
top_infill_extrusion_width = 0.4 top_infill_extrusion_width = 0.4
top_solid_layers = 5 top_solid_layers = 5
# MK3 #
[print:0.15mm OPTIMAL 0.6 nozzle MK3] [print:0.15mm OPTIMAL 0.6 nozzle MK3]
inherits = *0.15mm*; *0.6nozzle*; *MK3* inherits = *0.15mm*; *0.6nozzle*; *MK3*
bridge_speed = 30 bridge_speed = 30
@ -467,6 +574,7 @@ top_solid_infill_speed = 50
# XXX--- 0.20mm ---XXX # XXX--- 0.20mm ---XXX
# XXXXXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXXXXX
# MK2 #
[print:0.20mm 100mms Linear Advance] [print:0.20mm 100mms Linear Advance]
inherits = *0.20mm* inherits = *0.20mm*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4
@ -479,7 +587,22 @@ solid_infill_speed = 100
support_material_speed = 60 support_material_speed = 60
top_solid_infill_speed = 70 top_solid_infill_speed = 70
[print:0.20mm FAST MK3] # MK3 #
[print:0.20mm QUALITY MK3]
inherits = *0.20mm*; *MK3*
bridge_speed = 30
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 25
infill_acceleration = 1250
infill_speed = 80
max_print_speed = 200
perimeter_speed = 45
solid_infill_speed = 80
top_solid_infill_speed = 40
fill_pattern = gyroid
fill_density = 15%
[print:0.20mm SPEED MK3]
inherits = *0.20mm*; *MK3* inherits = *0.20mm*; *MK3*
bridge_speed = 30 bridge_speed = 30
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
@ -487,14 +610,15 @@ external_perimeter_speed = 35
infill_acceleration = 1250 infill_acceleration = 1250
infill_speed = 200 infill_speed = 200
max_print_speed = 200 max_print_speed = 200
perimeter_speed = 45 perimeter_speed = 60
solid_infill_speed = 200 solid_infill_speed = 200
top_solid_infill_speed = 50 top_solid_infill_speed = 50
[print:0.20mm FAST MK3 SOLUBLE FULL] # MK3 MMU #
inherits = 0.20mm FAST MK3; *soluble_support* [print:0.20mm SOLUBLE FULL MK3]
inherits = 0.20mm SPEED MK3; *soluble_support*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder
support_material_extruder = 5 support_material_extruder = 5
support_material_interface_extruder = 5 support_material_interface_extruder = 5
perimeter_speed = 40 perimeter_speed = 40
@ -502,38 +626,44 @@ solid_infill_speed = 40
top_infill_extrusion_width = 0.45 top_infill_extrusion_width = 0.45
top_solid_infill_speed = 30 top_solid_infill_speed = 30
[print:0.20mm FAST MK3 SOLUBLE INTERFACE] # MK3 MMU #
inherits = 0.20mm FAST MK3 SOLUBLE FULL [print:0.20mm SOLUBLE INTERFACE MK3]
notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder inherits = 0.20mm SOLUBLE FULL MK3
notes = Set your soluble extruder in Multiple Extruders > Support material/raft interface extruder
support_material_extruder = 0 support_material_extruder = 0
support_material_interface_layers = 3 support_material_interface_layers = 3
support_material_with_sheath = 0 support_material_with_sheath = 0
# MK2 #
[print:0.20mm NORMAL] [print:0.20mm NORMAL]
inherits = *0.20mm* inherits = *0.20mm*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4
# MK2 #
[print:0.20mm NORMAL 0.6 nozzle] [print:0.20mm NORMAL 0.6 nozzle]
inherits = *0.20mm*; *0.6nozzle* inherits = *0.20mm*; *0.6nozzle*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6
# MK2 MMU #
[print:0.20mm NORMAL SOLUBLE FULL] [print:0.20mm NORMAL SOLUBLE FULL]
inherits = *0.20mm*; *soluble_support* inherits = *0.20mm*; *soluble_support*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 and num_extruders>1
external_perimeter_speed = 30 external_perimeter_speed = 30
notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder
perimeter_speed = 40 perimeter_speed = 40
solid_infill_speed = 40 solid_infill_speed = 40
top_solid_infill_speed = 30 top_solid_infill_speed = 30
# MK2 MMU #
[print:0.20mm NORMAL SOLUBLE INTERFACE] [print:0.20mm NORMAL SOLUBLE INTERFACE]
inherits = 0.20mm NORMAL SOLUBLE FULL inherits = 0.20mm NORMAL SOLUBLE FULL
notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder notes = Set your soluble extruder in Multiple Extruders > Support material/raft interface extruder
support_material_extruder = 0 support_material_extruder = 0
support_material_interface_layers = 3 support_material_interface_layers = 3
support_material_with_sheath = 0 support_material_with_sheath = 0
support_material_xy_spacing = 80% support_material_xy_spacing = 80%
# MK3 #
[print:0.20mm FAST 0.6 nozzle MK3] [print:0.20mm FAST 0.6 nozzle MK3]
inherits = *0.20mm*; *0.6nozzle*; *MK3* inherits = *0.20mm*; *0.6nozzle*; *MK3*
bridge_speed = 30 bridge_speed = 30
@ -567,6 +697,7 @@ solid_infill_speed = 60
top_solid_infill_speed = 50 top_solid_infill_speed = 50
top_solid_layers = 4 top_solid_layers = 4
# MK2 #
[print:0.35mm FAST] [print:0.35mm FAST]
inherits = *0.35mm* inherits = *0.35mm*
bridge_flow_ratio = 0.95 bridge_flow_ratio = 0.95
@ -576,10 +707,12 @@ perimeter_extrusion_width = 0.43
solid_infill_extrusion_width = 0.7 solid_infill_extrusion_width = 0.7
top_infill_extrusion_width = 0.43 top_infill_extrusion_width = 0.43
# MK2 #
[print:0.35mm FAST 0.6 nozzle] [print:0.35mm FAST 0.6 nozzle]
inherits = *0.35mm*; *0.6nozzle* inherits = *0.35mm*; *0.6nozzle*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6
# MK2 MMU #
[print:0.35mm FAST sol full 0.6 nozzle] [print:0.35mm FAST sol full 0.6 nozzle]
inherits = *0.35mm*; *0.6nozzle*; *soluble_support* inherits = *0.35mm*; *0.6nozzle*; *soluble_support*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1
@ -591,6 +724,7 @@ support_material_interface_layers = 3
support_material_xy_spacing = 120% support_material_xy_spacing = 120%
top_infill_extrusion_width = 0.57 top_infill_extrusion_width = 0.57
# MK2 MMU #
[print:0.35mm FAST sol int 0.6 nozzle] [print:0.35mm FAST sol int 0.6 nozzle]
inherits = 0.35mm FAST sol full 0.6 nozzle inherits = 0.35mm FAST sol full 0.6 nozzle
support_material_extruder = 0 support_material_extruder = 0
@ -602,38 +736,45 @@ support_material_xy_spacing = 150%
# XXX----- MK2.5 ----XXX # XXX----- MK2.5 ----XXX
# XXXXXXXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXXXXXXX
# MK2.5 #
[print:0.15mm 100mms Linear Advance MK2.5] [print:0.15mm 100mms Linear Advance MK2.5]
inherits = 0.15mm 100mms Linear Advance inherits = 0.15mm 100mms Linear Advance
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
single_extruder_multi_material_priming = 0 single_extruder_multi_material_priming = 0
# MK2.5 #
[print:0.15mm OPTIMAL MK2.5] [print:0.15mm OPTIMAL MK2.5]
inherits = 0.15mm OPTIMAL inherits = 0.15mm OPTIMAL
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
single_extruder_multi_material_priming = 0 single_extruder_multi_material_priming = 0
# MK2.5 MMU2 #
[print:0.15mm OPTIMAL SOLUBLE FULL MK2.5] [print:0.15mm OPTIMAL SOLUBLE FULL MK2.5]
inherits = 0.15mm OPTIMAL SOLUBLE FULL inherits = 0.15mm OPTIMAL SOLUBLE FULL
support_material_extruder = 5 support_material_extruder = 5
support_material_interface_extruder = 5 support_material_interface_extruder = 5
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
# MK2.5 MMU2 #
[print:0.15mm OPTIMAL SOLUBLE INTERFACE MK2.5] [print:0.15mm OPTIMAL SOLUBLE INTERFACE MK2.5]
inherits = 0.15mm OPTIMAL SOLUBLE INTERFACE inherits = 0.15mm OPTIMAL SOLUBLE INTERFACE
support_material_extruder = 0 support_material_extruder = 0
support_material_interface_extruder = 5 support_material_interface_extruder = 5
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
# MK2.5 #
[print:0.20mm 100mms Linear Advance MK2.5] [print:0.20mm 100mms Linear Advance MK2.5]
inherits = 0.20mm 100mms Linear Advance inherits = 0.20mm 100mms Linear Advance
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
single_extruder_multi_material_priming = 0 single_extruder_multi_material_priming = 0
# MK2.5 #
[print:0.20mm NORMAL MK2.5] [print:0.20mm NORMAL MK2.5]
inherits = 0.20mm NORMAL inherits = 0.20mm NORMAL
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
single_extruder_multi_material_priming = 0 single_extruder_multi_material_priming = 0
# MK2.5 MMU2 #
[print:0.20mm NORMAL SOLUBLE FULL MK2.5] [print:0.20mm NORMAL SOLUBLE FULL MK2.5]
inherits = 0.20mm NORMAL SOLUBLE FULL inherits = 0.20mm NORMAL SOLUBLE FULL
support_material_extruder = 5 support_material_extruder = 5
@ -641,6 +782,7 @@ support_material_interface_extruder = 5
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
single_extruder_multi_material_priming = 0 single_extruder_multi_material_priming = 0
# MK2.5 MMU2 #
[print:0.20mm NORMAL SOLUBLE INTERFACE MK2.5] [print:0.20mm NORMAL SOLUBLE INTERFACE MK2.5]
inherits = 0.20mm NORMAL SOLUBLE INTERFACE inherits = 0.20mm NORMAL SOLUBLE INTERFACE
support_material_extruder = 0 support_material_extruder = 0
@ -648,6 +790,7 @@ support_material_interface_extruder = 5
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
single_extruder_multi_material_priming = 0 single_extruder_multi_material_priming = 0
# MK2.5 #
[print:0.35mm FAST MK2.5] [print:0.35mm FAST MK2.5]
inherits = 0.35mm FAST inherits = 0.35mm FAST
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
@ -934,7 +1077,7 @@ first_layer_bed_temperature = 100
first_layer_temperature = 270 first_layer_temperature = 270
temperature = 270 temperature = 270
[filament:Primavalue PVA] [filament:PrimaSelect PVA+]
inherits = *PLA* inherits = *PLA*
filament_cost = 108 filament_cost = 108
filament_density = 1.23 filament_density = 1.23
@ -963,6 +1106,11 @@ filament_cooling_final_speed = 50
filament_cooling_initial_speed = 10 filament_cooling_initial_speed = 10
filament_cooling_moves = 5 filament_cooling_moves = 5
filament_ramming_parameters = "120 110 5.32258 5.45161 5.67742 6 6.48387 7.12903 7.90323 8.70968 9.3871 9.83871 10.0968 10.2258| 0.05 5.30967 0.45 5.50967 0.95 6.1871 1.45 7.39677 1.95 9.05484 2.45 10 2.95 10.3098 3.45 13.0839 3.95 7.6 4.45 7.6 4.95 7.6"; filament_ramming_parameters = "120 110 5.32258 5.45161 5.67742 6 6.48387 7.12903 7.90323 8.70968 9.3871 9.83871 10.0968 10.2258| 0.05 5.30967 0.45 5.50967 0.95 6.1871 1.45 7.39677 1.95 9.05484 2.45 10 2.95 10.3098 3.45 13.0839 3.95 7.6 4.45 7.6 4.95 7.6";
filament_loading_speed_start = 19
filament_load_time = 15
filament_unload_time = 12
filament_loading_speed = 14
filament_unloading_speed = 20
[filament:Generic ABS MMU2] [filament:Generic ABS MMU2]
inherits = *ABS MMU2* inherits = *ABS MMU2*
@ -1009,13 +1157,14 @@ first_layer_temperature = 230
filament_cooling_final_speed = 1 filament_cooling_final_speed = 1
filament_cooling_initial_speed = 2 filament_cooling_initial_speed = 2
filament_cooling_moves = 1 filament_cooling_moves = 1
filament_load_time = 12 filament_load_time = 15
filament_loading_speed = 14 filament_loading_speed = 14
filament_notes = PET filament_notes = PET
filament_ramming_parameters = "120 140 4.70968 4.74194 4.77419 4.80645 4.83871 4.87097 4.90323 5 5.25806 5.67742 6.29032 7.06452 7.83871 8.3871| 0.05 4.72901 0.45 4.73545 0.95 4.83226 1.45 4.88067 1.95 5.05483 2.45 5.93553 2.95 7.53556 3.45 8.6323 3.95 7.6 4.45 7.6 4.95 7.6" filament_ramming_parameters = "120 140 4.70968 4.74194 4.77419 4.80645 4.83871 4.87097 4.90323 5 5.25806 5.67742 6.29032 7.06452 7.83871 8.3871| 0.05 4.72901 0.45 4.73545 0.95 4.83226 1.45 4.88067 1.95 5.05483 2.45 5.93553 2.95 7.53556 3.45 8.6323 3.95 7.6 4.45 7.6 4.95 7.6"
filament_unload_time = 11 filament_unload_time = 12
filament_unloading_speed = 20 filament_unloading_speed = 20
filament_unloading_speed_start = 120 filament_unloading_speed_start = 120
filament_loading_speed_start = 19
[filament:Generic PET MMU2] [filament:Generic PET MMU2]
inherits = *PET MMU2* inherits = *PET MMU2*
@ -1023,7 +1172,7 @@ inherits = *PET MMU2*
[filament:Prusa PET MMU2] [filament:Prusa PET MMU2]
inherits = *PET MMU2* inherits = *PET MMU2*
[filament:Prusament PET MMU2] [filament:Prusament PETG MMU2]
inherits = *PET MMU2* inherits = *PET MMU2*
[filament:Prusa PLA] [filament:Prusa PLA]
@ -1043,14 +1192,17 @@ filament_notes = "Affordable filament for everyday printing in premium quality m
inherits = Prusa PLA inherits = Prusa PLA
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material
temperature = 205 temperature = 205
filament_cooling_final_speed = 1 filament_cooling_final_speed = 2
filament_cooling_initial_speed = 2 filament_cooling_initial_speed = 3
filament_cooling_moves = 1 filament_cooling_moves = 1
filament_load_time = 12 filament_load_time = 15
filament_loading_speed = 14 filament_loading_speed = 14
filament_ramming_parameters = "120 110 2.70968 2.93548 3.32258 3.83871 4.58065 5.54839 6.51613 7.35484 7.93548 8.16129| 0.05 2.66451 0.45 3.05805 0.95 4.05807 1.45 5.97742 1.95 7.69999 2.45 8.1936 2.95 11.342 3.45 11.4065 3.95 7.6 4.45 7.6 4.95 7.6" filament_ramming_parameters = "130 120 2.70968 2.93548 3.32258 3.83871 4.58065 5.54839 6.51613 7.35484 7.93548 8.16129| 0.05 2.66451 0.45 3.05805 0.95 4.05807 1.45 5.97742 1.95 7.69999 2.45 8.1936 2.95 11.342 3.45 11.4065 3.95 7.6 4.45 7.6 4.95 7.6"
filament_unload_time = 11 filament_unload_time = 12
filament_unloading_speed = 20 filament_unloading_speed = 20
filament_loading_speed_start = 19
filament_minimal_purge_on_wipe_tower = 15
filament_unloading_speed_start = 100
[filament:Generic PLA MMU2] [filament:Generic PLA MMU2]
inherits = *PLA MMU2* inherits = *PLA MMU2*
@ -1133,14 +1285,53 @@ first_layer_temperature = 200
filament_cooling_final_speed = 1 filament_cooling_final_speed = 1
filament_cooling_initial_speed = 2 filament_cooling_initial_speed = 2
filament_max_volumetric_speed = 4 filament_max_volumetric_speed = 4
filament_type = PVA filament_type = PLA
filament_cooling_moves = 1 filament_cooling_moves = 1
filament_load_time = 12 filament_load_time = 15
filament_loading_speed = 14 filament_loading_speed = 14
filament_ramming_parameters = "120 110 1.74194 1.90323 2.16129 2.48387 2.83871 3.25806 3.83871 4.6129 5.41935 5.96774| 0.05 1.69677 0.45 1.96128 0.95 2.63872 1.45 3.46129 1.95 4.99031 2.45 6.12908 2.95 8.30974 3.45 11.4065 3.95 7.6 4.45 7.6 4.95 7.6" filament_ramming_parameters = "120 110 1.74194 1.90323 2.16129 2.48387 2.83871 3.25806 3.83871 4.6129 5.41935 5.96774| 0.05 1.69677 0.45 1.96128 0.95 2.63872 1.45 3.46129 1.95 4.99031 2.45 6.12908 2.95 8.30974 3.45 11.4065 3.95 7.6 4.45 7.6 4.95 7.6"
filament_unload_time = 11 filament_unload_time = 12
filament_unloading_speed = 20 filament_unloading_speed = 20
filament_unloading_speed_start = 100 filament_unloading_speed_start = 100
filament_loading_speed_start = 19
[filament:PrimaSelect PVA+ MMU2]
inherits = *common*
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material
bed_temperature = 60
bridge_fan_speed = 100
cooling = 0
disable_fan_first_layers = 1
fan_always_on = 0
fan_below_layer_time = 100
filament_colour = #FFFFD7
filament_cooling_final_speed = 2
filament_cooling_initial_speed = 4
filament_cooling_moves = 2
filament_cost = 25.4
filament_density = 1.24
filament_diameter = 1.75
filament_load_time = 15
filament_loading_speed = 14
filament_loading_speed_start = 19
filament_max_volumetric_speed = 4
filament_minimal_purge_on_wipe_tower = 5
filament_notes = PVA
filament_ramming_parameters = "120 110 3.83871 3.90323 3.96774 4.03226 4.09677 4.19355 4.3871 4.83871 5.67742 6.93548 8.54839 10.3226 11.9677 13.2581 14.129 14.5806| 0.05 3.8258 0.45 3.89676 0.95 4.05807 1.45 4.23548 1.95 5.18386 2.45 7.80651 2.95 11.5356 3.45 13.9872 3.95 14.7613 4.45 7.6 4.95 7.6"
filament_soluble = 1
filament_toolchange_delay = 0
filament_type = PLA
filament_unload_time = 12
filament_unloading_speed = 20
filament_unloading_speed_start = 100
first_layer_bed_temperature = 60
first_layer_temperature = 200
max_fan_speed = 100
min_fan_speed = 100
min_print_speed = 15
slowdown_below_layer_time = 20
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode"
temperature = 195
[filament:Verbatim PP] [filament:Verbatim PP]
inherits = *common* inherits = *common*
@ -1322,19 +1513,60 @@ inherits = *common 0.05*
exposure_time = 7 exposure_time = 7
initial_exposure_time = 40 initial_exposure_time = 40
# v2
[sla_material:3DM-ABS 0.05]
inherits = *common 0.05*
exposure_time = 9
initial_exposure_time = 35
[sla_material:3DM-DENT 0.05]
inherits = *common 0.05*
exposure_time = 7
initial_exposure_time = 45
[sla_material:3DM-HR Green 0.05]
inherits = *common 0.05*
exposure_time = 15
initial_exposure_time = 40
[sla_material:3DM-HR Red Wine 0.05]
inherits = *common 0.05*
exposure_time = 9
initial_exposure_time = 35
[sla_material:3DM-XPRO White 0.05]
inherits = *common 0.05*
exposure_time = 9
initial_exposure_time = 35
[sla_material:FTD Ash Grey 0.05]
inherits = *common 0.05*
exposure_time = 9
initial_exposure_time = 40
[sla_material:Jamg He LOC-19 Super Low Odor Skin 0.05]
inherits = *common 0.05*
exposure_time = 7.5
initial_exposure_time = 40
[sla_material:Jamg He LOC-20 Super Low Odor White 0.05]
inherits = *common 0.05*
exposure_time = 6.5
initial_exposure_time = 40
[sla_material:Jamg He LOC-60 Super Low Odor Grey 0.05]
inherits = *common 0.05*
exposure_time = 6.5
initial_exposure_time = 40
########### Materials 0.035 ########### Materials 0.035
## [sla_material:Jamg He Transparent Clear 0.035] [sla_material:Jamg He Orange 0.035]
## inherits = *common 0.035* inherits = *common 0.035*
exposure_time = 9
## [sla_material:Jamg He Transparent Green 0.035] initial_exposure_time = 35
## inherits = *common 0.035*
## [sla_material:Jamg He Transparent Orange 0.035]
## inherits = *common 0.035*
## [sla_material:Jamg He Transparent Red 0.035]
## inherits = *common 0.035*
########### Materials 0.1 ########### Materials 0.1
@ -1455,10 +1687,10 @@ default_print_profile = 0.15mm OPTIMAL
# XXX--- MK2 ---XXX # XXX--- MK2 ---XXX
# XXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXX
[printer:Original Prusa i3 MK2] [printer:Original Prusa i3 MK2S]
inherits = *common* inherits = *common*
[printer:Original Prusa i3 MK2 0.25 nozzle] [printer:Original Prusa i3 MK2S 0.25 nozzle]
inherits = *common* inherits = *common*
max_layer_height = 0.15 max_layer_height = 0.15
min_layer_height = 0.05 min_layer_height = 0.05
@ -1469,7 +1701,7 @@ variable_layer_height = 1
printer_variant = 0.25 printer_variant = 0.25
default_print_profile = 0.10mm DETAIL 0.25 nozzle default_print_profile = 0.10mm DETAIL 0.25 nozzle
[printer:Original Prusa i3 MK2 0.6 nozzle] [printer:Original Prusa i3 MK2S 0.6 nozzle]
inherits = *common* inherits = *common*
max_layer_height = 0.35 max_layer_height = 0.35
min_layer_height = 0.1 min_layer_height = 0.1
@ -1481,12 +1713,12 @@ default_print_profile = 0.20mm NORMAL 0.6 nozzle
# XXX--- MK2MM ---XXX # XXX--- MK2MM ---XXX
# XXXXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXXXX
[printer:Original Prusa i3 MK2 MMU1 Single] [printer:Original Prusa i3 MK2S MMU1 Single]
inherits = *mm-single* inherits = *mm-single*
max_layer_height = 0.25 max_layer_height = 0.25
min_layer_height = 0.07 min_layer_height = 0.07
[printer:Original Prusa i3 MK2 MMU1 Single 0.6 nozzle] [printer:Original Prusa i3 MK2S MMU1 Single 0.6 nozzle]
inherits = *mm-single* inherits = *mm-single*
nozzle_diameter = 0.6 nozzle_diameter = 0.6
printer_variant = 0.6 printer_variant = 0.6
@ -1494,13 +1726,13 @@ default_print_profile = 0.20mm NORMAL 0.6 nozzle
max_layer_height = 0.35 max_layer_height = 0.35
min_layer_height = 0.1 min_layer_height = 0.1
[printer:Original Prusa i3 MK2 MMU1] [printer:Original Prusa i3 MK2S MMU1]
inherits = *mm-multi* inherits = *mm-multi*
nozzle_diameter = 0.4,0.4,0.4,0.4 nozzle_diameter = 0.4,0.4,0.4,0.4
max_layer_height = 0.25 max_layer_height = 0.25
min_layer_height = 0.07 min_layer_height = 0.07
[printer:Original Prusa i3 MK2 MMU1 0.6 nozzle] [printer:Original Prusa i3 MK2S MMU1 0.6 nozzle]
inherits = *mm-multi* inherits = *mm-multi*
nozzle_diameter = 0.6,0.6,0.6,0.6 nozzle_diameter = 0.6,0.6,0.6,0.6
printer_variant = 0.6 printer_variant = 0.6
@ -1513,7 +1745,19 @@ min_layer_height = 0.1
# XXXXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXXXX
[printer:Original Prusa i3 MK2.5] [printer:Original Prusa i3 MK2.5]
inherits = Original Prusa i3 MK2 inherits = Original Prusa i3 MK2S
printer_model = MK2.5
remaining_times = 1
start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
[printer:Original Prusa i3 MK2.5 0.25 nozzle]
inherits = Original Prusa i3 MK2S 0.25 nozzle
printer_model = MK2.5
remaining_times = 1
start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
[printer:Original Prusa i3 MK2.5 0.6 nozzle]
inherits = Original Prusa i3 MK2S 0.6 nozzle
printer_model = MK2.5 printer_model = MK2.5
remaining_times = 1 remaining_times = 1
start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0 start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
@ -1545,7 +1789,7 @@ machine_min_travel_rate = 0
default_print_profile = 0.15mm OPTIMAL MK2.5 default_print_profile = 0.15mm OPTIMAL MK2.5
default_filament_profile = Prusament PLA default_filament_profile = Prusament PLA
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_PRUSA3D\nPRINTER_MODEL_MK2.5\n 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_PRUSA3D\nPRINTER_MODEL_MK2.5\n
start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n
end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors
[printer:Original Prusa i3 MK2.5 MMU2] [printer:Original Prusa i3 MK2.5 MMU2]
@ -1579,20 +1823,85 @@ single_extruder_multi_material = 1
# to be defined explicitely. # to be defined explicitely.
nozzle_diameter = 0.4,0.4,0.4,0.4,0.4 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n
end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200; home X axis\nM84 ; disable motors\n end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200; home X axis\nM84 ; disable motors\n
[printer:Original Prusa i3 MK2.5 0.25 nozzle] [printer:Original Prusa i3 MK2.5S]
inherits = Original Prusa i3 MK2 0.25 nozzle inherits = Original Prusa i3 MK2.5
printer_model = MK2.5 printer_model = MK2.5S
remaining_times = 1
start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
[printer:Original Prusa i3 MK2.5 0.6 nozzle] [printer:Original Prusa i3 MK2.5S 0.25 nozzle]
inherits = Original Prusa i3 MK2 0.6 nozzle inherits = Original Prusa i3 MK2.5 0.25 nozzle
printer_model = MK2.5 printer_model = MK2.5S
[printer:Original Prusa i3 MK2.5S 0.6 nozzle]
inherits = Original Prusa i3 MK2.5 0.6 nozzle
printer_model = MK2.5S
[printer:Original Prusa i3 MK2.5S MMU2S Single]
inherits = Original Prusa i3 MK2.5; *mm2s*
printer_model = MK2.5SMMU2S
single_extruder_multi_material = 0
max_print_height = 200
remaining_times = 1 remaining_times = 1
start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0 silent_mode = 0
retract_lift_below = 199
machine_max_acceleration_e = 10000
machine_max_acceleration_extruding = 2000
machine_max_acceleration_retracting = 1500
machine_max_acceleration_x = 9000
machine_max_acceleration_y = 9000
machine_max_acceleration_z = 500
machine_max_feedrate_e = 120
machine_max_feedrate_x = 500
machine_max_feedrate_y = 500
machine_max_feedrate_z = 12
machine_max_jerk_e = 2.5
machine_max_jerk_x = 10
machine_max_jerk_y = 10
machine_max_jerk_z = 0.2
machine_min_extruding_rate = 0
machine_min_travel_rate = 0
default_print_profile = 0.15mm OPTIMAL MK2.5
default_filament_profile = Prusament PLA
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_PRUSA3D\nPRINTER_MODEL_MK2.5\n
start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n
end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors
[printer:Original Prusa i3 MK2.5S MMU2S]
inherits = Original Prusa i3 MK2.5; *mm2s*
printer_model = MK2.5SMMU2S
max_print_height = 200
remaining_times = 1
silent_mode = 0
retract_lift_below = 199
machine_max_acceleration_e = 10000
machine_max_acceleration_extruding = 2000
machine_max_acceleration_retracting = 1500
machine_max_acceleration_x = 9000
machine_max_acceleration_y = 9000
machine_max_acceleration_z = 500
machine_max_feedrate_e = 120
machine_max_feedrate_x = 500
machine_max_feedrate_y = 500
machine_max_feedrate_z = 12
machine_max_jerk_e = 2.5
machine_max_jerk_x = 10
machine_max_jerk_y = 10
machine_max_jerk_z = 0.2
machine_min_extruding_rate = 0
machine_min_travel_rate = 0
default_print_profile = 0.15mm OPTIMAL MK2.5
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_PRUSA3D\nPRINTER_MODEL_MK2.5\n
single_extruder_multi_material = 1
# The 5x nozzle diameter defines the number of extruders. Other extruder parameters
# (for example the retract values) are duplicaed from the first value, so they do not need
# to be defined explicitely.
nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n
end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200; home X axis\nM84 ; disable motors\n
# XXXXXXXXXXXXXXXXX # XXXXXXXXXXXXXXXXX
# XXX--- MK3 ---XXX # XXX--- MK3 ---XXX
@ -1622,9 +1931,9 @@ remaining_times = 1
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_PRUSA3D\nPRINTER_MODEL_MK3\n 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_PRUSA3D\nPRINTER_MODEL_MK3\n
retract_lift_below = 209 retract_lift_below = 209
max_print_height = 210 max_print_height = 210
start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height==0.05}100{else}95{endif} start_gcode = M115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
printer_model = MK3 printer_model = MK3
default_print_profile = 0.15mm OPTIMAL MK3 default_print_profile = 0.15mm QUALITY MK3
[printer:Original Prusa i3 MK3 0.25 nozzle] [printer:Original Prusa i3 MK3 0.25 nozzle]
inherits = Original Prusa i3 MK3 inherits = Original Prusa i3 MK3
@ -1642,6 +1951,18 @@ min_layer_height = 0.1
printer_variant = 0.6 printer_variant = 0.6
default_print_profile = 0.15mm OPTIMAL 0.6 nozzle MK3 default_print_profile = 0.15mm OPTIMAL 0.6 nozzle MK3
[printer:Original Prusa i3 MK3S]
inherits = Original Prusa i3 MK3
printer_model = MK3S
[printer:Original Prusa i3 MK3S 0.25 nozzle]
inherits = Original Prusa i3 MK3 0.25 nozzle
printer_model = MK3S
[printer:Original Prusa i3 MK3S 0.6 nozzle]
inherits = Original Prusa i3 MK3 0.6 nozzle
printer_model = MK3S
[printer:*mm2*] [printer:*mm2*]
inherits = Original Prusa i3 MK3 inherits = Original Prusa i3 MK3
single_extruder_multi_material = 1 single_extruder_multi_material = 1
@ -1651,7 +1972,19 @@ parking_pos_retraction = 85
retract_length_toolchange = 3 retract_length_toolchange = 3
extra_loading_move = -13 extra_loading_move = -13
printer_model = MK3MMU2 printer_model = MK3MMU2
default_print_profile = 0.15mm OPTIMAL MK3 default_print_profile = 0.15mm QUALITY MK3
default_filament_profile = Prusament PLA MMU2
[printer:*mm2s*]
inherits = Original Prusa i3 MK3
single_extruder_multi_material = 1
cooling_tube_length = 20
cooling_tube_retraction = 40
parking_pos_retraction = 85
retract_length_toolchange = 3
extra_loading_move = -25
printer_model = MK3SMMU2S
default_print_profile = 0.15mm QUALITY MK3
default_filament_profile = Prusament PLA MMU2 default_filament_profile = Prusament PLA MMU2
[printer:Original Prusa i3 MK3 MMU2 Single] [printer:Original Prusa i3 MK3 MMU2 Single]
@ -1672,6 +2005,21 @@ extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n
end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200; home X axis\nM84 ; disable motors\n end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200; home X axis\nM84 ; disable motors\n
[printer:Original Prusa i3 MK3S MMU2S Single]
inherits = *mm2s*
single_extruder_multi_material = 0
default_filament_profile = Prusament PLA
start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n
end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors
[printer:Original Prusa i3 MK3S MMU2S]
inherits = *mm2s*
machine_max_acceleration_e = 8000,8000
nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
start_gcode = M107\nM115 U3.5.1 ; tell printer latest fw version\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG92 E0.0\n
end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200; home X axis\nM84 ; disable motors\n
[printer:Original Prusa SL1] [printer:Original Prusa SL1]
printer_technology = SLA printer_technology = SLA
printer_model = SL1 printer_model = SL1

View file

@ -1333,6 +1333,8 @@ void Transformation::set_rotation(const Vec3d& rotation)
void Transformation::set_rotation(Axis axis, double rotation) void Transformation::set_rotation(Axis axis, double rotation)
{ {
rotation = angle_to_0_2PI(rotation); rotation = angle_to_0_2PI(rotation);
if (is_approx(std::abs(rotation), 2.0 * (double)PI))
rotation = 0.0;
if (m_rotation(axis) != rotation) if (m_rotation(axis) != rotation)
{ {

View file

@ -1445,7 +1445,7 @@ int ModelVolume::extruder_id() const
int extruder_id = -1; int extruder_id = -1;
if (this->is_model_part()) { if (this->is_model_part()) {
const ConfigOption *opt = this->config.option("extruder"); const ConfigOption *opt = this->config.option("extruder");
if (opt == nullptr) if ((opt == nullptr) || (opt->getInt() == 0))
opt = this->object->config.option("extruder"); opt = this->object->config.option("extruder");
extruder_id = (opt == nullptr) ? 0 : opt->getInt(); extruder_id = (opt == nullptr) ? 0 : opt->getInt();
} }

View file

@ -1137,6 +1137,9 @@ std::string Print::validate() const
// Apply the same transformations we apply to the actual meshes when slicing them. // Apply the same transformations we apply to the actual meshes when slicing them.
object->model_object()->instances.front()->transform_polygon(&convex_hull); object->model_object()->instances.front()->transform_polygon(&convex_hull);
// Grow convex hull with the clearance margin. // Grow convex hull with the clearance margin.
// FIXME: Arrangement has different parameters for offsetting (jtMiter, limit 2)
// which causes that the warning will be showed after arrangement with the
// appropriate object distance. Even if I set this to jtMiter the warning still shows up.
convex_hull = offset(convex_hull, scale_(m_config.extruder_clearance_radius.value)/2, jtRound, scale_(0.1)).front(); convex_hull = offset(convex_hull, scale_(m_config.extruder_clearance_radius.value)/2, jtRound, scale_(0.1)).front();
// Now we check that no instance of convex_hull intersects any of the previously checked object instances. // Now we check that no instance of convex_hull intersects any of the previously checked object instances.
for (const Point &copy : object->m_copies) { for (const Point &copy : object->m_copies) {

View file

@ -42,22 +42,27 @@ namespace Slic3r {
static boost::log::trivial::severity_level logSeverity = boost::log::trivial::error; static boost::log::trivial::severity_level logSeverity = boost::log::trivial::error;
void set_logging_level(unsigned int level) static boost::log::trivial::severity_level level_to_boost(unsigned level)
{ {
switch (level) { switch (level) {
// Report fatal errors only. // Report fatal errors only.
case 0: logSeverity = boost::log::trivial::fatal; break; case 0: return boost::log::trivial::fatal;
// Report fatal errors and errors. // Report fatal errors and errors.
case 1: logSeverity = boost::log::trivial::error; break; case 1: return boost::log::trivial::error;
// Report fatal errors, errors and warnings. // Report fatal errors, errors and warnings.
case 2: logSeverity = boost::log::trivial::warning; break; case 2: return boost::log::trivial::warning;
// Report all errors, warnings and infos. // Report all errors, warnings and infos.
case 3: logSeverity = boost::log::trivial::info; break; case 3: return boost::log::trivial::info;
// Report all errors, warnings, infos and debugging. // Report all errors, warnings, infos and debugging.
case 4: logSeverity = boost::log::trivial::debug; break; case 4: return boost::log::trivial::debug;
// Report everyting including fine level tracing information. // Report everyting including fine level tracing information.
default: logSeverity = boost::log::trivial::trace; break; default: return boost::log::trivial::trace;
} }
}
void set_logging_level(unsigned int level)
{
logSeverity = level_to_boost(level);
boost::log::core::get()->set_filter boost::log::core::get()->set_filter
( (
@ -73,6 +78,7 @@ unsigned get_logging_level()
case boost::log::trivial::warning : return 2; case boost::log::trivial::warning : return 2;
case boost::log::trivial::info : return 3; case boost::log::trivial::info : return 3;
case boost::log::trivial::debug : return 4; case boost::log::trivial::debug : return 4;
case boost::log::trivial::trace : return 5;
default: return 1; default: return 1;
} }
} }
@ -88,21 +94,7 @@ static struct RunOnInit {
void trace(unsigned int level, const char *message) void trace(unsigned int level, const char *message)
{ {
boost::log::trivial::severity_level severity = boost::log::trivial::trace; boost::log::trivial::severity_level severity = level_to_boost(level);
switch (level) {
// Report fatal errors only.
case 0: severity = boost::log::trivial::fatal; break;
// Report fatal errors and errors.
case 1: severity = boost::log::trivial::error; break;
// Report fatal errors, errors and warnings.
case 2: severity = boost::log::trivial::warning; break;
// Report all errors, warnings and infos.
case 3: severity = boost::log::trivial::info; break;
// Report all errors, warnings, infos and debugging.
case 4: severity = boost::log::trivial::debug; break;
// Report everyting including fine level tracing information.
default: severity = boost::log::trivial::trace; break;
}
BOOST_LOG_STREAM_WITH_PARAMS(::boost::log::trivial::logger::get(),\ BOOST_LOG_STREAM_WITH_PARAMS(::boost::log::trivial::logger::get(),\
(::boost::log::keywords::severity = severity)) << message; (::boost::log::keywords::severity = severity)) << message;

File diff suppressed because it is too large Load diff

View file

@ -6,6 +6,7 @@
#include <vector> #include <vector>
#include <set> #include <set>
#include <unordered_map> #include <unordered_map>
#include <functional>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <wx/sizer.h> #include <wx/sizer.h>
@ -13,6 +14,7 @@
#include <wx/button.h> #include <wx/button.h>
#include <wx/choice.h> #include <wx/choice.h>
#include <wx/spinctrl.h> #include <wx/spinctrl.h>
#include <wx/textctrl.h>
#include "libslic3r/PrintConfig.hpp" #include "libslic3r/PrintConfig.hpp"
#include "slic3r/Utils/PresetUpdater.hpp" #include "slic3r/Utils/PresetUpdater.hpp"
@ -34,8 +36,13 @@ enum {
BTN_SPACING = 10, BTN_SPACING = 10,
INDENT_SPACING = 30, INDENT_SPACING = 30,
VERTICAL_SPACING = 10, VERTICAL_SPACING = 10,
MAX_COLS = 4,
ROW_SPACING = 75,
}; };
typedef std::function<bool(const VendorProfile::PrinterModel&)> ModelFilter;
struct PrinterPicker: wxPanel struct PrinterPicker: wxPanel
{ {
struct Checkbox : wxCheckBox struct Checkbox : wxCheckBox
@ -52,13 +59,18 @@ struct PrinterPicker: wxPanel
const std::string vendor_id; const std::string vendor_id;
std::vector<Checkbox*> cboxes; std::vector<Checkbox*> cboxes;
unsigned variants_checked; std::vector<Checkbox*> cboxes_alt;
PrinterPicker(wxWindow *parent, const VendorProfile &vendor, const AppConfig &appconfig_vendors); PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxString title, size_t max_cols, const AppConfig &appconfig_vendors, const ModelFilter &filter);
PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxString title, size_t max_cols, const AppConfig &appconfig_vendors);
void select_all(bool select); void select_all(bool select, bool alternates = false);
void select_one(size_t i, bool select); void select_one(size_t i, bool select);
void on_checkbox(const Checkbox *cbox, bool checked); void on_checkbox(const Checkbox *cbox, bool checked);
int get_width() const { return width; }
private:
int width;
}; };
struct ConfigWizardPage: wxPanel struct ConfigWizardPage: wxPanel
@ -66,15 +78,11 @@ struct ConfigWizardPage: wxPanel
ConfigWizard *parent; ConfigWizard *parent;
const wxString shortname; const wxString shortname;
wxBoxSizer *content; wxBoxSizer *content;
const unsigned indent;
ConfigWizardPage(ConfigWizard *parent, wxString title, wxString shortname); ConfigWizardPage(ConfigWizard *parent, wxString title, wxString shortname, unsigned indent = 0);
virtual ~ConfigWizardPage(); virtual ~ConfigWizardPage();
ConfigWizardPage* page_prev() const { return p_prev; }
ConfigWizardPage* page_next() const { return p_next; }
ConfigWizardPage* chain(ConfigWizardPage *page);
template<class T> template<class T>
void append(T *thing, int proportion = 0, int flag = wxEXPAND|wxTOP|wxBOTTOM, int border = 10) void append(T *thing, int proportion = 0, int flag = wxEXPAND|wxTOP|wxBOTTOM, int border = 10)
{ {
@ -86,31 +94,49 @@ struct ConfigWizardPage: wxPanel
ConfigWizard::priv *wizard_p() const { return parent->p.get(); } ConfigWizard::priv *wizard_p() const { return parent->p.get(); }
virtual bool Show(bool show = true);
virtual bool Hide() { return Show(false); }
virtual wxPanel* extra_buttons() { return nullptr; }
virtual void on_page_set() {}
virtual void apply_custom_config(DynamicPrintConfig &config) {} virtual void apply_custom_config(DynamicPrintConfig &config) {}
void enable_next(bool enable);
private:
ConfigWizardPage *p_prev;
ConfigWizardPage *p_next;
}; };
struct PageWelcome: ConfigWizardPage struct PageWelcome: ConfigWizardPage
{ {
PrinterPicker *printer_picker;
wxPanel *others_buttons;
wxCheckBox *cbox_reset; wxCheckBox *cbox_reset;
PageWelcome(ConfigWizard *parent, bool check_first_variant); PageWelcome(ConfigWizard *parent);
virtual wxPanel* extra_buttons() { return others_buttons; }
virtual void on_page_set();
bool reset_user_profile() const { return cbox_reset != nullptr ? cbox_reset->GetValue() : false; } bool reset_user_profile() const { return cbox_reset != nullptr ? cbox_reset->GetValue() : false; }
void on_variant_checked(); };
struct PagePrinters: ConfigWizardPage
{
enum Technology {
// Bitflag equivalent of PrinterTechnology
T_FFF = 0x1,
T_SLA = 0x2,
T_Any = ~0,
};
std::vector<PrinterPicker *> printer_pickers;
PagePrinters(ConfigWizard *parent, wxString title, wxString shortname, const VendorProfile &vendor, unsigned indent, Technology technology);
void select_all(bool select, bool alternates = false);
int get_width() const;
};
struct PageCustom: ConfigWizardPage
{
PageCustom(ConfigWizard *parent);
bool custom_wanted() const { return cb_custom->GetValue(); }
std::string profile_name() const { return into_u8(tc_profile_name->GetValue()); }
private:
static const char* default_profile_name;
wxCheckBox *cb_custom;
wxTextCtrl *tc_profile_name;
wxString profile_name_prev;
}; };
struct PageUpdate: ConfigWizardPage struct PageUpdate: ConfigWizardPage
@ -127,10 +153,7 @@ struct PageVendors: ConfigWizardPage
PageVendors(ConfigWizard *parent); PageVendors(ConfigWizard *parent);
virtual void on_page_set();
void on_vendor_pick(size_t i); void on_vendor_pick(size_t i);
void on_variant_checked();
}; };
struct PageFirmware: ConfigWizardPage struct PageFirmware: ConfigWizardPage
@ -174,21 +197,51 @@ class ConfigWizardIndex: public wxPanel
public: public:
ConfigWizardIndex(wxWindow *parent); ConfigWizardIndex(wxWindow *parent);
void load_items(ConfigWizardPage *firstpage); void add_page(ConfigWizardPage *page);
void set_active(ConfigWizardPage *page); void add_label(wxString label, unsigned indent = 0);
size_t active_item() const { return item_active; }
ConfigWizardPage* active_page() const;
bool active_is_last() const { return item_active < items.size() && item_active == last_page; }
void go_prev();
void go_next();
void go_to(size_t i);
void go_to(ConfigWizardPage *page);
void clear();
private: private:
struct Item
{
wxString label;
unsigned indent;
ConfigWizardPage *page; // nullptr page => label-only item
bool operator==(ConfigWizardPage *page) const { return this->page == page; }
};
int em;
int em_h;
const wxBitmap bg; const wxBitmap bg;
const wxBitmap bullet_black; const wxBitmap bullet_black;
const wxBitmap bullet_blue; const wxBitmap bullet_blue;
const wxBitmap bullet_white; const wxBitmap bullet_white;
int text_height;
std::vector<wxString> items; std::vector<Item> items;
std::vector<wxString>::const_iterator item_active; size_t item_active;
ssize_t item_hover;
size_t last_page;
int item_height() const { return std::max(bullet_black.GetSize().GetHeight(), em) + em; }
void on_paint(wxPaintEvent &evt); void on_paint(wxPaintEvent &evt);
void on_mouse_move(wxMouseEvent &evt);
}; };
wxDEFINE_EVENT(EVT_INDEX_PAGE, wxCommandEvent);
struct ConfigWizard::priv struct ConfigWizard::priv
{ {
ConfigWizard *q; ConfigWizard *q;
@ -209,8 +262,13 @@ struct ConfigWizard::priv
wxButton *btn_cancel = nullptr; wxButton *btn_cancel = nullptr;
PageWelcome *page_welcome = nullptr; PageWelcome *page_welcome = nullptr;
PagePrinters *page_fff = nullptr;
PagePrinters *page_msla = nullptr;
PageCustom *page_custom = nullptr;
PageUpdate *page_update = nullptr; PageUpdate *page_update = nullptr;
PageVendors *page_vendors = nullptr; PageVendors *page_vendors = nullptr; // XXX: ?
// Custom setup pages
PageFirmware *page_firmware = nullptr; PageFirmware *page_firmware = nullptr;
PageBedShape *page_bed = nullptr; PageBedShape *page_bed = nullptr;
PageDiameters *page_diams = nullptr; PageDiameters *page_diams = nullptr;
@ -218,17 +276,14 @@ struct ConfigWizard::priv
priv(ConfigWizard *q) : q(q) {} priv(ConfigWizard *q) : q(q) {}
void load_pages(bool custom_setup);
bool check_first_variant() const;
void load_vendors(); void load_vendors();
void add_page(ConfigWizardPage *page); void add_page(ConfigWizardPage *page);
void index_refresh();
void set_page(ConfigWizardPage *page);
void layout_fit();
void go_prev() { if (page_current != nullptr) { set_page(page_current->page_prev()); } }
void go_next() { if (page_current != nullptr) { set_page(page_current->page_next()); } }
void enable_next(bool enable); void enable_next(bool enable);
void on_other_vendors(); void on_custom_setup(bool custom_wanted);
void on_custom_setup();
void apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater); void apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater);
}; };

View file

@ -145,6 +145,10 @@ void Field::get_value_by_opt_type(wxString& str)
double val; double val;
// Replace the first occurence of comma in decimal number. // Replace the first occurence of comma in decimal number.
str.Replace(",", ".", false); str.Replace(",", ".", false);
if (str == ".")
val = 0.0;
else
{
if (!str.ToCDouble(&val)) if (!str.ToCDouble(&val))
{ {
show_error(m_parent, _(L("Invalid numeric input."))); show_error(m_parent, _(L("Invalid numeric input.")));
@ -157,6 +161,7 @@ void Field::get_value_by_opt_type(wxString& str)
if (val > m_opt.max) val = m_opt.max; if (val > m_opt.max) val = m_opt.max;
set_value(double_to_string(val), true); set_value(double_to_string(val), true);
} }
}
m_value = val; m_value = val;
break; } break; }
case coString: case coString:
@ -459,7 +464,7 @@ void SpinCtrl::BUILD() {
// # As a workaround, we get the new value from $event->GetString and store // # As a workaround, we get the new value from $event->GetString and store
// # here temporarily so that we can return it from $self->get_value // # here temporarily so that we can return it from $self->get_value
std::string value = e.GetString().utf8_str().data(); std::string value = e.GetString().utf8_str().data();
if (is_matched(value, "^\\d+$")) if (is_matched(value, "^\\-?\\d+$"))
tmp_value = std::stoi(value); tmp_value = std::stoi(value);
else tmp_value = -9999; else tmp_value = -9999;
#ifdef __WXOSX__ #ifdef __WXOSX__
@ -475,7 +480,7 @@ void SpinCtrl::BUILD() {
void SpinCtrl::propagate_value() void SpinCtrl::propagate_value()
{ {
if (tmp_value < 0) if (tmp_value == -9999)
on_kill_focus(); on_kill_focus();
else if (boost::any_cast<int>(m_value) != tmp_value) else if (boost::any_cast<int>(m_value) != tmp_value)
on_change_field(); on_change_field();
@ -867,8 +872,8 @@ void StaticText::BUILD()
if (m_opt.height >= 0) size.SetHeight(m_opt.height); if (m_opt.height >= 0) size.SetHeight(m_opt.height);
if (m_opt.width >= 0) size.SetWidth(m_opt.width); if (m_opt.width >= 0) size.SetWidth(m_opt.width);
wxString legend(static_cast<const ConfigOptionString*>(m_opt.default_value)->value); const wxString legend(static_cast<const ConfigOptionString*>(m_opt.default_value)->value);
auto temp = new wxStaticText(m_parent, wxID_ANY, legend, wxDefaultPosition, size); auto temp = new wxStaticText(m_parent, wxID_ANY, legend, wxDefaultPosition, size, wxST_ELLIPSIZE_MIDDLE);
temp->SetFont(wxGetApp().bold_font()); temp->SetFont(wxGetApp().bold_font());
// // recast as a wxWindow to fit the calling convention // // recast as a wxWindow to fit the calling convention

View file

@ -141,8 +141,8 @@ bool GeometryBuffer::set_from_triangles(const Polygons& triangles, float z, bool
float inv_size_y = -1.0f / size_y; float inv_size_y = -1.0f / size_y;
for (unsigned int i = 0; i < m_tex_coords.size(); i += 2) for (unsigned int i = 0; i < m_tex_coords.size(); i += 2)
{ {
m_tex_coords[i] *= inv_size_x; m_tex_coords[i] = (m_tex_coords[i] - min_x) * inv_size_x;
m_tex_coords[i + 1] *= inv_size_y; m_tex_coords[i + 1] = (m_tex_coords[i + 1] - min_y) * inv_size_y;
} }
} }
} }
@ -595,11 +595,25 @@ void GLCanvas3D::Bed::_render_prusa(const std::string &key, float theta) const
#endif // ENABLE_PRINT_BED_MODELS #endif // ENABLE_PRINT_BED_MODELS
{ {
std::string tex_path = resources_dir() + "/icons/bed/" + key; std::string tex_path = resources_dir() + "/icons/bed/" + key;
// use higher resolution images if graphic card allows
GLint max_tex_size;
::glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size);
// temporary set to lowest resolution
max_tex_size = 2048;
if (max_tex_size >= 8192)
tex_path += "_8192";
else if (max_tex_size >= 4096)
tex_path += "_4096";
#if ENABLE_PRINT_BED_MODELS #if ENABLE_PRINT_BED_MODELS
std::string model_path = resources_dir() + "/models/" + key; std::string model_path = resources_dir() + "/models/" + key;
#endif // ENABLE_PRINT_BED_MODELS #endif // ENABLE_PRINT_BED_MODELS
#if ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES #if ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES
// use anisotropic filter if graphic card allows
GLfloat max_anisotropy = 0.0f; GLfloat max_anisotropy = 0.0f;
if (glewIsSupported("GL_EXT_texture_filter_anisotropic")) if (glewIsSupported("GL_EXT_texture_filter_anisotropic"))
::glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy); ::glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy);
@ -646,11 +660,17 @@ void GLCanvas3D::Bed::_render_prusa(const std::string &key, float theta) const
{ {
filename = model_path + "_bed.stl"; filename = model_path + "_bed.stl";
if ((m_model.get_filename() != filename) && m_model.init_from_file(filename, useVBOs)) { if ((m_model.get_filename() != filename) && m_model.init_from_file(filename, useVBOs)) {
Vec3d offset = m_bounding_box.center() - Vec3d(0.0, 0.0, 0.1 + 0.5 * m_model.get_bounding_box().size()(2)); Vec3d offset = m_bounding_box.center() - Vec3d(0.0, 0.0, 0.5 * m_model.get_bounding_box().size()(2));
if (key == "mk2") if (key == "mk2")
offset.y() += 15. / 2.; // hardcoded value to match the stl model
offset += Vec3d(0.0, 7.5, -0.03);
else if (key == "mk3") else if (key == "mk3")
offset += Vec3d(0., (19. - 8.) / 2., 2.); // hardcoded value to match the stl model
offset += Vec3d(0.0, 5.5, 2.43);
else if (key == "sl1")
// hardcoded value to match the stl model
offset += Vec3d(0.0, 0.0, -0.03);
m_model.center_around(offset); m_model.center_around(offset);
} }
@ -5348,9 +5368,16 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
p = p->GetParent(); p = p->GetParent();
auto *top_level_wnd = dynamic_cast<wxTopLevelWindow*>(p); auto *top_level_wnd = dynamic_cast<wxTopLevelWindow*>(p);
if (top_level_wnd && top_level_wnd->IsActive()) if (top_level_wnd && top_level_wnd->IsActive())
{
m_canvas->SetFocus(); m_canvas->SetFocus();
}
// forces a frame render to ensure that m_hover_volume_id is updated even when the user right clicks while
// the context menu is shown, ensuring it to disappear if the mouse is outside any volume and to
// change the volume hover state if any is under the mouse
m_mouse.position = pos.cast<double>();
render();
}
}
m_mouse.set_start_position_2D_as_invalid(); m_mouse.set_start_position_2D_as_invalid();
//#endif //#endif
} }
@ -5479,7 +5506,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
} }
// propagate event through callback // propagate event through callback
if (m_hover_volume_id != -1) if (m_hover_volume_id != -1)
{ {
if (evt.LeftDown() && m_moving_enabled && (m_mouse.drag.move_volume_idx == -1)) if (evt.LeftDown() && m_moving_enabled && (m_mouse.drag.move_volume_idx == -1))
@ -5498,9 +5524,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
} }
else if (evt.RightDown()) else if (evt.RightDown())
{ {
m_mouse.position = pos.cast<double>();
// forces a frame render to ensure that m_hover_volume_id is updated even when the user right clicks while // forces a frame render to ensure that m_hover_volume_id is updated even when the user right clicks while
// the context menu is already shown, ensuring it to disappear if the mouse is outside any volume // the context menu is already shown
m_mouse.position = Vec2d((double)pos(0), (double)pos(1));
render(); render();
if (m_hover_volume_id != -1) if (m_hover_volume_id != -1)
{ {
@ -5514,14 +5540,14 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT));
_update_gizmos_data(); _update_gizmos_data();
wxGetApp().obj_manipul()->update_settings_value(m_selection); wxGetApp().obj_manipul()->update_settings_value(m_selection);
// forces a frame render to update the view before the context menu is shown // // forces a frame render to update the view before the context menu is shown
render(); // render();
Vec2d logical_pos = pos.cast<double>(); Vec2d logical_pos = pos.cast<double>();
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
const float factor = m_retina_helper->get_scale_factor(); const float factor = m_retina_helper->get_scale_factor();
logical_pos = logical_pos.cwiseQuotient(Vec2d(factor, factor)); logical_pos = logical_pos.cwiseQuotient(Vec2d(factor, factor));
#endif #endif // ENABLE_RETINA_GL
post_event(Vec2dEvent(EVT_GLCANVAS_RIGHT_CLICK, logical_pos)); post_event(Vec2dEvent(EVT_GLCANVAS_RIGHT_CLICK, logical_pos));
} }
} }
@ -5817,7 +5843,7 @@ void GLCanvas3D::set_tooltip(const std::string& tooltip) const
else else
t->SetTip(tooltip); t->SetTip(tooltip);
} }
else else if (!tooltip.empty()) // Avoid "empty" tooltips => unset of the empty tooltip leads to application crash under OSX
m_canvas->SetToolTip(tooltip); m_canvas->SetToolTip(tooltip);
} }
} }
@ -6150,7 +6176,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "add"; item.name = "add";
item.tooltip = GUI::L_str("Add...") + " [" + GUI::shortkey_ctrl_prefix() + "I]"; item.tooltip = GUI::L_str("Add...") + " [" + GUI::shortkey_ctrl_prefix() + "I]";
item.sprite_id = 0; item.sprite_id = 0;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_ADD; item.action_event = EVT_GLTOOLBAR_ADD;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;
@ -6158,7 +6183,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "delete"; item.name = "delete";
item.tooltip = GUI::L_str("Delete") + " [Del]"; item.tooltip = GUI::L_str("Delete") + " [Del]";
item.sprite_id = 1; item.sprite_id = 1;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_DELETE; item.action_event = EVT_GLTOOLBAR_DELETE;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;
@ -6166,7 +6190,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "deleteall"; item.name = "deleteall";
item.tooltip = GUI::L_str("Delete all") + " [" + GUI::shortkey_ctrl_prefix() + "Del]"; item.tooltip = GUI::L_str("Delete all") + " [" + GUI::shortkey_ctrl_prefix() + "Del]";
item.sprite_id = 2; item.sprite_id = 2;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_DELETE_ALL; item.action_event = EVT_GLTOOLBAR_DELETE_ALL;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;
@ -6174,7 +6197,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "arrange"; item.name = "arrange";
item.tooltip = GUI::L_str("Arrange [A]"); item.tooltip = GUI::L_str("Arrange [A]");
item.sprite_id = 3; item.sprite_id = 3;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_ARRANGE; item.action_event = EVT_GLTOOLBAR_ARRANGE;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;
@ -6185,7 +6207,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "more"; item.name = "more";
item.tooltip = GUI::L_str("Add instance [+]"); item.tooltip = GUI::L_str("Add instance [+]");
item.sprite_id = 4; item.sprite_id = 4;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_MORE; item.action_event = EVT_GLTOOLBAR_MORE;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;
@ -6193,7 +6214,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "fewer"; item.name = "fewer";
item.tooltip = GUI::L_str("Remove instance [-]"); item.tooltip = GUI::L_str("Remove instance [-]");
item.sprite_id = 5; item.sprite_id = 5;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_FEWER; item.action_event = EVT_GLTOOLBAR_FEWER;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;
@ -6204,7 +6224,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "splitobjects"; item.name = "splitobjects";
item.tooltip = GUI::L_str("Split to objects"); item.tooltip = GUI::L_str("Split to objects");
item.sprite_id = 6; item.sprite_id = 6;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_SPLIT_OBJECTS; item.action_event = EVT_GLTOOLBAR_SPLIT_OBJECTS;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;
@ -6212,7 +6231,6 @@ bool GLCanvas3D::_init_toolbar()
item.name = "splitvolumes"; item.name = "splitvolumes";
item.tooltip = GUI::L_str("Split to parts"); item.tooltip = GUI::L_str("Split to parts");
item.sprite_id = 8; item.sprite_id = 8;
item.is_toggable = false;
item.action_event = EVT_GLTOOLBAR_SPLIT_VOLUMES; item.action_event = EVT_GLTOOLBAR_SPLIT_VOLUMES;
if (!m_toolbar.add_item(item)) if (!m_toolbar.add_item(item))
return false; return false;

View file

@ -355,21 +355,6 @@ boost::filesystem::path into_path(const wxString &str)
return boost::filesystem::path(str.wx_str()); return boost::filesystem::path(str.wx_str());
} }
bool get_current_screen_size(wxWindow *window, unsigned &width, unsigned &height)
{
const auto idx = wxDisplay::GetFromWindow(window);
if (idx == wxNOT_FOUND) {
return false;
}
wxDisplay display(idx);
const auto disp_size = display.GetClientArea();
width = disp_size.GetWidth();
height = disp_size.GetHeight();
return true;
}
void about() void about()
{ {
AboutDialog dlg; AboutDialog dlg;

View file

@ -71,9 +71,6 @@ wxString from_path(const boost::filesystem::path &path);
// boost path from wxString // boost path from wxString
boost::filesystem::path into_path(const wxString &str); boost::filesystem::path into_path(const wxString &str);
// Returns the dimensions of the screen on which the main frame is displayed
bool get_current_screen_size(wxWindow *window, unsigned &width, unsigned &height);
// Display an About dialog // Display an About dialog
extern void about(); extern void about();
// Ask the destop to open the datadir using the default file explorer. // Ask the destop to open the datadir using the default file explorer.

View file

@ -3,8 +3,10 @@
#include "GUI_ObjectManipulation.hpp" #include "GUI_ObjectManipulation.hpp"
#include "I18N.hpp" #include "I18N.hpp"
#include <exception>
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
#include <boost/log/trivial.hpp>
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
#include <wx/imagpng.h> #include <wx/imagpng.h>
@ -125,6 +127,10 @@ bool GUI_App::OnInit()
app_config->save(); app_config->save();
preset_updater = new PresetUpdater(); preset_updater = new PresetUpdater();
Bind(EVT_SLIC3R_VERSION_ONLINE, [this](const wxCommandEvent &evt) {
app_config->set("version_online", into_u8(evt.GetString()));
app_config->save();
});
load_language(); load_language();
@ -181,7 +187,6 @@ bool GUI_App::OnInit()
mainframe->Close(); mainframe->Close();
} catch (const std::exception &ex) { } catch (const std::exception &ex) {
show_error(nullptr, ex.what()); show_error(nullptr, ex.what());
mainframe->Close();
} }
}); });
@ -351,21 +356,10 @@ void GUI_App::persist_window_geometry(wxTopLevelWindow *window)
}); });
window_pos_restore(window, name); window_pos_restore(window, name);
#ifdef _WIN32
// On windows, the wxEVT_SHOW is not received if the window is created maximized on_window_geometry(window, [=]() {
// cf. https://groups.google.com/forum/#!topic/wx-users/c7ntMt6piRI
// so we sanitize the position right away
window_pos_sanitize(window);
#else
// On other platforms on the other hand it's needed to wait before the window is actually on screen
// and some initial round of events is complete otherwise position / display index is not reported correctly.
window->Bind(wxEVT_SHOW, [=](wxShowEvent &event) {
CallAfter([=]() {
window_pos_sanitize(window); window_pos_sanitize(window);
}); });
event.Skip();
});
#endif
} }
void GUI_App::load_project(wxWindow *parent, wxString& input_file) void GUI_App::load_project(wxWindow *parent, wxString& input_file)
@ -573,7 +567,10 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _(L("Simple")), _(L("Simple View Mode"))); mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _(L("Simple")), _(L("Simple View Mode")));
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _(L("Advanced")), _(L("Advanced View Mode"))); mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _(L("Advanced")), _(L("Advanced View Mode")));
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeExpert, _(L("Expert")), _(L("Expert View Mode"))); mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeExpert, _(L("Expert")), _(L("Expert View Mode")));
mode_menu->Check(config_id_base + ConfigMenuModeSimple + get_mode(), true); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Check(get_mode() == comSimple); }, config_id_base + ConfigMenuModeSimple);
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Check(get_mode() == comAdvanced); }, config_id_base + ConfigMenuModeAdvanced);
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Check(get_mode() == comExpert); }, config_id_base + ConfigMenuModeExpert);
local_menu->AppendSubMenu(mode_menu, _(L("Mode")), _(L("Slic3r View Mode"))); local_menu->AppendSubMenu(mode_menu, _(L("Mode")), _(L("Slic3r View Mode")));
local_menu->AppendSeparator(); local_menu->AppendSeparator();
local_menu->Append(config_id_base + ConfigMenuLanguage, _(L("Change Application &Language"))); local_menu->Append(config_id_base + ConfigMenuLanguage, _(L("Change Application &Language")));
@ -692,6 +689,23 @@ void GUI_App::load_current_presets()
} }
} }
bool GUI_App::OnExceptionInMainLoop()
{
try {
throw;
} catch (const std::exception &ex) {
const std::string error = (boost::format("Uncaught exception: %1%") % ex.what()).str();
BOOST_LOG_TRIVIAL(error) << error;
show_error(nullptr, from_u8(error));
} catch (...) {
const char *error = "Uncaught exception: Unknown error";
BOOST_LOG_TRIVIAL(error) << error;
show_error(nullptr, from_u8(error));
}
return false;
}
#ifdef __APPLE__ #ifdef __APPLE__
// wxWidgets override to get an event on open files. // wxWidgets override to get an event on open files.
void GUI_App::MacOpenFiles(const wxArrayString &fileNames) void GUI_App::MacOpenFiles(const wxArrayString &fileNames)

View file

@ -137,6 +137,8 @@ public:
bool checked_tab(Tab* tab); bool checked_tab(Tab* tab);
void load_current_presets(); void load_current_presets();
virtual bool OnExceptionInMainLoop();
#ifdef __APPLE__ #ifdef __APPLE__
// wxWidgets override to get an event on open files. // wxWidgets override to get an event on open files.
void MacOpenFiles(const wxArrayString &fileNames) override; void MacOpenFiles(const wxArrayString &fileNames) override;

View file

@ -42,10 +42,9 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) :
// Objects(sub-objects) name // Objects(sub-objects) name
def.label = L("Name"); def.label = L("Name");
// def.type = coString;
def.gui_type = "legend"; def.gui_type = "legend";
def.tooltip = L("Object name"); def.tooltip = L("Object name");
def.full_width = true; def.width = 200;
def.default_value = new ConfigOptionString{ " " }; def.default_value = new ConfigOptionString{ " " };
m_og->append_single_option_line(Option(def, "object_name")); m_og->append_single_option_line(Option(def, "object_name"));
@ -73,14 +72,8 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) :
def.default_value = new ConfigOptionFloat(0.0); def.default_value = new ConfigOptionFloat(0.0);
def.width = 50; def.width = 50;
if (option_name == "Rotation")
{
def.min = -360;
def.max = 360;
}
// Add "uniform scaling" button in front of "Scale" option // Add "uniform scaling" button in front of "Scale" option
else if (option_name == "Scale") { if (option_name == "Scale") {
line.near_label_widget = [this](wxWindow* parent) { line.near_label_widget = [this](wxWindow* parent) {
auto btn = new PrusaLockButton(parent, wxID_ANY); auto btn = new PrusaLockButton(parent, wxID_ANY);
btn->Bind(wxEVT_BUTTON, [btn, this](wxCommandEvent &event){ btn->Bind(wxEVT_BUTTON, [btn, this](wxCommandEvent &event){
@ -293,13 +286,13 @@ void ObjectManipulation::update_if_dirty()
deg_rotation(i) = Geometry::rad2deg(m_new_rotation(i)); deg_rotation(i) = Geometry::rad2deg(m_new_rotation(i));
} }
if (m_cache.rotation(0) != m_new_rotation(0)) if ((m_cache.rotation(0) != m_new_rotation(0)) || (m_new_rotation(0) == 0.0))
m_og->set_value("rotation_x", double_to_string(deg_rotation(0), 2)); m_og->set_value("rotation_x", double_to_string(deg_rotation(0), 2));
if (m_cache.rotation(1) != m_new_rotation(1)) if ((m_cache.rotation(1) != m_new_rotation(1)) || (m_new_rotation(1) == 0.0))
m_og->set_value("rotation_y", double_to_string(deg_rotation(1), 2)); m_og->set_value("rotation_y", double_to_string(deg_rotation(1), 2));
if (m_cache.rotation(2) != m_new_rotation(2)) if ((m_cache.rotation(2) != m_new_rotation(2)) || (m_new_rotation(2) == 0.0))
m_og->set_value("rotation_z", double_to_string(deg_rotation(2), 2)); m_og->set_value("rotation_z", double_to_string(deg_rotation(2), 2));
m_cache.rotation = deg_rotation; m_cache.rotation = deg_rotation;

View file

@ -26,6 +26,28 @@ wxTopLevelWindow* find_toplevel_parent(wxWindow *window)
return nullptr; return nullptr;
} }
void on_window_geometry(wxTopLevelWindow *tlw, std::function<void()> callback)
{
#ifdef _WIN32
// On windows, the wxEVT_SHOW is not received if the window is created maximized
// cf. https://groups.google.com/forum/#!topic/wx-users/c7ntMt6piRI
// OTOH the geometry is available very soon, so we can call the callback right away
callback();
#elif defined __linux__
tlw->Bind(wxEVT_SHOW, [=](wxShowEvent &evt) {
// On Linux, the geometry is only available after wxEVT_SHOW + CallAfter
// cf. https://groups.google.com/forum/?pli=1#!topic/wx-users/fERSXdpVwAI
tlw->CallAfter([=]() { callback(); });
evt.Skip();
});
#elif defined __APPLE__
tlw->Bind(wxEVT_SHOW, [=](wxShowEvent &evt) {
callback();
evt.Skip();
});
#endif
}
CheckboxFileDialog::ExtraPanel::ExtraPanel(wxWindow *parent) CheckboxFileDialog::ExtraPanel::ExtraPanel(wxWindow *parent)
: wxPanel(parent, wxID_ANY) : wxPanel(parent, wxID_ANY)

View file

@ -4,6 +4,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <ostream> #include <ostream>
#include <functional>
#include <boost/optional.hpp> #include <boost/optional.hpp>
@ -24,6 +25,8 @@ namespace GUI {
wxTopLevelWindow* find_toplevel_parent(wxWindow *window); wxTopLevelWindow* find_toplevel_parent(wxWindow *window);
void on_window_geometry(wxTopLevelWindow *tlw, std::function<void()> callback);
class EventGuard class EventGuard
{ {

View file

@ -12,7 +12,6 @@
#include <wx/sizer.h> #include <wx/sizer.h>
#include <wx/stattext.h> #include <wx/stattext.h>
#include <wx/notebook.h>
#include <wx/button.h> #include <wx/button.h>
#include <wx/bmpcbox.h> #include <wx/bmpcbox.h>
#include <wx/statbox.h> #include <wx/statbox.h>
@ -1092,7 +1091,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
: q(q) : q(q)
, main_frame(main_frame) , main_frame(main_frame)
, config(Slic3r::DynamicPrintConfig::new_from_defaults_keys({ , config(Slic3r::DynamicPrintConfig::new_from_defaults_keys({
"bed_shape", "complete_objects", "extruder_clearance_radius", "skirts", "skirt_distance", "bed_shape", "complete_objects", "duplicate_distance", "extruder_clearance_radius", "skirts", "skirt_distance",
"brim_width", "variable_layer_height", "serial_port", "serial_speed", "host_type", "print_host", "brim_width", "variable_layer_height", "serial_port", "serial_speed", "host_type", "print_host",
"printhost_apikey", "printhost_cafile", "nozzle_diameter", "single_extruder_multi_material", "printhost_apikey", "printhost_cafile", "nozzle_diameter", "single_extruder_multi_material",
"wipe_tower", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle",
@ -1774,8 +1773,11 @@ void Plater::priv::arrange()
// FIXME: I don't know how to obtain the minimum distance, it depends // FIXME: I don't know how to obtain the minimum distance, it depends
// on printer technology. I guess the following should work but it crashes. // on printer technology. I guess the following should work but it crashes.
double dist = 6; //PrintConfig::min_object_distance(config); double dist = 6; //PrintConfig::min_object_distance(config);
if(printer_technology == ptFFF) {
dist = PrintConfig::min_object_distance(config);
}
auto min_obj_distance = static_cast<coord_t>(dist/SCALING_FACTOR); auto min_obj_distance = coord_t(dist/SCALING_FACTOR);
const auto *bed_shape_opt = config->opt<ConfigOptionPoints>("bed_shape"); const auto *bed_shape_opt = config->opt<ConfigOptionPoints>("bed_shape");

View file

@ -11,8 +11,10 @@
#include <Windows.h> #include <Windows.h>
#endif /* _MSC_VER */ #endif /* _MSC_VER */
#include <algorithm>
#include <fstream> #include <fstream>
#include <stdexcept> #include <stdexcept>
#include <unordered_map>
#include <boost/format.hpp> #include <boost/format.hpp>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp> #include <boost/filesystem/fstream.hpp>
@ -83,6 +85,16 @@ VendorProfile VendorProfile::from_ini(const boost::filesystem::path &path, bool
return VendorProfile::from_ini(tree, path, load_all); return VendorProfile::from_ini(tree, path, load_all);
} }
static const std::unordered_map<std::string, std::string> pre_family_model_map {{
{ "MK3", "MK3" },
{ "MK3MMU2", "MK3" },
{ "MK2.5", "MK2.5" },
{ "MK2.5MMU2", "MK2.5" },
{ "MK2S", "MK2" },
{ "MK2SMM", "MK2" },
{ "SL1", "SL1" },
}};
VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem::path &path, bool load_all) VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem::path &path, bool load_all)
{ {
static const std::string printer_model_key = "printer_model:"; static const std::string printer_model_key = "printer_model:";
@ -128,11 +140,21 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem
VendorProfile::PrinterModel model; VendorProfile::PrinterModel model;
model.id = section.first.substr(printer_model_key.size()); model.id = section.first.substr(printer_model_key.size());
model.name = section.second.get<std::string>("name", model.id); model.name = section.second.get<std::string>("name", model.id);
auto technology_field = section.second.get<std::string>("technology", "FFF");
const char *technology_fallback = boost::algorithm::starts_with(model.id, "SL") ? "SLA" : "FFF";
auto technology_field = section.second.get<std::string>("technology", technology_fallback);
if (! ConfigOptionEnum<PrinterTechnology>::from_string(technology_field, model.technology)) { if (! ConfigOptionEnum<PrinterTechnology>::from_string(technology_field, model.technology)) {
BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: Invalid printer technology field: `%2%`") % id % technology_field; BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: Invalid printer technology field: `%2%`") % id % technology_field;
model.technology = ptFFF; model.technology = ptFFF;
} }
model.family = section.second.get<std::string>("family", std::string());
if (model.family.empty() && res.name == "Prusa Research") {
// If no family is specified, it can be inferred for known printers
const auto from_pre_map = pre_family_model_map.find(model.id);
if (from_pre_map != pre_family_model_map.end()) { model.family = from_pre_map->second; }
}
#if 0 #if 0
// Remove SLA printers from the initial alpha. // Remove SLA printers from the initial alpha.
if (model.technology == ptSLA) if (model.technology == ptSLA)
@ -157,6 +179,20 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem
return res; return res;
} }
std::vector<std::string> VendorProfile::families() const
{
std::vector<std::string> res;
unsigned num_familiies = 0;
for (auto &model : models) {
if (std::find(res.begin(), res.end(), model.family) == res.end()) {
res.push_back(model.family);
num_familiies++;
}
}
return res;
}
// Suffix to be added to a modified preset name in the combo box. // Suffix to be added to a modified preset name in the combo box.
static std::string g_suffix_modified = " (modified)"; static std::string g_suffix_modified = " (modified)";

View file

@ -54,13 +54,16 @@ public:
std::string id; std::string id;
std::string name; std::string name;
PrinterTechnology technology; PrinterTechnology technology;
std::string family;
std::vector<PrinterVariant> variants; std::vector<PrinterVariant> variants;
PrinterVariant* variant(const std::string &name) { PrinterVariant* variant(const std::string &name) {
for (auto &v : this->variants) for (auto &v : this->variants)
if (v.name == name) if (v.name == name)
return &v; return &v;
return nullptr; return nullptr;
} }
const PrinterVariant* variant(const std::string &name) const { return const_cast<PrinterModel*>(this)->variant(name); } const PrinterVariant* variant(const std::string &name) const { return const_cast<PrinterModel*>(this)->variant(name); }
}; };
std::vector<PrinterModel> models; std::vector<PrinterModel> models;
@ -72,6 +75,7 @@ public:
static VendorProfile from_ini(const boost::property_tree::ptree &tree, const boost::filesystem::path &path, bool load_all=true); static VendorProfile from_ini(const boost::property_tree::ptree &tree, const boost::filesystem::path &path, bool load_all=true);
size_t num_variants() const { size_t n = 0; for (auto &model : models) n += model.variants.size(); return n; } size_t num_variants() const { size_t n = 0; for (auto &model : models) n += model.variants.size(); return n; }
std::vector<std::string> families() const;
bool operator< (const VendorProfile &rhs) const { return this->id < rhs.id; } bool operator< (const VendorProfile &rhs) const { return this->id < rhs.id; }
bool operator==(const VendorProfile &rhs) const { return this->id == rhs.id; } bool operator==(const VendorProfile &rhs) const { return this->id == rhs.id; }

View file

@ -244,7 +244,7 @@ void Http::priv::http_perform()
::curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, static_cast<void*>(this)); ::curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, static_cast<void*>(this));
#endif #endif
::curl_easy_setopt(curl, CURLOPT_VERBOSE, get_logging_level() >= 4); ::curl_easy_setopt(curl, CURLOPT_VERBOSE, get_logging_level() >= 5);
if (headerlist != nullptr) { if (headerlist != nullptr) {
::curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); ::curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

View file

@ -13,7 +13,6 @@
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
#include <wx/app.h> #include <wx/app.h>
#include <wx/event.h>
#include <wx/msgdlg.h> #include <wx/msgdlg.h>
#include "libslic3r/libslic3r.h" #include "libslic3r/libslic3r.h"
@ -90,9 +89,25 @@ struct Updates
std::vector<Update> updates; std::vector<Update> updates;
}; };
static Semver get_slic3r_version()
{
auto res = Semver::parse(SLIC3R_VERSION);
if (! res) {
const char *error = "Could not parse Slic3r version string: " SLIC3R_VERSION;
BOOST_LOG_TRIVIAL(error) << error;
throw std::runtime_error(error);
}
return *res;
}
wxDEFINE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent);
struct PresetUpdater::priv struct PresetUpdater::priv
{ {
const Semver ver_slic3r;
std::vector<Index> index_db; std::vector<Index> index_db;
bool enabled_version_check; bool enabled_version_check;
@ -122,12 +137,13 @@ struct PresetUpdater::priv
static void copy_file(const fs::path &from, const fs::path &to); static void copy_file(const fs::path &from, const fs::path &to);
}; };
PresetUpdater::priv::priv() : PresetUpdater::priv::priv()
had_config_update(false), : ver_slic3r(get_slic3r_version())
cache_path(fs::path(Slic3r::data_dir()) / "cache"), , had_config_update(false)
rsrc_path(fs::path(resources_dir()) / "profiles"), , cache_path(fs::path(Slic3r::data_dir()) / "cache")
vendor_path(fs::path(Slic3r::data_dir()) / "vendor"), , rsrc_path(fs::path(resources_dir()) / "profiles")
cancel(false) , vendor_path(fs::path(Slic3r::data_dir()) / "vendor")
, cancel(false)
{ {
set_download_prefs(GUI::wxGetApp().app_config); set_download_prefs(GUI::wxGetApp().app_config);
check_install_indices(); check_install_indices();
@ -209,11 +225,10 @@ void PresetUpdater::priv::sync_version() const
.on_complete([&](std::string body, unsigned /* http_status */) { .on_complete([&](std::string body, unsigned /* http_status */) {
boost::trim(body); boost::trim(body);
BOOST_LOG_TRIVIAL(info) << boost::format("Got Slic3rPE online version: `%1%`. Sending to GUI thread...") % body; BOOST_LOG_TRIVIAL(info) << boost::format("Got Slic3rPE online version: `%1%`. Sending to GUI thread...") % body;
// wxCommandEvent* evt = new wxCommandEvent(version_online_event);
// evt->SetString(body); wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE);
// GUI::get_app()->QueueEvent(evt); evt->SetString(GUI::from_u8(body));
GUI::wxGetApp().app_config->set("version_online", body); GUI::wxGetApp().QueueEvent(evt);
GUI::wxGetApp().app_config->save();
}) })
.perform_sync(); .perform_sync();
} }
@ -260,7 +275,7 @@ void PresetUpdater::priv::sync_config(const std::set<VendorProfile> vendors)
continue; continue;
} }
if (new_index.version() < index.version()) { if (new_index.version() < index.version()) {
BOOST_LOG_TRIVIAL(error) << boost::format("The downloaded index %1% for vendor %2% is older than the active one. Ignoring the downloaded index.") % idx_path_temp % vendor.name; BOOST_LOG_TRIVIAL(warning) << boost::format("The downloaded index %1% for vendor %2% is older than the active one. Ignoring the downloaded index.") % idx_path_temp % vendor.name;
continue; continue;
} }
Slic3r::rename_file(idx_path_temp, idx_path); Slic3r::rename_file(idx_path_temp, idx_path);
@ -275,6 +290,7 @@ void PresetUpdater::priv::sync_config(const std::set<VendorProfile> vendors)
BOOST_LOG_TRIVIAL(error) << boost::format("No recommended version for vendor: %1%, invalid index?") % vendor.name; BOOST_LOG_TRIVIAL(error) << boost::format("No recommended version for vendor: %1%, invalid index?") % vendor.name;
continue; continue;
} }
const auto recommended = recommended_it->config_version; const auto recommended = recommended_it->config_version;
BOOST_LOG_TRIVIAL(debug) << boost::format("Got index for vendor: %1%: current version: %2%, recommended version: %3%") BOOST_LOG_TRIVIAL(debug) << boost::format("Got index for vendor: %1%: current version: %2%, recommended version: %3%")
@ -341,7 +357,8 @@ Updates PresetUpdater::priv::get_config_updates() const
if (ver_current == idx.end()) { if (ver_current == idx.end()) {
auto message = (boost::format("Preset bundle `%1%` version not found in index: %2%") % idx.vendor() % vp.config_version.to_string()).str(); auto message = (boost::format("Preset bundle `%1%` version not found in index: %2%") % idx.vendor() % vp.config_version.to_string()).str();
BOOST_LOG_TRIVIAL(error) << message; BOOST_LOG_TRIVIAL(error) << message;
throw std::runtime_error(message); GUI::show_error(nullptr, GUI::from_u8(message));
continue;
} }
// Getting a recommended version from the latest index, wich may have been downloaded // Getting a recommended version from the latest index, wich may have been downloaded
@ -528,18 +545,14 @@ void PresetUpdater::slic3r_update_notify()
} }
auto* app_config = GUI::wxGetApp().app_config; auto* app_config = GUI::wxGetApp().app_config;
const auto ver_slic3r = Semver::parse(SLIC3R_VERSION);
const auto ver_online_str = app_config->get("version_online"); const auto ver_online_str = app_config->get("version_online");
const auto ver_online = Semver::parse(ver_online_str); const auto ver_online = Semver::parse(ver_online_str);
const auto ver_online_seen = Semver::parse(app_config->get("version_online_seen")); const auto ver_online_seen = Semver::parse(app_config->get("version_online_seen"));
if (! ver_slic3r) {
throw std::runtime_error("Could not parse Slic3r version string: " SLIC3R_VERSION);
}
if (ver_online) { if (ver_online) {
// Only display the notification if the version available online is newer AND if we haven't seen it before // Only display the notification if the version available online is newer AND if we haven't seen it before
if (*ver_online > *ver_slic3r && (! ver_online_seen || *ver_online_seen < *ver_online)) { if (*ver_online > p->ver_slic3r && (! ver_online_seen || *ver_online_seen < *ver_online)) {
GUI::MsgUpdateSlic3r notification(*ver_slic3r, *ver_online); GUI::MsgUpdateSlic3r notification(p->ver_slic3r, *ver_online);
notification.ShowModal(); notification.ShowModal();
if (notification.disable_version_check()) { if (notification.disable_version_check()) {
app_config->set("version_check", "0"); app_config->set("version_check", "0");

View file

@ -4,6 +4,8 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include <wx/event.h>
namespace Slic3r { namespace Slic3r {
@ -37,6 +39,8 @@ private:
std::unique_ptr<priv> p; std::unique_ptr<priv> p;
}; };
wxDECLARE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent);
} }
#endif #endif