diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx index a108d837fd..3a3e2b333e 100644 --- a/resources/profiles/PrusaResearch.idx +++ b/resources/profiles/PrusaResearch.idx @@ -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. diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index 0194657972..d2528a70a5 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -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 diff --git a/src/libslic3r/Emboss.cpp b/src/libslic3r/Emboss.cpp index 92ee42c62e..ac7b9302e7 100644 --- a/src/libslic3r/Emboss.cpp +++ b/src/libslic3r/Emboss.cpp @@ -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(std::round(p.y() * ratio)); + p.x() += static_cast(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 &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; } diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 7802fe9833..199caf0d04 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -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(0.001); co.MiterLimit = scaled(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(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(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,13 +115,46 @@ void Layer::make_slices() clipper.Execute(ClipperLib::ctDifference, contours, ClipperLib::pftNonZero, ClipperLib::pftNonZero); } for (const auto &contour : contours) { - out.emplace_back(); - ClipperLib_Z::Path &path = out.back(); - path.reserve(contour.size()); - for (const Point &p : contour) - path.push_back({ p.x(), p.y(), isrc }); + 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()); + for (const Point &p : contour) + 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; - } - } + auto [i, j] = this->find_top_bottom_contour_ids_strict(polynode); + bool found = false; + 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. + // We may safely ignore such cases where the intersection area is meager. + double a = ClipperLib_Z::Area(polynode.Contour); + if (a < sqr(scaled(0.001))) { + // Ignore tiny overlaps. They are not worth resolving. + } else { + // 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); } } - end: - bool found = false; - if (i == -1) { - // 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; - } - } - } + if (j < 0) { + if (i < 0) { + // this->find_top_bottom_contour_ids_approx() shoudl have made sure this does not happen. + assert(false); } else { - // Index of an island above. Look-it up in the island below. - assert(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; - } - } - } + 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; + 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 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 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 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::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::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::max() || j_quality < std::numeric_limits::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> &m_intersections; Layer &m_below; Layer &m_above; diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index 329c1c4ca3..460cd901e9 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -1911,6 +1911,16 @@ std::vector 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) { diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 36ac85df94..bd4653ab8f 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -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 diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp index 2e76ebc965..0688ca5b2b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp @@ -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(); diff --git a/src/slic3r/Utils/EmbossStyleManager.cpp b/src/slic3r/Utils/EmbossStyleManager.cpp index d82bbcb7b7..2653e5c1df 100644 --- a/src/slic3r/Utils/EmbossStyleManager.cpp +++ b/src/slic3r/Utils/EmbossStyleManager.cpp @@ -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;