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

This commit is contained in:
enricoturri1966 2020-11-23 10:11:04 +01:00
commit f68cf49f3d
29 changed files with 5731 additions and 4062 deletions

BIN
PrusaSlicer.mo Normal file

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,5 @@
min_slic3r_version = 2.3.0-alpha2 min_slic3r_version = 2.3.0-alpha2
0.0.7 Updated start g-code for Creality printers
0.0.6 Added filament profiles, adjusted temperatures, updated start g-code for some models. 0.0.6 Added filament profiles, adjusted temperatures, updated start g-code for some models.
0.0.5 Added 0.08mm SUPERDETAIL and 0.28mm SUPERDRAFT print profiles. Updated OPTIMAL print profile. 0.0.5 Added 0.08mm SUPERDETAIL and 0.28mm SUPERDRAFT print profiles. Updated OPTIMAL print profile.
0.0.4 Added initial CR-10 profile, end g-code improvements. 0.0.4 Added initial CR-10 profile, end g-code improvements.

View file

@ -5,7 +5,7 @@
name = Creality name = Creality
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.0.6 config_version = 0.0.7
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%

View file

@ -1,3 +1,5 @@
min_slic3r_version = 2.3.0-alpha4
1.2.0-alpha0 Added filament spool weights
min_slic3r_version = 2.2.0-alpha3 min_slic3r_version = 2.2.0-alpha3
1.1.10 Updated firmware version. 1.1.10 Updated firmware version.
1.1.9 Updated K values in filament profiles (linear advance). Added new filament profiles and SLA materials. 1.1.9 Updated K values in filament profiles (linear advance). Added new filament profiles and SLA materials.

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 PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.1.10 config_version = 1.2.0-alpha0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -1807,12 +1807,14 @@ inherits = *PLA*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 21.99 filament_cost = 21.99
filament_density = 1.24 filament_density = 1.24
filament_spool_weight = 230
[filament:Fillamentum ABS] [filament:Fillamentum ABS]
inherits = *ABSC* inherits = *ABSC*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 32.4 filament_cost = 32.4
filament_density = 1.04 filament_density = 1.04
filament_spool_weight = 230
first_layer_temperature = 240 first_layer_temperature = 240
temperature = 240 temperature = 240
@ -1821,6 +1823,7 @@ inherits = *ABS*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 38.7 filament_cost = 38.7
filament_density = 1.07 filament_density = 1.07
filament_spool_weight = 230
fan_always_on = 1 fan_always_on = 1
cooling = 1 cooling = 1
min_fan_speed = 20 min_fan_speed = 20
@ -1836,6 +1839,7 @@ inherits = *ABS*
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 35.28 filament_cost = 35.28
filament_density = 1.07 filament_density = 1.07
filament_spool_weight = 201
fan_always_on = 1 fan_always_on = 1
first_layer_temperature = 260 first_layer_temperature = 260
first_layer_bed_temperature = 105 first_layer_bed_temperature = 105
@ -1857,6 +1861,7 @@ inherits = *ABS*
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 49.99 filament_cost = 49.99
filament_density = 1.22 filament_density = 1.22
filament_spool_weight = 201
fan_always_on = 0 fan_always_on = 0
first_layer_temperature = 275 first_layer_temperature = 275
first_layer_bed_temperature = 110 first_layer_bed_temperature = 110
@ -1883,6 +1888,7 @@ inherits = *ABS*
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 49.99 filament_cost = 49.99
filament_density = 1.22 filament_density = 1.22
filament_spool_weight = 201
fan_always_on = 0 fan_always_on = 0
first_layer_temperature = 275 first_layer_temperature = 275
first_layer_bed_temperature = 105 first_layer_bed_temperature = 105
@ -1916,6 +1922,7 @@ inherits = *PET*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 34.99 filament_cost = 34.99
filament_density = 1.25 filament_density = 1.25
filament_spool_weight = 230
filament_type = CPE filament_type = CPE
first_layer_bed_temperature = 90 first_layer_bed_temperature = 90
first_layer_temperature = 275 first_layer_temperature = 275
@ -1931,6 +1938,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
extrusion_multiplier = 1.1 extrusion_multiplier = 1.1
filament_cost = 68 filament_cost = 68
filament_density = 1.15 filament_density = 1.15
filament_spool_weight = 230
filament_colour = #804040 filament_colour = #804040
filament_max_volumetric_speed = 10 filament_max_volumetric_speed = 10
first_layer_temperature = 190 first_layer_temperature = 190
@ -1969,12 +1977,14 @@ inherits = *ABSC*
filament_vendor = Hatchbox filament_vendor = Hatchbox
filament_cost = 27.82 filament_cost = 27.82
filament_density = 1.04 filament_density = 1.04
filament_spool_weight = 225
[filament:Plasty Mladec ABS] [filament:Plasty Mladec ABS]
inherits = *ABSC* inherits = *ABSC*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_cost = 27.82 filament_cost = 27.82
filament_density = 1.08 filament_density = 1.08
filament_spool_weight = 230
[filament:Verbatim ABS] [filament:Verbatim ABS]
inherits = *ABSC* inherits = *ABSC*
@ -1995,6 +2005,7 @@ inherits = *PET*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_cost = 27.82 filament_cost = 27.82
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
[filament:Generic PLA] [filament:Generic PLA]
inherits = *PLA* inherits = *PLA*
@ -2039,6 +2050,7 @@ inherits = *FLEX*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 33.99 filament_cost = 33.99
filament_density = 1.20 filament_density = 1.20
filament_spool_weight = 230
filament_max_volumetric_speed = 1.2 filament_max_volumetric_speed = 1.2
filament_retract_length = 0 filament_retract_length = 0
filament_retract_speed = nil filament_retract_speed = nil
@ -2136,6 +2148,7 @@ inherits = *ABSC*
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_density = 1.08 filament_density = 1.08
filament_spool_weight = 230
[filament:*ABS MMU2*] [filament:*ABS MMU2*]
inherits = Prusa ABS inherits = Prusa ABS
@ -2185,6 +2198,7 @@ inherits = *ABS MMU2*
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 35.28 filament_cost = 35.28
filament_density = 1.07 filament_density = 1.07
filament_spool_weight = 201
fan_always_on = 1 fan_always_on = 1
first_layer_temperature = 260 first_layer_temperature = 260
first_layer_bed_temperature = 105 first_layer_bed_temperature = 105
@ -2209,6 +2223,7 @@ inherits = *ABS MMU2*
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 49.99 filament_cost = 49.99
filament_density = 1.22 filament_density = 1.22
filament_spool_weight = 201
fan_always_on = 0 fan_always_on = 0
fan_below_layer_time = 30 fan_below_layer_time = 30
first_layer_temperature = 265 first_layer_temperature = 265
@ -2237,17 +2252,20 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
inherits = *ABS MMU2* inherits = *ABS MMU2*
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_spool_weight = 230
[filament:Plasty Mladec ABS @MMU2] [filament:Plasty Mladec ABS @MMU2]
inherits = *ABS MMU2* inherits = *ABS MMU2*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_density = 1.08 filament_density = 1.08
filament_spool_weight = 230
[filament:Prusa HIPS] [filament:Prusa HIPS]
inherits = *ABS* inherits = *ABS*
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 27.3 filament_cost = 27.3
filament_density = 1.04 filament_density = 1.04
filament_spool_weight = 230
bridge_fan_speed = 50 bridge_fan_speed = 50
cooling = 1 cooling = 1
extrusion_multiplier = 1 extrusion_multiplier = 1
@ -2287,6 +2305,7 @@ renamed_from = "Prusa PET"
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
[filament:Verbatim PETG] [filament:Verbatim PETG]
@ -2310,6 +2329,7 @@ first_layer_temperature = 240
temperature = 250 temperature = 250
filament_cost = 29.99 filament_cost = 29.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 201
filament_type = PETG filament_type = PETG
compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
@ -2319,6 +2339,7 @@ renamed_from = "Prusa PET 0.6 nozzle"; "Prusa PETG 0.6 nozzle"
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
[filament:Prusament PETG @0.6 nozzle] [filament:Prusament PETG @0.6 nozzle]
inherits = *PET06* inherits = *PET06*
@ -2327,6 +2348,7 @@ first_layer_temperature = 240
temperature = 250 temperature = 250
filament_cost = 29.99 filament_cost = 29.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 201
filament_type = PETG filament_type = PETG
[filament:Plasty Mladec PETG @0.6 nozzle] [filament:Plasty Mladec PETG @0.6 nozzle]
@ -2336,6 +2358,7 @@ first_layer_temperature = 230
temperature = 240 temperature = 240
filament_cost = 27.92 filament_cost = 27.92
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
filament_type = PETG filament_type = PETG
[filament:Devil Design PETG @0.6 nozzle] [filament:Devil Design PETG @0.6 nozzle]
@ -2398,12 +2421,14 @@ filament_vendor = Generic
[filament:Plasty Mladec PETG @MMU2] [filament:Plasty Mladec PETG @MMU2]
inherits = *PET MMU2* inherits = *PET MMU2*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_spool_weight = 230
[filament:Prusa PETG @MMU2] [filament:Prusa PETG @MMU2]
inherits = *PET MMU2* inherits = *PET MMU2*
renamed_from = "Prusa PET MMU2"; "Prusa PETG MMU2" renamed_from = "Prusa PET MMU2"; "Prusa PETG MMU2"
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_spool_weight = 230
[filament:Prusament PETG @MMU2] [filament:Prusament PETG @MMU2]
inherits = *PET MMU2* inherits = *PET MMU2*
@ -2411,6 +2436,7 @@ filament_type = PETG
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 29.99 filament_cost = 29.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 201
[filament:Generic PETG @MMU2 0.6 nozzle] [filament:Generic PETG @MMU2 0.6 nozzle]
inherits = *PET MMU2 06* inherits = *PET MMU2 06*
@ -2421,6 +2447,7 @@ filament_vendor = Generic
inherits = *PET MMU2 06* inherits = *PET MMU2 06*
renamed_from = "Prusa PET MMU2 0.6 nozzle"; "Prusa PETG MMU2 0.6 nozzle" renamed_from = "Prusa PET MMU2 0.6 nozzle"; "Prusa PETG MMU2 0.6 nozzle"
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_spool_weight = 230
[filament:Prusament PETG @MMU2 0.6 nozzle] [filament:Prusament PETG @MMU2 0.6 nozzle]
inherits = *PET MMU2 06* inherits = *PET MMU2 06*
@ -2428,17 +2455,20 @@ filament_type = PETG
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 29.99 filament_cost = 29.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 201
[filament:Plasty Mladec PETG @MMU2 0.6 nozzle] [filament:Plasty Mladec PETG @MMU2 0.6 nozzle]
inherits = *PET MMU2 06* inherits = *PET MMU2 06*
filament_type = PETG filament_type = PETG
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_spool_weight = 230
[filament:Prusa PLA] [filament:Prusa PLA]
inherits = *PLA* inherits = *PLA*
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 20.99 filament_cost = 20.99
filament_density = 1.24 filament_density = 1.24
filament_spool_weight = 230
[filament:Fiberlogy PLA] [filament:Fiberlogy PLA]
inherits = *PLA* inherits = *PLA*
@ -2451,6 +2481,7 @@ inherits = *PLA*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_cost = 25.4 filament_cost = 25.4
filament_density = 1.24 filament_density = 1.24
filament_spool_weight = 230
[filament:AmazonBasics PLA] [filament:AmazonBasics PLA]
inherits = *PLA* inherits = *PLA*
@ -2463,6 +2494,7 @@ inherits = *PLA*
filament_vendor = Hatchbox filament_vendor = Hatchbox
filament_cost = 25.4 filament_cost = 25.4
filament_density = 1.24 filament_density = 1.24
filament_spool_weight = 225
[filament:Esun PLA] [filament:Esun PLA]
inherits = *PLA* inherits = *PLA*
@ -2494,6 +2526,7 @@ filament_vendor = Prusa Polymers
temperature = 215 temperature = 215
filament_cost = 24.99 filament_cost = 24.99
filament_density = 1.24 filament_density = 1.24
filament_spool_weight = 201
filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa" filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa"
[filament:*PLA MMU2*] [filament:*PLA MMU2*]
@ -2520,18 +2553,21 @@ filament_vendor = Generic
inherits = *PLA MMU2* inherits = *PLA MMU2*
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 20.99 filament_cost = 20.99
filament_spool_weight = 230
[filament:Prusament PLA @MMU2] [filament:Prusament PLA @MMU2]
inherits = *PLA MMU2* inherits = *PLA MMU2*
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 24.99 filament_cost = 24.99
filament_density = 1.24 filament_density = 1.24
filament_spool_weight = 201
[filament:Fillamentum PLA @MMU2] [filament:Fillamentum PLA @MMU2]
inherits = *PLA MMU2* inherits = *PLA MMU2*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 21.99 filament_cost = 21.99
filament_density = 1.24 filament_density = 1.24
filament_spool_weight = 230
[filament:SemiFlex or Flexfill 98A] [filament:SemiFlex or Flexfill 98A]
inherits = *FLEX* inherits = *FLEX*
@ -2545,6 +2581,7 @@ inherits = *FLEX*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 33.99 filament_cost = 33.99
filament_density = 1.23 filament_density = 1.23
filament_spool_weight = 230
filament_max_volumetric_speed = 1.35 filament_max_volumetric_speed = 1.35
fan_always_on = 1 fan_always_on = 1
cooling = 0 cooling = 0
@ -2579,6 +2616,7 @@ inherits = *common*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 56.99 filament_cost = 56.99
filament_density = 1.01 filament_density = 1.01
filament_spool_weight = 230
bed_temperature = 90 bed_temperature = 90
bridge_fan_speed = 30 bridge_fan_speed = 30
cooling = 1 cooling = 1
@ -2790,6 +2828,7 @@ inherits = *PETMMU1*
filament_vendor = Fillamentum filament_vendor = Fillamentum
filament_cost = 34.99 filament_cost = 34.99
filament_density = 1.25 filament_density = 1.25
filament_spool_weight = 230
filament_type = CPE filament_type = CPE
first_layer_bed_temperature = 90 first_layer_bed_temperature = 90
first_layer_temperature = 275 first_layer_temperature = 275
@ -2819,6 +2858,7 @@ inherits = *PETMMU1*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_cost = 27.82 filament_cost = 27.82
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
[filament:Verbatim PETG @MMU1] [filament:Verbatim PETG @MMU1]
inherits = *PETMMU1* inherits = *PETMMU1*
@ -2838,6 +2878,7 @@ renamed_from = "Prusa PET MMU1"; "Prusa PETG MMU1"
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
[filament:Prusament PETG @MMU1] [filament:Prusament PETG @MMU1]
inherits = *PETMMU1* inherits = *PETMMU1*
@ -2846,6 +2887,7 @@ first_layer_temperature = 240
temperature = 250 temperature = 250
filament_cost = 29.99 filament_cost = 29.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 201
filament_type = PETG filament_type = PETG
[filament:Taulman T-Glase @MMU1] [filament:Taulman T-Glase @MMU1]
@ -2910,6 +2952,7 @@ inherits = Generic PETG; *PETMINI*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_cost = 27.82 filament_cost = 27.82
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6 compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
[filament:Verbatim PETG @MINI] [filament:Verbatim PETG @MINI]
@ -2979,6 +3022,7 @@ inherits = Generic ABS; *ABSMINI*
filament_vendor = Hatchbox filament_vendor = Hatchbox
filament_cost = 27.82 filament_cost = 27.82
filament_density = 1.08 filament_density = 1.08
filament_spool_weight = 225
fan_always_on = 0 fan_always_on = 0
cooling = 1 cooling = 1
min_fan_speed = 15 min_fan_speed = 15
@ -2993,6 +3037,7 @@ inherits = Generic ABS; *ABSMINI*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_cost = 27.82 filament_cost = 27.82
filament_density = 1.08 filament_density = 1.08
filament_spool_weight = 230
fan_always_on = 0 fan_always_on = 0
cooling = 1 cooling = 1
min_fan_speed = 15 min_fan_speed = 15
@ -3022,6 +3067,7 @@ filament_vendor = Prusa Polymers
first_layer_temperature = 240 first_layer_temperature = 240
temperature = 250 temperature = 250
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 201
filament_cost = 29.99 filament_cost = 29.99
compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6 compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
@ -3044,6 +3090,7 @@ inherits = Prusament PETG; *PETMINI06*
first_layer_temperature = 240 first_layer_temperature = 240
temperature = 250 temperature = 250
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 201
filament_cost = 29.99 filament_cost = 29.99
[filament:Generic PETG @0.6 nozzle MINI] [filament:Generic PETG @0.6 nozzle MINI]
@ -3063,6 +3110,7 @@ filament_density = 1.23
[filament:Plasty Mladec PETG @0.6 nozzle MINI] [filament:Plasty Mladec PETG @0.6 nozzle MINI]
inherits = Generic PETG; *PETMINI06* inherits = Generic PETG; *PETMINI06*
filament_vendor = Plasty Mladec filament_vendor = Plasty Mladec
filament_spool_weight = 230
[filament:Verbatim PETG @0.6 nozzle MINI] [filament:Verbatim PETG @0.6 nozzle MINI]
inherits = Generic PETG; *PETMINI06* inherits = Generic PETG; *PETMINI06*
@ -3090,6 +3138,7 @@ filament_type = ASA
filament_colour = #FFF2EC filament_colour = #FFF2EC
filament_cost = 35.28 filament_cost = 35.28
filament_density = 1.07 filament_density = 1.07
filament_spool_weight = 201
[filament:Fillamentum Flexfill 98A @MINI] [filament:Fillamentum Flexfill 98A @MINI]
inherits = SemiFlex or Flexfill 98A; *FLEXMINI* inherits = SemiFlex or Flexfill 98A; *FLEXMINI*
@ -3098,6 +3147,7 @@ first_layer_temperature = 240
temperature = 240 temperature = 240
filament_max_volumetric_speed = 1.35 filament_max_volumetric_speed = 1.35
filament_cost = 33.99 filament_cost = 33.99
filament_spool_weight = 230
[filament:Generic FLEX @MINI] [filament:Generic FLEX @MINI]
inherits = SemiFlex or Flexfill 98A; *FLEXMINI* inherits = SemiFlex or Flexfill 98A; *FLEXMINI*
@ -3173,6 +3223,7 @@ filament_retract_lift = 0
filament_retract_before_travel = 7 filament_retract_before_travel = 7
filament_wipe = 0 filament_wipe = 0
filament_density = 1.20 filament_density = 1.20
filament_spool_weight = 230
filament_cost = 33.95 filament_cost = 33.95
bridge_fan_speed = 70 bridge_fan_speed = 70
fan_always_on = 1 fan_always_on = 1
@ -3193,6 +3244,7 @@ temperature = 265
filament_type = CPE filament_type = CPE
filament_cost = 34.99 filament_cost = 34.99
filament_density = 1.25 filament_density = 1.25
filament_spool_weight = 230
[filament:ColorFabb nGen @MINI] [filament:ColorFabb nGen @MINI]
inherits = ColorFabb nGen; *PETMINI* inherits = ColorFabb nGen; *PETMINI*
@ -3208,6 +3260,7 @@ filament_cost = 28.80
inherits = Fillamentum ABS; *ABSMINI* inherits = Fillamentum ABS; *ABSMINI*
filament_cost = 32.4 filament_cost = 32.4
filament_density = 1.04 filament_density = 1.04
filament_spool_weight = 230
fan_always_on = 0 fan_always_on = 0
cooling = 1 cooling = 1
min_fan_speed = 15 min_fan_speed = 15
@ -3234,6 +3287,7 @@ filament_type = ASA
filament_colour = #FFF2EC filament_colour = #FFF2EC
filament_cost = 38.7 filament_cost = 38.7
filament_density = 1.07 filament_density = 1.07
filament_spool_weight = 230
[filament:Polymaker PC-Max @MINI] [filament:Polymaker PC-Max @MINI]
inherits = Polymaker PC-Max; *ABSMINI* inherits = Polymaker PC-Max; *ABSMINI*
@ -3253,6 +3307,7 @@ inherits = *ABSMINI*
filament_vendor = Prusa Polymers filament_vendor = Prusa Polymers
filament_cost = 49.99 filament_cost = 49.99
filament_density = 1.22 filament_density = 1.22
filament_spool_weight = 201
fan_always_on = 0 fan_always_on = 0
first_layer_temperature = 275 first_layer_temperature = 275
first_layer_bed_temperature = 100 first_layer_bed_temperature = 100
@ -3281,6 +3336,7 @@ inherits = *ABSMINI*
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_density = 1.08 filament_density = 1.08
filament_spool_weight = 230
fan_always_on = 0 fan_always_on = 0
cooling = 1 cooling = 1
min_fan_speed = 15 min_fan_speed = 15
@ -3374,6 +3430,7 @@ renamed_from = "Prusa PET MINI"; "Prusa PETG MINI"
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6 compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
[filament:Prusa PETG @0.6 nozzle MINI] [filament:Prusa PETG @0.6 nozzle MINI]
@ -3382,6 +3439,7 @@ renamed_from = "Prusa PET 0.6 nozzle MINI"; "Prusa PETG 0.6 nozzle MINI"
filament_vendor = Made for Prusa filament_vendor = Made for Prusa
filament_cost = 22.99 filament_cost = 22.99
filament_density = 1.27 filament_density = 1.27
filament_spool_weight = 230
[sla_print:*common*] [sla_print:*common*]
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_SL1.*/ compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_SL1.*/
@ -3409,6 +3467,7 @@ support_pillar_diameter = 1
support_pillar_connection_mode = zigzag support_pillar_connection_mode = zigzag
support_pillar_widening_factor = 0 support_pillar_widening_factor = 0
supports_enable = 1 supports_enable = 1
support_small_pillar_diameter_percent = 60%
[sla_print:0.025 UltraDetail] [sla_print:0.025 UltraDetail]
inherits = *common* inherits = *common*

