mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-10-01 06:43:23 +08:00
Merge branch 'master' into fs_svg
# Conflicts: # src/libslic3r/Emboss.cpp # src/slic3r/GUI/Jobs/EmbossJob.cpp
This commit is contained in:
commit
9718f26983
@ -1,4 +1,7 @@
|
||||
min_slic3r_version = 2.6.0-alpha5
|
||||
1.9.0-alpha4 Updated XL and MK4 profiles. Updated PC Blend Carbon Fiber density.
|
||||
1.9.0-alpha3 Updated compatibility condition for MMU1 filaments.
|
||||
1.9.0-alpha2 Added profiles for Spectrum filaments.
|
||||
1.9.0-alpha1 Added profiles for Original Prusa MK4.
|
||||
1.9.0-alpha0 Updated output filename format.
|
||||
1.7.0-alpha2 Updated compatibility condition in some filament profiles (Prusa XL).
|
||||
@ -8,7 +11,13 @@ min_slic3r_version = 2.6.0-alpha1
|
||||
1.6.0-alpha2 Added profile for Prusament PETG Carbon Fiber and Fiberthree F3 PA-GF30 Pro. Updated acceleration settings for Prusa MINI.
|
||||
1.6.0-alpha1 Updated FW version notification. Decreased min layer time for PLA.
|
||||
1.6.0-alpha0 Default top fill set to monotonic lines. Updated infill/perimeter overlap values. Updated output filename format. Enabled dynamic overhang speeds.
|
||||
min_slic3r_version = 2.5.2-rc0
|
||||
1.7.3 Updated XL and MK4 profiles. Updated PC Blend Carbon Fiber density.
|
||||
1.7.2 Updated compatibility condition for MMU1 filaments.
|
||||
1.7.1 Added SLA materials. Updated MK4 and XL profiles.
|
||||
1.7.0 Added profiles for Original Prusa MK4.
|
||||
min_slic3r_version = 2.5.1-rc0
|
||||
1.6.4 Fixed compatibility condition for MMU1 filaments.
|
||||
1.6.3 Added SLA materials.
|
||||
1.6.2 Updated compatibility condition in some filament profiles (Prusa XL).
|
||||
1.6.1 Added filament profile for Prusament PETG Tungsten 75%. Updated Prusa XL profiles.
|
||||
|
@ -5,7 +5,7 @@
|
||||
name = Prusa Research
|
||||
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
||||
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||
config_version = 1.9.0-alpha1
|
||||
config_version = 1.9.0-alpha4
|
||||
# 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%
|
||||
@ -2130,6 +2130,7 @@ default_acceleration = 1250
|
||||
max_print_speed = 200
|
||||
first_layer_extrusion_width = 0.5
|
||||
support_material_extrusion_width = 0.37
|
||||
top_infill_extrusion_width = 0.4
|
||||
gcode_resolution = 0.008
|
||||
compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.4
|
||||
|
||||
@ -2162,6 +2163,7 @@ max_print_speed = 200
|
||||
first_layer_extrusion_width = 0.5
|
||||
gcode_resolution = 0.008
|
||||
support_material_extrusion_width = 0.37
|
||||
top_infill_extrusion_width = 0.4
|
||||
compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.20mm SPEED @XL 0.4]
|
||||
@ -2192,6 +2194,7 @@ default_acceleration = 1250
|
||||
max_print_speed = 200
|
||||
first_layer_extrusion_width = 0.5
|
||||
support_material_extrusion_width = 0.37
|
||||
top_infill_extrusion_width = 0.42
|
||||
compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.30mm DRAFT @XL 0.4]
|
||||
@ -3036,7 +3039,7 @@ inherits = *0.15mm*; *MK4*
|
||||
perimeter_speed = 45
|
||||
external_perimeter_speed = 25
|
||||
small_perimeter_speed = 25
|
||||
infill_speed = 90
|
||||
infill_speed = 120
|
||||
solid_infill_speed = 90
|
||||
top_solid_infill_speed = 40
|
||||
support_material_contact_distance = 0.2
|
||||
@ -3059,6 +3062,7 @@ max_print_speed = 200
|
||||
first_layer_extrusion_width = 0.5
|
||||
support_material_extrusion_width = 0.37
|
||||
gcode_resolution = 0.008
|
||||
top_infill_extrusion_width = 0.4
|
||||
compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.15mm SPEED @MK4 0.4]
|
||||
@ -3089,6 +3093,7 @@ max_print_speed = 200
|
||||
first_layer_extrusion_width = 0.5
|
||||
support_material_extrusion_width = 0.37
|
||||
gcode_resolution = 0.008
|
||||
top_infill_extrusion_width = 0.42
|
||||
compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.20mm QUALITY @MK4 0.4]
|
||||
@ -3096,7 +3101,7 @@ inherits = *0.20mm*; *MK4*
|
||||
perimeter_speed = 45
|
||||
external_perimeter_speed = 25
|
||||
small_perimeter_speed = 25
|
||||
infill_speed = 90
|
||||
infill_speed = 120
|
||||
solid_infill_speed = 90
|
||||
top_solid_infill_speed = 40
|
||||
support_material_contact_distance = 0.2
|
||||
@ -3119,6 +3124,7 @@ max_print_speed = 200
|
||||
first_layer_extrusion_width = 0.5
|
||||
gcode_resolution = 0.008
|
||||
support_material_extrusion_width = 0.37
|
||||
top_infill_extrusion_width = 0.4
|
||||
compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.20mm SPEED @MK4 0.4]
|
||||
@ -3149,6 +3155,7 @@ default_acceleration = 1000
|
||||
max_print_speed = 200
|
||||
first_layer_extrusion_width = 0.5
|
||||
support_material_extrusion_width = 0.37
|
||||
top_infill_extrusion_width = 0.42
|
||||
compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.30mm DRAFT @MK4 0.4]
|
||||
@ -3565,7 +3572,7 @@ compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8
|
||||
cooling = 1
|
||||
compatible_printers =
|
||||
# For now, all but selected filaments are disabled for the MMU 2.0
|
||||
compatible_printers_condition = ! single_extruder_multi_material and printer_notes!~/.*PG.*/
|
||||
compatible_printers_condition = ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) and printer_notes!~/.*PG.*/
|
||||
end_filament_gcode = "; Filament-specific end gcode"
|
||||
extrusion_multiplier = 1
|
||||
filament_loading_speed = 28
|
||||
@ -3608,7 +3615,7 @@ min_fan_speed = 100
|
||||
temperature = 210
|
||||
slowdown_below_layer_time = 10
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K18{elsif nozzle_diameter[0]==0.8};{else}M900 K30{endif} ; Filament gcode LA 1.0"
|
||||
compatible_printers_condition = ! single_extruder_multi_material and printer_notes!~/.*PG.*/
|
||||
compatible_printers_condition = ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) and printer_notes!~/.*PG.*/
|
||||
|
||||
[filament:*PLAPG*]
|
||||
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.06{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.08{elsif nozzle_diameter[0]==0.35}0.07{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp"
|
||||
@ -3658,7 +3665,7 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
|
||||
temperature = 240
|
||||
filament_retract_length = 1
|
||||
filament_retract_lift = 0.2
|
||||
compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:*PET06*]
|
||||
inherits = *PET*
|
||||
@ -3700,7 +3707,7 @@ slowdown_below_layer_time = 18
|
||||
filament_retract_length = 0.8
|
||||
|
||||
[filament:*04PLUS*]
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and ! single_extruder_multi_material and printer_notes!~/.*PG.*/
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) and printer_notes!~/.*PG.*/
|
||||
|
||||
[filament:*04PLUSPG*]
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/
|
||||
@ -3815,7 +3822,7 @@ compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*
|
||||
|
||||
[filament:*ABSPG*]
|
||||
compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8
|
||||
filament_max_volumetric_speed = 14
|
||||
filament_max_volumetric_speed = 12
|
||||
start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\nM142 S40 ; set heatbreak target temp"
|
||||
filament_cooling_final_speed = 50
|
||||
filament_cooling_initial_speed = 10
|
||||
@ -3869,7 +3876,7 @@ compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.6
|
||||
|
||||
[filament:*PC08PG*]
|
||||
inherits = *PCPG*
|
||||
filament_max_volumetric_speed = 20
|
||||
filament_max_volumetric_speed = 18
|
||||
compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8
|
||||
|
||||
[filament:*PCMK4*]
|
||||
@ -3885,7 +3892,7 @@ compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6
|
||||
|
||||
[filament:*PC08MK4*]
|
||||
inherits = *PCMK4*
|
||||
filament_max_volumetric_speed = 20
|
||||
filament_max_volumetric_speed = 18
|
||||
compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8
|
||||
|
||||
[filament:*PAPG*]
|
||||
@ -4196,7 +4203,7 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
|
||||
temperature = 260
|
||||
filament_retract_length = nil
|
||||
filament_retract_lift = 0.4
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:ColorFabb XT-CF20 @PG]
|
||||
inherits = ColorFabb XT-CF20; *PETPG*; *04PLUSPG*
|
||||
@ -4317,7 +4324,7 @@ filament_colour = #804040
|
||||
filament_max_volumetric_speed = 6
|
||||
first_layer_temperature = 260
|
||||
temperature = 260
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Kimya ABS Carbon @PG]
|
||||
inherits = Kimya ABS Carbon; *ABSPG*; *04PLUSPG*
|
||||
@ -4577,7 +4584,7 @@ filament_type = PC
|
||||
filament_colour = #DEE0E6
|
||||
filament_max_volumetric_speed = 8
|
||||
filament_retract_lift = 0.2
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.07{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
|
||||
|
||||
[filament:Prusament PC Blend @PG]
|
||||
@ -4609,12 +4616,12 @@ inherits = Prusament PC Blend
|
||||
first_layer_bed_temperature = 105
|
||||
bed_temperature = 110
|
||||
disable_fan_first_layers = 6
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes=~/.*PRINTER_MODEL_MK(2|2.5).*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes=~/.*PRINTER_MODEL_MK(2|2.5).*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Prusament PC Blend Carbon Fiber]
|
||||
inherits = Prusament PC Blend
|
||||
filament_cost = 90.73
|
||||
filament_density = 1.16
|
||||
filament_density = 1.22
|
||||
extrusion_multiplier = 1.04
|
||||
first_layer_temperature = 285
|
||||
temperature = 285
|
||||
@ -4623,7 +4630,7 @@ fan_below_layer_time = 10
|
||||
filament_colour = #BBBBBB
|
||||
filament_retract_length = nil
|
||||
filament_retract_lift = nil
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Prusament PC Blend Carbon Fiber @PG]
|
||||
inherits = Prusament PC Blend Carbon Fiber; *PCPG*
|
||||
@ -4667,7 +4674,7 @@ temperature = 285
|
||||
first_layer_bed_temperature = 90
|
||||
bed_temperature = 115
|
||||
fan_below_layer_time = 10
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Prusament PA11 Carbon Fiber @PG]
|
||||
inherits = Prusament PA11 Carbon Fiber; *PCPG*
|
||||
@ -4786,7 +4793,7 @@ inherits = *ABSC*
|
||||
filament_vendor = Generic
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.04
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Generic ABS @PG]
|
||||
inherits = Generic ABS; *ABSPG*
|
||||
@ -4923,7 +4930,7 @@ renamed_from = "Generic PET"
|
||||
filament_vendor = Generic
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.27
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Generic PETG @PG]
|
||||
inherits = Generic PETG; *PETPG*
|
||||
@ -5393,7 +5400,7 @@ filament_retract_lift = 0.4
|
||||
filament_max_volumetric_speed = 4
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
|
||||
filament_spool_weight = 0
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and printer_model!="MK2SMM" and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:addnorth Adura X @PG]
|
||||
inherits = addnorth Adura X; *PETPG*
|
||||
@ -5647,7 +5654,7 @@ filament_retract_length = 1.4
|
||||
filament_max_volumetric_speed = 5
|
||||
filament_spool_weight = 0
|
||||
filament_notes = "Please use a nozzle that is resistant to abrasive filaments, like hardened steel."
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and printer_model!="MK2SMM" and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:addnorth Rigid X @PG]
|
||||
inherits = addnorth Rigid X; *PETPG*; *04PLUSPG*
|
||||
@ -5693,7 +5700,7 @@ slowdown_below_layer_time = 15
|
||||
min_print_speed = 20
|
||||
filament_spool_weight = 0
|
||||
filament_retract_length = 1
|
||||
compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:addnorth Textura @PG]
|
||||
inherits = addnorth Textura; *PLAPG*
|
||||
@ -5730,7 +5737,7 @@ disable_fan_first_layers = 3
|
||||
fan_below_layer_time = 60
|
||||
slowdown_below_layer_time = 15
|
||||
bridge_fan_speed = 20
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Filamentworld ABS @PG]
|
||||
inherits = Filamentworld ABS; *ABSPG*
|
||||
@ -5827,7 +5834,7 @@ filament_vendor = Filament PM
|
||||
filament_cost = 27.82
|
||||
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!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Filament PM PETG @PG]
|
||||
inherits = Filament PM PETG; *PETPG*
|
||||
@ -5843,7 +5850,7 @@ inherits = *PLA*
|
||||
filament_vendor = Generic
|
||||
filament_cost = 25.4
|
||||
filament_density = 1.24
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Generic PLA @PG]
|
||||
inherits = Generic PLA; *PLAPG*
|
||||
@ -6092,6 +6099,220 @@ inherits = Spectrum PLA; *PLA06PG*
|
||||
[filament:Spectrum PLA @PG 0.8]
|
||||
inherits = Spectrum PLA; *PLA08PG*
|
||||
|
||||
[filament:Spectrum PETG Matt]
|
||||
inherits = *PET*
|
||||
filament_vendor = Spectrum
|
||||
bed_temperature = 90
|
||||
bridge_fan_speed = 50
|
||||
extrusion_multiplier = 1.1
|
||||
disable_fan_first_layers = 1
|
||||
full_fan_speed_layer = 1
|
||||
fan_always_on = 1
|
||||
fan_below_layer_time = 20
|
||||
filament_colour = #FF8000
|
||||
filament_max_volumetric_speed = 8
|
||||
filament_type = PETG
|
||||
first_layer_bed_temperature = 85
|
||||
first_layer_temperature = 230
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 30
|
||||
temperature = 240
|
||||
filament_density = 1.35
|
||||
|
||||
[filament:Spectrum PETG Matt @PG]
|
||||
inherits = Spectrum PETG Matt; *PETPG*
|
||||
|
||||
[filament:Spectrum PETG Matt @PG 0.6]
|
||||
inherits = Spectrum PETG Matt @PG; *PET06PG*
|
||||
|
||||
[filament:Spectrum PETG Matt @PG 0.8]
|
||||
inherits = Spectrum PETG Matt @PG; *PET08PG*
|
||||
|
||||
[filament:Spectrum PETG Matt @MINI]
|
||||
inherits = Spectrum PETG Matt; *PETMINI*
|
||||
|
||||
[filament:Spectrum PETG HT100]
|
||||
inherits = *PET*
|
||||
filament_vendor = Spectrum
|
||||
bed_temperature = 105
|
||||
bridge_fan_speed = 50
|
||||
extrusion_multiplier = 1
|
||||
disable_fan_first_layers = 1
|
||||
full_fan_speed_layer = 1
|
||||
fan_always_on = 1
|
||||
fan_below_layer_time = 20
|
||||
filament_colour = #FF8000
|
||||
filament_max_volumetric_speed = 8
|
||||
filament_type = PETG
|
||||
first_layer_bed_temperature = 105
|
||||
first_layer_temperature = 250
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 30
|
||||
temperature = 250
|
||||
filament_density = 1.24
|
||||
|
||||
[filament:Spectrum PETG HT100 @PG]
|
||||
inherits = Spectrum PETG HT100; *PETPG*
|
||||
|
||||
[filament:Spectrum PETG HT100 @PG 0.6]
|
||||
inherits = Spectrum PETG HT100 @PG; *PET06PG*
|
||||
|
||||
[filament:Spectrum PETG HT100 @PG 0.8]
|
||||
inherits = Spectrum PETG HT100 @PG; *PET08PG*
|
||||
|
||||
[filament:Spectrum PETG HT100 @MINI]
|
||||
inherits = Spectrum PETG HT100; *PETMINI*
|
||||
bed_temperature = 100
|
||||
first_layer_bed_temperature = 100
|
||||
|
||||
[filament:Spectrum GreenyHT]
|
||||
inherits = *PLA*
|
||||
filament_vendor = Spectrum
|
||||
first_layer_temperature = 205
|
||||
first_layer_bed_temperature = 45
|
||||
temperature = 205
|
||||
bed_temperature = 45
|
||||
bridge_fan_speed = 50
|
||||
extrusion_multiplier = 1.0
|
||||
disable_fan_first_layers = 1
|
||||
full_fan_speed_layer = 1
|
||||
fan_always_on = 1
|
||||
fan_below_layer_time = 20
|
||||
filament_colour = #FF8000
|
||||
filament_max_volumetric_speed = 8
|
||||
filament_type = PLA
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 30
|
||||
filament_density = 1.54
|
||||
|
||||
[filament:Spectrum GreenyHT @PG]
|
||||
inherits = Spectrum GreenyHT; *PLAPG*
|
||||
|
||||
[filament:Spectrum GreenyHT @PG 0.6]
|
||||
inherits = Spectrum GreenyHT @PG; *PLA06PG*
|
||||
|
||||
[filament:Spectrum GreenyHT @PG 0.8]
|
||||
inherits = Spectrum GreenyHT @PG; *PLA08PG*
|
||||
|
||||
[filament:Spectrum ASA 275]
|
||||
inherits = *ABSC*
|
||||
filament_vendor = Spectrum
|
||||
first_layer_temperature = 237
|
||||
first_layer_bed_temperature = 80
|
||||
temperature = 237
|
||||
bed_temperature = 80
|
||||
extrusion_multiplier = 0.98
|
||||
filament_type = ASA
|
||||
filament_density = 1.24
|
||||
|
||||
[filament:Spectrum ASA 275 @PG]
|
||||
inherits = Spectrum ASA 275; *ABSPG*
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
|
||||
|
||||
[filament:Spectrum ASA 275 @PG 0.6]
|
||||
inherits = Spectrum ASA 275 @PG; *ABS06PG*
|
||||
compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
|
||||
|
||||
[filament:Spectrum ASA 275 @PG 0.8]
|
||||
inherits = Spectrum ASA 275 @PG; *ABS08PG*
|
||||
compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material
|
||||
|
||||
[filament:Spectrum ASA 275 @MINI]
|
||||
inherits = Spectrum ASA 275; *ABSMINI*
|
||||
temperature = 235
|
||||
bed_temperature = 80
|
||||
extrusion_multiplier = 1
|
||||
|
||||
[filament:Spectrum ASA Kevlar]
|
||||
inherits = *ABSC*
|
||||
filament_vendor = Spectrum
|
||||
temperature = 250
|
||||
bed_temperature = 105
|
||||
extrusion_multiplier = 1.04
|
||||
filament_type = ASA
|
||||
filament_density = 1.24
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Spectrum ASA Kevlar @PG]
|
||||
inherits = Spectrum ASA Kevlar; *ABSPG*
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=="XL"
|
||||
|
||||
[filament:Spectrum ASA Kevlar @PG 0.6]
|
||||
inherits = Spectrum ASA Kevlar @PG; *ABS06PG*
|
||||
|
||||
[filament:Spectrum ASA Kevlar @PG 0.8]
|
||||
inherits = Spectrum ASA Kevlar @PG; *ABS08PG*
|
||||
|
||||
[filament:Spectrum ASA Kevlar @MK4]
|
||||
inherits = Spectrum ASA Kevlar; *ABSMK4*
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=="MK4"
|
||||
|
||||
[filament:Spectrum ASA Kevlar @MK4 0.6]
|
||||
inherits = Spectrum ASA Kevlar @MK4; *ABS06MK4*
|
||||
|
||||
[filament:Spectrum ASA Kevlar @MK4 0.8]
|
||||
inherits = Spectrum ASA Kevlar @MK4; *ABS08MK4*
|
||||
|
||||
[filament:Spectrum ASA Kevlar @MINI]
|
||||
inherits = Spectrum ASA Kevlar; *ABSMINI*
|
||||
temperature = 250
|
||||
bed_temperature = 100
|
||||
extrusion_multiplier = 1.03
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI"
|
||||
|
||||
[filament:Spectrum Tough PLA]
|
||||
inherits = *PLA*
|
||||
filament_vendor = Spectrum
|
||||
temperature = 235
|
||||
bed_temperature = 45
|
||||
extrusion_multiplier = 0.95
|
||||
filament_type = PLA Tough
|
||||
filament_density = 1.24
|
||||
|
||||
[filament:Spectrum Tough PLA @PG]
|
||||
inherits = Spectrum Tough PLA; *PLAPG*
|
||||
|
||||
[filament:Spectrum Tough PLA @PG 0.6]
|
||||
inherits = Spectrum Tough PLA @PG; *PLA06PG*
|
||||
|
||||
[filament:Spectrum Tough PLA @PG 0.8]
|
||||
inherits = Spectrum Tough PLA @PG; *PLA08PG*
|
||||
|
||||
[filament:Spectrum PLA PRO]
|
||||
inherits = *PLA*
|
||||
filament_vendor = Spectrum
|
||||
filament_type = PLA
|
||||
filament_density = 1.22
|
||||
|
||||
[filament:Spectrum PLA PRO @PG]
|
||||
inherits = Spectrum PLA PRO; *PLAPG*
|
||||
|
||||
[filament:Spectrum PLA PRO @PG 0.6]
|
||||
inherits = Spectrum PLA PRO @PG; *PLA06PG*
|
||||
|
||||
[filament:Spectrum PLA PRO @PG 0.8]
|
||||
inherits = Spectrum PLA PRO @PG; *PLA08PG*
|
||||
|
||||
[filament:Spectrum PCTG]
|
||||
inherits = *PET*
|
||||
filament_vendor = Spectrum
|
||||
filament_type = PCTG
|
||||
temperature = 240
|
||||
bed_temperature = 90
|
||||
filament_density = 1.27
|
||||
|
||||
[filament:Spectrum PCTG @PG]
|
||||
inherits = Spectrum PCTG; *PETPG*
|
||||
|
||||
[filament:Spectrum PCTG @PG 0.6]
|
||||
inherits = Spectrum PCTG @PG; *PET06PG*
|
||||
|
||||
[filament:Spectrum PCTG @PG 0.8]
|
||||
inherits = Spectrum PCTG @PG; *PET08PG*
|
||||
|
||||
[filament:Spectrum PCTG @MINI]
|
||||
inherits = Spectrum PCTG; *PETMINI*
|
||||
|
||||
[filament:Generic FLEX]
|
||||
inherits = *FLEX*
|
||||
filament_vendor = Generic
|
||||
@ -6596,7 +6817,7 @@ extrusion_multiplier = 0.95
|
||||
filament_density = 1.1
|
||||
first_layer_bed_temperature = 105
|
||||
bed_temperature = 100
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Filatech FilaCarbon @PG]
|
||||
inherits = Filatech FilaCarbon; *ABSPG*; *04PLUSPG*
|
||||
@ -6698,7 +6919,7 @@ first_layer_temperature = 230
|
||||
first_layer_bed_temperature = 100
|
||||
temperature = 225
|
||||
bed_temperature = 110
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Filatech HIPS @PG]
|
||||
inherits = Filatech HIPS; *ABSPG*
|
||||
@ -6755,7 +6976,7 @@ cooling = 0
|
||||
bridge_fan_speed = 25
|
||||
filament_type = PA
|
||||
filament_max_volumetric_speed = 8
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Filatech PA @PG]
|
||||
inherits = Filatech PA; *ABSPG*
|
||||
@ -7235,7 +7456,7 @@ min_fan_speed = 20
|
||||
max_fan_speed = 20
|
||||
bridge_fan_speed = 30
|
||||
disable_fan_first_layers = 4
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
filament_notes = "Material Description\nUltrafuse® PC/ABS FR Black is a V-0 flame retardant blend of Polycarbonate and ABS – two of the most used thermoplastics for engineering & electrical applications. The combination of these two materials results in a premium material with a mix of the excellent mechanical properties of PC and the comparably low printing temperature of ABS. Combined with a halogen free flame retardant, parts printed with Ultrafuse® PC/ABS FR Black feature great tensile and impact strength, higher thermal resistance than ABS and can fulfill the requirements of the UL94 V-0 standard.\n\nPrinting Recommendations:\nApply Magigoo PC to a clean build plate to improve adhesion."
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.07{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
|
||||
|
||||
@ -7670,7 +7891,7 @@ filament_vendor = Made for Prusa
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.08
|
||||
filament_spool_weight = 230
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Prusa ABS @PG]
|
||||
inherits = Prusa ABS; *ABSPG*
|
||||
@ -7881,7 +8102,7 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
|
||||
[filament:Prusament PC Blend Carbon Fiber @MMU2]
|
||||
inherits = Prusament PC Blend @MMU2
|
||||
filament_cost = 90.73
|
||||
filament_density = 1.16
|
||||
filament_density = 1.22
|
||||
extrusion_multiplier = 1.04
|
||||
fan_below_layer_time = 10
|
||||
first_layer_temperature = 280
|
||||
@ -7925,7 +8146,7 @@ max_fan_speed = 20
|
||||
min_fan_speed = 20
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.03{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0"
|
||||
temperature = 220
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Generic HIPS]
|
||||
inherits = *ABS*
|
||||
@ -7945,7 +8166,7 @@ max_fan_speed = 20
|
||||
min_fan_speed = 20
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.03{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0"
|
||||
temperature = 230
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Generic HIPS @PG]
|
||||
inherits = Generic HIPS; *ABSPG*
|
||||
@ -7973,7 +8194,7 @@ filament_vendor = Made for Prusa
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.27
|
||||
filament_spool_weight = 230
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Prusa PETG @PG]
|
||||
inherits = Prusa PETG; *PETPG*
|
||||
@ -8239,7 +8460,7 @@ filament_vendor = Made for Prusa
|
||||
filament_cost = 27.82
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 230
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Prusa PLA @PG]
|
||||
inherits = Prusa PLA; *PLAPG*
|
||||
@ -9350,7 +9571,7 @@ filament_cost = 36.29
|
||||
filament_density = 1.24
|
||||
filament_spool_weight = 201
|
||||
filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa"
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Prusament PLA @PG]
|
||||
inherits = Prusament PLA; *PLAPG*
|
||||
@ -9377,7 +9598,7 @@ filament_max_volumetric_speed = 8
|
||||
filament_type = PVB
|
||||
filament_soluble = 1
|
||||
filament_colour = #FFFF6F
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
slowdown_below_layer_time = 20
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.05{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
|
||||
|
||||
@ -9557,7 +9778,7 @@ temperature = 260
|
||||
max_fan_speed = 0
|
||||
min_fan_speed = 0
|
||||
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:Taulman Bridge @PG]
|
||||
inherits = Taulman Bridge; *ABSPG*
|
||||
@ -9779,7 +10000,7 @@ temperature = 285
|
||||
first_layer_bed_temperature = 90
|
||||
bed_temperature = 90
|
||||
fan_below_layer_time = 10
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
max_fan_speed = 15
|
||||
min_fan_speed = 15
|
||||
filament_type = PA
|
||||
@ -10009,7 +10230,7 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
|
||||
temperature = 235
|
||||
filament_wipe = 0
|
||||
filament_retract_lift = 0
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.35 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material
|
||||
compatible_printers_condition = nozzle_diameter[0]>=0.35 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||
|
||||
[filament:FormFutura Centaur PP @PG]
|
||||
inherits = FormFutura Centaur PP; *PETPG*
|
||||
@ -10468,7 +10689,7 @@ compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.
|
||||
[filament:Prusament PC Blend Carbon Fiber @MINI]
|
||||
inherits = Prusament PC Blend @MINI
|
||||
filament_cost = 90.73
|
||||
filament_density = 1.16
|
||||
filament_density = 1.22
|
||||
extrusion_multiplier = 1.04
|
||||
first_layer_temperature = 280
|
||||
temperature = 280
|
||||
|
@ -835,10 +835,10 @@ const Glyph* priv::get_glyph(
|
||||
glyph.shape = Slic3r::union_ex(offset_ex(glyph.shape, delta));
|
||||
}
|
||||
if (font_prop.skew.has_value()) {
|
||||
const float &ratio = *font_prop.skew;
|
||||
double ratio = *font_prop.skew;
|
||||
auto skew = [&ratio](Polygon &polygon) {
|
||||
for (Slic3r::Point &p : polygon.points)
|
||||
p.x() += static_cast<int>(std::round(p.y() * ratio));
|
||||
p.x() += static_cast<Point::coord_type>(std::round(p.y() * ratio));
|
||||
};
|
||||
for (ExPolygon &expolygon : glyph.shape) {
|
||||
skew(expolygon.contour);
|
||||
@ -1361,10 +1361,9 @@ std::string Emboss::create_range_text(const std::string &text,
|
||||
|
||||
double Emboss::get_text_shape_scale(const FontProp &fp, const FontFile &ff)
|
||||
{
|
||||
const std::optional<unsigned int> &cn = fp.collection_number;
|
||||
unsigned int font_index = (cn.has_value()) ? *cn : 0;
|
||||
int unit_per_em = ff.infos[font_index].unit_per_em;
|
||||
double scale = fp.size_in_mm / unit_per_em;
|
||||
size_t font_index = fp.collection_number.value_or(0);
|
||||
const FontFile::Info &info = ff.infos[font_index];
|
||||
double scale = fp.size_in_mm / (double) info.unit_per_em;
|
||||
// Shape is scaled for store point coordinate as integer
|
||||
return scale * SHAPE_SCALE;
|
||||
}
|
||||
|
@ -78,16 +78,22 @@ void Layer::make_slices()
|
||||
ClipperLib::ClipperOffset co;
|
||||
ClipperLib::Paths out2;
|
||||
|
||||
static constexpr const float delta = ClipperSafetyOffset; // *10.f;
|
||||
// Top / bottom surfaces must overlap more than 2um to be chained into a Z graph.
|
||||
// Also a larger offset will likely be more robust on non-manifold input polygons.
|
||||
static constexpr const float delta = scaled<float>(0.001);
|
||||
co.MiterLimit = scaled<double>(3.);
|
||||
// Use the default zero edge merging distance. For this kind of safety offset the accuracy of normal direction is not important.
|
||||
// co.ShortestEdgeLength = delta * ClipperOffsetShortestEdgeFactor;
|
||||
static constexpr const double accept_area_threshold_ccw = sqr(scaled<double>(0.1 * delta));
|
||||
// Such a small hole should not survive the shrinkage, it should grow over
|
||||
static constexpr const double accept_area_threshold_cw = sqr(scaled<double>(0.2 * delta));
|
||||
|
||||
for (const ExPolygon &expoly : expolygons) {
|
||||
contours.clear();
|
||||
co.Clear();
|
||||
co.AddPath(expoly.contour.points, ClipperLib::jtMiter, ClipperLib::etClosedPolygon);
|
||||
co.Execute(contours, - delta);
|
||||
size_t num_prev = out.size();
|
||||
if (! contours.empty()) {
|
||||
holes.clear();
|
||||
for (const Polygon &hole : expoly.holes) {
|
||||
@ -109,6 +115,22 @@ void Layer::make_slices()
|
||||
clipper.Execute(ClipperLib::ctDifference, contours, ClipperLib::pftNonZero, ClipperLib::pftNonZero);
|
||||
}
|
||||
for (const auto &contour : contours) {
|
||||
bool accept = true;
|
||||
// Trying to get rid of offset artifacts, that may be created due to numerical issues in offsetting algorithm
|
||||
// or due to self-intersections in the source polygons.
|
||||
//FIXME how reliable is it? Is it helpful or harmful? It seems to do more harm than good as it tends to punch holes
|
||||
// into existing ExPolygons.
|
||||
#if 0
|
||||
if (contour.size() < 8) {
|
||||
// Only accept contours with area bigger than some threshold.
|
||||
double a = ClipperLib::Area(contour);
|
||||
// Polygon has to be bigger than some threshold to be accepted.
|
||||
// Hole to be accepted has to have an area slightly bigger than the non-hole, so it will not happen due to rounding errors,
|
||||
// that a hole will be accepted without its outer contour.
|
||||
accept = a > 0 ? a > accept_area_threshold_ccw : a < - accept_area_threshold_cw;
|
||||
}
|
||||
#endif
|
||||
if (accept) {
|
||||
out.emplace_back();
|
||||
ClipperLib_Z::Path &path = out.back();
|
||||
path.reserve(contour.size());
|
||||
@ -116,6 +138,23 @@ void Layer::make_slices()
|
||||
path.push_back({ p.x(), p.y(), isrc });
|
||||
}
|
||||
}
|
||||
}
|
||||
#if 0 // #ifndef NDEBUG
|
||||
// Test whether the expolygons in a single layer overlap.
|
||||
Polygons test;
|
||||
for (size_t i = num_prev; i < out.size(); ++ i)
|
||||
test.emplace_back(ClipperZUtils::from_zpath(out[i]));
|
||||
Polygons outside = diff(test, to_polygons(expoly));
|
||||
if (! outside.empty()) {
|
||||
BoundingBox bbox(get_extents(expoly));
|
||||
bbox.merge(get_extents(test));
|
||||
SVG svg(debug_out_path("expolygons_to_zpaths_shrunk-self-intersections.svg").c_str(), bbox);
|
||||
svg.draw(expoly, "blue");
|
||||
svg.draw(test, "green");
|
||||
svg.draw(outside, "red");
|
||||
}
|
||||
assert(outside.empty());
|
||||
#endif // NDEBUG
|
||||
++ isrc;
|
||||
}
|
||||
|
||||
@ -164,121 +203,36 @@ static void connect_layer_slices(
|
||||
if (polynode.Contour.size() >= 3) {
|
||||
// If there is an intersection point, it should indicate which contours (one from layer below, the other from layer above) intersect.
|
||||
// Otherwise the contour is fully inside another contour.
|
||||
int32_t i = -1, j = -1;
|
||||
for (int icontour = 0; icontour <= polynode.ChildCount(); ++ icontour) {
|
||||
const ClipperLib_Z::Path &contour = icontour == 0 ? polynode.Contour : polynode.Childs[icontour - 1]->Contour;
|
||||
if (contour.size() >= 3) {
|
||||
for (const ClipperLib_Z::IntPoint &pt : contour) {
|
||||
j = pt.z();
|
||||
if (j < 0) {
|
||||
const auto &intersection = m_intersections[-j - 1];
|
||||
assert(intersection.first <= intersection.second);
|
||||
if (intersection.second < m_offset_above) {
|
||||
// Ignore intersection of polygons on the 1st layer.
|
||||
assert(intersection.first >= m_offset_below);
|
||||
j = i;
|
||||
} else if (intersection.first >= m_offset_above) {
|
||||
// Ignore intersection of polygons on the 2nd layer
|
||||
assert(intersection.second < m_offset_end);
|
||||
j = i;
|
||||
} else {
|
||||
std::tie(i, j) = m_intersections[-j - 1];
|
||||
assert(assert_intersection_valid(i, j));
|
||||
goto end;
|
||||
}
|
||||
} else if (i == -1) {
|
||||
// First source contour of this expolygon was found.
|
||||
i = j;
|
||||
} else if (i != j) {
|
||||
// Second source contour of this expolygon was found.
|
||||
if (i > j)
|
||||
std::swap(i, j);
|
||||
assert(assert_intersection_valid(i, j));
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
end:
|
||||
auto [i, j] = this->find_top_bottom_contour_ids_strict(polynode);
|
||||
bool found = false;
|
||||
if (i == -1) {
|
||||
if (i < 0 && j < 0) {
|
||||
// This should not happen. It may only happen if the source contours had just self intersections or intersections with contours at the same layer.
|
||||
assert(false);
|
||||
} else if (i == j) {
|
||||
// The contour is completely inside another contour.
|
||||
Point pt(polynode.Contour.front().x(), polynode.Contour.front().y());
|
||||
if (i < m_offset_above) {
|
||||
// Index of an island below. Look-it up in the island above.
|
||||
assert(i >= m_offset_below);
|
||||
i -= m_offset_below;
|
||||
for (int l = int(m_above.lslices_ex.size()) - 1; l >= 0; -- l) {
|
||||
LayerSlice &lslice = m_above.lslices_ex[l];
|
||||
if (lslice.bbox.contains(pt) && m_above.lslices[l].contains(pt)) {
|
||||
found = true;
|
||||
j = l;
|
||||
assert(i >= 0 && i < m_below.lslices_ex.size());
|
||||
assert(j >= 0 && j < m_above.lslices_ex.size());
|
||||
break;
|
||||
}
|
||||
}
|
||||
//FIXME remove the following block one day, it should not be needed.
|
||||
// The following shall not happen now as the source expolygons are being shrunk a bit before intersecting,
|
||||
// thus each point of each intersection polygon should fit completely inside one of the original (unshrunk) expolygons.
|
||||
assert(found);
|
||||
if (!found) {
|
||||
// The check above might sometimes fail when the polygons overlap only on points, which causes the clipper to detect no intersection.
|
||||
// The problem happens rarely, mostly on simple polygons (in terms of number of points), but regardless of size!
|
||||
// example of failing link on two layers, each with single polygon without holes.
|
||||
// layer A = Polygon{(-24931238,-11153865),(-22504249,-8726874),(-22504249,11477151),(-23261469,12235585),(-23752371,12727276),(-25002495,12727276),(-27502745,10227026),(-27502745,-12727274),(-26504645,-12727274)}
|
||||
// layer B = Polygon{(-24877897,-11100524),(-22504249,-8726874),(-22504249,11477151),(-23244827,12218916),(-23752371,12727276),(-25002495,12727276),(-27502745,10227026),(-27502745,-12727274),(-26504645,-12727274)}
|
||||
// note that first point is not identical, and the check above picks (-24877897,-11100524) as the first contour point (polynode.Contour.front()).
|
||||
// that point is sadly slightly outisde of the layer A, so no link is detected, eventhough they are overlaping "completely"
|
||||
Polygon contour_poly(ClipperZUtils::from_zpath(polynode.Contour));
|
||||
BoundingBox contour_aabb{contour_poly.points};
|
||||
for (int l = int(m_above.lslices_ex.size()) - 1; l >= 0; --l) {
|
||||
LayerSlice &lslice = m_above.lslices_ex[l];
|
||||
// it is potentially slow, but should be executed rarely
|
||||
if (contour_aabb.overlap(lslice.bbox) && !intersection(Polygons{contour_poly}, m_above.lslices[l]).empty()) {
|
||||
found = true;
|
||||
j = l;
|
||||
assert(i >= 0 && i < m_below.lslices_ex.size());
|
||||
assert(j >= 0 && j < m_above.lslices_ex.size());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// We may safely ignore such cases where the intersection area is meager.
|
||||
double a = ClipperLib_Z::Area(polynode.Contour);
|
||||
if (a < sqr(scaled<double>(0.001))) {
|
||||
// Ignore tiny overlaps. They are not worth resolving.
|
||||
} else {
|
||||
// Index of an island above. Look-it up in the island below.
|
||||
assert(j < m_offset_end);
|
||||
// We should not ignore large cases. Try to resolve the conflict by a majority of references.
|
||||
std::tie(i, j) = this->find_top_bottom_contour_ids_approx(polynode);
|
||||
// At least top or bottom should be resolved.
|
||||
assert(i >= 0 || j >= 0);
|
||||
}
|
||||
}
|
||||
if (j < 0) {
|
||||
if (i < 0) {
|
||||
// this->find_top_bottom_contour_ids_approx() shoudl have made sure this does not happen.
|
||||
assert(false);
|
||||
} else {
|
||||
assert(i >= m_offset_below && i < m_offset_above);
|
||||
i -= m_offset_below;
|
||||
j = this->find_other_contour_costly(polynode, m_above, j == -2);
|
||||
found = j >= 0;
|
||||
}
|
||||
} else if (i < 0) {
|
||||
assert(j >= m_offset_above && j < m_offset_end);
|
||||
j -= m_offset_above;
|
||||
for (int l = int(m_below.lslices_ex.size()) - 1; l >= 0; -- l) {
|
||||
LayerSlice &lslice = m_below.lslices_ex[l];
|
||||
if (lslice.bbox.contains(pt) && m_below.lslices[l].contains(pt)) {
|
||||
found = true;
|
||||
i = l;
|
||||
assert(i >= 0 && i < m_below.lslices_ex.size());
|
||||
assert(j >= 0 && j < m_above.lslices_ex.size());
|
||||
break;
|
||||
}
|
||||
}
|
||||
//FIXME remove the following block one day, it should not be needed.
|
||||
// The following shall not happen now as the source expolygons are being shrunk a bit before intersecting,
|
||||
// thus each point of each intersection polygon should fit completely inside one of the original (unshrunk) expolygons.
|
||||
if (!found) { // Explanation for aditional check is above.
|
||||
Polygon contour_poly(ClipperZUtils::from_zpath(polynode.Contour));
|
||||
BoundingBox contour_aabb{contour_poly.points};
|
||||
for (int l = int(m_below.lslices_ex.size()) - 1; l >= 0; --l) {
|
||||
LayerSlice &lslice = m_below.lslices_ex[l];
|
||||
if (contour_aabb.overlap(lslice.bbox) && !intersection(Polygons{contour_poly}, m_below.lslices[l]).empty()) {
|
||||
found = true;
|
||||
i = l;
|
||||
assert(i >= 0 && i < m_below.lslices_ex.size());
|
||||
assert(j >= 0 && j < m_above.lslices_ex.size());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
i = this->find_other_contour_costly(polynode, m_below, i == -2);
|
||||
found = i >= 0;
|
||||
} else {
|
||||
assert(assert_intersection_valid(i, j));
|
||||
i -= m_offset_below;
|
||||
@ -329,6 +283,187 @@ static void connect_layer_slices(
|
||||
}
|
||||
|
||||
private:
|
||||
// Find the indices of the contour below & above for an expolygon created as an intersection of two expolygons, one below, the other above.
|
||||
// Returns -1 if there is no point on the intersection refering bottom resp. top source expolygon.
|
||||
// Returns -2 if the intersection refers to multiple source expolygons on bottom resp. top layers.
|
||||
std::pair<int32_t, int32_t> find_top_bottom_contour_ids_strict(const ClipperLib_Z::PolyNode &polynode) const
|
||||
{
|
||||
// If there is an intersection point, it should indicate which contours (one from layer below, the other from layer above) intersect.
|
||||
// Otherwise the contour is fully inside another contour.
|
||||
int32_t i = -1, j = -1;
|
||||
auto process_i = [&i, &j](coord_t k) {
|
||||
if (i == -1)
|
||||
i = k;
|
||||
else if (i >= 0) {
|
||||
if (i != k) {
|
||||
// Error: Intersection contour contains points of two or more source bottom contours.
|
||||
i = -2;
|
||||
if (j == -2)
|
||||
// break
|
||||
return true;
|
||||
}
|
||||
} else
|
||||
assert(i == -2);
|
||||
return false;
|
||||
};
|
||||
auto process_j = [&i, &j](coord_t k) {
|
||||
if (j == -1)
|
||||
j = k;
|
||||
else if (j >= 0) {
|
||||
if (j != k) {
|
||||
// Error: Intersection contour contains points of two or more source top contours.
|
||||
j = -2;
|
||||
if (i == -2)
|
||||
// break
|
||||
return true;
|
||||
}
|
||||
} else
|
||||
assert(j == -2);
|
||||
return false;
|
||||
};
|
||||
for (int icontour = 0; icontour <= polynode.ChildCount(); ++ icontour) {
|
||||
const ClipperLib_Z::Path &contour = icontour == 0 ? polynode.Contour : polynode.Childs[icontour - 1]->Contour;
|
||||
if (contour.size() >= 3) {
|
||||
for (const ClipperLib_Z::IntPoint &pt : contour)
|
||||
if (coord_t k = pt.z(); k < 0) {
|
||||
const auto &intersection = m_intersections[-k - 1];
|
||||
assert(intersection.first <= intersection.second);
|
||||
if (intersection.first < m_offset_above ? process_i(intersection.first) : process_j(intersection.first))
|
||||
goto end;
|
||||
if (intersection.second < m_offset_above ? process_i(intersection.second) : process_j(intersection.second))
|
||||
goto end;
|
||||
} else if (k < m_offset_above ? process_i(k) : process_j(k))
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
end:
|
||||
return { i, j };
|
||||
}
|
||||
|
||||
// Find the indices of the contour below & above for an expolygon created as an intersection of two expolygons, one below, the other above.
|
||||
// This variant expects that the source expolygon assingment is not unique, it counts the majority.
|
||||
// Returns -1 if there is no point on the intersection refering bottom resp. top source expolygon.
|
||||
// Returns -2 if the intersection refers to multiple source expolygons on bottom resp. top layers.
|
||||
std::pair<int32_t, int32_t> find_top_bottom_contour_ids_approx(const ClipperLib_Z::PolyNode &polynode) const
|
||||
{
|
||||
// 1) Collect histogram of contour references.
|
||||
struct HistoEl {
|
||||
int32_t id;
|
||||
int32_t count;
|
||||
};
|
||||
std::vector<HistoEl> histogram;
|
||||
{
|
||||
auto increment_counter = [&histogram](const int32_t i) {
|
||||
auto it = std::lower_bound(histogram.begin(), histogram.end(), i, [](auto l, auto r){ return l.id < r; });
|
||||
if (it == histogram.end() || it->id != i)
|
||||
histogram.insert(it, HistoEl{ i, int32_t(1) });
|
||||
else
|
||||
++ it->count;
|
||||
};
|
||||
for (int icontour = 0; icontour <= polynode.ChildCount(); ++ icontour) {
|
||||
const ClipperLib_Z::Path &contour = icontour == 0 ? polynode.Contour : polynode.Childs[icontour - 1]->Contour;
|
||||
if (contour.size() >= 3) {
|
||||
for (const ClipperLib_Z::IntPoint &pt : contour)
|
||||
if (coord_t k = pt.z(); k < 0) {
|
||||
const auto &intersection = m_intersections[-k - 1];
|
||||
assert(intersection.first <= intersection.second);
|
||||
increment_counter(intersection.first);
|
||||
increment_counter(intersection.second);
|
||||
} else
|
||||
increment_counter(k);
|
||||
}
|
||||
}
|
||||
assert(! histogram.empty());
|
||||
}
|
||||
int32_t i = -1;
|
||||
int32_t j = -1;
|
||||
if (! histogram.empty()) {
|
||||
// 2) Split the histogram to bottom / top.
|
||||
auto mid = std::upper_bound(histogram.begin(), histogram.end(), m_offset_above, [](auto l, auto r){ return l < r.id; });
|
||||
// 3) Sort the bottom / top parts separately.
|
||||
auto bottom_begin = histogram.begin();
|
||||
auto bottom_end = mid;
|
||||
auto top_begin = mid;
|
||||
auto top_end = histogram.end();
|
||||
std::sort(bottom_begin, bottom_end, [](auto l, auto r) { return l.count > r.count; });
|
||||
std::sort(top_begin, top_end, [](auto l, auto r) { return l.count > r.count; });
|
||||
double i_quality = 0;
|
||||
double j_quality = 0;
|
||||
if (bottom_begin != bottom_end) {
|
||||
i = bottom_begin->id;
|
||||
i_quality = std::next(bottom_begin) == bottom_end ? std::numeric_limits<double>::max() : double(bottom_begin->count) / std::next(bottom_begin)->count;
|
||||
}
|
||||
if (top_begin != top_end) {
|
||||
j = top_begin->id;
|
||||
j_quality = std::next(top_begin) == top_end ? std::numeric_limits<double>::max() : double(top_begin->count) / std::next(top_begin)->count;
|
||||
}
|
||||
// Expected to be called only if there are duplicate references to be resolved by the histogram.
|
||||
assert(i >= 0 || j >= 0);
|
||||
assert(i_quality < std::numeric_limits<double>::max() || j_quality < std::numeric_limits<double>::max());
|
||||
if (i >= 0 && i_quality < j_quality) {
|
||||
// Force the caller to resolve the bottom references the costly but robust way.
|
||||
assert(j >= 0);
|
||||
// Twice the number of references for the best contour.
|
||||
assert(j_quality >= 2.);
|
||||
i = -2;
|
||||
} else if (j >= 0) {
|
||||
// Force the caller to resolve the top reference the costly but robust way.
|
||||
assert(i >= 0);
|
||||
// Twice the number of references for the best contour.
|
||||
assert(i_quality >= 2.);
|
||||
j = -2;
|
||||
}
|
||||
|
||||
}
|
||||
return { i, j };
|
||||
}
|
||||
|
||||
static int32_t find_other_contour_costly(const ClipperLib_Z::PolyNode &polynode, const Layer &other_layer, bool other_has_duplicates)
|
||||
{
|
||||
if (! other_has_duplicates) {
|
||||
// The contour below is likely completely inside another contour above. Look-it up in the island above.
|
||||
Point pt(polynode.Contour.front().x(), polynode.Contour.front().y());
|
||||
for (int i = int(other_layer.lslices_ex.size()) - 1; i >= 0; -- i)
|
||||
if (other_layer.lslices_ex[i].bbox.contains(pt) && other_layer.lslices[i].contains(pt))
|
||||
return i;
|
||||
// The following shall not happen now as the source expolygons are being shrunk a bit before intersecting,
|
||||
// thus each point of each intersection polygon should fit completely inside one of the original (unshrunk) expolygons.
|
||||
assert(false);
|
||||
}
|
||||
// The comment below may not be valid anymore, see the comment above. However the code is used in case the polynode contains multiple references
|
||||
// to other_layer expolygons, thus the references are not unique.
|
||||
//
|
||||
// The check above might sometimes fail when the polygons overlap only on points, which causes the clipper to detect no intersection.
|
||||
// The problem happens rarely, mostly on simple polygons (in terms of number of points), but regardless of size!
|
||||
// example of failing link on two layers, each with single polygon without holes.
|
||||
// layer A = Polygon{(-24931238,-11153865),(-22504249,-8726874),(-22504249,11477151),(-23261469,12235585),(-23752371,12727276),(-25002495,12727276),(-27502745,10227026),(-27502745,-12727274),(-26504645,-12727274)}
|
||||
// layer B = Polygon{(-24877897,-11100524),(-22504249,-8726874),(-22504249,11477151),(-23244827,12218916),(-23752371,12727276),(-25002495,12727276),(-27502745,10227026),(-27502745,-12727274),(-26504645,-12727274)}
|
||||
// note that first point is not identical, and the check above picks (-24877897,-11100524) as the first contour point (polynode.Contour.front()).
|
||||
// that point is sadly slightly outisde of the layer A, so no link is detected, eventhough they are overlaping "completely"
|
||||
Polygons contour_poly{ Polygon{ClipperZUtils::from_zpath(polynode.Contour)} };
|
||||
BoundingBox contour_aabb{contour_poly.front().points};
|
||||
int32_t i_largest = -1;
|
||||
double a_largest = 0;
|
||||
for (int i = int(other_layer.lslices_ex.size()) - 1; i >= 0; -- i)
|
||||
if (contour_aabb.overlap(other_layer.lslices_ex[i].bbox))
|
||||
// it is potentially slow, but should be executed rarely
|
||||
if (Polygons overlap = intersection(contour_poly, other_layer.lslices[i]); ! overlap.empty())
|
||||
if (other_has_duplicates) {
|
||||
// Find the contour with the largest overlap. It is expected that the other overlap will be very small.
|
||||
double a = area(overlap);
|
||||
if (a > a_largest) {
|
||||
a_largest = a;
|
||||
i_largest = i;
|
||||
}
|
||||
} else {
|
||||
// Most likely there is just one contour that overlaps, however it is not guaranteed.
|
||||
i_largest = i;
|
||||
break;
|
||||
}
|
||||
assert(i_largest >= 0);
|
||||
return i_largest;
|
||||
}
|
||||
|
||||
const std::vector<std::pair<coord_t, coord_t>> &m_intersections;
|
||||
Layer &m_below;
|
||||
Layer &m_above;
|
||||
|
@ -1911,6 +1911,16 @@ std::vector<ExPolygons> slice_mesh_ex(
|
||||
this_mode == MeshSlicingParams::SlicingMode::EvenOdd ? ClipperLib::pftEvenOdd :
|
||||
this_mode == MeshSlicingParams::SlicingMode::PositiveLargestContour ? ClipperLib::pftPositive : ClipperLib::pftNonZero,
|
||||
&expolygons);
|
||||
|
||||
#if 0
|
||||
//#ifndef _NDEBUG
|
||||
// Test whether the expolygons in a single layer overlap.
|
||||
for (size_t i = 0; i < expolygons.size(); ++ i)
|
||||
for (size_t j = i + 1; j < expolygons.size(); ++ j) {
|
||||
Polygons overlap = intersection(expolygons[i], expolygons[j]);
|
||||
assert(overlap.empty());
|
||||
}
|
||||
#endif
|
||||
#if 0
|
||||
//#ifndef _NDEBUG
|
||||
for (const ExPolygon &ex : expolygons) {
|
||||
|
@ -697,7 +697,9 @@ void GCodeViewer::init()
|
||||
buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Line;
|
||||
buffer.vertices.format = VBuffer::EFormat::Position;
|
||||
#if ENABLE_GL_CORE_PROFILE
|
||||
buffer.shader = OpenGLManager::get_gl_info().is_core_profile() ? "dashed_thick_lines" : "flat";
|
||||
// on MAC using the geometry shader of dashed_thick_lines is too slow
|
||||
buffer.shader = "flat";
|
||||
// buffer.shader = OpenGLManager::get_gl_info().is_core_profile() ? "dashed_thick_lines" : "flat";
|
||||
#else
|
||||
buffer.shader = "flat";
|
||||
#endif // ENABLE_GL_CORE_PROFILE
|
||||
|
@ -59,7 +59,7 @@ void GLGizmoSlaBase::update_volumes()
|
||||
if (last_comp_step == slaposCount)
|
||||
last_comp_step = -1;
|
||||
|
||||
m_input_enabled = last_comp_step >= m_min_sla_print_object_step;
|
||||
m_input_enabled = last_comp_step >= m_min_sla_print_object_step || po->model_object()->sla_points_status == sla::PointsStatus::UserModified;
|
||||
|
||||
const int object_idx = m_parent.get_selection().get_object_idx();
|
||||
const int instance_idx = m_parent.get_selection().get_instance_idx();
|
||||
|
@ -451,8 +451,7 @@ ImFont *StyleManager::create_imgui_font(const std::string &text, double scale)
|
||||
// TODO: start using merge mode
|
||||
//font_config.MergeMode = true;
|
||||
|
||||
const auto &cn = font_prop.collection_number;
|
||||
unsigned int font_index = (cn.has_value()) ? *cn : 0;
|
||||
unsigned int font_index = font_prop.collection_number.value_or(0);
|
||||
const auto &font_info = font_file.infos[font_index];
|
||||
if (font_prop.char_gap.has_value()) {
|
||||
float coef = font_size / (double) font_info.unit_per_em;
|
||||
|
Loading…
x
Reference in New Issue
Block a user