mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-05-26 08:07:44 +08:00
Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_wipe_moves
This commit is contained in:
commit
f68cf49f3d
BIN
PrusaSlicer.mo
Normal file
BIN
PrusaSlicer.mo
Normal file
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,5 @@
|
||||
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.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.
|
||||
|
@ -5,7 +5,7 @@
|
||||
name = Creality
|
||||
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
||||
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||
config_version = 0.0.6
|
||||
config_version = 0.0.7
|
||||
# Where to get the updates from?
|
||||
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%
|
||||
|
@ -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
|
||||
1.1.10 Updated firmware version.
|
||||
1.1.9 Updated K values in filament profiles (linear advance). Added new filament profiles and SLA materials.
|
||||
|
@ -5,7 +5,7 @@
|
||||
name = Prusa Research
|
||||
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
||||
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||
config_version = 1.1.10
|
||||
config_version = 1.2.0-alpha0
|
||||
# Where to get the updates from?
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
|
||||
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||
@ -1807,12 +1807,14 @@ inherits = *PLA*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 21.99
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Fillamentum ABS]
|
||||
inherits = *ABSC*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 32.4
|
||||
filament_density = 1.04
|
||||
filament_spool_weight = 230
|
||||
first_layer_temperature = 240
|
||||
temperature = 240
|
||||
|
||||
@ -1821,6 +1823,7 @@ inherits = *ABS*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 38.7
|
||||
filament_density = 1.07
|
||||
filament_spool_weight = 230
|
||||
fan_always_on = 1
|
||||
cooling = 1
|
||||
min_fan_speed = 20
|
||||
@ -1836,6 +1839,7 @@ inherits = *ABS*
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 35.28
|
||||
filament_density = 1.07
|
||||
filament_spool_weight = 201
|
||||
fan_always_on = 1
|
||||
first_layer_temperature = 260
|
||||
first_layer_bed_temperature = 105
|
||||
@ -1857,6 +1861,7 @@ inherits = *ABS*
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 49.99
|
||||
filament_density = 1.22
|
||||
filament_spool_weight = 201
|
||||
fan_always_on = 0
|
||||
first_layer_temperature = 275
|
||||
first_layer_bed_temperature = 110
|
||||
@ -1883,6 +1888,7 @@ inherits = *ABS*
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 49.99
|
||||
filament_density = 1.22
|
||||
filament_spool_weight = 201
|
||||
fan_always_on = 0
|
||||
first_layer_temperature = 275
|
||||
first_layer_bed_temperature = 105
|
||||
@ -1916,6 +1922,7 @@ inherits = *PET*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 34.99
|
||||
filament_density = 1.25
|
||||
filament_spool_weight = 230
|
||||
filament_type = CPE
|
||||
first_layer_bed_temperature = 90
|
||||
first_layer_temperature = 275
|
||||
@ -1931,6 +1938,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
|
||||
extrusion_multiplier = 1.1
|
||||
filament_cost = 68
|
||||
filament_density = 1.15
|
||||
filament_spool_weight = 230
|
||||
filament_colour = #804040
|
||||
filament_max_volumetric_speed = 10
|
||||
first_layer_temperature = 190
|
||||
@ -1969,12 +1977,14 @@ inherits = *ABSC*
|
||||
filament_vendor = Hatchbox
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.04
|
||||
filament_spool_weight = 225
|
||||
|
||||
[filament:Plasty Mladec ABS]
|
||||
inherits = *ABSC*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.08
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Verbatim ABS]
|
||||
inherits = *ABSC*
|
||||
@ -1995,6 +2005,7 @@ inherits = *PET*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Generic PLA]
|
||||
inherits = *PLA*
|
||||
@ -2039,6 +2050,7 @@ inherits = *FLEX*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 33.99
|
||||
filament_density = 1.20
|
||||
filament_spool_weight = 230
|
||||
filament_max_volumetric_speed = 1.2
|
||||
filament_retract_length = 0
|
||||
filament_retract_speed = nil
|
||||
@ -2136,6 +2148,7 @@ inherits = *ABSC*
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
filament_density = 1.08
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:*ABS MMU2*]
|
||||
inherits = Prusa ABS
|
||||
@ -2185,6 +2198,7 @@ inherits = *ABS MMU2*
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 35.28
|
||||
filament_density = 1.07
|
||||
filament_spool_weight = 201
|
||||
fan_always_on = 1
|
||||
first_layer_temperature = 260
|
||||
first_layer_bed_temperature = 105
|
||||
@ -2209,6 +2223,7 @@ inherits = *ABS MMU2*
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 49.99
|
||||
filament_density = 1.22
|
||||
filament_spool_weight = 201
|
||||
fan_always_on = 0
|
||||
fan_below_layer_time = 30
|
||||
first_layer_temperature = 265
|
||||
@ -2237,17 +2252,20 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
|
||||
inherits = *ABS MMU2*
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Plasty Mladec ABS @MMU2]
|
||||
inherits = *ABS MMU2*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_density = 1.08
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusa HIPS]
|
||||
inherits = *ABS*
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 27.3
|
||||
filament_density = 1.04
|
||||
filament_spool_weight = 230
|
||||
bridge_fan_speed = 50
|
||||
cooling = 1
|
||||
extrusion_multiplier = 1
|
||||
@ -2287,6 +2305,7 @@ renamed_from = "Prusa PET"
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
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)
|
||||
|
||||
[filament:Verbatim PETG]
|
||||
@ -2310,6 +2329,7 @@ first_layer_temperature = 240
|
||||
temperature = 250
|
||||
filament_cost = 29.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 201
|
||||
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)
|
||||
|
||||
@ -2319,6 +2339,7 @@ renamed_from = "Prusa PET 0.6 nozzle"; "Prusa PETG 0.6 nozzle"
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusament PETG @0.6 nozzle]
|
||||
inherits = *PET06*
|
||||
@ -2327,6 +2348,7 @@ first_layer_temperature = 240
|
||||
temperature = 250
|
||||
filament_cost = 29.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 201
|
||||
filament_type = PETG
|
||||
|
||||
[filament:Plasty Mladec PETG @0.6 nozzle]
|
||||
@ -2336,6 +2358,7 @@ first_layer_temperature = 230
|
||||
temperature = 240
|
||||
filament_cost = 27.92
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
filament_type = PETG
|
||||
|
||||
[filament:Devil Design PETG @0.6 nozzle]
|
||||
@ -2398,12 +2421,14 @@ filament_vendor = Generic
|
||||
[filament:Plasty Mladec PETG @MMU2]
|
||||
inherits = *PET MMU2*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusa PETG @MMU2]
|
||||
inherits = *PET MMU2*
|
||||
renamed_from = "Prusa PET MMU2"; "Prusa PETG MMU2"
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusament PETG @MMU2]
|
||||
inherits = *PET MMU2*
|
||||
@ -2411,6 +2436,7 @@ filament_type = PETG
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 29.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 201
|
||||
|
||||
[filament:Generic PETG @MMU2 0.6 nozzle]
|
||||
inherits = *PET MMU2 06*
|
||||
@ -2421,6 +2447,7 @@ filament_vendor = Generic
|
||||
inherits = *PET MMU2 06*
|
||||
renamed_from = "Prusa PET MMU2 0.6 nozzle"; "Prusa PETG MMU2 0.6 nozzle"
|
||||
filament_vendor = Made for Prusa
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusament PETG @MMU2 0.6 nozzle]
|
||||
inherits = *PET MMU2 06*
|
||||
@ -2428,17 +2455,20 @@ filament_type = PETG
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 29.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 201
|
||||
|
||||
[filament:Plasty Mladec PETG @MMU2 0.6 nozzle]
|
||||
inherits = *PET MMU2 06*
|
||||
filament_type = PETG
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusa PLA]
|
||||
inherits = *PLA*
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 20.99
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Fiberlogy PLA]
|
||||
inherits = *PLA*
|
||||
@ -2451,6 +2481,7 @@ inherits = *PLA*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_cost = 25.4
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:AmazonBasics PLA]
|
||||
inherits = *PLA*
|
||||
@ -2463,6 +2494,7 @@ inherits = *PLA*
|
||||
filament_vendor = Hatchbox
|
||||
filament_cost = 25.4
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 225
|
||||
|
||||
[filament:Esun PLA]
|
||||
inherits = *PLA*
|
||||
@ -2494,6 +2526,7 @@ filament_vendor = Prusa Polymers
|
||||
temperature = 215
|
||||
filament_cost = 24.99
|
||||
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:*PLA MMU2*]
|
||||
@ -2520,18 +2553,21 @@ filament_vendor = Generic
|
||||
inherits = *PLA MMU2*
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 20.99
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusament PLA @MMU2]
|
||||
inherits = *PLA MMU2*
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 24.99
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 201
|
||||
|
||||
[filament:Fillamentum PLA @MMU2]
|
||||
inherits = *PLA MMU2*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 21.99
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:SemiFlex or Flexfill 98A]
|
||||
inherits = *FLEX*
|
||||
@ -2545,6 +2581,7 @@ inherits = *FLEX*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 33.99
|
||||
filament_density = 1.23
|
||||
filament_spool_weight = 230
|
||||
filament_max_volumetric_speed = 1.35
|
||||
fan_always_on = 1
|
||||
cooling = 0
|
||||
@ -2579,6 +2616,7 @@ inherits = *common*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 56.99
|
||||
filament_density = 1.01
|
||||
filament_spool_weight = 230
|
||||
bed_temperature = 90
|
||||
bridge_fan_speed = 30
|
||||
cooling = 1
|
||||
@ -2790,6 +2828,7 @@ inherits = *PETMMU1*
|
||||
filament_vendor = Fillamentum
|
||||
filament_cost = 34.99
|
||||
filament_density = 1.25
|
||||
filament_spool_weight = 230
|
||||
filament_type = CPE
|
||||
first_layer_bed_temperature = 90
|
||||
first_layer_temperature = 275
|
||||
@ -2819,6 +2858,7 @@ inherits = *PETMMU1*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Verbatim PETG @MMU1]
|
||||
inherits = *PETMMU1*
|
||||
@ -2838,6 +2878,7 @@ renamed_from = "Prusa PET MMU1"; "Prusa PETG MMU1"
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Prusament PETG @MMU1]
|
||||
inherits = *PETMMU1*
|
||||
@ -2846,6 +2887,7 @@ first_layer_temperature = 240
|
||||
temperature = 250
|
||||
filament_cost = 29.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 201
|
||||
filament_type = PETG
|
||||
|
||||
[filament:Taulman T-Glase @MMU1]
|
||||
@ -2910,6 +2952,7 @@ inherits = Generic PETG; *PETMINI*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
|
||||
|
||||
[filament:Verbatim PETG @MINI]
|
||||
@ -2979,6 +3022,7 @@ inherits = Generic ABS; *ABSMINI*
|
||||
filament_vendor = Hatchbox
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.08
|
||||
filament_spool_weight = 225
|
||||
fan_always_on = 0
|
||||
cooling = 1
|
||||
min_fan_speed = 15
|
||||
@ -2993,6 +3037,7 @@ inherits = Generic ABS; *ABSMINI*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.08
|
||||
filament_spool_weight = 230
|
||||
fan_always_on = 0
|
||||
cooling = 1
|
||||
min_fan_speed = 15
|
||||
@ -3022,6 +3067,7 @@ filament_vendor = Prusa Polymers
|
||||
first_layer_temperature = 240
|
||||
temperature = 250
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 201
|
||||
filament_cost = 29.99
|
||||
compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
|
||||
|
||||
@ -3044,6 +3090,7 @@ inherits = Prusament PETG; *PETMINI06*
|
||||
first_layer_temperature = 240
|
||||
temperature = 250
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 201
|
||||
filament_cost = 29.99
|
||||
|
||||
[filament:Generic PETG @0.6 nozzle MINI]
|
||||
@ -3063,6 +3110,7 @@ filament_density = 1.23
|
||||
[filament:Plasty Mladec PETG @0.6 nozzle MINI]
|
||||
inherits = Generic PETG; *PETMINI06*
|
||||
filament_vendor = Plasty Mladec
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Verbatim PETG @0.6 nozzle MINI]
|
||||
inherits = Generic PETG; *PETMINI06*
|
||||
@ -3090,6 +3138,7 @@ filament_type = ASA
|
||||
filament_colour = #FFF2EC
|
||||
filament_cost = 35.28
|
||||
filament_density = 1.07
|
||||
filament_spool_weight = 201
|
||||
|
||||
[filament:Fillamentum Flexfill 98A @MINI]
|
||||
inherits = SemiFlex or Flexfill 98A; *FLEXMINI*
|
||||
@ -3098,6 +3147,7 @@ first_layer_temperature = 240
|
||||
temperature = 240
|
||||
filament_max_volumetric_speed = 1.35
|
||||
filament_cost = 33.99
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Generic FLEX @MINI]
|
||||
inherits = SemiFlex or Flexfill 98A; *FLEXMINI*
|
||||
@ -3173,6 +3223,7 @@ filament_retract_lift = 0
|
||||
filament_retract_before_travel = 7
|
||||
filament_wipe = 0
|
||||
filament_density = 1.20
|
||||
filament_spool_weight = 230
|
||||
filament_cost = 33.95
|
||||
bridge_fan_speed = 70
|
||||
fan_always_on = 1
|
||||
@ -3193,6 +3244,7 @@ temperature = 265
|
||||
filament_type = CPE
|
||||
filament_cost = 34.99
|
||||
filament_density = 1.25
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:ColorFabb nGen @MINI]
|
||||
inherits = ColorFabb nGen; *PETMINI*
|
||||
@ -3208,6 +3260,7 @@ filament_cost = 28.80
|
||||
inherits = Fillamentum ABS; *ABSMINI*
|
||||
filament_cost = 32.4
|
||||
filament_density = 1.04
|
||||
filament_spool_weight = 230
|
||||
fan_always_on = 0
|
||||
cooling = 1
|
||||
min_fan_speed = 15
|
||||
@ -3234,6 +3287,7 @@ filament_type = ASA
|
||||
filament_colour = #FFF2EC
|
||||
filament_cost = 38.7
|
||||
filament_density = 1.07
|
||||
filament_spool_weight = 230
|
||||
|
||||
[filament:Polymaker PC-Max @MINI]
|
||||
inherits = Polymaker PC-Max; *ABSMINI*
|
||||
@ -3253,6 +3307,7 @@ inherits = *ABSMINI*
|
||||
filament_vendor = Prusa Polymers
|
||||
filament_cost = 49.99
|
||||
filament_density = 1.22
|
||||
filament_spool_weight = 201
|
||||
fan_always_on = 0
|
||||
first_layer_temperature = 275
|
||||
first_layer_bed_temperature = 100
|
||||
@ -3281,6 +3336,7 @@ inherits = *ABSMINI*
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
filament_density = 1.08
|
||||
filament_spool_weight = 230
|
||||
fan_always_on = 0
|
||||
cooling = 1
|
||||
min_fan_speed = 15
|
||||
@ -3374,6 +3430,7 @@ renamed_from = "Prusa PET MINI"; "Prusa PETG MINI"
|
||||
filament_vendor = Made for Prusa
|
||||
filament_cost = 22.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
|
||||
|
||||
[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_cost = 22.99
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
|
||||
[sla_print:*common*]
|
||||
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_widening_factor = 0
|
||||
supports_enable = 1
|
||||
support_small_pillar_diameter_percent = 60%
|
||||
|
||||
[sla_print:0.025 UltraDetail]
|
||||
inherits = *common*
|
||||
|
@ -84,10 +84,14 @@ public:
|
||||
template<typename VISITOR> void visit_cells_intersecting_line(Slic3r::Point p1, Slic3r::Point p2, VISITOR &visitor) const
|
||||
{
|
||||
// End points of the line segment.
|
||||
p1(0) -= m_bbox.min(0);
|
||||
p1(1) -= m_bbox.min(1);
|
||||
p2(0) -= m_bbox.min(0);
|
||||
p2(1) -= m_bbox.min(1);
|
||||
assert(m_bbox.contains(p1));
|
||||
assert(m_bbox.contains(p2));
|
||||
p1 -= m_bbox.min;
|
||||
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.
|
||||
coord_t ix = p1(0) / m_resolution;
|
||||
coord_t iy = p1(1) / m_resolution;
|
||||
@ -115,18 +119,22 @@ public:
|
||||
ey -= ex;
|
||||
ex = int64_t(dy) * m_resolution;
|
||||
ix += 1;
|
||||
assert(ix <= ixb);
|
||||
}
|
||||
else if (ex == ey) {
|
||||
ex = int64_t(dy) * m_resolution;
|
||||
ey = int64_t(dx) * m_resolution;
|
||||
ix += 1;
|
||||
iy += 1;
|
||||
assert(ix <= ixb);
|
||||
assert(iy <= iyb);
|
||||
}
|
||||
else {
|
||||
assert(ex > ey);
|
||||
ex -= ey;
|
||||
ey = int64_t(dx) * m_resolution;
|
||||
iy += 1;
|
||||
assert(iy <= iyb);
|
||||
}
|
||||
if (! visitor(iy, ix))
|
||||
return;
|
||||
@ -141,11 +149,13 @@ public:
|
||||
ey -= ex;
|
||||
ex = int64_t(dy) * m_resolution;
|
||||
ix += 1;
|
||||
assert(ix <= ixb);
|
||||
}
|
||||
else {
|
||||
ex -= ey;
|
||||
ey = int64_t(dx) * m_resolution;
|
||||
iy -= 1;
|
||||
assert(iy >= iyb);
|
||||
}
|
||||
if (! visitor(iy, ix))
|
||||
return;
|
||||
@ -163,12 +173,14 @@ public:
|
||||
ey -= ex;
|
||||
ex = int64_t(dy) * m_resolution;
|
||||
ix -= 1;
|
||||
assert(ix >= ixb);
|
||||
}
|
||||
else {
|
||||
assert(ex >= ey);
|
||||
ex -= ey;
|
||||
ey = int64_t(dx) * m_resolution;
|
||||
iy += 1;
|
||||
assert(iy <= iyb);
|
||||
}
|
||||
if (! visitor(iy, ix))
|
||||
return;
|
||||
@ -183,6 +195,7 @@ public:
|
||||
ey -= ex;
|
||||
ex = int64_t(dy) * m_resolution;
|
||||
ix -= 1;
|
||||
assert(ix >= ixb);
|
||||
}
|
||||
else if (ex == ey) {
|
||||
// The lower edge of a grid cell belongs to the cell.
|
||||
@ -191,10 +204,12 @@ public:
|
||||
if (dx > 0) {
|
||||
ex = int64_t(dy) * m_resolution;
|
||||
ix -= 1;
|
||||
assert(ix >= ixb);
|
||||
}
|
||||
if (dy > 0) {
|
||||
ey = int64_t(dx) * m_resolution;
|
||||
iy -= 1;
|
||||
assert(iy >= iyb);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -202,6 +217,7 @@ public:
|
||||
ex -= ey;
|
||||
ey = int64_t(dx) * m_resolution;
|
||||
iy -= 1;
|
||||
assert(iy >= iyb);
|
||||
}
|
||||
if (! visitor(iy, ix))
|
||||
return;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include <stdio.h>
|
||||
#include <numeric>
|
||||
|
||||
#include "../ClipperUtils.hpp"
|
||||
#include "../EdgeGrid.hpp"
|
||||
@ -28,6 +29,7 @@ Fill* Fill::new_from_type(const InfillPattern type)
|
||||
case ip3DHoneycomb: return new Fill3DHoneycomb();
|
||||
case ipGyroid: return new FillGyroid();
|
||||
case ipRectilinear: return new FillRectilinear();
|
||||
case ipAlignedRectilinear: return new FillAlignedRectilinear();
|
||||
case ipMonotonic: return new FillMonotonic();
|
||||
case ipLine: return new FillLine();
|
||||
case ipGrid: return new FillGrid();
|
||||
@ -840,7 +842,7 @@ void mark_boundary_segments_touching_infill(
|
||||
|
||||
EdgeGrid::Grid grid;
|
||||
// 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.
|
||||
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
|
||||
} 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) {
|
||||
#ifdef INFILL_DEBUG_OUTPUT
|
||||
++ iStep;
|
||||
@ -1018,11 +1017,13 @@ void mark_boundary_segments_touching_infill(
|
||||
Vec2d vperp = perp(v);
|
||||
Vec2d a = pt1 - 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);
|
||||
a = pt1 - 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);
|
||||
#endif
|
||||
#ifdef INFILL_DEBUG_OUTPUT
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
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
|
||||
{
|
||||
public:
|
||||
|
@ -399,13 +399,11 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename)
|
||||
};
|
||||
|
||||
// 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'
|
||||
std::string line = gcode_line.substr(0, gcode_line.length() - 1);
|
||||
if (line == ";" + Layer_Change_Tag)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
assert(! gcode_line.empty());
|
||||
assert(gcode_line.back() == '\n');
|
||||
return gcode_line.substr(0, gcode_line.length() - 1) == ";" + Layer_Change_Tag;
|
||||
};
|
||||
|
||||
// Iterators for the normal and silent cached time estimate entry recently processed, used by process_line_G1.
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include "Line.hpp"
|
||||
#include "MultiPoint.hpp"
|
||||
#include "Int128.hpp"
|
||||
#include "BoundingBox.hpp"
|
||||
#include <algorithm>
|
||||
|
||||
namespace Slic3r {
|
||||
|
@ -439,7 +439,7 @@ const std::vector<std::string>& Preset::filament_options()
|
||||
{
|
||||
static std::vector<std::string> s_opts {
|
||||
"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_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",
|
||||
|
@ -98,6 +98,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|
||||
"filament_density",
|
||||
"filament_notes",
|
||||
"filament_cost",
|
||||
"filament_spool_weight",
|
||||
"first_layer_acceleration",
|
||||
"first_layer_bed_temperature",
|
||||
"first_layer_speed",
|
||||
|
@ -460,12 +460,14 @@ void PrintConfigDef::init_fff_params()
|
||||
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
|
||||
def->enum_values.push_back("rectilinear");
|
||||
def->enum_values.push_back("monotonic");
|
||||
def->enum_values.push_back("alignedrectilinear");
|
||||
def->enum_values.push_back("concentric");
|
||||
def->enum_values.push_back("hilbertcurve");
|
||||
def->enum_values.push_back("archimedeanchords");
|
||||
def->enum_values.push_back("octagramspiral");
|
||||
def->enum_labels.push_back(L("Rectilinear"));
|
||||
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("Hilbert Curve"));
|
||||
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_labels = def_top_fill_pattern->enum_labels;
|
||||
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->label = L("External perimeters");
|
||||
@ -806,6 +808,16 @@ void PrintConfigDef::init_fff_params()
|
||||
def->min = 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->set_default_value(new ConfigOptionStrings { "" });
|
||||
def->cli = ConfigOptionDef::nocli;
|
||||
@ -871,6 +883,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->tooltip = L("Fill pattern for general low-density infill.");
|
||||
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
|
||||
def->enum_values.push_back("rectilinear");
|
||||
def->enum_values.push_back("alignedrectilinear");
|
||||
def->enum_values.push_back("grid");
|
||||
def->enum_values.push_back("triangles");
|
||||
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("supportcubic");
|
||||
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("Triangles"));
|
||||
def->enum_labels.push_back(L("Stars"));
|
||||
@ -1541,7 +1555,6 @@ void PrintConfigDef::init_fff_params()
|
||||
def = this->add("perimeter_acceleration", coFloat);
|
||||
def->label = L("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.");
|
||||
def->sidetext = L("mm/s²");
|
||||
def->mode = comExpert;
|
||||
|
@ -44,7 +44,7 @@ enum AuthorizationType {
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
@ -145,6 +145,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g
|
||||
if (keys_map.empty()) {
|
||||
keys_map["rectilinear"] = ipRectilinear;
|
||||
keys_map["monotonic"] = ipMonotonic;
|
||||
keys_map["alignedrectilinear"] = ipAlignedRectilinear;
|
||||
keys_map["grid"] = ipGrid;
|
||||
keys_map["triangles"] = ipTriangles;
|
||||
keys_map["stars"] = ipStars;
|
||||
@ -683,6 +684,7 @@ public:
|
||||
ConfigOptionStrings filament_type;
|
||||
ConfigOptionBools filament_soluble;
|
||||
ConfigOptionFloats filament_cost;
|
||||
ConfigOptionFloats filament_spool_weight;
|
||||
ConfigOptionFloats filament_max_volumetric_speed;
|
||||
ConfigOptionFloats filament_loading_speed;
|
||||
ConfigOptionFloats filament_loading_speed_start;
|
||||
@ -759,6 +761,7 @@ protected:
|
||||
OPT_PTR(filament_type);
|
||||
OPT_PTR(filament_soluble);
|
||||
OPT_PTR(filament_cost);
|
||||
OPT_PTR(filament_spool_weight);
|
||||
OPT_PTR(filament_max_volumetric_speed);
|
||||
OPT_PTR(filament_loading_speed);
|
||||
OPT_PTR(filament_loading_speed_start);
|
||||
|
@ -1,11 +1,6 @@
|
||||
#include "libslic3r/libslic3r.h"
|
||||
#if ENABLE_GCODE_VIEWER
|
||||
#include "DoubleSlider.hpp"
|
||||
#include "libslic3r/GCode.hpp"
|
||||
#else
|
||||
#include "wxExtensions.hpp"
|
||||
#include "libslic3r/GCode/PreviewData.hpp"
|
||||
#endif // ENABLE_GCODE_VIEWER
|
||||
#include "GUI.hpp"
|
||||
#include "GUI_App.hpp"
|
||||
#include "Plater.hpp"
|
||||
@ -137,14 +132,13 @@ Control::Control( wxWindow *parent,
|
||||
m_line_pens = { &DARK_GREY_PEN, &GREY_PEN, &LIGHT_GREY_PEN };
|
||||
m_segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN };
|
||||
|
||||
const wxFont& font = GetFont();
|
||||
m_font = is_osx ? font.Smaller().Smaller() : font.Smaller();
|
||||
m_font = GetFont();
|
||||
this->SetMinSize(get_min_size());
|
||||
}
|
||||
|
||||
void Control::msw_rescale()
|
||||
{
|
||||
const wxFont& font = GUI::wxGetApp().normal_font();
|
||||
m_font = is_osx ? font.Smaller().Smaller() : font.Smaller();
|
||||
m_font = GUI::wxGetApp().normal_font();
|
||||
|
||||
m_bmp_thumb_higher.msw_rescale();
|
||||
m_bmp_thumb_lower .msw_rescale();
|
||||
@ -182,8 +176,7 @@ int Control::GetActiveValue() 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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
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)
|
||||
|
@ -2743,7 +2743,9 @@ void GCodeViewer::render_legend() const
|
||||
}
|
||||
if (!m_settings_ids.filament.empty()) {
|
||||
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.text(m_settings_ids.filament[i]);
|
||||
}
|
||||
|
@ -1091,7 +1091,7 @@ wxDEFINE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent);
|
||||
|
||||
const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25;
|
||||
|
||||
GLCanvas3D::ArrangeSettings load_arrange_settings()
|
||||
static GLCanvas3D::ArrangeSettings load_arrange_settings()
|
||||
{
|
||||
GLCanvas3D::ArrangeSettings settings;
|
||||
|
||||
@ -2392,7 +2392,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
|
||||
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;
|
||||
|
||||
if (m_gizmos.on_char(evt))
|
||||
@ -3083,7 +3083,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
m_dirty = true;
|
||||
}
|
||||
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;
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
void GLCanvas3D:: _render_arrange_popup()
|
||||
bool GLCanvas3D::_render_arrange_menu(float pos_x)
|
||||
{
|
||||
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->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
|
||||
@ -3880,17 +3881,39 @@ void GLCanvas3D:: _render_arrange_popup()
|
||||
|
||||
auto &appcfg = wxGetApp().app_config;
|
||||
|
||||
bool settings_changed = false;
|
||||
|
||||
if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f)) {
|
||||
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)) {
|
||||
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();
|
||||
|
||||
return settings_changed;
|
||||
}
|
||||
|
||||
#define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
|
||||
@ -4305,7 +4328,7 @@ bool GLCanvas3D::_init_main_toolbar()
|
||||
|
||||
item.name = "arrange";
|
||||
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.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_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) {
|
||||
if (m_canvas != nullptr)
|
||||
{
|
||||
_render_arrange_popup();
|
||||
_render_arrange_menu(0.5f * (left + right));
|
||||
}
|
||||
};
|
||||
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");
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
if (is_search_pressed())
|
||||
|
@ -728,7 +728,7 @@ private:
|
||||
void _render_selection_sidebar_hints() const;
|
||||
bool _render_undo_redo_stack(const bool is_undo, 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;
|
||||
// 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;
|
||||
@ -780,6 +780,7 @@ private:
|
||||
bool _deactivate_search_toolbar_item();
|
||||
bool _activate_search_toolbar_item();
|
||||
bool _deactivate_collapse_toolbar_items();
|
||||
bool _deactivate_arrange_menu();
|
||||
|
||||
float get_overlay_window_width() { return LayersEditing::get_overlay_window_width(); }
|
||||
|
||||
|
@ -283,7 +283,7 @@ bool Preview::init(wxWindow* parent, Model* model)
|
||||
wxBoxSizer* right_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
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);
|
||||
|
||||
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)
|
||||
m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times);
|
||||
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);
|
||||
Layout();
|
||||
|
@ -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());
|
||||
#else
|
||||
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();
|
||||
// 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());
|
||||
if(ec.value() > 0) {
|
||||
if (ec.value() > 0) {
|
||||
// Still not valid, process without canonical
|
||||
hashed_path = std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
|
||||
|
||||
}
|
||||
}
|
||||
#endif // win32
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <boost/algorithm/string/split.hpp>
|
||||
#include "libslic3r/Utils.hpp"
|
||||
#include "I18N.hpp"
|
||||
#include "format.hpp"
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
@ -174,7 +175,15 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
|
||||
label += ":";
|
||||
|
||||
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);
|
||||
#endif //__WXMSW__
|
||||
h_pos += label_w + 1 + m_h_gap;
|
||||
}
|
||||
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");
|
||||
|
||||
bool suppress_hyperlinks = get_app_config()->get("suppress_hyperlinks") == "1";
|
||||
|
||||
for (CtrlLine& line : ctrl_lines) {
|
||||
line.is_focused = is_point_in_rect(pos, line.rect_label);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
bool suppress_hyperlinks = get_app_config()->get("suppress_hyperlinks") == "1";
|
||||
if (draw_just_act_buttons) {
|
||||
if (field)
|
||||
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;
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
@ -521,7 +535,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
|
||||
if (is_url_string)
|
||||
is_url_string = false;
|
||||
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);
|
||||
}
|
||||
|
||||
@ -598,7 +612,7 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_text(wxDC& dc, wxPoint pos, const wxStr
|
||||
dc.GetMultiLineTextExtent(out_text, &text_width, &text_height);
|
||||
|
||||
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));
|
||||
|
||||
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
|
||||
{
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1156,7 +1156,43 @@ void Sidebar::update_sliced_info_sizer()
|
||||
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);
|
||||
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");
|
||||
if (is_wipe_tower)
|
||||
|
@ -235,6 +235,14 @@ void PreferencesDialog::build()
|
||||
option = Option(def, "seq_top_layer_only");
|
||||
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();
|
||||
|
||||
if (is_editor) {
|
||||
|
@ -1785,6 +1785,19 @@ void TabFilament::build()
|
||||
optgroup->append_single_option_line("extrusion_multiplier");
|
||||
optgroup->append_single_option_line("filament_density");
|
||||
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"));
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
set(SLIC3R_APP_NAME "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_RC_VERSION "2,3,0,0")
|
||||
set(SLIC3R_RC_VERSION_DOTS "2.3.0.0")
|
||||
|
@ -8,15 +8,12 @@ REGISTER_CLASS(ExPolygonCollection, "ExPolygon::Collection");
|
||||
REGISTER_CLASS(ExtrusionMultiPath, "ExtrusionMultiPath");
|
||||
REGISTER_CLASS(ExtrusionPath, "ExtrusionPath");
|
||||
REGISTER_CLASS(ExtrusionLoop, "ExtrusionLoop");
|
||||
// there is no ExtrusionLoop::Collection or ExtrusionEntity::Collection
|
||||
REGISTER_CLASS(ExtrusionEntityCollection, "ExtrusionPath::Collection");
|
||||
REGISTER_CLASS(ExtrusionSimulator, "ExtrusionSimulator");
|
||||
REGISTER_CLASS(Filler, "Filler");
|
||||
REGISTER_CLASS(Flow, "Flow");
|
||||
REGISTER_CLASS(CoolingBuffer, "GCode::CoolingBuffer");
|
||||
REGISTER_CLASS(GCode, "GCode");
|
||||
//REGISTER_CLASS(GCodePreviewData, "GCode::PreviewData");
|
||||
// REGISTER_CLASS(GCodeSender, "GCode::Sender");
|
||||
REGISTER_CLASS(Layer, "Layer");
|
||||
REGISTER_CLASS(SupportLayer, "Layer::Support");
|
||||
REGISTER_CLASS(LayerRegion, "Layer::Region");
|
||||
|
@ -25,14 +25,6 @@
|
||||
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()
|
||||
%code{% RETVAL = &(THIS->origin()); %};
|
||||
@ -58,27 +50,3 @@
|
||||
Ref<StaticPrintConfig> 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);
|
||||
//};
|
||||
|
Loading…
x
Reference in New Issue
Block a user