View file

@ -84,10 +84,14 @@ public:
template<typename VISITOR> void visit_cells_intersecting_line(Slic3r::Point p1, Slic3r::Point p2, VISITOR &visitor) const template<typename VISITOR> void visit_cells_intersecting_line(Slic3r::Point p1, Slic3r::Point p2, VISITOR &visitor) const
{ {
// End points of the line segment. // End points of the line segment.
p1(0) -= m_bbox.min(0); assert(m_bbox.contains(p1));
p1(1) -= m_bbox.min(1); assert(m_bbox.contains(p2));
p2(0) -= m_bbox.min(0); p1 -= m_bbox.min;
p2(1) -= m_bbox.min(1); p2 -= m_bbox.min;
assert(p1.x() >= 0 && p1.x() < m_cols * m_resolution);
assert(p1.y() >= 0 && p1.y() < m_rows * m_resolution);
assert(p2.x() >= 0 && p2.x() < m_cols * m_resolution);
assert(p2.y() >= 0 && p2.y() < m_rows * m_resolution);
// Get the cells of the end points. // Get the cells of the end points.
coord_t ix = p1(0) / m_resolution; coord_t ix = p1(0) / m_resolution;
coord_t iy = p1(1) / m_resolution; coord_t iy = p1(1) / m_resolution;
@ -115,18 +119,22 @@ public:
ey -= ex; ey -= ex;
ex = int64_t(dy) * m_resolution; ex = int64_t(dy) * m_resolution;
ix += 1; ix += 1;
assert(ix <= ixb);
} }
else if (ex == ey) { else if (ex == ey) {
ex = int64_t(dy) * m_resolution; ex = int64_t(dy) * m_resolution;
ey = int64_t(dx) * m_resolution; ey = int64_t(dx) * m_resolution;
ix += 1; ix += 1;
iy += 1; iy += 1;
assert(ix <= ixb);
assert(iy <= iyb);
} }
else { else {
assert(ex > ey); assert(ex > ey);
ex -= ey; ex -= ey;
ey = int64_t(dx) * m_resolution; ey = int64_t(dx) * m_resolution;
iy += 1; iy += 1;
assert(iy <= iyb);
} }
if (! visitor(iy, ix)) if (! visitor(iy, ix))
return; return;
@ -141,11 +149,13 @@ public:
ey -= ex; ey -= ex;
ex = int64_t(dy) * m_resolution; ex = int64_t(dy) * m_resolution;
ix += 1; ix += 1;
assert(ix <= ixb);
} }
else { else {
ex -= ey; ex -= ey;
ey = int64_t(dx) * m_resolution; ey = int64_t(dx) * m_resolution;
iy -= 1; iy -= 1;
assert(iy >= iyb);
} }
if (! visitor(iy, ix)) if (! visitor(iy, ix))
return; return;
@ -163,12 +173,14 @@ public:
ey -= ex; ey -= ex;
ex = int64_t(dy) * m_resolution; ex = int64_t(dy) * m_resolution;
ix -= 1; ix -= 1;
assert(ix >= ixb);
} }
else { else {
assert(ex >= ey); assert(ex >= ey);
ex -= ey; ex -= ey;
ey = int64_t(dx) * m_resolution; ey = int64_t(dx) * m_resolution;
iy += 1; iy += 1;
assert(iy <= iyb);
} }
if (! visitor(iy, ix)) if (! visitor(iy, ix))
return; return;
@ -183,6 +195,7 @@ public:
ey -= ex; ey -= ex;
ex = int64_t(dy) * m_resolution; ex = int64_t(dy) * m_resolution;
ix -= 1; ix -= 1;
assert(ix >= ixb);
} }
else if (ex == ey) { else if (ex == ey) {
// The lower edge of a grid cell belongs to the cell. // The lower edge of a grid cell belongs to the cell.
@ -191,10 +204,12 @@ public:
if (dx > 0) { if (dx > 0) {
ex = int64_t(dy) * m_resolution; ex = int64_t(dy) * m_resolution;
ix -= 1; ix -= 1;
assert(ix >= ixb);
} }
if (dy > 0) { if (dy > 0) {
ey = int64_t(dx) * m_resolution; ey = int64_t(dx) * m_resolution;
iy -= 1; iy -= 1;
assert(iy >= iyb);
} }
} }
else { else {
@ -202,6 +217,7 @@ public:
ex -= ey; ex -= ey;
ey = int64_t(dx) * m_resolution; ey = int64_t(dx) * m_resolution;
iy -= 1; iy -= 1;
assert(iy >= iyb);
} }
if (! visitor(iy, ix)) if (! visitor(iy, ix))
return; return;

View file

@ -1,4 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include <numeric>
#include "../ClipperUtils.hpp" #include "../ClipperUtils.hpp"
#include "../EdgeGrid.hpp" #include "../EdgeGrid.hpp"
@ -28,6 +29,7 @@ Fill* Fill::new_from_type(const InfillPattern type)
case ip3DHoneycomb: return new Fill3DHoneycomb(); case ip3DHoneycomb: return new Fill3DHoneycomb();
case ipGyroid: return new FillGyroid(); case ipGyroid: return new FillGyroid();
case ipRectilinear: return new FillRectilinear(); case ipRectilinear: return new FillRectilinear();
case ipAlignedRectilinear: return new FillAlignedRectilinear();
case ipMonotonic: return new FillMonotonic(); case ipMonotonic: return new FillMonotonic();
case ipLine: return new FillLine(); case ipLine: return new FillLine();
case ipGrid: return new FillGrid(); case ipGrid: return new FillGrid();
@ -840,7 +842,7 @@ void mark_boundary_segments_touching_infill(
EdgeGrid::Grid grid; EdgeGrid::Grid grid;
// Make sure that the the grid is big enough for queries against the thick segment. // Make sure that the the grid is big enough for queries against the thick segment.
grid.set_bbox(boundary_bbox.inflated(distance_colliding + SCALED_EPSILON)); grid.set_bbox(boundary_bbox.inflated(distance_colliding * 1.43));
// Inflate the bounding box by a thick line width. // Inflate the bounding box by a thick line width.
grid.create(boundary, std::max(clip_distance, distance_colliding) + scale_(10.)); grid.create(boundary, std::max(clip_distance, distance_colliding) + scale_(10.));
@ -960,9 +962,6 @@ void mark_boundary_segments_touching_infill(
#endif // INFILL_DEBUG_OUTPUT #endif // INFILL_DEBUG_OUTPUT
} visitor(grid, boundary, boundary_parameters, boundary_intersections, distance_colliding); } visitor(grid, boundary, boundary_parameters, boundary_intersections, distance_colliding);
BoundingBoxf bboxf(boundary_bbox.min.cast<double>(), boundary_bbox.max.cast<double>());
bboxf.offset(- SCALED_EPSILON);
for (const Polyline &polyline : infill) { for (const Polyline &polyline : infill) {
#ifdef INFILL_DEBUG_OUTPUT #ifdef INFILL_DEBUG_OUTPUT
++ iStep; ++ iStep;
@ -1018,11 +1017,13 @@ void mark_boundary_segments_touching_infill(
Vec2d vperp = perp(v); Vec2d vperp = perp(v);
Vec2d a = pt1 - v - vperp; Vec2d a = pt1 - v - vperp;
Vec2d b = pt2 + v - vperp; Vec2d b = pt2 + v - vperp;
if (Geometry::liang_barsky_line_clipping(a, b, bboxf)) assert(grid.bbox().contains(a.cast<coord_t>()));
assert(grid.bbox().contains(b.cast<coord_t>()));
grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor); grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
a = pt1 - v + vperp; a = pt1 - v + vperp;
b = pt2 + v + vperp; b = pt2 + v + vperp;
if (Geometry::liang_barsky_line_clipping(a, b, bboxf)) assert(grid.bbox().contains(a.cast<coord_t>()));
assert(grid.bbox().contains(b.cast<coord_t>()));
grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor); grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
#endif #endif
#ifdef INFILL_DEBUG_OUTPUT #ifdef INFILL_DEBUG_OUTPUT

View file

@ -29,6 +29,17 @@ protected:
bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out); bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out);
}; };
class FillAlignedRectilinear : public FillRectilinear
{
public:
Fill* clone() const override { return new FillAlignedRectilinear(*this); };
~FillAlignedRectilinear() override = default;
protected:
// Always generate infill at the same angle.
virtual float _layer_angle(size_t idx) const { return 0.f; }
};
class FillMonotonic : public FillRectilinear class FillMonotonic : public FillRectilinear
{ {
public: public:

View file

@ -399,13 +399,11 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename)
}; };
// check for temporary lines // check for temporary lines
auto is_temporary_decoration = [](const std::string& gcode_line) { auto is_temporary_decoration = [](const std::string_view gcode_line) {
// remove trailing '\n' // remove trailing '\n'
std::string line = gcode_line.substr(0, gcode_line.length() - 1); assert(! gcode_line.empty());
if (line == ";" + Layer_Change_Tag) assert(gcode_line.back() == '\n');
return true; return gcode_line.substr(0, gcode_line.length() - 1) == ";" + Layer_Change_Tag;
else
return false;
}; };
// Iterators for the normal and silent cached time estimate entry recently processed, used by process_line_G1. // Iterators for the normal and silent cached time estimate entry recently processed, used by process_line_G1.

View file

@ -2,6 +2,7 @@
#include "Line.hpp" #include "Line.hpp"
#include "MultiPoint.hpp" #include "MultiPoint.hpp"
#include "Int128.hpp" #include "Int128.hpp"
#include "BoundingBox.hpp"
#include <algorithm> #include <algorithm>
namespace Slic3r { namespace Slic3r {

View file

@ -439,7 +439,7 @@ const std::vector<std::string>& Preset::filament_options()
{ {
static std::vector<std::string> s_opts { static std::vector<std::string> s_opts {
"filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed", "filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
"extrusion_multiplier", "filament_density", "filament_cost", "filament_loading_speed", "filament_loading_speed_start", "filament_load_time", "extrusion_multiplier", "filament_density", "filament_cost", "filament_spool_weight", "filament_loading_speed", "filament_loading_speed_start", "filament_load_time",
"filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves",
"filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_minimal_purge_on_wipe_tower", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_minimal_purge_on_wipe_tower",
"temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed", "temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed",

View file

@ -98,6 +98,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
"filament_density", "filament_density",
"filament_notes", "filament_notes",
"filament_cost", "filament_cost",
"filament_spool_weight",
"first_layer_acceleration", "first_layer_acceleration",
"first_layer_bed_temperature", "first_layer_bed_temperature",
"first_layer_speed", "first_layer_speed",

View file

@ -460,12 +460,14 @@ void PrintConfigDef::init_fff_params()
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values(); def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
def->enum_values.push_back("rectilinear"); def->enum_values.push_back("rectilinear");
def->enum_values.push_back("monotonic"); def->enum_values.push_back("monotonic");
def->enum_values.push_back("alignedrectilinear");
def->enum_values.push_back("concentric"); def->enum_values.push_back("concentric");
def->enum_values.push_back("hilbertcurve"); def->enum_values.push_back("hilbertcurve");
def->enum_values.push_back("archimedeanchords"); def->enum_values.push_back("archimedeanchords");
def->enum_values.push_back("octagramspiral"); def->enum_values.push_back("octagramspiral");
def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Rectilinear"));
def->enum_labels.push_back(L("Monotonic")); def->enum_labels.push_back(L("Monotonic"));
def->enum_labels.push_back(L("Aligned Rectilinear"));
def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Concentric"));
def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Hilbert Curve"));
def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Archimedean Chords"));
@ -483,7 +485,7 @@ void PrintConfigDef::init_fff_params()
def->enum_values = def_top_fill_pattern->enum_values; def->enum_values = def_top_fill_pattern->enum_values;
def->enum_labels = def_top_fill_pattern->enum_labels; def->enum_labels = def_top_fill_pattern->enum_labels;
def->aliases = def_top_fill_pattern->aliases; def->aliases = def_top_fill_pattern->aliases;
def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipRectilinear)); def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipMonotonic));
def = this->add("external_perimeter_extrusion_width", coFloatOrPercent); def = this->add("external_perimeter_extrusion_width", coFloatOrPercent);
def->label = L("External perimeters"); def->label = L("External perimeters");
@ -806,6 +808,16 @@ void PrintConfigDef::init_fff_params()
def->min = 0; def->min = 0;
def->set_default_value(new ConfigOptionFloats { 0. }); def->set_default_value(new ConfigOptionFloats { 0. });
def = this->add("filament_spool_weight", coFloats);
def->label = L("Spool weight");
def->tooltip = L("Enter weight of the empty filament spool. "
"One may weigh a partially consumed filament spool before printing and one may compare the measured weight "
"with the calculated weight of the filament with the spool to find out whether the amount "
"of filament on the spool is sufficient to finish the print.");
def->sidetext = L("g");
def->min = 0;
def->set_default_value(new ConfigOptionFloats { 0. });
def = this->add("filament_settings_id", coStrings); def = this->add("filament_settings_id", coStrings);
def->set_default_value(new ConfigOptionStrings { "" }); def->set_default_value(new ConfigOptionStrings { "" });
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;
@ -871,6 +883,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Fill pattern for general low-density infill."); def->tooltip = L("Fill pattern for general low-density infill.");
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values(); def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
def->enum_values.push_back("rectilinear"); def->enum_values.push_back("rectilinear");
def->enum_values.push_back("alignedrectilinear");
def->enum_values.push_back("grid"); def->enum_values.push_back("grid");
def->enum_values.push_back("triangles"); def->enum_values.push_back("triangles");
def->enum_values.push_back("stars"); def->enum_values.push_back("stars");
@ -886,6 +899,7 @@ void PrintConfigDef::init_fff_params()
def->enum_values.push_back("adaptivecubic"); def->enum_values.push_back("adaptivecubic");
def->enum_values.push_back("supportcubic"); def->enum_values.push_back("supportcubic");
def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Rectilinear"));
def->enum_labels.push_back(L("Aligned Rectilinear"));
def->enum_labels.push_back(L("Grid")); def->enum_labels.push_back(L("Grid"));
def->enum_labels.push_back(L("Triangles")); def->enum_labels.push_back(L("Triangles"));
def->enum_labels.push_back(L("Stars")); def->enum_labels.push_back(L("Stars"));
@ -1541,7 +1555,6 @@ void PrintConfigDef::init_fff_params()
def = this->add("perimeter_acceleration", coFloat); def = this->add("perimeter_acceleration", coFloat);
def->label = L("Perimeters"); def->label = L("Perimeters");
def->tooltip = L("This is the acceleration your printer will use for perimeters. " def->tooltip = L("This is the acceleration your printer will use for perimeters. "
"A high value like 9000 usually gives good results if your hardware is up to the job. "
"Set zero to disable acceleration control for perimeters."); "Set zero to disable acceleration control for perimeters.");
def->sidetext = L("mm/s²"); def->sidetext = L("mm/s²");
def->mode = comExpert; def->mode = comExpert;

View file

@ -44,7 +44,7 @@ enum AuthorizationType {
}; };
enum InfillPattern : int { enum InfillPattern : int {
ipRectilinear, ipMonotonic, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb, ipRectilinear, ipMonotonic, ipAlignedRectilinear, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb,
ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipCount, ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipCount,
}; };
@ -145,6 +145,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g
if (keys_map.empty()) { if (keys_map.empty()) {
keys_map["rectilinear"] = ipRectilinear; keys_map["rectilinear"] = ipRectilinear;
keys_map["monotonic"] = ipMonotonic; keys_map["monotonic"] = ipMonotonic;
keys_map["alignedrectilinear"] = ipAlignedRectilinear;
keys_map["grid"] = ipGrid; keys_map["grid"] = ipGrid;
keys_map["triangles"] = ipTriangles; keys_map["triangles"] = ipTriangles;
keys_map["stars"] = ipStars; keys_map["stars"] = ipStars;
@ -683,6 +684,7 @@ public:
ConfigOptionStrings filament_type; ConfigOptionStrings filament_type;
ConfigOptionBools filament_soluble; ConfigOptionBools filament_soluble;
ConfigOptionFloats filament_cost; ConfigOptionFloats filament_cost;
ConfigOptionFloats filament_spool_weight;
ConfigOptionFloats filament_max_volumetric_speed; ConfigOptionFloats filament_max_volumetric_speed;
ConfigOptionFloats filament_loading_speed; ConfigOptionFloats filament_loading_speed;
ConfigOptionFloats filament_loading_speed_start; ConfigOptionFloats filament_loading_speed_start;
@ -759,6 +761,7 @@ protected:
OPT_PTR(filament_type); OPT_PTR(filament_type);
OPT_PTR(filament_soluble); OPT_PTR(filament_soluble);
OPT_PTR(filament_cost); OPT_PTR(filament_cost);
OPT_PTR(filament_spool_weight);
OPT_PTR(filament_max_volumetric_speed); OPT_PTR(filament_max_volumetric_speed);
OPT_PTR(filament_loading_speed); OPT_PTR(filament_loading_speed);
OPT_PTR(filament_loading_speed_start); OPT_PTR(filament_loading_speed_start);

View file

@ -1,11 +1,6 @@
#include "libslic3r/libslic3r.h" #include "libslic3r/libslic3r.h"
#if ENABLE_GCODE_VIEWER
#include "DoubleSlider.hpp" #include "DoubleSlider.hpp"
#include "libslic3r/GCode.hpp" #include "libslic3r/GCode.hpp"
#else
#include "wxExtensions.hpp"
#include "libslic3r/GCode/PreviewData.hpp"
#endif // ENABLE_GCODE_VIEWER
#include "GUI.hpp" #include "GUI.hpp"
#include "GUI_App.hpp" #include "GUI_App.hpp"
#include "Plater.hpp" #include "Plater.hpp"
@ -137,14 +132,13 @@ Control::Control( wxWindow *parent,
m_line_pens = { &DARK_GREY_PEN, &GREY_PEN, &LIGHT_GREY_PEN }; m_line_pens = { &DARK_GREY_PEN, &GREY_PEN, &LIGHT_GREY_PEN };
m_segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN }; m_segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN };
const wxFont& font = GetFont(); m_font = GetFont();
m_font = is_osx ? font.Smaller().Smaller() : font.Smaller(); this->SetMinSize(get_min_size());
} }
void Control::msw_rescale() void Control::msw_rescale()
{ {
const wxFont& font = GUI::wxGetApp().normal_font(); m_font = GUI::wxGetApp().normal_font();
m_font = is_osx ? font.Smaller().Smaller() : font.Smaller();
m_bmp_thumb_higher.msw_rescale(); m_bmp_thumb_higher.msw_rescale();
m_bmp_thumb_lower .msw_rescale(); m_bmp_thumb_lower .msw_rescale();
@ -182,8 +176,7 @@ int Control::GetActiveValue() const
wxSize Control::get_min_size() const wxSize Control::get_min_size() const
{ {
const int min_side = GUI::wxGetApp().em_unit() * ( is_horizontal() ? (is_osx ? 8 : 6) : 10 ); const int min_side = GUI::wxGetApp().em_unit() * ( is_horizontal() ? 5 : 11 );
return wxSize(min_side, min_side); return wxSize(min_side, min_side);
} }
@ -713,7 +706,7 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, LabelType l
text_pos = wxPoint(xx, pos.y - m_thumb_size.x / 2 - text_height - 1); text_pos = wxPoint(xx, pos.y - m_thumb_size.x / 2 - text_height - 1);
} }
else else
text_pos = wxPoint(pos.x - text_width - 1 - m_thumb_size.x, pos.y - 0.5 * text_height + 1); text_pos = wxPoint(std::max(2, pos.x - text_width - 1 - m_thumb_size.x), pos.y - 0.5 * text_height + 1);
} }
if (label_type == ltEstimatedTime) if (label_type == ltEstimatedTime)

View file

@ -2743,7 +2743,9 @@ void GCodeViewer::render_legend() const
} }
if (!m_settings_ids.filament.empty()) { if (!m_settings_ids.filament.empty()) {
for (unsigned char i : m_extruder_ids) { for (unsigned char i : m_extruder_ids) {
imgui.text(_u8L("Filament") + " " + std::to_string(i + 1) + ":"); std::string txt = _u8L("Filament");
txt += (m_extruder_ids.size() == 1) ? ":" : " " + std::to_string(i + 1);
imgui.text(txt);
ImGui::SameLine(offset); ImGui::SameLine(offset);
imgui.text(m_settings_ids.filament[i]); imgui.text(m_settings_ids.filament[i]);
} }

View file

@ -1091,7 +1091,7 @@ wxDEFINE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent);
const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25; const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25;
GLCanvas3D::ArrangeSettings load_arrange_settings() static GLCanvas3D::ArrangeSettings load_arrange_settings()
{ {
GLCanvas3D::ArrangeSettings settings; GLCanvas3D::ArrangeSettings settings;
@ -2392,7 +2392,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
return; return;
} }
if (keyCode == WXK_ESCAPE && (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item())) if (keyCode == WXK_ESCAPE && (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item() || _deactivate_arrange_menu()))
return; return;
if (m_gizmos.on_char(evt)) if (m_gizmos.on_char(evt))
@ -3083,7 +3083,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
m_dirty = true; m_dirty = true;
} }
else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) { else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) {
if (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item()) if (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item() || _deactivate_arrange_menu())
return; return;
// If user pressed left or right button we first check whether this happened // If user pressed left or right button we first check whether this happened
@ -3868,11 +3868,12 @@ bool GLCanvas3D::_render_search_list(float pos_x) const
return action_taken; return action_taken;
} }
void GLCanvas3D:: _render_arrange_popup() bool GLCanvas3D::_render_arrange_menu(float pos_x)
{ {
ImGuiWrapper *imgui = wxGetApp().imgui(); ImGuiWrapper *imgui = wxGetApp().imgui();
float x = 0.5f * (float)get_canvas_size().get_width(); auto canvas_w = float(get_canvas_size().get_width());
const float x = pos_x * float(wxGetApp().plater()->get_camera().get_zoom()) + 0.5f * canvas_w;
imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f);
imgui->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); imgui->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
@ -3880,17 +3881,39 @@ void GLCanvas3D:: _render_arrange_popup()
auto &appcfg = wxGetApp().app_config; auto &appcfg = wxGetApp().app_config;
bool settings_changed = false;
if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f)) { if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f)) {
m_arrange_settings.distance = settings.distance; m_arrange_settings.distance = settings.distance;
appcfg->set("arrange", "min_object_distance", std::to_string(settings.distance)); settings_changed = true;
} }
if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation)) { if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation)) {
m_arrange_settings.enable_rotation = settings.enable_rotation; m_arrange_settings.enable_rotation = settings.enable_rotation;
appcfg->set("arrange", "enable_rotation", "1"); settings_changed = true;
}
ImGui::Separator();
if (imgui->button(_(L("Reset")))) {
m_arrange_settings = ArrangeSettings{};
settings_changed = true;
}
if (settings_changed) {
appcfg->set("arrange", "min_object_distance", std::to_string(m_arrange_settings.distance));
appcfg->set("arrange", "enable_rotation", m_arrange_settings.enable_rotation? "1" : "0");
}
ImGui::SameLine();
if (imgui->button(_(L("Arrange")))) {
wxGetApp().plater()->arrange();
} }
imgui->end(); imgui->end();
return settings_changed;
} }
#define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0 #define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
@ -4305,7 +4328,7 @@ bool GLCanvas3D::_init_main_toolbar()
item.name = "arrange"; item.name = "arrange";
item.icon_filename = "arrange.svg"; item.icon_filename = "arrange.svg";
item.tooltip = _utf8(L("Arrange")) + " [A]\n" + _utf8(L("Arrange selection")) + " [Shift+A]"; item.tooltip = _utf8(L("Arrange")) + " [A]\n" + _utf8(L("Arrange selection")) + " [Shift+A]\n" + _utf8(L("Click right mouse button to show arrangement options"));
item.sprite_id = 3; item.sprite_id = 3;
item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ARRANGE)); }; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ARRANGE)); };
item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); }; item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); };
@ -4313,7 +4336,7 @@ bool GLCanvas3D::_init_main_toolbar()
item.right.render_callback = [this](float left, float right, float, float) { item.right.render_callback = [this](float left, float right, float, float) {
if (m_canvas != nullptr) if (m_canvas != nullptr)
{ {
_render_arrange_popup(); _render_arrange_menu(0.5f * (left + right));
} }
}; };
if (!m_main_toolbar.add_item(item)) if (!m_main_toolbar.add_item(item))
@ -6246,6 +6269,16 @@ bool GLCanvas3D::is_search_pressed() const
return m_main_toolbar.is_item_pressed("search"); return m_main_toolbar.is_item_pressed("search");
} }
bool GLCanvas3D::_deactivate_arrange_menu()
{
if (m_main_toolbar.is_item_pressed("arrange")) {
m_main_toolbar.force_right_action(m_main_toolbar.get_item_id("arrange"), *this);
return true;
}
return false;
}
bool GLCanvas3D::_deactivate_search_toolbar_item() bool GLCanvas3D::_deactivate_search_toolbar_item()
{ {
if (is_search_pressed()) if (is_search_pressed())

View file

@ -728,7 +728,7 @@ private:
void _render_selection_sidebar_hints() const; void _render_selection_sidebar_hints() const;
bool _render_undo_redo_stack(const bool is_undo, float pos_x) const; bool _render_undo_redo_stack(const bool is_undo, float pos_x) const;
bool _render_search_list(float pos_x) const; bool _render_search_list(float pos_x) const;
void _render_arrange_popup(); bool _render_arrange_menu(float pos_x);
void _render_thumbnail_internal(ThumbnailData& thumbnail_data, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const; void _render_thumbnail_internal(ThumbnailData& thumbnail_data, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;
// render thumbnail using an off-screen framebuffer // render thumbnail using an off-screen framebuffer
void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const; void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;
@ -780,6 +780,7 @@ private:
bool _deactivate_search_toolbar_item(); bool _deactivate_search_toolbar_item();
bool _activate_search_toolbar_item(); bool _activate_search_toolbar_item();
bool _deactivate_collapse_toolbar_items(); bool _deactivate_collapse_toolbar_items();
bool _deactivate_arrange_menu();
float get_overlay_window_width() { return LayersEditing::get_overlay_window_width(); } float get_overlay_window_width() { return LayersEditing::get_overlay_window_width(); }

View file

@ -283,7 +283,7 @@ bool Preview::init(wxWindow* parent, Model* model)
wxBoxSizer* right_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer* right_sizer = new wxBoxSizer(wxVERTICAL);
right_sizer->Add(m_layers_slider_sizer, 1, wxEXPAND, 0); right_sizer->Add(m_layers_slider_sizer, 1, wxEXPAND, 0);
m_moves_slider = new DoubleSlider::Control(m_bottom_toolbar_panel, wxID_ANY, 0, 0, 0, 100, wxDefaultPosition, wxSize(-1, 3 * GetTextExtent("m").y), wxSL_HORIZONTAL); m_moves_slider = new DoubleSlider::Control(m_bottom_toolbar_panel, wxID_ANY, 0, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL);
m_moves_slider->SetDrawMode(DoubleSlider::dmSequentialGCodeView); m_moves_slider->SetDrawMode(DoubleSlider::dmSequentialGCodeView);
wxBoxSizer* bottom_toolbar_sizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* bottom_toolbar_sizer = new wxBoxSizer(wxHORIZONTAL);
@ -692,7 +692,7 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
if (sla_print_technology) if (sla_print_technology)
m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times); m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times);
else else
m_layers_slider->SetLayersTimes(m_gcode_result->time_statistics.modes[0].layers_times); m_layers_slider->SetLayersTimes(m_gcode_result->time_statistics.modes.front().layers_times);
m_layers_slider_sizer->Show((size_t)0); m_layers_slider_sizer->Show((size_t)0);
Layout(); Layout();

View file

@ -259,14 +259,13 @@ bool instance_check(int argc, char** argv, bool app_config_single_instance)
std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string()); std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
#else #else
std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]), ec).string()); std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]), ec).string());
if(ec.value() > 0) { // canonical was not able to find execitable (can happen with appimage on some systems) if (ec.value() > 0) { // canonical was not able to find the executable (can happen with appimage on some systems. Does it fail on Fuse file systems?)
ec.clear(); ec.clear();
// Compose path with boost canonical of folder and filename // Compose path with boost canonical of folder and filename
hashed_path = std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]).parent_path(), ec).string() + "/" + boost::filesystem::system_complete(argv[0]).filename().string()); hashed_path = std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]).parent_path(), ec).string() + "/" + boost::filesystem::system_complete(argv[0]).filename().string());
if(ec.value() > 0) { if (ec.value() > 0) {
// Still not valid, process without canonical // Still not valid, process without canonical
hashed_path = std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string()); hashed_path = std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
} }
} }
#endif // win32 #endif // win32

View file

@ -8,6 +8,7 @@
#include <boost/algorithm/string/split.hpp> #include <boost/algorithm/string/split.hpp>
#include "libslic3r/Utils.hpp" #include "libslic3r/Utils.hpp"
#include "I18N.hpp" #include "I18N.hpp"
#include "format.hpp"
namespace Slic3r { namespace GUI { namespace Slic3r { namespace GUI {
@ -174,7 +175,15 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
label += ":"; label += ":";
wxCoord label_w, label_h; wxCoord label_w, label_h;
#ifdef __WXMSW__
// when we use 2 monitors with different DPIs, GetTextExtent() return value for the primary display
// so, use dc.GetMultiLineTextExtent on Windows
wxPaintDC dc(this);
dc.SetFont(m_font);
dc.GetMultiLineTextExtent(label, &label_w, &label_h);
#else
GetTextExtent(label, &label_w, &label_h, 0, 0, &m_font); GetTextExtent(label, &label_w, &label_h, 0, 0, &m_font);
#endif //__WXMSW__
h_pos += label_w + 1 + m_h_gap; h_pos += label_w + 1 + m_h_gap;
} }
h_pos += (opt.opt.gui_type == "legend" ? 1 : 3) * blinking_button_width; h_pos += (opt.opt.gui_type == "legend" ? 1 : 3) * blinking_button_width;
@ -231,10 +240,14 @@ void OG_CustomCtrl::OnMotion(wxMouseEvent& event)
wxString language = wxGetApp().app_config->get("translation_language"); wxString language = wxGetApp().app_config->get("translation_language");
bool suppress_hyperlinks = get_app_config()->get("suppress_hyperlinks") == "1";
for (CtrlLine& line : ctrl_lines) { for (CtrlLine& line : ctrl_lines) {
line.is_focused = is_point_in_rect(pos, line.rect_label); line.is_focused = is_point_in_rect(pos, line.rect_label);
if (line.is_focused) { if (line.is_focused) {
tooltip = get_url(line.og_line.label_path); if (!suppress_hyperlinks && !line.og_line.label_path.empty())
tooltip = get_url(line.og_line.label_path) +"\n\n";
tooltip += line.og_line.label_tooltip;
break; break;
} }
@ -464,6 +477,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
{ {
Field* field = ctrl->opt_group->get_field(og_line.get_options().front().opt_id); Field* field = ctrl->opt_group->get_field(og_line.get_options().front().opt_id);
bool suppress_hyperlinks = get_app_config()->get("suppress_hyperlinks") == "1";
if (draw_just_act_buttons) { if (draw_just_act_buttons) {
if (field) if (field)
draw_act_bmps(dc, wxPoint(0, v_pos), field->undo_to_sys_bitmap()->bmp(), field->undo_bitmap()->bmp(), field->blink()); draw_act_bmps(dc, wxPoint(0, v_pos), field->undo_to_sys_bitmap()->bmp(), field->undo_bitmap()->bmp(), field->blink());
@ -481,7 +495,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
bool is_url_string = false; bool is_url_string = false;
if (ctrl->opt_group->label_width != 0 && !label.IsEmpty()) { if (ctrl->opt_group->label_width != 0 && !label.IsEmpty()) {
const wxColour* text_clr = (option_set.size() == 1 && field ? field->label_color() : og_line.full_Label_color); const wxColour* text_clr = (option_set.size() == 1 && field ? field->label_color() : og_line.full_Label_color);
is_url_string = !og_line.label_path.IsEmpty(); is_url_string = !suppress_hyperlinks && !og_line.label_path.IsEmpty();
h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label + ":", text_clr, ctrl->opt_group->label_width * ctrl->m_em_unit, is_url_string); h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label + ":", text_clr, ctrl->opt_group->label_width * ctrl->m_em_unit, is_url_string);
} }
@ -521,7 +535,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
if (is_url_string) if (is_url_string)
is_url_string = false; is_url_string = false;
else if(opt == option_set.front()) else if(opt == option_set.front())
is_url_string = !og_line.label_path.IsEmpty(); is_url_string = !suppress_hyperlinks && !og_line.label_path.IsEmpty();
h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label, field ? field->label_color() : nullptr, ctrl->opt_group->sublabel_width * ctrl->m_em_unit, is_url_string); h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label, field ? field->label_color() : nullptr, ctrl->opt_group->sublabel_width * ctrl->m_em_unit, is_url_string);
} }
@ -598,7 +612,7 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_text(wxDC& dc, wxPoint pos, const wxStr
dc.GetMultiLineTextExtent(out_text, &text_width, &text_height); dc.GetMultiLineTextExtent(out_text, &text_width, &text_height);
pos.y = pos.y + lround((height - text_height) / 2); pos.y = pos.y + lround((height - text_height) / 2);
if (width > 0 && is_url) if (width > 0)
rect_label = wxRect(pos, wxSize(text_width, text_height)); rect_label = wxRect(pos, wxSize(text_width, text_height));
wxColour old_clr = dc.GetTextForeground(); wxColour old_clr = dc.GetTextForeground();
@ -660,7 +674,19 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_act_bmps(wxDC& dc, wxPoint pos, const wxBi
bool OG_CustomCtrl::CtrlLine::launch_browser() const bool OG_CustomCtrl::CtrlLine::launch_browser() const
{ {
return is_focused && !og_line.label_path.IsEmpty() && wxLaunchDefaultBrowser(get_url(og_line.label_path)); if (get_app_config()->get("suppress_hyperlinks").empty()) {
wxString preferences_item = _L("Suppress to open hyperlink in browser");
wxString msg =
_L("PrusaSlicer will remember your action.") + "\n" +
_L("You will not be asked about it again on label hovering.") + "\n\n" +
format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto changes your choise."), preferences_item) + "\n\n" +
_L("Should we suppress to use hyperlinks in PrusaSlicer?");
wxMessageDialog dialog(nullptr, msg, _L("PrusaSlicer: Don't ask me again"), wxYES | wxNO | wxICON_INFORMATION);
get_app_config()->set("suppress_hyperlinks", dialog.ShowModal() == wxID_YES ? "1" : "0");
}
return get_app_config()->get("suppress_hyperlinks") == "0" && is_focused && !og_line.label_path.IsEmpty() && wxLaunchDefaultBrowser(get_url(og_line.label_path));
} }

View file

@ -1156,7 +1156,43 @@ void Sidebar::update_sliced_info_sizer()
new_label = imperial_units ? _L("Used Filament (in³)") : _L("Used Filament (mm³)"); new_label = imperial_units ? _L("Used Filament (in³)") : _L("Used Filament (mm³)");
info_text = wxString::Format("%.2f", imperial_units ? ps.total_extruded_volume * koef : ps.total_extruded_volume); info_text = wxString::Format("%.2f", imperial_units ? ps.total_extruded_volume * koef : ps.total_extruded_volume);
p->sliced_info->SetTextAndShow(siFilament_mm3, info_text, new_label); p->sliced_info->SetTextAndShow(siFilament_mm3, info_text, new_label);
p->sliced_info->SetTextAndShow(siFilament_g, ps.total_weight == 0.0 ? "N/A" : wxString::Format("%.2f", ps.total_weight));
if (ps.total_weight == 0.0)
p->sliced_info->SetTextAndShow(siFilament_g, "N/A");
else {
new_label = _L("Used Filament (g)");
info_text = wxString::Format("%.2f", ps.total_weight);
const std::vector<std::string>& filament_presets = wxGetApp().preset_bundle->filament_presets;
const PresetCollection& filaments = wxGetApp().preset_bundle->filaments;
if (ps.filament_stats.size() > 1)
new_label += ":";
for (auto filament : ps.filament_stats) {
const Preset* filament_preset = filaments.find_preset(filament_presets[filament.first], false);
if (filament_preset) {
double filament_weight;
if (ps.filament_stats.size() == 1)
filament_weight = ps.total_weight;
else {
double filament_density = filament_preset->config.opt_float("filament_density", 0);
filament_weight = filament.second * filament_density * 2.4052f * 0.001; // assumes 1.75mm filament diameter;
new_label += "\n - " + format_wxstr(_L("Filament at extruder %1%"), filament.first + 1);
info_text += wxString::Format("\n%.2f", filament_weight);
}
double spool_weight = filament_preset->config.opt_float("filament_spool_weight", 0);
if (spool_weight != 0.0) {
new_label += "\n " + _L("(weight with spool)");
info_text += wxString::Format(" (%.2f)\n", filament_weight + spool_weight);
}
}
}
p->sliced_info->SetTextAndShow(siFilament_g, info_text, new_label);
}
new_label = _L("Cost"); new_label = _L("Cost");
if (is_wipe_tower) if (is_wipe_tower)

View file

@ -235,6 +235,14 @@ void PreferencesDialog::build()
option = Option(def, "seq_top_layer_only"); option = Option(def, "seq_top_layer_only");
m_optgroup_gui->append_single_option_line(option); m_optgroup_gui->append_single_option_line(option);
def.label = L("Suppress to open hyperlink in browser");
def.type = coBool;
def.tooltip = L("If enabled, the descriptions of configuration parameters in settings tabs woldn't work as hyperlinks. "
"If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks.");
def.set_default_value(new ConfigOptionBool{ app_config->get("suppress_hyperlinks") == "1" });
option = Option(def, "suppress_hyperlinks");
m_optgroup_gui->append_single_option_line(option);
m_optgroup_gui->activate(); m_optgroup_gui->activate();
if (is_editor) { if (is_editor) {

View file

@ -1785,6 +1785,19 @@ void TabFilament::build()
optgroup->append_single_option_line("extrusion_multiplier"); optgroup->append_single_option_line("extrusion_multiplier");
optgroup->append_single_option_line("filament_density"); optgroup->append_single_option_line("filament_density");
optgroup->append_single_option_line("filament_cost"); optgroup->append_single_option_line("filament_cost");
optgroup->append_single_option_line("filament_spool_weight");
optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value)
{
update_dirty();
if (opt_key == "filament_spool_weight") {
// Change of this option influences for an update of "Sliced Info"
wxGetApp().sidebar().update_sliced_info_sizer();
wxGetApp().sidebar().Layout();
}
else
on_value_change(opt_key, value);
};
// optgroup = page->new_optgroup(_(L("Temperature")) + wxString(" °C", wxConvUTF8)); // optgroup = page->new_optgroup(_(L("Temperature")) + wxString(" °C", wxConvUTF8));
optgroup = page->new_optgroup(L("Temperature")); optgroup = page->new_optgroup(L("Temperature"));

View file

@ -3,7 +3,7 @@
set(SLIC3R_APP_NAME "PrusaSlicer") set(SLIC3R_APP_NAME "PrusaSlicer")
set(SLIC3R_APP_KEY "PrusaSlicer") set(SLIC3R_APP_KEY "PrusaSlicer")
set(SLIC3R_VERSION "2.3.0-alpha3") set(SLIC3R_VERSION "2.3.0-alpha4")
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN") set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
set(SLIC3R_RC_VERSION "2,3,0,0") set(SLIC3R_RC_VERSION "2,3,0,0")
set(SLIC3R_RC_VERSION_DOTS "2.3.0.0") set(SLIC3R_RC_VERSION_DOTS "2.3.0.0")

View file

@ -8,15 +8,12 @@ REGISTER_CLASS(ExPolygonCollection, "ExPolygon::Collection");
REGISTER_CLASS(ExtrusionMultiPath, "ExtrusionMultiPath"); REGISTER_CLASS(ExtrusionMultiPath, "ExtrusionMultiPath");
REGISTER_CLASS(ExtrusionPath, "ExtrusionPath"); REGISTER_CLASS(ExtrusionPath, "ExtrusionPath");
REGISTER_CLASS(ExtrusionLoop, "ExtrusionLoop"); REGISTER_CLASS(ExtrusionLoop, "ExtrusionLoop");
// there is no ExtrusionLoop::Collection or ExtrusionEntity::Collection
REGISTER_CLASS(ExtrusionEntityCollection, "ExtrusionPath::Collection"); REGISTER_CLASS(ExtrusionEntityCollection, "ExtrusionPath::Collection");
REGISTER_CLASS(ExtrusionSimulator, "ExtrusionSimulator"); REGISTER_CLASS(ExtrusionSimulator, "ExtrusionSimulator");
REGISTER_CLASS(Filler, "Filler"); REGISTER_CLASS(Filler, "Filler");
REGISTER_CLASS(Flow, "Flow"); REGISTER_CLASS(Flow, "Flow");
REGISTER_CLASS(CoolingBuffer, "GCode::CoolingBuffer"); REGISTER_CLASS(CoolingBuffer, "GCode::CoolingBuffer");
REGISTER_CLASS(GCode, "GCode"); REGISTER_CLASS(GCode, "GCode");
//REGISTER_CLASS(GCodePreviewData, "GCode::PreviewData");
// REGISTER_CLASS(GCodeSender, "GCode::Sender");
REGISTER_CLASS(Layer, "Layer"); REGISTER_CLASS(Layer, "Layer");
REGISTER_CLASS(SupportLayer, "Layer::Support"); REGISTER_CLASS(SupportLayer, "Layer::Support");
REGISTER_CLASS(LayerRegion, "Layer::Region"); REGISTER_CLASS(LayerRegion, "Layer::Region");

View file

@ -25,14 +25,6 @@
croak("%s\n", e.what()); croak("%s\n", e.what());
} }
%}; %};
// void do_export_w_preview(Print *print, const char *path, GCodePreviewData *preview_data)
// %code%{
// try {
// THIS->do_export(print, path, preview_data);
// } catch (std::exception& e) {
// croak("%s\n", e.what());
// }
// %};
Ref<Vec2d> origin() Ref<Vec2d> origin()
%code{% RETVAL = &(THIS->origin()); %}; %code{% RETVAL = &(THIS->origin()); %};
@ -58,27 +50,3 @@
Ref<StaticPrintConfig> config() Ref<StaticPrintConfig> config()
%code{% RETVAL = const_cast<StaticPrintConfig*>(static_cast<const StaticPrintConfig*>(static_cast<const PrintObjectConfig*>(&THIS->config()))); %}; %code{% RETVAL = const_cast<StaticPrintConfig*>(static_cast<const StaticPrintConfig*>(static_cast<const PrintObjectConfig*>(&THIS->config()))); %};
}; };
//%name{Slic3r::GCode::PreviewData} class GCodePreviewData {
// GCodePreviewData();
// ~GCodePreviewData();
// void reset();
// bool empty() const;
// void set_type(int type)
// %code%{
// if ((0 <= type) && (type < GCodePreviewData::Extrusion::Num_View_Types))
// THIS->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type;
// %};
// int type() %code%{ RETVAL = (int)THIS->extrusion.view_type; %};
// void set_extrusion_flags(int flags)
// %code%{ THIS->extrusion.role_flags = (unsigned int)flags; %};
// void set_travel_visible(bool visible)
// %code%{ THIS->travel.is_visible = visible; %};
// void set_retractions_visible(bool visible)
// %code%{ THIS->retraction.is_visible = visible; %};
// void set_unretractions_visible(bool visible)
// %code%{ THIS->unretraction.is_visible = visible; %};
// void set_shells_visible(bool visible)
// %code%{ THIS->shell.is_visible = visible; %};
// void set_extrusion_paths_colors(std::vector<std::string> colors);
//};