diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx index 77fdf5a83b..a108d837fd 100644 --- a/resources/profiles/PrusaResearch.idx +++ b/resources/profiles/PrusaResearch.idx @@ -1,4 +1,5 @@ min_slic3r_version = 2.6.0-alpha5 +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). 1.7.0-alpha1 Added profiles for Original Prusa XL. Added filament profile for Prusament PETG Tungsten 75%. @@ -8,10 +9,12 @@ min_slic3r_version = 2.6.0-alpha1 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.1-rc0 +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. 1.6.0 Added Original Prusa XL profiles. Updated acceleration settings for Prusa MINI. Updated infill/perimeter overlap values. min_slic3r_version = 2.5.0-alpha0 +1.5.9 Added SLA materials. 1.5.8 Added filament profile for Prusament PETG Tungsten 75%. Updated FW version notification. 1.5.7 Added filament profile for Prusament PETG Carbon Fiber and Fiberthree F3 PA-GF30 Pro. 1.5.6 Updated FW version notification (MK2.5/MK3 family). Added filament profile for Kimya PEBA-S. diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index f57a8110d7..0194657972 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-alpha0 +config_version = 1.9.0-alpha1 # 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% @@ -14,14 +14,14 @@ changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # also the first model installed & the first nozzle installed will be activated after install. # Printer model name will be shown by the installation wizard. -[printer_model:XL] -name = Original Prusa XL -variants = 0.6; 0.25; 0.3; 0.4; 0.5; 0.8 +[printer_model:MK4] +name = Original Prusa MK4 +variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8 technology = FFF -family = XL -bed_model = xl_bed.stl -bed_texture = xl.svg -default_materials = Generic PLA @PG 0.6; Generic ABS @PG 0.6; Generic PETG @PG 0.6; Prusament PLA @PG 0.6; Prusament PETG @PG 0.6; Prusament ASA @PG 0.6; Prusament PC Blend @PG 0.6; Prusament PC Blend Carbon Fiber @PG 0.6; Prusament PVB @PG 0.6; Prusament PA11 Carbon Fiber @PG 0.6 +family = MK4 +bed_model = mk4_bed.stl +bed_texture = mk4.svg +default_materials = Generic PLA @PG; Generic ABS @MK4; Generic PETG @PG; Prusament PLA @PG; Prusament PETG @PG; Prusament ASA @MK4; Prusament PC Blend @MK4; Prusament PC Blend Carbon Fiber @MK4; Prusament PVB @PG; Prusament PA11 Carbon Fiber @PG [printer_model:MINI] name = Original Prusa MINI && MINI+ @@ -68,6 +68,15 @@ bed_model = mk3_bed.stl bed_texture = mk3.svg default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA @MMU2; Prusament PETG @MMU2; Prusament ASA @MMU2; Verbatim BVOH @MMU2; Prusament PC Blend @MMU2; Prusament PC Blend Carbon Fiber @MMU2; Prusament PVB @MMU2 +[printer_model:XL] +name = Original Prusa XL +variants = 0.6; 0.25; 0.3; 0.4; 0.5; 0.8 +technology = FFF +family = XL +bed_model = xl_bed.stl +bed_texture = xl.svg +default_materials = Generic PLA @PG 0.6; Generic ABS @PG 0.6; Generic PETG @PG 0.6; Prusament PLA @PG 0.6; Prusament PETG @PG 0.6; Prusament ASA @PG 0.6; Prusament PC Blend @PG 0.6; Prusament PC Blend Carbon Fiber @PG 0.6; Prusament PVB @PG 0.6; Prusament PA11 Carbon Fiber @PG 0.6 + [printer_model:MK2.5S] name = Original Prusa i3 MK2.5S variants = 0.4; 0.25; 0.6; 0.8 @@ -284,6 +293,30 @@ raft_first_layer_density = 80% ## gcode_substitutions = "; stop printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S-1\\n";r;;"; printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S$2\\nM486 N$1\\n";r; output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode +[print:*MK4*] +inherits = *common* +single_extruder_multi_material_priming = 0 +travel_speed = 200 +travel_speed_z = 12 +fill_density = 15% +default_acceleration = 1000 +bridge_acceleration = 800 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +infill_anchor = 2 +perimeter_acceleration = 800 +first_layer_acceleration = 600 +fill_pattern = grid +skirts = 0 +extruder_clearance_height = 13 +extruder_clearance_radius = 45 +first_layer_speed = 20 +support_material_threshold = 45 +raft_first_layer_density = 80% +## gcode_substitutions = "; stop printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S-1\\n";r;;"; printing object\\s(.*)\\s+id:(\\d+)\\s+.*";"$0\\nM486 S$2\\nM486 N$1\\n";r; +output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode + [print:*MK306*] inherits = *MK3* fill_pattern = gyroid @@ -363,6 +396,9 @@ infill_anchor = 1 perimeters = 3 brim_separation = 0 +[print:*0.25nozzleMK4*] +inherits = *0.25nozzleXL* + [print:*0.3nozzle*] external_perimeter_extrusion_width = 0.33 extrusion_width = 0.33 @@ -434,6 +470,9 @@ fill_density = 20% support_material_interface_spacing = 0.25 infill_anchor = 2.5 +[print:*0.6nozzleMK4*] +inherits = *0.6nozzleXL* + [print:*0.6nozzleMINI*] inherits = *0.6nozzleMK3* infill_extrusion_width = 0.68 @@ -502,6 +541,13 @@ support_material_style = snug raft_first_layer_expansion = 2 default_acceleration = 1250 infill_anchor = 2.5 +first_layer_acceleration = 500 + +[print:*0.8nozzleMK4*] +inherits = *0.8nozzleXL* +default_acceleration = 1000 +infill_acceleration = 2000 +first_layer_acceleration = 600 [print:*soluble_support*] overhangs = 1 @@ -1848,7 +1894,7 @@ compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.25 [print:0.05mm ULTRADETAIL @XL 0.3] inherits = *0.05mm*; *XL*; *0.3nozzle* -top_solid_layers = 12 +top_solid_layers = 14 bottom_solid_layers = 9 support_material_contact_distance = 0.07 raft_contact_distance = 0.07 @@ -1987,6 +2033,8 @@ compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.3 [print:0.07mm ULTRADETAIL @XL 0.4] inherits = *0.07mm*; *XL* +thick_bridges = 1 +bridge_flow_ratio = 0.6 top_infill_extrusion_width = 0.4 first_layer_extrusion_width = 0.45 perimeter_extrusion_width = 0.4 @@ -2173,13 +2221,13 @@ bridge_acceleration = 1000 first_layer_acceleration = 600 default_acceleration = 1250 max_print_speed = 200 -external_perimeter_extrusion_width = 0.55 -extrusion_width = 0.55 +external_perimeter_extrusion_width = 0.5 +extrusion_width = 0.5 first_layer_extrusion_width = 0.5 -infill_extrusion_width = 0.55 -perimeter_extrusion_width = 0.55 -solid_infill_extrusion_width = 0.55 -top_infill_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 support_material_extrusion_width = 0.38 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.4 @@ -2311,6 +2359,7 @@ compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.5 [print:0.15mm DETAIL @XL 0.6] inherits = *0.15mm*; *XL*; *0.6nozzleXL* +fill_pattern = gyroid perimeter_speed = 45 external_perimeter_speed = 30 small_perimeter_speed = 30 @@ -2345,6 +2394,7 @@ compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.6 [print:0.20mm DETAIL @XL 0.6] inherits = *0.20mm*; *XL*; *0.6nozzleXL* +fill_pattern = gyroid perimeter_speed = 50 external_perimeter_speed = 35 small_perimeter_speed = 30 @@ -2425,7 +2475,7 @@ external_perimeter_acceleration = 1000 perimeter_acceleration = 1200 solid_infill_acceleration = 2000 infill_acceleration = 3000 -top_solid_layers = 4 +top_solid_layers = 5 bottom_solid_layers = 4 default_acceleration = 1250 dynamic_overhang_speeds = 35,20,15,15 @@ -2603,6 +2653,910 @@ top_solid_infill_acceleration = 800 solid_infill_acceleration = 2000 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 +## MK4 ## + +## MK4 - 0.25mm nozzle + +[print:0.05mm ULTRADETAIL @MK4 0.25] +inherits = *0.05mm*; *MK4*; *0.25nozzleMK4* +support_material_contact_distance = 0.07 +raft_contact_distance = 0.1 +perimeter_speed = 30 +external_perimeter_speed = 20 +small_perimeter_speed = 20 +infill_speed = 40 +solid_infill_speed = 40 +top_solid_infill_speed = 25 +support_material_speed = 30 +support_material_interface_speed = 80% +gap_fill_speed = 25 +gcode_resolution = 0.006 +external_perimeter_acceleration = 300 +perimeter_acceleration = 300 +top_solid_infill_acceleration = 600 +solid_infill_acceleration = 800 +infill_acceleration = 800 +bridge_acceleration = 300 +first_layer_acceleration = 600 +default_acceleration = 800 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.25 + +[print:0.07mm ULTRADETAIL @MK4 0.25] +inherits = *0.07mm*; *MK4*; *0.25nozzleMK4* +perimeter_speed = 30 +external_perimeter_speed = 20 +small_perimeter_speed = 20 +infill_speed = 45 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 30 +support_material_interface_speed = 80% +support_material_contact_distance = 0.07 +gap_fill_speed = 25 +bridge_speed = 20 +external_perimeter_acceleration = 300 +perimeter_acceleration = 300 +top_solid_infill_acceleration = 500 +solid_infill_acceleration = 800 +infill_acceleration = 1000 +bridge_acceleration = 300 +first_layer_acceleration = 600 +default_acceleration = 800 +max_print_speed = 200 +gcode_resolution = 0.006 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.25 + +[print:0.10mm QUALITY @MK4 0.25] +inherits = *0.10mm*; *MK4*; *0.25nozzleMK4* +perimeter_speed = 35 +external_perimeter_speed = 20 +small_perimeter_speed = 25 +infill_speed = 60 +solid_infill_speed = 60 +top_solid_infill_speed = 30 +support_material_speed = 40 +support_material_interface_speed = 85% +support_material_contact_distance = 0.07 +gap_fill_speed = 30 +bridge_speed = 20 +external_perimeter_acceleration = 400 +perimeter_acceleration = 500 +top_solid_infill_acceleration = 600 +solid_infill_acceleration = 800 +infill_acceleration = 1200 +bridge_acceleration = 500 +first_layer_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +gcode_resolution = 0.008 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.25 + +[print:0.12mm QUALITY @MK4 0.25] +inherits = *0.12mm*; *MK4*; *0.25nozzleMK4* +perimeter_speed = 30 +external_perimeter_speed = 20 +small_perimeter_speed = 20 +infill_speed = 60 +solid_infill_speed = 60 +top_solid_infill_speed = 30 +support_material_speed = 50 +support_material_interface_speed = 80% +support_material_contact_distance = 0.08 +gap_fill_speed = 40 +bridge_speed = 25 +external_perimeter_acceleration = 500 +perimeter_acceleration = 500 +top_solid_infill_acceleration = 600 +solid_infill_acceleration = 1000 +infill_acceleration = 1200 +bridge_acceleration = 500 +first_layer_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +gcode_resolution = 0.008 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 +top_infill_extrusion_width = 0.25 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.25 + +[print:0.15mm SPEED @MK4 0.25] +inherits = *0.15mm*; *MK4*; *0.25nozzleMK4* +perimeter_speed = 35 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 80 +solid_infill_speed = 60 +top_solid_infill_speed = 40 +support_material_speed = 50 +support_material_interface_speed = 80% +support_material_contact_distance = 0.08 +gap_fill_speed = 45 +bridge_speed = 25 +external_perimeter_acceleration = 500 +perimeter_acceleration = 500 +top_solid_infill_acceleration = 600 +solid_infill_acceleration = 1000 +infill_acceleration = 1200 +bridge_acceleration = 500 +first_layer_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +first_layer_extrusion_width = 0.3 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 +top_infill_extrusion_width = 0.25 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.25 + +## MK4 - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @MK4 0.3] +inherits = *0.05mm*; *MK4*; *0.3nozzle* +top_solid_layers = 14 +bottom_solid_layers = 9 +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 +perimeter_speed = 25 +external_perimeter_speed = 20 +small_perimeter_speed = 20 +infill_speed = 45 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 +support_material_interface_speed = 80% +gap_fill_speed = 25 +gcode_resolution = 0.006 +external_perimeter_acceleration = 300 +perimeter_acceleration = 300 +top_solid_infill_acceleration = 600 +solid_infill_acceleration = 800 +infill_acceleration = 800 +bridge_acceleration = 500 +default_acceleration = 800 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.3 + +[print:0.08mm DETAIL @MK4 0.3] +inherits = *0.07mm*; *MK4*; *0.3nozzle* +layer_height = 0.08 +support_material_contact_distance = 0.08 +raft_contact_distance = 0.08 +perimeter_speed = 30 +external_perimeter_speed = 20 +small_perimeter_speed = 20 +infill_speed = 60 +solid_infill_speed = 60 +top_solid_infill_speed = 35 +support_material_speed = 40 +support_material_interface_speed = 80% +gap_fill_speed = 25 +bridge_speed = 20 +external_perimeter_acceleration = 500 +perimeter_acceleration = 600 +top_solid_infill_acceleration = 700 +solid_infill_acceleration = 800 +infill_acceleration = 1000 +bridge_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +perimeters = 3 +gcode_resolution = 0.006 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.3 + +[print:0.12mm QUALITY @MK4 0.3] +inherits = *0.12mm*; *MK4*; *0.3nozzle* +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 +perimeter_speed = 35 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 80 +solid_infill_speed = 80 +top_solid_infill_speed = 30 +support_material_speed = 45 +support_material_interface_speed = 85% +gap_fill_speed = 40 +bridge_speed = 25 +external_perimeter_acceleration = 600 +perimeter_acceleration = 800 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1200 +infill_acceleration = 1500 +bridge_acceleration = 800 +default_acceleration = 1000 +max_print_speed = 200 +gcode_resolution = 0.008 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.3 + +[print:0.16mm SPEED @MK4 0.3] +inherits = *0.16mm*; *MK4*; *0.3nozzle* +support_material_contact_distance = 0.15 +raft_contact_distance = 0.15 +perimeter_speed = 50 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 90 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +support_material_interface_speed = 80% +gap_fill_speed = 40 +bridge_speed = 25 +external_perimeter_acceleration = 600 +perimeter_acceleration = 800 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1250 +bridge_acceleration = 800 +default_acceleration = 1000 +max_print_speed = 200 +gcode_resolution = 0.008 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.3 + +[print:0.20mm DRAFT @MK4 0.3] +inherits = *0.20mm*; *MK4*; *0.3nozzle* +support_material_contact_distance = 0.18 +raft_contact_distance = 0.18 +perimeter_speed = 50 +external_perimeter_speed = 35 +small_perimeter_speed = 30 +infill_speed = 90 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 50 +support_material_interface_speed = 80% +gap_fill_speed = 45 +bridge_speed = 25 +external_perimeter_acceleration = 700 +perimeter_acceleration = 800 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1250 +bridge_acceleration = 800 +default_acceleration = 1250 +max_print_speed = 200 +first_layer_extrusion_width = 0.4 +perimeter_extrusion_width = 0.35 +external_perimeter_extrusion_width = 0.35 +infill_extrusion_width = 0.35 +solid_infill_extrusion_width = 0.35 +top_infill_extrusion_width = 0.3 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.3 + +## MK4 - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @MK4 0.4] +inherits = *0.05mm*; *MK4* +thick_bridges = 1 +bridge_flow_ratio = 0.6 +top_infill_extrusion_width = 0.4 +first_layer_extrusion_width = 0.45 +perimeter_extrusion_width = 0.4 +external_perimeter_extrusion_width = 0.4 +infill_extrusion_width = 0.4 +solid_infill_extrusion_width = 0.4 +perimeters = 3 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 +perimeter_speed = 30 +external_perimeter_speed = 20 +small_perimeter_speed = 20 +infill_speed = 40 +solid_infill_speed = 40 +top_solid_infill_speed = 30 +support_material_style = snug +support_material_interface_layers = 0 +support_material_speed = 30 +support_material_interface_speed = 80% +support_material_spacing = 1.5 +gap_fill_speed = 25 +gcode_resolution = 0.006 +external_perimeter_acceleration = 300 +perimeter_acceleration = 300 +top_solid_infill_acceleration = 500 +solid_infill_acceleration = 700 +infill_acceleration = 800 +bridge_acceleration = 300 +default_acceleration = 800 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +[print:0.07mm ULTRADETAIL @MK4 0.4] +inherits = *0.07mm*; *MK4* +thick_bridges = 1 +bridge_flow_ratio = 0.6 +top_infill_extrusion_width = 0.4 +first_layer_extrusion_width = 0.45 +perimeter_extrusion_width = 0.4 +external_perimeter_extrusion_width = 0.4 +infill_extrusion_width = 0.4 +solid_infill_extrusion_width = 0.4 +perimeters = 3 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 +perimeter_speed = 35 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 45 +solid_infill_speed = 45 +top_solid_infill_speed = 30 +support_material_style = snug +support_material_interface_layers = 0 +support_material_speed = 35 +support_material_interface_speed = 80% +support_material_spacing = 1.5 +gap_fill_speed = 25 +gcode_resolution = 0.006 +external_perimeter_acceleration = 300 +perimeter_acceleration = 300 +top_solid_infill_acceleration = 500 +solid_infill_acceleration = 800 +infill_acceleration = 800 +bridge_acceleration = 300 +first_layer_acceleration = 600 +default_acceleration = 800 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +[print:0.10mm DETAIL @MK4 0.4] +inherits = *0.10mm*; *MK4* +support_material_contact_distance = 0.17 +raft_contact_distance = 0.15 +perimeter_speed = 45 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 80 +solid_infill_speed = 80 +top_solid_infill_speed = 35 +support_material_style = snug +support_material_interface_layers = 5 +support_material_speed = 40 +support_material_interface_speed = 85% +support_material_xy_spacing = 80% +gap_fill_speed = 40 +bridge_speed = 20 +external_perimeter_acceleration = 500 +perimeter_acceleration = 700 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1250 +infill_acceleration = 1500 +bridge_acceleration = 700 +default_acceleration = 1000 +max_print_speed = 200 +first_layer_extrusion_width = 0.5 +perimeter_extrusion_width = 0.4 +external_perimeter_extrusion_width = 0.4 +infill_extrusion_width = 0.4 +solid_infill_extrusion_width = 0.4 +top_infill_extrusion_width = 0.4 +perimeters = 3 +gcode_resolution = 0.006 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +[print:0.15mm QUALITY @MK4 0.4] +inherits = *0.15mm*; *MK4* +perimeter_speed = 45 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 90 +solid_infill_speed = 90 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.15 +support_material_style = snug +support_material_interface_layers = 5 +support_material_speed = 45 +support_material_interface_speed = 80% +support_material_xy_spacing = 80% +gap_fill_speed = 40 +bridge_speed = 25 +external_perimeter_acceleration = 700 +perimeter_acceleration = 900 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +bridge_acceleration = 1000 +default_acceleration = 1000 +max_print_speed = 200 +first_layer_extrusion_width = 0.5 +support_material_extrusion_width = 0.37 +gcode_resolution = 0.008 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +[print:0.15mm SPEED @MK4 0.4] +inherits = *0.15mm*; *MK4* +perimeter_speed = 70 +external_perimeter_speed = 40 +small_perimeter_speed = 35 +infill_speed = 200 +solid_infill_speed = 200 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.15 +support_material_style = snug +support_material_interface_layers = 5 +support_material_speed = 45 +support_material_interface_speed = 80% +support_material_xy_spacing = 80% +gap_fill_speed = 40 +bridge_speed = 25 +external_perimeter_acceleration = 800 +perimeter_acceleration = 1000 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +bridge_acceleration = 1000 +default_acceleration = 1000 +max_print_speed = 200 +first_layer_extrusion_width = 0.5 +support_material_extrusion_width = 0.37 +gcode_resolution = 0.008 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +[print:0.20mm QUALITY @MK4 0.4] +inherits = *0.20mm*; *MK4* +perimeter_speed = 45 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 90 +solid_infill_speed = 90 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 +support_material_style = snug +support_material_interface_layers = 5 +support_material_xy_spacing = 80% +support_material_speed = 50 +support_material_interface_speed = 70% +gap_fill_speed = 40 +bridge_speed = 25 +external_perimeter_acceleration = 700 +perimeter_acceleration = 900 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +bridge_acceleration = 1000 +default_acceleration = 1000 +max_print_speed = 200 +first_layer_extrusion_width = 0.5 +gcode_resolution = 0.008 +support_material_extrusion_width = 0.37 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +[print:0.20mm SPEED @MK4 0.4] +inherits = *0.20mm*; *MK4* +perimeter_speed = 70 +external_perimeter_speed = 40 +small_perimeter_speed = 35 +infill_speed = 200 +solid_infill_speed = 200 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 +support_material_style = snug +support_material_interface_layers = 5 +support_material_speed = 50 +support_material_interface_speed = 70% +support_material_xy_spacing = 80% +gap_fill_speed = 45 +bridge_speed = 25 +external_perimeter_acceleration = 800 +perimeter_acceleration = 1000 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +bridge_acceleration = 1000 +first_layer_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +first_layer_extrusion_width = 0.5 +support_material_extrusion_width = 0.37 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +[print:0.30mm DRAFT @MK4 0.4] +inherits = *0.30mm*; *MK4* +bottom_solid_layers = 3 +perimeter_speed = 70 +external_perimeter_speed = 40 +small_perimeter_speed = 40 +infill_speed = 95 +solid_infill_speed = 85 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 +support_material_style = snug +support_material_interface_layers = 5 +support_material_speed = 60 +support_material_interface_speed = 70% +support_material_xy_spacing = 80% +gap_fill_speed = 45 +bridge_speed = 25 +external_perimeter_acceleration = 1000 +perimeter_acceleration = 1100 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1700 +infill_acceleration = 2000 +bridge_acceleration = 1000 +first_layer_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +external_perimeter_extrusion_width = 0.5 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.5 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.4 + +## MK4 - 0.5mm nozzle + +[print:0.10mm DETAIL @MK4 0.5] +inherits = *0.10mm*; *MK4*; *0.5nozzle* +fill_pattern = gyroid +perimeter_speed = 40 +external_perimeter_speed = 25 +small_perimeter_speed = 25 +infill_speed = 80 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 50 +support_material_interface_speed = 85% +support_material_style = snug +support_material_interface_layers = 4 +gap_fill_speed = 40 +bridge_speed = 30 +external_perimeter_acceleration = 700 +perimeter_acceleration = 800 +solid_infill_acceleration = 1200 +infill_acceleration = 1500 +bridge_acceleration = 1000 +first_layer_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +first_layer_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +external_perimeter_extrusion_width = 0.5 +infill_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +perimeters = 2 +gcode_resolution = 0.008 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.5 + +[print:0.15mm QUALITY @MK4 0.5] +inherits = *0.15mm*; *MK4*; *0.5nozzle* +fill_pattern = gyroid +perimeter_speed = 45 +external_perimeter_speed = 30 +small_perimeter_speed = 25 +infill_speed = 120 +solid_infill_speed = 120 +top_solid_infill_speed = 40 +support_material_speed = 50 +support_material_interface_speed = 70% +support_material_style = snug +support_material_interface_layers = 4 +gap_fill_speed = 40 +bridge_speed = 30 +external_perimeter_acceleration = 800 +perimeter_acceleration = 900 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +bridge_acceleration = 1000 +first_layer_acceleration = 600 +default_acceleration = 1000 +max_print_speed = 200 +gcode_resolution = 0.008 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.5 + +[print:0.20mm QUALITY @MK4 0.5] +inherits = 0.15mm QUALITY @MK4 0.5; *0.20mm*; *MK4*; *0.5nozzle* +perimeter_speed = 50 +external_perimeter_speed = 35 +small_perimeter_speed = 30 +gcode_resolution = 0.01 +support_material_interface_layers = 4 +infill_speed = 200 +solid_infill_speed = 120 +support_material_speed = 50 +support_material_interface_speed = 70% +external_perimeter_acceleration = 800 +perimeter_acceleration = 900 +infill_acceleration = 2000 +default_acceleration = 1000 +max_print_speed = 200 + +[print:0.25mm SPEED @MK4 0.5] +inherits = *0.25mm*; *MK4*; *0.5nozzle* +bottom_solid_layers = 3 +perimeter_speed = 70 +external_perimeter_speed = 40 +small_perimeter_speed = 35 +infill_speed = 200 +solid_infill_speed = 100 +top_solid_infill_speed = 40 +support_material_speed = 50 +support_material_interface_speed = 75% +support_material_style = snug +support_material_interface_layers = 4 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +gap_fill_speed = 45 +bridge_speed = 25 +external_perimeter_acceleration = 900 +perimeter_acceleration = 1000 +infill_acceleration = 2000 +bridge_acceleration = 800 +default_acceleration = 1000 +max_print_speed = 200 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.5 + +[print:0.32mm DRAFT @MK4 0.5] +inherits = *0.32mm*; *MK4*; *0.5nozzle* +bottom_solid_layers = 3 +perimeter_speed = 70 +external_perimeter_speed = 45 +small_perimeter_speed = 40 +infill_speed = 200 +solid_infill_speed = 100 +top_solid_infill_speed = 40 +support_material_speed = 50 +support_material_interface_speed = 75% +support_material_style = snug +support_material_interface_layers = 4 +support_material_contact_distance = 0.3 +support_material_extrusion_width = 0.42 +raft_contact_distance = 0.3 +gap_fill_speed = 45 +bridge_speed = 25 +external_perimeter_acceleration = 1000 +perimeter_acceleration = 1000 +infill_acceleration = 2000 +bridge_acceleration = 1000 +default_acceleration = 1000 +max_print_speed = 200 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.5 + +## MK4 - 0.6mm nozzle + +[print:0.15mm DETAIL @MK4 0.6] +inherits = *0.15mm*; *MK4*; *0.6nozzleMK4* +fill_pattern = gyroid +perimeter_speed = 45 +external_perimeter_speed = 30 +small_perimeter_speed = 30 +infill_speed = 100 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +support_material_style = snug +support_material_interface_layers = 4 +support_material_speed = 50 +support_material_interface_speed = 80% +gap_fill_speed = 40 +bridge_speed = 25 +extrusion_width = 0.65 +external_perimeter_extrusion_width = 0.6 +first_layer_extrusion_width = 0.65 +infill_extrusion_width = 0.6 +perimeter_extrusion_width = 0.6 +solid_infill_extrusion_width = 0.6 +top_infill_extrusion_width = 0.5 +support_material_extrusion_width = 0.5 +external_perimeter_acceleration = 800 +perimeter_acceleration = 800 +infill_acceleration = 2000 +bridge_acceleration = 800 +default_acceleration = 1000 +bridge_flow_ratio = 1 +max_print_speed = 200 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[print:0.20mm DETAIL @MK4 0.6] +inherits = *0.20mm*; *MK4*; *0.6nozzleMK4* +fill_pattern = gyroid +perimeter_speed = 50 +external_perimeter_speed = 35 +small_perimeter_speed = 30 +infill_speed = 120 +solid_infill_speed = 80 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +support_material_style = snug +support_material_interface_layers = 4 +top_solid_infill_speed = 40 +support_material_speed = 50 +support_material_interface_speed = 80% +gap_fill_speed = 40 +bridge_speed = 25 +extrusion_width = 0.65 +external_perimeter_extrusion_width = 0.6 +first_layer_extrusion_width = 0.65 +infill_extrusion_width = 0.6 +perimeter_extrusion_width = 0.6 +solid_infill_extrusion_width = 0.6 +top_infill_extrusion_width = 0.5 +support_material_extrusion_width = 0.5 +external_perimeter_acceleration = 800 +perimeter_acceleration = 900 +infill_acceleration = 2000 +default_acceleration = 1000 +bridge_flow_ratio = 1 +max_print_speed = 200 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[print:0.25mm QUALITY @MK4 0.6] +inherits = *0.25mm*; *MK4*; *0.6nozzleMK4* +perimeter_speed = 60 +external_perimeter_speed = 35 +small_perimeter_speed = 30 +infill_speed = 200 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +support_material_style = snug +support_material_interface_layers = 4 +support_material_speed = 50 +support_material_interface_speed = 75% +gap_fill_speed = 40 +bridge_speed = 25 +extrusion_width = 0.65 +top_infill_extrusion_width = 0.55 +support_material_extrusion_width = 0.5 +external_perimeter_acceleration = 800 +perimeter_acceleration = 1000 +infill_acceleration = 2000 +bridge_acceleration = 1000 +default_acceleration = 1000 +bridge_flow_ratio = 1 +top_solid_layers = 5 +bottom_solid_layers = 4 +max_print_speed = 200 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[print:0.32mm SPEED @MK4 0.6] +inherits = *0.32mm*; *MK4*; *0.6nozzleMK4* +perimeter_speed = 65 +external_perimeter_speed = 40 +small_perimeter_speed = 35 +infill_speed = 200 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +support_material_style = snug +support_material_interface_layers = 4 +support_material_speed = 50 +support_material_interface_speed = 75% +gap_fill_speed = 50 +bridge_speed = 25 +extrusion_width = 0.68 +external_perimeter_extrusion_width = 0.68 +first_layer_extrusion_width = 0.65 +infill_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +top_infill_extrusion_width = 0.55 +support_material_extrusion_width = 0.5 +external_perimeter_acceleration = 800 +perimeter_acceleration = 1000 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +first_layer_acceleration = 600 +default_acceleration = 1000 +bridge_flow_ratio = 0.95 +max_print_speed = 200 +bottom_solid_layers = 3 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[print:0.40mm DRAFT @MK4 0.6] +inherits = *0.40mm*; *MK4*; *0.6nozzleMK4* +perimeter_speed = 60 +external_perimeter_speed = 40 +small_perimeter_speed = 35 +infill_speed = 200 +solid_infill_speed = 55 +top_solid_infill_speed = 40 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +support_material_style = snug +support_material_interface_layers = 4 +support_material_speed = 50 +support_material_interface_speed = 80% +gap_fill_speed = 40 +bridge_speed = 25 +extrusion_width = 0.68 +external_perimeter_extrusion_width = 0.68 +first_layer_extrusion_width = 0.65 +infill_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +top_infill_extrusion_width = 0.6 +support_material_extrusion_width = 0.5 +external_perimeter_acceleration = 900 +perimeter_acceleration = 1000 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +default_acceleration = 1500 +bridge_flow_ratio = 0.95 +dynamic_overhang_speeds = 30,20,15,15 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +## MK4 - 0.8mm nozzle + +[print:0.30mm DETAIL @MK4 0.8] +inherits = *0.30mm*; *MK4*; *0.8nozzleMK4* +perimeter_speed = 45 +external_perimeter_speed = 30 +small_perimeter_speed = 30 +infill_speed = 70 +solid_infill_speed = 50 +support_material_speed = 40 +support_material_interface_speed = 90% +top_solid_infill_speed = 35 +bridge_speed = 22 +gap_fill_speed = 30 +top_infill_extrusion_width = 0.75 +support_material_extrusion_width = 0.7 +external_perimeter_acceleration = 800 +perimeter_acceleration = 1000 +bridge_acceleration = 1000 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 + +[print:0.40mm QUALITY @MK4 0.8] +inherits = *0.40mm*; *MK4*; *0.8nozzleMK4* +perimeter_speed = 45 +external_perimeter_speed = 35 +small_perimeter_speed = 30 +infill_speed = 65 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 +support_material_interface_speed = 90% +bridge_speed = 22 +gap_fill_speed = 30 +top_infill_extrusion_width = 0.8 +support_material_extrusion_width = 0.7 +external_perimeter_acceleration = 800 +perimeter_acceleration = 1000 +bridge_acceleration = 1000 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 + +[print:0.55mm DRAFT @MK4 0.8] +inherits = *MK4*; *0.8nozzleMK4* +layer_height = 0.55 +top_solid_layers = 4 +bottom_solid_layers = 3 +perimeter_speed = 40 +external_perimeter_speed = 30 +small_perimeter_speed = 30 +infill_speed = 55 +solid_infill_speed = 35 +top_solid_infill_speed = 30 +support_material_speed = 35 +support_material_interface_speed = 90% +bridge_speed = 22 +gap_fill_speed = 30 +top_infill_extrusion_width = 0.8 +support_material_extrusion_width = 0.7 +perimeter_extrusion_width = 1 +external_perimeter_extrusion_width = 1 +external_perimeter_acceleration = 1000 +perimeter_acceleration = 1000 +bridge_acceleration = 1000 +top_solid_infill_acceleration = 800 +solid_infill_acceleration = 1500 +infill_acceleration = 2000 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 + # XXXXXXxxXXXXXXXXXXXXXX # XXX--- filament ---XXX # XXXXXXXXxxXXXXXXXXXXXX @@ -2611,7 +3565,7 @@ compatible_printers_condition = printer_model=="XL" 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_model!="XL" +compatible_printers_condition = ! single_extruder_multi_material and printer_notes!~/.*PG.*/ end_filament_gcode = "; Filament-specific end gcode" extrusion_multiplier = 1 filament_loading_speed = 28 @@ -2654,11 +3608,11 @@ 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_model!="XL" +compatible_printers_condition = ! 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" -compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 +compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 slowdown_below_layer_time = 8 filament_cooling_final_speed = 2 filament_cooling_initial_speed = 3 @@ -2675,13 +3629,13 @@ filament_unloading_speed_start = 100 [filament:*PLA06PG*] inherits = *PLAPG* -compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.6 +compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.6 filament_max_volumetric_speed = 15.5 slowdown_below_layer_time = 10 [filament:*PLA08PG*] inherits = *PLAPG* -compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 +compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.8 filament_max_volumetric_speed = 19 slowdown_below_layer_time = 18 @@ -2704,15 +3658,15 @@ 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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:*PET06*] inherits = *PET* -compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) filament_max_volumetric_speed = 15 [filament:*PETPG*] -compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 +compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 filament_max_volumetric_speed = 10 start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.08{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.1{elsif nozzle_diameter[0]==0.35}0.09{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\nM142 S40 ; set heatbreak target temp" filament_cooling_final_speed = 1 @@ -2733,24 +3687,25 @@ slowdown_below_layer_time = 9 [filament:*PET06PG*] inherits = *PETPG* -compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.6 +compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.6 filament_max_volumetric_speed = 17 slowdown_below_layer_time = 12 +filament_retract_length = 0.9 [filament:*PET08PG*] inherits = *PETPG* -compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 +compatible_printers_condition = printer_notes=~/.*PG.*/ and nozzle_diameter[0]==0.8 filament_max_volumetric_speed = 22 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_model!="XL" +compatible_printers_condition = nozzle_diameter[0]>=0.4 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_model=="XL" +compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ [filament:*PETMMU1*] -# inherits = *PET* filament_retract_length = nil filament_retract_speed = nil filament_retract_lift = 0.2 @@ -2834,7 +3789,7 @@ max_fan_speed = 30 min_fan_speed = 20 temperature = 255 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.02{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" -compatible_printers_condition = printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ 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:*ABSC*] inherits = *common* @@ -2856,7 +3811,7 @@ min_fan_speed = 15 min_print_speed = 15 temperature = 255 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.02{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" -compatible_printers_condition = printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ 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:*ABSPG*] compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 @@ -2884,6 +3839,21 @@ filament_max_volumetric_speed = 18 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 slowdown_below_layer_time = 25 +[filament:*ABSMK4*] +inherits = *ABSPG* +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 + +[filament:*ABS06MK4*] +inherits = *ABSMK4* +filament_max_volumetric_speed = 15 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[filament:*ABS08MK4*] +inherits = *ABSMK4* +filament_max_volumetric_speed = 18 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 +slowdown_below_layer_time = 25 + [filament:*PCPG*] inherits = *ABSPG* filament_max_volumetric_speed = 8 @@ -2902,6 +3872,22 @@ inherits = *PCPG* filament_max_volumetric_speed = 20 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 +[filament:*PCMK4*] +inherits = *ABSMK4* +filament_max_volumetric_speed = 8 +start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\nM142 S45 ; set heatbreak target temp\n" +## idle_temperature = 170 + +[filament:*PC06MK4*] +inherits = *PCMK4* +filament_max_volumetric_speed = 14 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[filament:*PC08MK4*] +inherits = *PCMK4* +filament_max_volumetric_speed = 20 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 + [filament:*PAPG*] inherits = *ABSPG* filament_max_volumetric_speed = 5 @@ -2910,21 +3896,37 @@ bed_temperature = 105 ## idle_temperature = 170 [filament:*PA06PG*] -inherits = *PCPG* +inherits = *PAPG* filament_max_volumetric_speed = 7 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.6 [filament:*PA08PG*] -inherits = *PCPG* +inherits = *PAPG* filament_max_volumetric_speed = 10 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 +[filament:*PAMK4*] +inherits = *ABSMK4* +filament_max_volumetric_speed = 5 +start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\nM142 S45 ; set heatbreak target temp\n" +## idle_temperature = 170 + +[filament:*PA06MK4*] +inherits = *PAMK4* +filament_max_volumetric_speed = 7 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[filament:*PA08MK4*] +inherits = *PAMK4* +filament_max_volumetric_speed = 10 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 + [filament:*FLEX*] inherits = *common* bed_temperature = 50 bridge_fan_speed = 80 # For now, all but selected filaments are disabled for the MMU 2.0 -compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material) cooling = 0 disable_fan_first_layers = 3 extrusion_multiplier = 1.15 @@ -2945,7 +3947,7 @@ filament_retract_lift = 0 filament_wipe = 0 [filament:*FLEXPG*] -filament_max_volumetric_speed = 4 +filament_max_volumetric_speed = 3.5 filament_retract_speed = 60 filament_deretract_speed = 20 filament_retract_before_travel = 2 @@ -2955,14 +3957,33 @@ start_filament_gcode = "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak tar [filament:*FLEX06PG*] inherits = *FLEXPG* -filament_max_volumetric_speed = 6.5 +filament_max_volumetric_speed = 4.5 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.6 [filament:*FLEX08PG*] inherits = *FLEXPG* -filament_max_volumetric_speed = 9 +filament_max_volumetric_speed = 8 compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 +[filament:*FLEXMK4*] +filament_max_volumetric_speed = 4 +filament_retract_speed = 60 +filament_deretract_speed = 20 +filament_retract_before_travel = 2 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]>=0.3 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 +## idle_temperature = 170 +start_filament_gcode = "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + +[filament:*FLEX06MK4*] +inherits = *FLEXMK4* +filament_max_volumetric_speed = 6.5 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[filament:*FLEX08MK4*] +inherits = *FLEXMK4* +filament_max_volumetric_speed = 9 +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 + [filament:ColorFabb bronzeFill] inherits = *PLA*; *04PLUS* filament_vendor = ColorFabb @@ -3049,12 +4070,27 @@ temperature = 270 inherits = ColorFabb HT; *PETPG* first_layer_bed_temperature = 100 bed_temperature = 105 +compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 [filament:ColorFabb HT @PG 0.6] inherits = ColorFabb HT @PG; *PET06PG* +compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.6 [filament:ColorFabb HT @PG 0.8] inherits = ColorFabb HT @PG; *PET08PG* +compatible_printers_condition = printer_model=="XL" and nozzle_diameter[0]==0.8 + +[filament:ColorFabb HT @MK4] +inherits = ColorFabb HT; *PETPG* +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 + +[filament:ColorFabb HT @MK4 0.6] +inherits = ColorFabb HT @MK4; *PET06PG* +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.6 + +[filament:ColorFabb HT @MK4 0.8] +inherits = ColorFabb HT @MK4; *PET08PG* +compatible_printers_condition = printer_model=="MK4" and nozzle_diameter[0]==0.8 [filament:ColorFabb PLA-PHA] inherits = *PLA* @@ -3160,7 +4196,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_model!="XL" 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 ! single_extruder_multi_material [filament:ColorFabb XT-CF20 @PG] inherits = ColorFabb XT-CF20; *PETPG*; *04PLUSPG* @@ -3217,19 +4253,32 @@ min_fan_speed = 20 temperature = 260 filament_retract_length = nil filament_retract_lift = 0 -compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MINI" and printer_model!="XL" and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material) [filament:ColorFabb nGen flex @PG] inherits = ColorFabb nGen flex; *FLEXPG* -filament_max_volumetric_speed = 7 +filament_max_volumetric_speed = 6 filament_retract_length = 2.5 [filament:ColorFabb nGen flex @PG 0.6] inherits = ColorFabb nGen flex; *FLEX06PG* -filament_max_volumetric_speed = 9 +filament_max_volumetric_speed = 7 [filament:ColorFabb nGen flex @PG 0.8] inherits = ColorFabb nGen flex; *FLEX08PG* +filament_max_volumetric_speed = 10 + +[filament:ColorFabb nGen flex @MK4] +inherits = ColorFabb nGen flex; *FLEXMK4* +filament_max_volumetric_speed = 7 +filament_retract_length = 2.5 + +[filament:ColorFabb nGen flex @MK4 0.6] +inherits = ColorFabb nGen flex; *FLEX06MK4* +filament_max_volumetric_speed = 9 + +[filament:ColorFabb nGen flex @MK4 0.8] +inherits = ColorFabb nGen flex; *FLEX08MK4* filament_max_volumetric_speed = 12 [filament:Kimya PETG Carbon] @@ -3246,7 +4295,7 @@ temperature = 240 filament_retract_length = nil filament_retract_lift = 0.3 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.06{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 = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Kimya PETG Carbon @PG] inherits = Kimya PETG Carbon; *PETPG*; *04PLUSPG* @@ -3268,12 +4317,13 @@ 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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Kimya ABS Carbon @PG] inherits = Kimya ABS Carbon; *ABSPG*; *04PLUSPG* bed_temperature = 105 filament_max_volumetric_speed = 6 +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:Kimya ABS Carbon @PG 0.6] inherits = Kimya ABS Carbon @PG; *ABS06PG* @@ -3283,6 +4333,19 @@ filament_max_volumetric_speed = 10 inherits = Kimya ABS Carbon @PG; *ABS08PG* filament_max_volumetric_speed = 14 +[filament:Kimya ABS Carbon @MK4] +inherits = Kimya ABS Carbon; *ABSMK4* +filament_max_volumetric_speed = 6 +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:Kimya ABS Carbon @MK4 0.6] +inherits = Kimya ABS Carbon @MK4; *ABS06MK4* +filament_max_volumetric_speed = 10 + +[filament:Kimya ABS Carbon @MK4 0.8] +inherits = Kimya ABS Carbon @MK4; *ABS08MK4* +filament_max_volumetric_speed = 14 + [filament:Kimya ABS Kevlar] inherits = Kimya ABS Carbon filament_vendor = Kimya @@ -3291,6 +4354,7 @@ filament_density = 1.037 [filament:Kimya ABS Kevlar @PG] inherits = Kimya ABS Kevlar; *ABSPG*; *04PLUSPG* bed_temperature = 105 +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:Kimya ABS Kevlar @PG 0.6] inherits = Kimya ABS Kevlar @PG; *ABS06PG* @@ -3300,6 +4364,18 @@ filament_max_volumetric_speed = 10 inherits = Kimya ABS Kevlar @PG; *ABS08PG* filament_max_volumetric_speed = 14 +[filament:Kimya ABS Kevlar @MK4] +inherits = Kimya ABS Kevlar; *ABSMK4*; *04PLUSPG* +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:Kimya ABS Kevlar @MK4 0.6] +inherits = Kimya ABS Kevlar @MK4; *ABS06MK4* +filament_max_volumetric_speed = 10 + +[filament:Kimya ABS Kevlar @MK4 0.8] +inherits = Kimya ABS Kevlar @MK4; *ABS08MK4* +filament_max_volumetric_speed = 14 + [filament:Kimya PEBA-S] inherits = *PET* filament_vendor = Kimya @@ -3312,7 +4388,7 @@ filament_max_volumetric_speed = 6.5 filament_type = PEBA min_fan_speed = 30 max_fan_speed = 30 -compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ 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:Kimya PEBA-S @PG] inherits = Kimya PEBA-S; *PETPG* @@ -3387,6 +4463,15 @@ inherits = Fillamentum ABS @PG; *ABS06PG* [filament:Fillamentum ABS @PG 0.8] inherits = Fillamentum ABS @PG; *ABS08PG* +[filament:Fillamentum ABS @MK4] +inherits = Fillamentum ABS; *ABSMK4* + +[filament:Fillamentum ABS @MK4 0.6] +inherits = Fillamentum ABS @MK4; *ABS06MK4* + +[filament:Fillamentum ABS @MK4 0.8] +inherits = Fillamentum ABS @MK4; *ABS08MK4* + [filament:Fillamentum ASA] inherits = *ABS* filament_vendor = Fillamentum @@ -3413,6 +4498,15 @@ inherits = Fillamentum ASA @PG; *ABS06PG* [filament:Fillamentum ASA @PG 0.8] inherits = Fillamentum ASA @PG; *ABS08PG* +[filament:Fillamentum ASA @MK4] +inherits = Fillamentum ASA; *ABSMK4* + +[filament:Fillamentum ASA @MK4 0.6] +inherits = Fillamentum ASA @MK4; *ABS06MK4* + +[filament:Fillamentum ASA @MK4 0.8] +inherits = Fillamentum ASA @MK4; *ABS08MK4* + [filament:Prusament ASA] inherits = *ABS* filament_vendor = Prusa Polymers @@ -3434,7 +4528,7 @@ disable_fan_first_layers = 4 filament_type = ASA filament_colour = #FFF2EC 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.02{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" -compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]!=0.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 ASA @PG] inherits = Prusament ASA; *ABSPG* @@ -3449,6 +4543,17 @@ inherits = Prusament ASA @PG; *ABS08PG* first_layer_temperature = 265 temperature = 265 +[filament:Prusament ASA @MK4] +inherits = Prusament ASA; *ABSMK4* + +[filament:Prusament ASA @MK4 0.6] +inherits = Prusament ASA @MK4; *ABS06MK4* + +[filament:Prusament ASA @MK4 0.8] +inherits = Prusament ASA @MK4; *ABS08MK4* +first_layer_temperature = 265 +temperature = 265 + [filament:Prusament PC Blend] inherits = *ABS* filament_vendor = Prusa Polymers @@ -3472,7 +4577,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_model!="XL" 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 ! 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] @@ -3487,6 +4592,18 @@ filament_max_volumetric_speed = 13 inherits = Prusament PC Blend @PG; *PC08PG* filament_max_volumetric_speed = 18 +[filament:Prusament PC Blend @MK4] +inherits = Prusament PC Blend; *PCMK4* +filament_max_volumetric_speed = 9 + +[filament:Prusament PC Blend @MK4 0.6] +inherits = Prusament PC Blend @MK4; *PC06MK4* +filament_max_volumetric_speed = 13 + +[filament:Prusament PC Blend @MK4 0.8] +inherits = Prusament PC Blend @MK4; *PC08MK4* +filament_max_volumetric_speed = 18 + [filament:Prusament PC Blend @MK2] inherits = Prusament PC Blend first_layer_bed_temperature = 105 @@ -3506,7 +4623,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_model!="XL" 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 ! single_extruder_multi_material [filament:Prusament PC Blend Carbon Fiber @PG] inherits = Prusament PC Blend Carbon Fiber; *PCPG* @@ -3519,6 +4636,17 @@ filament_max_volumetric_speed = 13 inherits = Prusament PC Blend Carbon Fiber; *PC08PG* filament_max_volumetric_speed = 18 +[filament:Prusament PC Blend Carbon Fiber @MK4] +inherits = Prusament PC Blend Carbon Fiber; *PCMK4* + +[filament:Prusament PC Blend Carbon Fiber @MK4 0.6] +inherits = Prusament PC Blend Carbon Fiber; *PC06MK4* +filament_max_volumetric_speed = 13 + +[filament:Prusament PC Blend Carbon Fiber @MK4 0.8] +inherits = Prusament PC Blend Carbon Fiber; *PC08MK4* +filament_max_volumetric_speed = 18 + [filament:Prusament PC Blend Carbon Fiber @MK2] inherits = Prusament PC Blend Carbon Fiber first_layer_bed_temperature = 105 @@ -3539,7 +4667,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_model!="XL" 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 ! single_extruder_multi_material [filament:Prusament PA11 Carbon Fiber @PG] inherits = Prusament PA11 Carbon Fiber; *PCPG* @@ -3553,6 +4681,18 @@ filament_max_volumetric_speed = 8 inherits = Prusament PA11 Carbon Fiber @PG; *PC08PG* filament_max_volumetric_speed = 10 +[filament:Prusament PA11 Carbon Fiber @MK4] +inherits = Prusament PA11 Carbon Fiber; *PCMK4* +filament_max_volumetric_speed = 6.5 + +[filament:Prusament PA11 Carbon Fiber @MK4 0.6] +inherits = Prusament PA11 Carbon Fiber @MK4; *PC06MK4* +filament_max_volumetric_speed = 8 + +[filament:Prusament PA11 Carbon Fiber @MK4 0.8] +inherits = Prusament PA11 Carbon Fiber @MK4; *PC08MK4* +filament_max_volumetric_speed = 10 + [filament:Prusament PA11 Carbon Fiber @MK2] inherits = Prusament PA11 Carbon Fiber first_layer_bed_temperature = 90 @@ -3646,7 +4786,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic ABS @PG] inherits = Generic ABS; *ABSPG* @@ -3660,6 +4800,17 @@ inherits = Generic ABS @PG; *ABS08PG* first_layer_temperature = 265 temperature = 265 +[filament:Generic ABS @MK4] +inherits = Generic ABS; *ABSMK4* + +[filament:Generic ABS @MK4 0.6] +inherits = Generic ABS @MK4; *ABS06MK4* + +[filament:Generic ABS @MK4 0.8] +inherits = Generic ABS @MK4; *ABS08MK4* +first_layer_temperature = 265 +temperature = 265 + [filament:Esun ABS] inherits = *ABSC* filament_vendor = Esun @@ -3677,6 +4828,15 @@ inherits = Esun ABS @PG; *ABS06PG* [filament:Esun ABS @PG 0.8] inherits = Esun ABS @PG; *ABS08PG* +[filament:Esun ABS @MK4] +inherits = Esun ABS; *ABSMK4* + +[filament:Esun ABS @MK4 0.6] +inherits = Esun ABS @MK4; *ABS06MK4* + +[filament:Esun ABS @MK4 0.8] +inherits = Esun ABS @MK4; *ABS08MK4* + [filament:Hatchbox ABS] inherits = *ABSC* filament_vendor = Hatchbox @@ -3694,6 +4854,15 @@ inherits = Hatchbox ABS @PG; *ABS06PG* [filament:Hatchbox ABS @PG 0.8] inherits = Hatchbox ABS @PG; *ABS08PG* +[filament:Hatchbox ABS @MK4] +inherits = Hatchbox ABS; *ABSMK4* + +[filament:Hatchbox ABS @MK4 0.6] +inherits = Hatchbox ABS @MK4; *ABS06MK4* + +[filament:Hatchbox ABS @MK4 0.8] +inherits = Hatchbox ABS @MK4; *ABS08MK4* + [filament:Filament PM ABS] inherits = *ABSC* renamed_from = "Plasty Mladec ABS" @@ -3712,6 +4881,15 @@ inherits = Filament PM ABS @PG; *ABS06PG* [filament:Filament PM ABS @PG 0.8] inherits = Filament PM ABS @PG; *ABS08PG* +[filament:Filament PM ABS @MK4] +inherits = Filament PM ABS; *ABSMK4* + +[filament:Filament PM ABS @MK4 0.6] +inherits = Filament PM ABS @MK4; *ABS06MK4* + +[filament:Filament PM ABS @MK4 0.8] +inherits = Filament PM ABS @MK4; *ABS08MK4* + [filament:Verbatim ABS] inherits = *ABSC* filament_vendor = Verbatim @@ -3730,13 +4908,22 @@ inherits = Verbatim ABS @PG; *ABS06PG* [filament:Verbatim ABS @PG 0.8] inherits = Verbatim ABS @PG; *ABS08PG* +[filament:Verbatim ABS @MK4] +inherits = Verbatim ABS; *ABSMK4* + +[filament:Verbatim ABS @MK4 0.6] +inherits = Verbatim ABS @MK4; *ABS06MK4* + +[filament:Verbatim ABS @MK4 0.8] +inherits = Verbatim ABS @MK4; *ABS08MK4* + [filament:Generic PETG] inherits = *PET* 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_model!="XL" 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 ! single_extruder_multi_material [filament:Generic PETG @PG] inherits = Generic PETG; *PETPG* @@ -3766,12 +4953,15 @@ filament_spool_weight = 230 [filament:Extrudr DuraPro ASA @PG] inherits = Extrudr DuraPro ASA; *ABSPG* filament_max_volumetric_speed = 10 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Extrudr DuraPro ASA @PG 0.6] inherits = Extrudr DuraPro ASA @PG; *ABS06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Extrudr DuraPro ASA @PG 0.8] inherits = Extrudr DuraPro ASA @PG; *ABS08PG* +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Extrudr PETG] inherits = *PET* @@ -3809,7 +4999,7 @@ filament_density = 1.29 filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=198" first_layer_temperature = 235 temperature = 235 -compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]>=0.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_spool_weight = 230 [filament:Extrudr XPETG CF @PG] @@ -4030,6 +5220,17 @@ inherits = Extrudr Flex Hard @PG; *FLEX06PG* [filament:Extrudr Flex Hard @PG 0.8] inherits = Extrudr Flex Hard @PG; *FLEX08PG* +[filament:Extrudr Flex Hard @MK4] +inherits = Extrudr Flex Hard; *FLEXMK4* +extrusion_multiplier = 1.1 +filament_retract_length = 2.5 + +[filament:Extrudr Flex Hard @MK4 0.6] +inherits = Extrudr Flex Hard @MK4; *FLEX06MK4* + +[filament:Extrudr Flex Hard @MK4 0.8] +inherits = Extrudr Flex Hard @MK4; *FLEX08MK4* + [filament:Extrudr Flex Medium] inherits = *FLEX* filament_vendor = Extrudr @@ -4056,6 +5257,17 @@ inherits = Extrudr Flex Medium @PG; *FLEX06PG* [filament:Extrudr Flex Medium @PG 0.8] inherits = Extrudr Flex Medium @PG; *FLEX08PG* +[filament:Extrudr Flex Medium @MK4] +inherits = Extrudr Flex Medium; *FLEXMK4* +extrusion_multiplier = 1.1 +filament_retract_length = 2.5 + +[filament:Extrudr Flex Medium @MK4 0.6] +inherits = Extrudr Flex Medium @MK4; *FLEX06MK4* + +[filament:Extrudr Flex Medium @MK4 0.8] +inherits = Extrudr Flex Medium @MK4; *FLEX08MK4* + [filament:Extrudr Flex SemiSoft] inherits = *FLEX* filament_vendor = Extrudr @@ -4085,6 +5297,20 @@ filament_max_volumetric_speed = 5 inherits = Extrudr Flex SemiSoft @PG; *FLEX08PG* filament_max_volumetric_speed = 8 +[filament:Extrudr Flex SemiSoft @MK4] +inherits = Extrudr Flex SemiSoft; *FLEXMK4* +extrusion_multiplier = 1.1 +filament_retract_length = 3 +filament_max_volumetric_speed = 3 + +[filament:Extrudr Flex SemiSoft @MK4 0.6] +inherits = Extrudr Flex SemiSoft @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 5 + +[filament:Extrudr Flex SemiSoft @MK4 0.8] +inherits = Extrudr Flex SemiSoft @MK4; *FLEX08MK4* +filament_max_volumetric_speed = 8 + [filament:addnorth Adamant S1] inherits = *FLEX* filament_vendor = addnorth @@ -4121,12 +5347,27 @@ filament_retract_lift = 0.2 [filament:addnorth Adamant S1 @PG 0.6] inherits = addnorth Adamant S1 @PG; *FLEX06PG* -filament_max_volumetric_speed = 5.5 +filament_max_volumetric_speed = 4.5 [filament:addnorth Adamant S1 @PG 0.8] inherits = addnorth Adamant S1 @PG; *FLEX08PG* filament_max_volumetric_speed = 9 +[filament:addnorth Adamant S1 @MK4] +inherits = addnorth Adamant S1; *FLEXMK4* +filament_max_volumetric_speed = 3 +filament_retract_length = 1.5 +filament_retract_restart_extra = 0 +filament_retract_lift = 0.2 + +[filament:addnorth Adamant S1 @MK4 0.6] +inherits = addnorth Adamant S1 @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 5.5 + +[filament:addnorth Adamant S1 @MK4 0.8] +inherits = addnorth Adamant S1 @MK4; *FLEX08MK4* +filament_max_volumetric_speed = 9 + [filament:addnorth Adura X] inherits = *PET* filament_vendor = addnorth @@ -4152,21 +5393,39 @@ 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_model!="XL" 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 ! single_extruder_multi_material [filament:addnorth Adura X @PG] inherits = addnorth Adura X; *PETPG* first_layer_bed_temperature = 100 bed_temperature = 105 filament_max_volumetric_speed = 4 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=="XL" and ! single_extruder_multi_material [filament:addnorth Adura X @PG 0.6] inherits = addnorth Adura X @PG; *PET06PG* filament_max_volumetric_speed = 6 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model=="XL" and ! single_extruder_multi_material [filament:addnorth Adura X @PG 0.8] inherits = addnorth Adura X @PG; *PET08PG* filament_max_volumetric_speed = 8 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model=="XL" and ! single_extruder_multi_material + +[filament:addnorth Adura X @MK4] +inherits = addnorth Adura X; *PETPG* +filament_max_volumetric_speed = 4 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=="MK4" and ! single_extruder_multi_material + +[filament:addnorth Adura X @MK4 0.6] +inherits = addnorth Adura X @MK4; *PET06PG* +filament_max_volumetric_speed = 6 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model=="MK4" and ! single_extruder_multi_material + +[filament:addnorth Adura X @MK4 0.8] +inherits = addnorth Adura X @MK4; *PET08PG* +filament_max_volumetric_speed = 8 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model=="MK4" and ! single_extruder_multi_material [filament:addnorth Adura X @MINI] inherits = addnorth Adura X @@ -4305,6 +5564,19 @@ filament_max_volumetric_speed = 6 inherits = addnorth OBC Polyethylene @PG; *FLEX08PG* filament_max_volumetric_speed = 10 +[filament:addnorth OBC Polyethylene @MK4] +inherits = addnorth OBC Polyethylene; *FLEXMK4* +filament_max_volumetric_speed = 4 +filament_retract_length = 1.5 + +[filament:addnorth OBC Polyethylene @MK4 0.6] +inherits = addnorth OBC Polyethylene @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6 + +[filament:addnorth OBC Polyethylene @MK4 0.8] +inherits = addnorth OBC Polyethylene @MK4; *FLEX08MK4* +filament_max_volumetric_speed = 10 + [filament:addnorth PETG] inherits = *PET* filament_vendor = addnorth @@ -4375,7 +5647,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_model!="XL" 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 ! single_extruder_multi_material [filament:addnorth Rigid X @PG] inherits = addnorth Rigid X; *PETPG*; *04PLUSPG* @@ -4421,7 +5693,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:addnorth Textura @PG] inherits = addnorth Textura; *PLAPG* @@ -4458,19 +5730,22 @@ 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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Filamentworld ABS @PG] inherits = Filamentworld ABS; *ABSPG* first_layer_bed_temperature = 100 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filamentworld ABS @PG 0.6] inherits = Filamentworld ABS @PG; *ABS06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filamentworld ABS @PG 0.8] inherits = Filamentworld ABS @PG; *ABS08PG* first_layer_temperature = 240 temperature = 240 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filamentworld ABS @MINI] inherits = Filamentworld ABS @@ -4552,7 +5827,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_model!="XL" 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 ! single_extruder_multi_material [filament:Filament PM PETG @PG] inherits = Filament PM PETG; *PETPG* @@ -4568,7 +5843,7 @@ inherits = *PLA* filament_vendor = Generic filament_cost = 25.4 filament_density = 1.24 -compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic PLA @PG] inherits = Generic PLA; *PLAPG* @@ -4707,6 +5982,15 @@ inherits = 3D-Fuel Workday ABS @PG; *ABS06PG* [filament:3D-Fuel Workday ABS @PG 0.8] inherits = 3D-Fuel Workday ABS @PG; *ABS08PG* +[filament:3D-Fuel Workday ABS @MK4] +inherits = 3D-Fuel Workday ABS; *ABSMK4* + +[filament:3D-Fuel Workday ABS @MK4 0.6] +inherits = 3D-Fuel Workday ABS @MK4; *ABS06MK4* + +[filament:3D-Fuel Workday ABS @MK4 0.8] +inherits = 3D-Fuel Workday ABS @MK4; *ABS08MK4* + [filament:3D-Fuel Workday ABS @MINI] inherits = 3D-Fuel Workday ABS; *ABSMINI* @@ -4817,7 +6101,7 @@ filament_max_volumetric_speed = 1.2 filament_retract_length = 0 filament_retract_speed = nil filament_retract_lift = nil -compatible_printers_condition = nozzle_diameter[0]>=0.35 and nozzle_diameter[0]!=0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.35 and nozzle_diameter[0]!=0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic FLEX @PG] inherits = Generic FLEX; *FLEXPG* @@ -4835,10 +6119,32 @@ extrusion_multiplier = 1.08 [filament:Generic FLEX @PG 0.6] inherits = Generic FLEX @PG; *FLEX06PG* -filament_max_volumetric_speed = 6 +filament_max_volumetric_speed = 4 [filament:Generic FLEX @PG 0.8] inherits = Generic FLEX @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:Generic FLEX @MK4] +inherits = Generic FLEX; *FLEXMK4* +filament_max_volumetric_speed = 3 +filament_retract_length = 2.5 +fan_always_on = 1 +min_fan_speed = 30 +max_fan_speed = 30 +cooling = 1 +filament_retract_lift = 0 +slowdown_below_layer_time = 10 +first_layer_temperature = 230 +temperature = 230 +extrusion_multiplier = 1.08 + +[filament:Generic FLEX @MK4 0.6] +inherits = Generic FLEX @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6 + +[filament:Generic FLEX @MK4 0.8] +inherits = Generic FLEX @MK4; *FLEX08MK4* filament_max_volumetric_speed = 9 [filament:Fillamentum Flexfill 92A] @@ -4860,16 +6166,30 @@ full_fan_speed_layer = 6 [filament:Fillamentum Flexfill 92A @PG] inherits = Fillamentum Flexfill 92A; *FLEXPG* -filament_max_volumetric_speed = 3.5 +filament_max_volumetric_speed = 3 extrusion_multiplier = 1.1 filament_retract_length = 3.5 [filament:Fillamentum Flexfill 92A @PG 0.6] inherits = Fillamentum Flexfill 92A @PG; *FLEX06PG* -filament_max_volumetric_speed = 6.5 +filament_max_volumetric_speed = 4.5 [filament:Fillamentum Flexfill 92A @PG 0.8] inherits = Fillamentum Flexfill 92A @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:Fillamentum Flexfill 92A @MK4] +inherits = Fillamentum Flexfill 92A; *FLEXMK4* +filament_max_volumetric_speed = 3.5 +extrusion_multiplier = 1.1 +filament_retract_length = 3.5 + +[filament:Fillamentum Flexfill 92A @MK4 0.6] +inherits = Fillamentum Flexfill 92A @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6.5 + +[filament:Fillamentum Flexfill 92A @MK4 0.8] +inherits = Fillamentum Flexfill 92A @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:AmazonBasics TPU] @@ -4906,10 +6226,23 @@ extrusion_multiplier = 1.1 [filament:AmazonBasics TPU @PG 0.6] inherits = AmazonBasics TPU @PG; *FLEX06PG* -filament_max_volumetric_speed = 6.5 +filament_max_volumetric_speed = 5 [filament:AmazonBasics TPU @PG 0.8] inherits = AmazonBasics TPU @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:AmazonBasics TPU @MK4] +inherits = AmazonBasics TPU; *FLEXMK4* +filament_retract_length = 2.5 +extrusion_multiplier = 1.1 + +[filament:AmazonBasics TPU @MK4 0.6] +inherits = AmazonBasics TPU @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6.5 + +[filament:AmazonBasics TPU @MK4 0.8] +inherits = AmazonBasics TPU @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:SainSmart TPU] @@ -4948,10 +6281,25 @@ filament_retract_length = 1.5 [filament:SainSmart TPU @PG 0.6] inherits = SainSmart TPU @PG; *FLEX06PG* -filament_max_volumetric_speed = 7 +filament_max_volumetric_speed = 6 [filament:SainSmart TPU @PG 0.8] inherits = SainSmart TPU @PG; *FLEX08PG* +filament_max_volumetric_speed = 9 + +[filament:SainSmart TPU @MK4] +inherits = SainSmart TPU; *FLEXMK4* +filament_max_volumetric_speed = 5 +first_layer_temperature = 235 +temperature = 235 +filament_retract_length = 1.5 + +[filament:SainSmart TPU @MK4 0.6] +inherits = SainSmart TPU @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 7 + +[filament:SainSmart TPU @MK4 0.8] +inherits = SainSmart TPU @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:NinjaTek NinjaFlex TPU] @@ -4983,16 +6331,30 @@ cooling = 1 [filament:NinjaTek NinjaFlex TPU @PG] inherits = NinjaTek NinjaFlex TPU; *FLEXPG* -filament_max_volumetric_speed = 3.5 +filament_max_volumetric_speed = 3 filament_retract_length = 3.5 extrusion_multiplier = 1.12 [filament:NinjaTek NinjaFlex TPU @PG 0.6] inherits = NinjaTek NinjaFlex TPU @PG; *FLEX06PG* -filament_max_volumetric_speed = 6.5 +filament_max_volumetric_speed = 4.5 [filament:NinjaTek NinjaFlex TPU @PG 0.8] inherits = NinjaTek NinjaFlex TPU @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:NinjaTek NinjaFlex TPU @MK4] +inherits = NinjaTek NinjaFlex TPU; *FLEXMK4* +filament_max_volumetric_speed = 3.5 +filament_retract_length = 3.5 +extrusion_multiplier = 1.12 + +[filament:NinjaTek NinjaFlex TPU @MK4 0.6] +inherits = NinjaTek NinjaFlex TPU @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6.5 + +[filament:NinjaTek NinjaFlex TPU @MK4 0.8] +inherits = NinjaTek NinjaFlex TPU @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:NinjaTek Cheetah TPU] @@ -5008,15 +6370,28 @@ temperature = 240 [filament:NinjaTek Cheetah TPU @PG] inherits = NinjaTek Cheetah TPU; *FLEXPG* -filament_max_volumetric_speed = 6 +filament_max_volumetric_speed = 5 filament_retract_length = 2.2 [filament:NinjaTek Cheetah TPU @PG 0.6] inherits = NinjaTek Cheetah TPU @PG; *FLEX06PG* -filament_max_volumetric_speed = 8 +filament_max_volumetric_speed = 7 [filament:NinjaTek Cheetah TPU @PG 0.8] inherits = NinjaTek Cheetah TPU @PG; *FLEX08PG* +filament_max_volumetric_speed = 10 + +[filament:NinjaTek Cheetah TPU @MK4] +inherits = NinjaTek Cheetah TPU; *FLEXMK4* +filament_max_volumetric_speed = 6 +filament_retract_length = 2.2 + +[filament:NinjaTek Cheetah TPU @MK4 0.6] +inherits = NinjaTek Cheetah TPU @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 8 + +[filament:NinjaTek Cheetah TPU @MK4 0.8] +inherits = NinjaTek Cheetah TPU @MK4; *FLEX08MK4* filament_max_volumetric_speed = 12 [filament:NinjaTek Cheetah TPU @MINI] @@ -5070,6 +6445,19 @@ filament_max_volumetric_speed = 5 inherits = Filatech FilaFlex40 @PG; *FLEX08PG* filament_max_volumetric_speed = 10 +[filament:Filatech FilaFlex40 @MK4] +inherits = Filatech FilaFlex40; *FLEXMK4* +filament_max_volumetric_speed = 4 +filament_retract_length = 2.5 + +[filament:Filatech FilaFlex40 @MK4 0.6] +inherits = Filatech FilaFlex40 @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 5 + +[filament:Filatech FilaFlex40 @MK4 0.8] +inherits = Filatech FilaFlex40 @MK4; *FLEX08MK4* +filament_max_volumetric_speed = 10 + [filament:Filatech FilaFlex30] inherits = Filatech FilaFlex40 temperature = 225 @@ -5084,10 +6472,23 @@ filament_retract_length = 3 [filament:Filatech FilaFlex30 @PG 0.6] inherits = Filatech FilaFlex30 @PG; *FLEX06PG* -filament_max_volumetric_speed = 7 +filament_max_volumetric_speed = 5 [filament:Filatech FilaFlex30 @PG 0.8] inherits = Filatech FilaFlex30 @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:Filatech FilaFlex30 @MK4] +inherits = Filatech FilaFlex30; *FLEXMK4* +filament_max_volumetric_speed = 3.5 +filament_retract_length = 3 + +[filament:Filatech FilaFlex30 @MK4 0.6] +inherits = Filatech FilaFlex30 @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 7 + +[filament:Filatech FilaFlex30 @MK4 0.8] +inherits = Filatech FilaFlex30 @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:Filatech FilaFlex55] @@ -5132,16 +6533,30 @@ temperature = 235 [filament:Filatech TPU @PG] inherits = Filatech TPU; *FLEXPG* -filament_max_volumetric_speed = 5.5 +filament_max_volumetric_speed = 4.5 first_layer_temperature = 235 filament_retract_length = 2.2 [filament:Filatech TPU @PG 0.6] inherits = Filatech TPU @PG; *FLEX06PG* -filament_max_volumetric_speed = 7 +filament_max_volumetric_speed = 5 [filament:Filatech TPU @PG 0.8] inherits = Filatech TPU @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:Filatech TPU @MK4] +inherits = Filatech TPU; *FLEXMK4* +filament_max_volumetric_speed = 5.5 +first_layer_temperature = 235 +filament_retract_length = 2.2 + +[filament:Filatech TPU @MK4 0.6] +inherits = Filatech TPU @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 7 + +[filament:Filatech TPU @MK4 0.8] +inherits = Filatech TPU @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:Filatech ABS] @@ -5161,6 +6576,15 @@ inherits = Filatech ABS @PG; *ABS06PG* [filament:Filatech ABS @PG 0.8] inherits = Filatech ABS @PG; *ABS08PG* +[filament:Filatech ABS @MK4] +inherits = Filatech ABS; *ABSMK4* + +[filament:Filatech ABS @MK4 0.6] +inherits = Filatech ABS @MK4; *ABS06MK4* + +[filament:Filatech ABS @MK4 0.8] +inherits = Filatech ABS @MK4; *ABS08MK4* + [filament:Filatech ABS @MINI] inherits = Filatech ABS; *ABSMINI* @@ -5172,17 +6596,20 @@ 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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Filatech FilaCarbon @PG] inherits = Filatech FilaCarbon; *ABSPG*; *04PLUSPG* first_layer_bed_temperature = 100 +compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filatech FilaCarbon @PG 0.6] inherits = Filatech FilaCarbon @PG; *ABS06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filatech FilaCarbon @PG 0.8] inherits = Filatech FilaCarbon @PG; *ABS08PG* +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filatech FilaCarbon @MINI] inherits = Filatech FilaCarbon; *ABSMINI* @@ -5251,12 +6678,15 @@ cooling = 0 [filament:Filatech FilaTough @PG] inherits = Filatech FilaTough; *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:Filatech FilaTough @PG 0.6] inherits = Filatech FilaTough; *ABS06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filatech FilaTough @PG 0.8] inherits = Filatech FilaTough; *ABS08PG* +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filatech HIPS] inherits = Prusa HIPS @@ -5268,7 +6698,7 @@ first_layer_temperature = 230 first_layer_bed_temperature = 100 temperature = 225 bed_temperature = 110 -compatible_printers_condition = printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Filatech HIPS @PG] inherits = Filatech HIPS; *ABSPG* @@ -5290,6 +6720,24 @@ inherits = Filatech HIPS @PG; *ABS06PG* [filament:Filatech HIPS @PG 0.8] inherits = Filatech HIPS @PG; *ABS08PG* +[filament:Filatech HIPS @MK4] +inherits = Filatech HIPS; *ABSMK4* +bridge_fan_speed = 50 +cooling = 1 +extrusion_multiplier = 1 +fan_always_on = 1 +fan_below_layer_time = 10 +first_layer_temperature = 220 +temperature = 225 +max_fan_speed = 20 +min_fan_speed = 20 + +[filament:Filatech HIPS @MK4 0.6] +inherits = Filatech HIPS @MK4; *ABS06MK4* + +[filament:Filatech HIPS @MK4 0.8] +inherits = Filatech HIPS @MK4; *ABS08MK4* + [filament:Filatech HIPS @MINI] inherits = Filatech HIPS; *ABSMINI* @@ -5307,7 +6755,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_model!="XL" 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 ! single_extruder_multi_material [filament:Filatech PA @PG] inherits = Filatech PA; *ABSPG* @@ -5323,6 +6771,18 @@ filament_max_volumetric_speed = 10 inherits = Filatech PA @PG; *ABS08PG* filament_max_volumetric_speed = 12 +[filament:Filatech PA @MK4] +inherits = Filatech PA; *ABSMK4* +filament_max_volumetric_speed = 8 + +[filament:Filatech PA @MK4 0.6] +inherits = Filatech PA @MK4; *ABS06MK4* +filament_max_volumetric_speed = 10 + +[filament:Filatech PA @MK4 0.8] +inherits = Filatech PA @MK4; *ABS08MK4* +filament_max_volumetric_speed = 12 + [filament:Filatech PA @MK2] inherits = Filatech PA first_layer_bed_temperature = 105 @@ -5351,6 +6811,15 @@ inherits = Filatech PC @PG; *PC06PG* [filament:Filatech PC @PG 0.8] inherits = Filatech PC @PG; *PC08PG* +[filament:Filatech PC @MK4] +inherits = Filatech PC; *PCMK4* + +[filament:Filatech PC @MK4 0.6] +inherits = Filatech PC @MK4; *PC06MK4* + +[filament:Filatech PC @MK4 0.8] +inherits = Filatech PC @MK4; *PC08MK4* + [filament:Filatech PC @MK2] inherits = Filatech PC first_layer_bed_temperature = 105 @@ -5379,6 +6848,15 @@ inherits = Filatech PC-ABS; *PC06PG* [filament:Filatech PC-ABS @PG 0.8] inherits = Filatech PC-ABS; *PC08PG* +[filament:Filatech PC-ABS @MK4] +inherits = Filatech PC-ABS; *PCMK4* + +[filament:Filatech PC-ABS @MK4 0.6] +inherits = Filatech PC-ABS @MK4; *PC06MK4* + +[filament:Filatech PC-ABS @MK4 0.8] +inherits = Filatech PC-ABS @MK4; *PC08MK4* + [filament:Filatech PC-ABS @MK2] inherits = Filatech PC-ABS first_layer_bed_temperature = 105 @@ -5474,7 +6952,7 @@ filament_retract_lift = 0 filament_retract_speed = 40 filament_retract_before_travel = 2 filament_retract_layer_change = 0 -compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PRO1 @PG] inherits = Ultrafuse PRO1; *PLAPG* @@ -5519,6 +6997,15 @@ inherits = Ultrafuse ABS @PG; *ABS06PG* [filament:Ultrafuse ABS @PG 0.8] inherits = Ultrafuse ABS @PG; *ABS08PG* +[filament:Ultrafuse ABS @MK4] +inherits = Ultrafuse ABS; *ABSMK4* + +[filament:Ultrafuse ABS @MK4 0.6] +inherits = Ultrafuse ABS @MK4; *ABS06MK4* + +[filament:Ultrafuse ABS @MK4 0.8] +inherits = Ultrafuse ABS @MK4; *ABS08MK4* + [filament:Ultrafuse ABS @MINI] inherits = Ultrafuse ABS; *ABSMINI* filament_retract_layer_change = nil @@ -5547,6 +7034,15 @@ inherits = Ultrafuse ABS Fusion+ @PG; *ABS06PG* [filament:Ultrafuse ABS Fusion+ @PG 0.8] inherits = Ultrafuse ABS Fusion+ @PG; *ABS08PG* +[filament:Ultrafuse ABS Fusion+ @MK4] +inherits = Ultrafuse ABS Fusion+; *ABSMK4* + +[filament:Ultrafuse ABS Fusion+ @MK4 0.6] +inherits = Ultrafuse ABS Fusion+ @MK4; *ABS06MK4* + +[filament:Ultrafuse ABS Fusion+ @MK4 0.8] +inherits = Ultrafuse ABS Fusion+ @MK4; *ABS08MK4* + [filament:Ultrafuse ABS Fusion+ @MINI] inherits = Ultrafuse ABS Fusion+; *ABSMINI* first_layer_bed_temperature = 100 @@ -5582,6 +7078,18 @@ filament_max_volumetric_speed = 9 inherits = Ultrafuse ASA @PG; *ABS08PG* filament_max_volumetric_speed = 12 +[filament:Ultrafuse ASA @MK4] +inherits = Ultrafuse ASA; *ABSMK4* +filament_max_volumetric_speed = 5 + +[filament:Ultrafuse ASA @MK4 0.6] +inherits = Ultrafuse ASA @MK4; *ABS06MK4* +filament_max_volumetric_speed = 9 + +[filament:Ultrafuse ASA @MK4 0.8] +inherits = Ultrafuse ASA @MK4; *ABS08MK4* +filament_max_volumetric_speed = 12 + [filament:Ultrafuse ASA @MINI] inherits = Ultrafuse ASA; *ABSMINI* filament_type = ASA @@ -5607,6 +7115,15 @@ inherits = Ultrafuse HIPS @PG; *ABS06PG* [filament:Ultrafuse HIPS @PG 0.8] inherits = Ultrafuse HIPS @PG; *ABS08PG* +[filament:Ultrafuse HIPS @MK4] +inherits = Ultrafuse HIPS; *ABSMK4* + +[filament:Ultrafuse HIPS @MK4 0.6] +inherits = Ultrafuse HIPS @MK4; *ABS06MK4* + +[filament:Ultrafuse HIPS @MK4 0.8] +inherits = Ultrafuse HIPS @MK4; *ABS08MK4* + [filament:Ultrafuse HIPS @MINI] inherits = Ultrafuse HIPS; *ABSMINI* filament_type = HIPS @@ -5635,21 +7152,24 @@ filament_retract_before_travel = 2 filament_retract_layer_change = 0 filament_cost = 0 filament_spool_weight = 0 -compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ 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.01{elsif nozzle_diameter[0]==0.6}0.02{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" filament_notes = "Material Description\nThe key features of Ultrafuse PA are the high strength and high modulus. Furthermore, Ultrafuse PA shows a good thermal distortion stability.\n\nPrinting Recommendations:\nApply PVA glue, Kapton tape or PA adhesive to a clean buildplate to improve adhesion." [filament:Ultrafuse PA @PG] inherits = Ultrafuse PA; *ABSPG* filament_max_volumetric_speed = 8 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PA @PG 0.6] inherits = Ultrafuse PA @PG; *ABS06PG* filament_max_volumetric_speed = 10 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PA @PG 0.8] inherits = Ultrafuse PA @PG; *ABS08PG* filament_max_volumetric_speed = 12 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PA6 GF30] inherits = Ultrafuse PA @@ -5673,17 +7193,19 @@ filament_deretract_speed = 30 filament_retract_lift = nil filament_wipe = 0 filament_notes = "Material Description\nUltrafuse® PA6 GF30 is a unique compound specifically developed for FFF printing. Due to the glass fiber content of 30%, parts tend to warp less. In addition the excellent layer adhesion and its compatibility with the water soluble support Ultrafuse® BVOH make this material the perfect solution to develop industrial applications on an FFF printer.\n\nWith its high wear and chemical resistance, high stiffness and strength, Ultrafuse® PA6 GF30 is perfect for a wide variety of applications in automotive, electronics or transportation.\n\nUltrafuse PA6 GF30 is designed for functional prototyping and demanding applications such as industrial tooling, transportation, electronics, small appliances, sports & leisure\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PA6 GF30 can be printed directly onto a clean build plate. For challenging prints, use Magigoo PA gluestick to improve adhesion." -compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PA6 GF30 @PG 0.6] inherits = Ultrafuse PA6 GF30; *ABS06PG* filament_max_volumetric_speed = 10 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PA6 GF30 @PG 0.8] inherits = Ultrafuse PA6 GF30; *ABS08PG* filament_max_volumetric_speed = 14 first_layer_temperature = 275 temperature = 275 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PAHT-CF15] inherits = Ultrafuse PA6 GF30 @@ -5692,9 +7214,11 @@ filament_notes = "Material Description\nPAHT CF15 is a high-performance 3D print [filament:Ultrafuse PAHT-CF15 @PG 0.6] inherits = Ultrafuse PAHT-CF15; *ABS06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PAHT-CF15 @PG 0.8] inherits = Ultrafuse PAHT-CF15; *ABS08PG* +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PC-ABS-FR] inherits = Ultrafuse ABS @@ -5711,7 +7235,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ 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" @@ -5729,6 +7253,18 @@ filament_max_volumetric_speed = 10 inherits = Ultrafuse PC-ABS-FR @PG; *ABS08PG* filament_max_volumetric_speed = 12 +[filament:Ultrafuse PC-ABS-FR @MK4] +inherits = Ultrafuse PC-ABS-FR; *ABSMK4* +filament_max_volumetric_speed = 8 + +[filament:Ultrafuse PC-ABS-FR @MK4 0.6] +inherits = Ultrafuse PC-ABS-FR @MK4; *ABS06MK4* +filament_max_volumetric_speed = 10 + +[filament:Ultrafuse PC-ABS-FR @MK4 0.8] +inherits = Ultrafuse PC-ABS-FR @MK4; *ABS08MK4* +filament_max_volumetric_speed = 12 + [filament:Ultrafuse PET-CF15] inherits = Ultrafuse PET filament_density = 1.36 @@ -5752,7 +7288,7 @@ filament_retract_lift = nil filament_wipe = 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.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" filament_notes = "Material Description\nPET CF15 is a Carbon Fiber reinforced PET which has precisely tuned material properties, for a wide range of technical applications. The filament is very strong and stiff and has high heat resistance. With its high dimensional stability and low abrasiveness, the filament offers an easy to print experience which allows direct printing on glass or a PEI sheet. It is compatible with HiPS for breakaway support and water soluble support and has an excellent surface finish.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PET-CF15 can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion." -compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PET-CF15 @PG 0.6] inherits = Ultrafuse PET; *PET06PG* @@ -5803,19 +7339,22 @@ filament_deretract_speed = 25 filament_retract_layer_change = 0 filament_wipe = nil filament_notes = "Material Description\nUltrafuse PP is high-performance thermoplastic with low density, high elasticity and high resistance to fatigue. The mechanical properties make it an ideal material for 3D-printing applications which have to endure high stress or strain. The filament has high chemical resistance and a high isolation value. PP is one of the most used materials in the world, due to its versatility and ability to engineer lightweight tough parts.\n\nPrinting Recommendations:\nApply PP tape or Magigoo PP adhesive to the buildplate for optimal adhesion." -compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PP @PG] inherits = Ultrafuse PP; *ABSPG* filament_max_volumetric_speed = 2.5 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PP @PG 0.6] inherits = Ultrafuse PP @PG; *ABS06PG* filament_max_volumetric_speed = 4 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PP @PG 0.8] inherits = Ultrafuse PP @PG; *ABS08PG* filament_max_volumetric_speed = 6 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PP-GF30] inherits = Ultrafuse PP @@ -5837,13 +7376,15 @@ filament_deretract_speed = 30 filament_retract_lift = nil filament_wipe = 0 filament_notes = "Ultrafuse PP GF30 is polypropylene, reinforced with 30% glass fiber content. The fibers in this compound are specially designed for 3D-printing filaments and are compatible with a wide range of standard FFF 3D-printers. The extreme stiffness makes this material highly suitable for demanding applications. Other key properties of PPGF30 are high heat resistance and improved UV-resistance. All these excellent properties make this filament highly suitable in an industrial environment.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nApply PP strapping tape or PPGF adhesive to a clean build plate for optimal adhesion." -compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PP-GF30 @PG 0.6] inherits = Ultrafuse PP; *ABS06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse PP-GF30 @PG 0.8] inherits = Ultrafuse PP; *ABS08PG* +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse TPC-45D] inherits = *FLEX* @@ -5934,10 +7475,26 @@ filament_retract_length = 3.5 [filament:Ultrafuse TPU-85A @PG 0.6] inherits = Ultrafuse TPU-85A @PG; *FLEX06PG* -filament_max_volumetric_speed = 6 +filament_max_volumetric_speed = 4 [filament:Ultrafuse TPU-85A @PG 0.8] inherits = Ultrafuse TPU-85A @PG; *FLEX08PG* +filament_max_volumetric_speed = 7 + +[filament:Ultrafuse TPU-85A @MK4] +inherits = Ultrafuse TPU-85A; *FLEXMK4* +filament_max_volumetric_speed = 3 +extrusion_multiplier = 1.1 +first_layer_temperature = 220 +temperature = 215 +filament_retract_length = 3.5 + +[filament:Ultrafuse TPU-85A @MK4 0.6] +inherits = Ultrafuse TPU-85A @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6 + +[filament:Ultrafuse TPU-85A @MK4 0.8] +inherits = Ultrafuse TPU-85A @MK4; *FLEX08MK4* filament_max_volumetric_speed = 8 [filament:Ultrafuse TPU-95A] @@ -5954,10 +7511,23 @@ filament_retract_length = 3 [filament:Ultrafuse TPU-95A @PG 0.6] inherits = Ultrafuse TPU-95A @PG; *FLEX06PG* -filament_max_volumetric_speed = 5 +filament_max_volumetric_speed = 3.5 [filament:Ultrafuse TPU-95A @PG 0.8] inherits = Ultrafuse TPU-95A @PG; *FLEX08PG* +filament_max_volumetric_speed = 6 + +[filament:Ultrafuse TPU-95A @MK4] +inherits = Ultrafuse TPU-95A; *FLEXMK4* +filament_max_volumetric_speed = 2.5 +filament_retract_length = 3 + +[filament:Ultrafuse TPU-95A @MK4 0.6] +inherits = Ultrafuse TPU-95A @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 5 + +[filament:Ultrafuse TPU-95A @MK4 0.8] +inherits = Ultrafuse TPU-95A @MK4; *FLEX08MK4* filament_max_volumetric_speed = 7 [filament:Ultrafuse rPET] @@ -6008,7 +7578,7 @@ cooling = 0 fan_always_on = 0 filament_max_volumetric_speed = 4 filament_type = METAL -compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material start_filament_gcode = "M900 K0" filament_colour = #FFFFFF @@ -6016,11 +7586,13 @@ filament_colour = #FFFFFF inherits = Ultrafuse Metal; *ABSPG*; *04PLUSPG* filament_max_volumetric_speed = 4 start_filament_gcode = "M900 K0" +compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Ultrafuse Metal @PG 0.6] inherits = Ultrafuse Metal @PG; *ABS06PG* filament_max_volumetric_speed = 4 start_filament_gcode = "M900 K0" +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Polymaker PC-Max] inherits = *ABS* @@ -6050,6 +7622,18 @@ filament_max_volumetric_speed = 12 inherits = Polymaker PC-Max @PG; *ABS08PG* filament_max_volumetric_speed = 15 +[filament:Polymaker PC-Max @MK4] +inherits = Polymaker PC-Max; *ABSMK4* +filament_max_volumetric_speed = 8 + +[filament:Polymaker PC-Max @MK4 0.6] +inherits = Polymaker PC-Max @MK4; *ABS06MK4* +filament_max_volumetric_speed = 12 + +[filament:Polymaker PC-Max @MK4 0.8] +inherits = Polymaker PC-Max @MK4; *ABS08MK4* +filament_max_volumetric_speed = 15 + [filament:PrimaSelect PVA+] inherits = *PLA* filament_vendor = PrimaSelect @@ -6086,7 +7670,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusa ABS @PG] inherits = Prusa ABS; *ABSPG* @@ -6100,6 +7684,17 @@ inherits = Prusa ABS @PG; *ABS08PG* first_layer_temperature = 265 temperature = 265 +[filament:Prusa ABS @MK4] +inherits = Prusa ABS; *ABSMK4* + +[filament:Prusa ABS @MK4 0.6] +inherits = Prusa ABS @MK4; *ABS06MK4* + +[filament:Prusa ABS @MK4 0.8] +inherits = Prusa ABS @MK4; *ABS08MK4* +first_layer_temperature = 265 +temperature = 265 + [filament:*ABS MMU2*] inherits = Prusa ABS compatible_printers_condition = nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.25 and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material @@ -6330,7 +7925,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic HIPS] inherits = *ABS* @@ -6350,7 +7945,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic HIPS @PG] inherits = Generic HIPS; *ABSPG* @@ -6362,6 +7957,15 @@ inherits = Generic HIPS @PG; *ABS06PG* [filament:Generic HIPS @PG 0.8] inherits = Generic HIPS @PG; *ABS08PG* +[filament:Generic HIPS @MK4] +inherits = Generic HIPS; *ABSMK4* + +[filament:Generic HIPS @MK4 0.6] +inherits = Generic HIPS @MK4; *ABS06MK4* + +[filament:Generic HIPS @MK4 0.8] +inherits = Generic HIPS @MK4; *ABS08MK4* + [filament:Prusa PETG] inherits = *PET* renamed_from = "Prusa PET" @@ -6369,7 +7973,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_model!="XL" 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 ! single_extruder_multi_material [filament:Prusa PETG @PG] inherits = Prusa PETG; *PETPG* @@ -6386,7 +7990,7 @@ filament_vendor = Verbatim filament_cost = 27.90 filament_density = 1.27 filament_spool_weight = 235 -compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Verbatim PETG @PG] inherits = Verbatim PETG; *PETPG* @@ -6406,7 +8010,7 @@ filament_cost = 36.29 filament_density = 1.27 filament_spool_weight = 201 filament_type = PETG -compatible_printers_condition = nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusament PETG @PG] inherits = Prusament PETG; *PETPG* @@ -6428,7 +8032,7 @@ extrusion_multiplier = 1.03 filament_cost = 54.99 filament_density = 1.27 filament_colour = #BBBBBB -compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and 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:Prusament PETG Carbon Fiber @PG] inherits = Prusament PETG; *PETPG*; *04PLUSPG* @@ -6439,34 +8043,34 @@ inherits = Prusament PETG Carbon Fiber @PG; *PET06PG* [filament:Prusament PETG Carbon Fiber @PG 0.8] inherits = Prusament PETG Carbon Fiber @PG; *PET08PG* -[filament:Prusament PETG Tungsten 75%] -inherits = *PET* -filament_vendor = Prusa Polymers -filament_colour = #BBBBBB -first_layer_temperature = 255 -temperature = 265 -filament_cost = 277.09 -filament_density = 4 -filament_spool_weight = 201 -filament_type = PETG -compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) -cooling = 0 -min_fan_speed = 50 -max_fan_speed = 70 -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.01{else}0{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif nozzle_diameter[0]==0.4}M900 K12{else}M900 K0{endif} ; Filament gcode LA 1.0" +## [filament:Prusament PETG Tungsten 75%] +## inherits = *PET* +## filament_vendor = Prusa Polymers +## filament_colour = #BBBBBB +## first_layer_temperature = 255 +## temperature = 265 +## filament_cost = 277.09 +## filament_density = 4 +## filament_spool_weight = 201 +## filament_type = PETG +## 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) +## cooling = 0 +## min_fan_speed = 50 +## max_fan_speed = 70 +## start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.01{else}0{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif nozzle_diameter[0]==0.4}M900 K12{else}M900 K0{endif} ; Filament gcode LA 1.0" -[filament:Prusament PETG Tungsten 75% @PG] -inherits = Prusament PETG Tungsten 75%; *PETPG* -filament_max_volumetric_speed = 8 -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.01{else}0{endif} ; Filament gcode" +## [filament:Prusament PETG Tungsten 75% @PG] +## inherits = Prusament PETG Tungsten 75%; *PETPG* +## filament_max_volumetric_speed = 8 +## start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.01{else}0{endif} ; Filament gcode" -[filament:Prusament PETG Tungsten 75% @PG 0.6] -inherits = Prusament PETG Tungsten 75% @PG; *PET06PG* -filament_max_volumetric_speed = 9 +## [filament:Prusament PETG Tungsten 75% @PG 0.6] +## inherits = Prusament PETG Tungsten 75% @PG; *PET06PG* +## filament_max_volumetric_speed = 9 -[filament:Prusament PETG Tungsten 75% @PG 0.8] -inherits = Prusament PETG Tungsten 75% @PG; *PET08PG* -filament_max_volumetric_speed = 10 +## [filament:Prusament PETG Tungsten 75% @PG 0.8] +## inherits = Prusament PETG Tungsten 75% @PG; *PET08PG* +## filament_max_volumetric_speed = 10 [filament:Prusa PETG @0.6 nozzle] inherits = *PET06* @@ -6635,7 +8239,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusa PLA @PG] inherits = Prusa PLA; *PLAPG* @@ -6781,6 +8385,17 @@ inherits = Eolas Prints TPU 93A @PG; *FLEX06PG* [filament:Eolas Prints TPU 93A @PG 0.8] inherits = Eolas Prints TPU 93A @PG; *FLEX08PG* +[filament:Eolas Prints TPU 93A @MK4] +inherits = Eolas Prints TPU 93A; *FLEXMK4* +extrusion_multiplier = 1.1 +filament_retract_length = 2.5 + +[filament:Eolas Prints TPU 93A @MK4 0.6] +inherits = Eolas Prints TPU 93A @MK4; *FLEX06MK4* + +[filament:Eolas Prints TPU 93A @MK4 0.8] +inherits = Eolas Prints TPU 93A @MK4; *FLEX08MK4* + [filament:Print With Smile PLA] inherits = *PLA* filament_vendor = Print With Smile @@ -6860,6 +8475,17 @@ inherits = Print With Smile ASA @PG; *ABS08PG* first_layer_temperature = 255 temperature = 255 +[filament:Print With Smile ASA @MK4] +inherits = Print With Smile ASA; *ABSMK4* + +[filament:Print With Smile ASA @MK4 0.6] +inherits = Print With Smile ASA @MK4; *ABS06MK4* + +[filament:Print With Smile ASA @MK4 0.8] +inherits = Print With Smile ASA @MK4; *ABS08MK4* +first_layer_temperature = 255 +temperature = 255 + [filament:Print With Smile ABS] inherits = *ABSC* filament_vendor = Print With Smile @@ -6882,6 +8508,15 @@ inherits = Print With Smile ABS @PG; *ABS06PG* [filament:Print With Smile ABS @PG 0.8] inherits = Print With Smile ABS @PG; *ABS08PG* +[filament:Print With Smile ABS @MK4] +inherits = Print With Smile ABS; *ABSMK4* + +[filament:Print With Smile ABS @MK4 0.6] +inherits = Print With Smile ABS @MK4; *ABS06MK4* + +[filament:Print With Smile ABS @MK4 0.8] +inherits = Print With Smile ABS @MK4; *ABS08MK4* + [filament:Print With Smile PETG CF] inherits = Extrudr XPETG CF filament_vendor = Print With Smile @@ -6930,14 +8565,27 @@ filament_deretract_speed = 20 [filament:Print With Smile TPU96A @PG] inherits = Print With Smile TPU96A; *FLEXPG* filament_retract_length = 2 -filament_max_volumetric_speed = 3 +filament_max_volumetric_speed = 2.5 [filament:Print With Smile TPU96A @PG 0.6] inherits = Print With Smile TPU96A @PG; *FLEX06PG* -filament_max_volumetric_speed = 5 +filament_max_volumetric_speed = 3.5 [filament:Print With Smile TPU96A @PG 0.8] inherits = Print With Smile TPU96A @PG; *FLEX08PG* +filament_max_volumetric_speed = 7 + +[filament:Print With Smile TPU96A @MK4] +inherits = Print With Smile TPU96A; *FLEXMK4* +filament_retract_length = 2 +filament_max_volumetric_speed = 3 + +[filament:Print With Smile TPU96A @MK4 0.6] +inherits = Print With Smile TPU96A @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 5 + +[filament:Print With Smile TPU96A @MK4 0.8] +inherits = Print With Smile TPU96A @MK4; *FLEX08MK4* filament_max_volumetric_speed = 8 [filament:Fiberlogy Easy PLA] @@ -6966,7 +8614,7 @@ filament_vendor = Fiberlogy filament_spool_weight = 330 filament_cost = 20 filament_density = 1.27 -compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material first_layer_bed_temperature = 80 bed_temperature = 80 first_layer_temperature = 235 @@ -7019,6 +8667,15 @@ inherits = Fiberlogy ASA @PG; *ABS06PG* [filament:Fiberlogy ASA @PG 0.8] inherits = Fiberlogy ASA @PG; *ABS08PG* +[filament:Fiberlogy ASA @MK4] +inherits = Fiberlogy ASA; *ABSMK4* + +[filament:Fiberlogy ASA @MK4 0.6] +inherits = Fiberlogy ASA @MK4; *ABS06MK4* + +[filament:Fiberlogy ASA @MK4 0.8] +inherits = Fiberlogy ASA @MK4; *ABS08MK4* + [filament:Fiberlogy ASA @MINI] inherits = Fiberlogy ASA; *ABSMINI* @@ -7042,12 +8699,15 @@ disable_fan_first_layers = 5 [filament:Fiberlogy Easy ABS @PG] inherits = Fiberlogy Easy ABS; *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:Fiberlogy Easy ABS @PG 0.6] inherits = Fiberlogy Easy ABS; *ABS06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberlogy Easy ABS @PG 0.8] inherits = Fiberlogy Easy ABS; *ABS08PG* +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberlogy Easy ABS @MINI] inherits = Fiberlogy Easy ABS; *ABSMINI* @@ -7139,7 +8799,7 @@ filament_spool_weight = 330 [filament:Fiberlogy FiberFlex 40D @PG] inherits = Fiberlogy FiberFlex 40D; *FLEXPG* -filament_max_volumetric_speed = 4 +filament_max_volumetric_speed = 3 filament_retract_length = 2.2 extrusion_multiplier = 1.1 first_layer_temperature = 220 @@ -7147,10 +8807,26 @@ temperature = 220 [filament:Fiberlogy FiberFlex 40D @PG 0.6] inherits = Fiberlogy FiberFlex 40D @PG; *FLEX06PG* -filament_max_volumetric_speed = 6 +filament_max_volumetric_speed = 4.5 [filament:Fiberlogy FiberFlex 40D @PG 0.8] inherits = Fiberlogy FiberFlex 40D @PG; *FLEX08PG* +filament_max_volumetric_speed = 9 + +[filament:Fiberlogy FiberFlex 40D @MK4] +inherits = Fiberlogy FiberFlex 40D; *FLEXMK4* +filament_max_volumetric_speed = 4 +filament_retract_length = 2.2 +extrusion_multiplier = 1.1 +first_layer_temperature = 220 +temperature = 220 + +[filament:Fiberlogy FiberFlex 40D @MK4 0.6] +inherits = Fiberlogy FiberFlex 40D @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6 + +[filament:Fiberlogy FiberFlex 40D @MK4 0.8] +inherits = Fiberlogy FiberFlex 40D @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:Fiberlogy FiberFlex 40D @MINI] @@ -7184,15 +8860,28 @@ filament_retract_length = 1.2 [filament:Fiberlogy MattFlex 40D @PG] inherits = Fiberlogy MattFlex 40D; *FLEXPG* -filament_max_volumetric_speed = 4 +filament_max_volumetric_speed = 3 filament_retract_length = 2.2 [filament:Fiberlogy MattFlex 40D @PG 0.6] inherits = Fiberlogy MattFlex 40D @PG; *FLEX06PG* -filament_max_volumetric_speed = 6 +filament_max_volumetric_speed = 4.5 [filament:Fiberlogy MattFlex 40D @PG 0.8] inherits = Fiberlogy MattFlex 40D @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:Fiberlogy MattFlex 40D @MK4] +inherits = Fiberlogy MattFlex 40D; *FLEXMK4* +filament_max_volumetric_speed = 4 +filament_retract_length = 2.2 + +[filament:Fiberlogy MattFlex 40D @MK4 0.6] +inherits = Fiberlogy MattFlex 40D @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 6 + +[filament:Fiberlogy MattFlex 40D @MK4 0.8] +inherits = Fiberlogy MattFlex 40D @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:Fiberlogy FiberFlex 30D] @@ -7208,7 +8897,7 @@ filament_retract_length = 1.2 [filament:Fiberlogy FiberFlex 30D @PG] inherits = Fiberlogy FiberFlex 30D; *FLEXPG* -filament_max_volumetric_speed = 3.5 +filament_max_volumetric_speed = 2.5 filament_retract_length = 3 first_layer_temperature = 220 temperature = 220 @@ -7218,10 +8907,28 @@ extrusion_multiplier = 1.1 [filament:Fiberlogy FiberFlex 30D @PG 0.6] inherits = Fiberlogy FiberFlex 30D @PG; *FLEX06PG* -filament_max_volumetric_speed = 7 +filament_max_volumetric_speed = 5 [filament:Fiberlogy FiberFlex 30D @PG 0.8] inherits = Fiberlogy FiberFlex 30D @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:Fiberlogy FiberFlex 30D @MK4] +inherits = Fiberlogy FiberFlex 30D; *FLEXMK4* +filament_max_volumetric_speed = 3.5 +filament_retract_length = 3 +first_layer_temperature = 220 +temperature = 220 +first_layer_bed_temperature = 55 +bed_temperature = 55 +extrusion_multiplier = 1.1 + +[filament:Fiberlogy FiberFlex 30D @MK4 0.6] +inherits = Fiberlogy FiberFlex 30D @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 7 + +[filament:Fiberlogy FiberFlex 30D @MK4 0.8] +inherits = Fiberlogy FiberFlex 30D @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:Fiberlogy FiberSatin] @@ -7367,6 +9074,18 @@ filament_max_volumetric_speed = 8 inherits = Fiberlogy Nylon PA12 @PG; *ABS08PG* filament_max_volumetric_speed = 11 +[filament:Fiberlogy Nylon PA12 @MK4] +inherits = Fiberlogy Nylon PA12; *ABSMK4* +filament_max_volumetric_speed = 6 + +[filament:Fiberlogy Nylon PA12 @MK4 0.6] +inherits = Fiberlogy Nylon PA12 @MK4; *ABS06MK4* +filament_max_volumetric_speed = 8 + +[filament:Fiberlogy Nylon PA12 @MK4 0.8] +inherits = Fiberlogy Nylon PA12 @MK4; *ABS08MK4* +filament_max_volumetric_speed = 11 + [filament:Fiberlogy Nylon PA12+CF15] inherits = Fiberlogy Nylon PA12 extrusion_multiplier = 0.97 @@ -7382,13 +9101,14 @@ fan_below_layer_time = 20 bridge_fan_speed = 30 fan_always_on = 0 filament_max_volumetric_speed = 8 -compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Fiberlogy Nylon PA12+CF15 @PG] inherits = Fiberlogy Nylon PA12+CF15; *ABSPG*; *04PLUSPG* first_layer_bed_temperature = 100 bed_temperature = 105 filament_max_volumetric_speed = 8 +compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=="XL" and ! single_extruder_multi_material [filament:Fiberlogy Nylon PA12+CF15 @PG 0.6] inherits = Fiberlogy Nylon PA12+CF15 @PG; *ABS06PG* @@ -7398,6 +9118,19 @@ filament_max_volumetric_speed = 10 inherits = Fiberlogy Nylon PA12+CF15 @PG; *ABS08PG* filament_max_volumetric_speed = 12 +[filament:Fiberlogy Nylon PA12+CF15 @MK4] +inherits = Fiberlogy Nylon PA12+CF15; *ABSMK4*; *04PLUSPG* +filament_max_volumetric_speed = 8 +compatible_printers_condition = nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_model=="MK4" and ! single_extruder_multi_material + +[filament:Fiberlogy Nylon PA12+CF15 @MK4 0.6] +inherits = Fiberlogy Nylon PA12+CF15 @MK4; *ABS06MK4* +filament_max_volumetric_speed = 10 + +[filament:Fiberlogy Nylon PA12+CF15 @MK4 0.8] +inherits = Fiberlogy Nylon PA12+CF15 @MK4; *ABS08MK4* +filament_max_volumetric_speed = 12 + [filament:Fiberlogy Nylon PA12+GF15] inherits = Fiberlogy Nylon PA12+CF15 filament_density = 1.13 @@ -7415,6 +9148,18 @@ filament_density = 1.13 inherits = Fiberlogy Nylon PA12+CF15 @PG 0.8 filament_density = 1.13 +[filament:Fiberlogy Nylon PA12+GF15 @MK4] +inherits = Fiberlogy Nylon PA12+CF15 @MK4 +filament_density = 1.13 + +[filament:Fiberlogy Nylon PA12+GF15 @MK4 0.6] +inherits = Fiberlogy Nylon PA12+CF15 @MK4 0.6 +filament_density = 1.13 + +[filament:Fiberlogy Nylon PA12+GF15 @MK4 0.8] +inherits = Fiberlogy Nylon PA12+CF15 @MK4 0.8 +filament_density = 1.13 + [filament:Fiberlogy PP] inherits = *ABS* filament_vendor = Fiberlogy @@ -7441,16 +9186,19 @@ filament_max_volumetric_speed = 5 [filament:Fiberlogy PP @PG] inherits = Fiberlogy PP; *ABSPG* filament_max_volumetric_speed = 5 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberlogy PP @PG 0.6] inherits = Fiberlogy PP @PG; *ABS06PG* filament_max_volumetric_speed = 7 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberlogy PP @PG 0.8] inherits = Fiberlogy PP @PG; *ABS08PG* filament_max_volumetric_speed = 10 first_layer_temperature = 250 temperature = 250 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Filament PM PLA] inherits = *PLA* @@ -7602,7 +9350,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusament PLA @PG] inherits = Prusament PLA; *PLAPG* @@ -7629,7 +9377,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_notes!~/.*PG.*/ 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" @@ -7743,16 +9491,30 @@ filament_deretract_speed = 20 [filament:Fillamentum Flexfill 98A @PG] inherits = Fillamentum Flexfill 98A; *FLEXPG* -filament_max_volumetric_speed = 3 +filament_max_volumetric_speed = 2.5 filament_retract_length = 3 extrusion_multiplier = 1.08 [filament:Fillamentum Flexfill 98A @PG 0.6] inherits = Fillamentum Flexfill 98A @PG; *FLEX06PG* -filament_max_volumetric_speed = 5 +filament_max_volumetric_speed = 3 [filament:Fillamentum Flexfill 98A @PG 0.8] inherits = Fillamentum Flexfill 98A @PG; *FLEX08PG* +filament_max_volumetric_speed = 8 + +[filament:Fillamentum Flexfill 98A @MK4] +inherits = Fillamentum Flexfill 98A; *FLEXMK4* +filament_max_volumetric_speed = 3 +filament_retract_length = 3 +extrusion_multiplier = 1.08 + +[filament:Fillamentum Flexfill 98A @MK4 0.6] +inherits = Fillamentum Flexfill 98A @MK4; *FLEX06MK4* +filament_max_volumetric_speed = 4 + +[filament:Fillamentum Flexfill 98A @MK4 0.8] +inherits = Fillamentum Flexfill 98A @MK4; *FLEX08MK4* filament_max_volumetric_speed = 10 [filament:ColorFabb VarioShore TPU] @@ -7770,6 +9532,10 @@ temperature = 220 inherits = ColorFabb VarioShore TPU; *FLEXPG* filament_max_volumetric_speed = 1.5 +[filament:ColorFabb VarioShore TPU @MK4] +inherits = ColorFabb VarioShore TPU; *FLEXMK4* +filament_max_volumetric_speed = 1.5 + [filament:Taulman Bridge] inherits = *common* filament_vendor = Taulman @@ -7791,7 +9557,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Taulman Bridge @PG] inherits = Taulman Bridge; *ABSPG* @@ -7808,6 +9574,20 @@ filament_max_volumetric_speed = 12 first_layer_temperature = 270 temperature = 270 +[filament:Taulman Bridge @MK4] +inherits = Taulman Bridge; *ABSMK4* +filament_max_volumetric_speed = 7 + +[filament:Taulman Bridge @MK4 0.6] +inherits = Taulman Bridge @MK4; *ABS06MK4* +filament_max_volumetric_speed = 9 + +[filament:Taulman Bridge @MK4 0.8] +inherits = Taulman Bridge @MK4; *ABS08MK4* +filament_max_volumetric_speed = 12 +first_layer_temperature = 270 +temperature = 270 + [filament:Taulman Bridge @MINI] inherits = Taulman Bridge bed_temperature = 90 @@ -7844,14 +9624,17 @@ temperature = 250 [filament:Fillamentum Nylon FX256 @PG] inherits = Fillamentum Nylon FX256; *PAPG* filament_max_volumetric_speed = 6 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fillamentum Nylon FX256 @PG 0.6] inherits = Fillamentum Nylon FX256 @PG; *PA06PG* filament_max_volumetric_speed = 8 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fillamentum Nylon FX256 @PG 0.8] inherits = Fillamentum Nylon FX256 @PG; *PA08PG* filament_max_volumetric_speed = 11 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA Pure Pro] inherits = *common* @@ -7881,19 +9664,28 @@ filament_retract_speed = 40 filament_retract_lift = nil filament_retract_before_travel = 1.5 filament_wipe = 0 -compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA Pure Pro @PG] inherits = Fiberthree F3 PA Pure Pro; *PAPG* filament_max_volumetric_speed = 5 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA Pure Pro @PG 0.6] inherits = Fiberthree F3 PA Pure Pro @PG; *PA06PG* filament_max_volumetric_speed = 7 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA Pure Pro @PG 0.8] inherits = Fiberthree F3 PA Pure Pro @PG; *PA08PG* filament_max_volumetric_speed = 10 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-CF Pro] inherits = *common* @@ -7923,19 +9715,28 @@ filament_retract_speed = 40 filament_retract_lift = nil filament_retract_before_travel = 1.5 filament_wipe = 0 -compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Fiberthree F3 PA-CF Pro @PG] inherits = Fiberthree F3 PA-CF Pro; *PAPG* filament_max_volumetric_speed = 5 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-CF Pro @PG 0.6] inherits = Fiberthree F3 PA-CF Pro; *PA06PG* filament_max_volumetric_speed = 7 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-CF Pro @PG 0.8] inherits = Fiberthree F3 PA-CF Pro; *PA08PG* filament_max_volumetric_speed = 10 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-GF Pro] inherits = Fiberthree F3 PA-CF Pro @@ -7949,14 +9750,23 @@ min_fan_speed = 15 [filament:Fiberthree F3 PA-GF Pro @PG] inherits = Fiberthree F3 PA-GF Pro; *PAPG* filament_max_volumetric_speed = 5 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-GF Pro @PG 0.6] inherits = Fiberthree F3 PA-GF Pro @PG; *PA06PG* filament_max_volumetric_speed = 7 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-GF Pro @PG 0.8] inherits = Fiberthree F3 PA-GF Pro @PG; *PA08PG* filament_max_volumetric_speed = 10 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-GF30 Pro] inherits = Prusament PC Blend Carbon Fiber @@ -7969,7 +9779,7 @@ temperature = 285 first_layer_bed_temperature = 90 bed_temperature = 90 fan_below_layer_time = 10 -compatible_printers_condition = printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material max_fan_speed = 15 min_fan_speed = 15 filament_type = PA @@ -7978,14 +9788,23 @@ filament_max_volumetric_speed = 6 [filament:Fiberthree F3 PA-GF30 Pro @PG] inherits = Fiberthree F3 PA-GF30 Pro; *PAPG* filament_max_volumetric_speed = 6 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-GF30 Pro @PG 0.6] inherits = Fiberthree F3 PA-GF30 Pro @PG; *PA06PG* filament_max_volumetric_speed = 7.5 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Fiberthree F3 PA-GF30 Pro @PG 0.8] inherits = Fiberthree F3 PA-GF30 Pro @PG; *PA08PG* filament_max_volumetric_speed = 10 +bed_temperature = 90 +first_layer_bed_temperature = 90 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Taulman T-Glase] inherits = *PET* @@ -8003,12 +9822,15 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no [filament:Taulman T-Glase @PG] inherits = Taulman T-Glase; *PAPG* +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Taulman T-Glase @PG 0.6] inherits = Taulman T-Glase @PG; *PA06PG* +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Taulman T-Glase @PG 0.8] inherits = Taulman T-Glase @PG; *PA08PG* +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Verbatim PLA] inherits = *PLA* @@ -8055,14 +9877,17 @@ temperature = 210 [filament:Verbatim BVOH @PG] inherits = Verbatim BVOH; *ABSPG* filament_max_volumetric_speed = 4 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Verbatim BVOH @PG 0.6] inherits = Verbatim BVOH @PG; *ABS06PG* filament_max_volumetric_speed = 6 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Verbatim BVOH @PG 0.8] inherits = Verbatim BVOH @PG; *ABS08PG* filament_max_volumetric_speed = 9 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Verbatim BVOH @MMU2] inherits = Verbatim BVOH @@ -8148,14 +9973,17 @@ temperature = 220 [filament:Verbatim PP @PG] inherits = Verbatim PP; *ABSPG* filament_max_volumetric_speed = 5 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Verbatim PP @PG 0.6] inherits = Verbatim PP @PG; *ABS06PG* filament_max_volumetric_speed = 7 +compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:Verbatim PP @PG 0.8] inherits = Verbatim PP @PG; *ABS08PG* filament_max_volumetric_speed = 10 +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes=~/.*PG.*/ and ! single_extruder_multi_material [filament:FormFutura Centaur PP] inherits = *common* @@ -8181,7 +10009,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_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]>=0.35 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:FormFutura Centaur PP @PG] inherits = FormFutura Centaur PP; *PETPG* @@ -8437,12 +10265,12 @@ filament_cost = 54.99 filament_colour = #BBBBBB compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]>=0.4 and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 -[filament:Prusament PETG Tungsten 75% @MINI] -inherits = Prusament PETG Tungsten 75%; *PETMINI* -full_fan_speed_layer = 5 -start_filament_gcode = "M900 K0" -filament_colour = #BBBBBB -compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI" +## [filament:Prusament PETG Tungsten 75% @MINI] +## inherits = Prusament PETG Tungsten 75%; *PETMINI* +## full_fan_speed_layer = 5 +## start_filament_gcode = "M900 K0" +## filament_colour = #BBBBBB +## compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI" [filament:Kimya PETG Carbon @MINI] inherits = Kimya PETG Carbon; *PETMINI* @@ -8697,14 +10525,14 @@ first_layer_temperature = 220 temperature = 220 filament_max_volumetric_speed = 15 slowdown_below_layer_time = 20 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic ABS @0.8 nozzle] inherits = Generic ABS first_layer_temperature = 265 temperature = 265 filament_max_volumetric_speed = 15 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic PETG @0.8 nozzle] inherits = Generic PETG @@ -8713,7 +10541,7 @@ temperature = 250 filament_max_volumetric_speed = 20 filament_retract_lift = 0.2 slowdown_below_layer_time = 20 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Prusa PLA @0.8 nozzle] inherits = Prusa PLA @@ -8721,7 +10549,7 @@ first_layer_temperature = 220 temperature = 220 filament_max_volumetric_speed = 15 slowdown_below_layer_time = 20 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusa PETG @0.8 nozzle] inherits = Prusa PETG @@ -8729,26 +10557,26 @@ first_layer_temperature = 240 temperature = 250 filament_max_volumetric_speed = 20 slowdown_below_layer_time = 20 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Prusa ABS @0.8 nozzle] inherits = Prusa ABS first_layer_temperature = 265 temperature = 265 filament_max_volumetric_speed = 15 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Generic FLEX @0.8 nozzle] inherits = Generic FLEX filament_max_volumetric_speed = 4.3 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Generic HIPS @0.8 nozzle] inherits = Generic HIPS first_layer_temperature = 240 temperature = 240 filament_max_volumetric_speed = 15 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusament PLA @0.8 nozzle] inherits = Prusament PLA @@ -8756,7 +10584,7 @@ first_layer_temperature = 225 temperature = 225 filament_max_volumetric_speed = 15 slowdown_below_layer_time = 20 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusament PETG @0.8 nozzle] inherits = Prusament PETG @@ -8765,7 +10593,7 @@ temperature = 260 filament_max_volumetric_speed = 20 filament_retract_lift = 0.2 slowdown_below_layer_time = 20 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Prusament PETG Carbon Fiber @0.8 nozzle] inherits = Prusament PETG @0.8 nozzle @@ -8781,64 +10609,64 @@ first_layer_temperature = 265 temperature = 265 filament_max_volumetric_speed = 15 slowdown_below_layer_time = 20 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material [filament:Prusament PC Blend @0.8 nozzle] inherits = Prusament PC Blend filament_max_volumetric_speed = 13 filament_retract_lift = 0.25 -compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Prusament PC Blend Carbon Fiber @0.8 nozzle] inherits = Prusament PC Blend Carbon Fiber filament_max_volumetric_speed = 13 filament_retract_lift = 0.25 -compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Prusament PA11 Carbon Fiber @0.8 nozzle] inherits = Prusament PA11 Carbon Fiber filament_max_volumetric_speed = 11 -compatible_printers_condition = printer_notes!~/.*PRINTER_MODEL_MK(2|2.5).*/ and nozzle_diameter[0]==0.8 and printer_model!="MINI" and printer_model!="XL" 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 ! single_extruder_multi_material [filament:Prusament PA11 Carbon Fiber @0.8 nozzle MK2] inherits = Prusament PA11 Carbon Fiber @MK2 filament_max_volumetric_speed = 11 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_model!="XL" and printer_notes=~/.*PRINTER_MODEL_MK(2|2.5).*/ and ! (printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2|2.5).*/ and ! (printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and single_extruder_multi_material) [filament:Prusament PC Blend @0.8 nozzle MK2] inherits = Prusament PC Blend @MK2 filament_max_volumetric_speed = 13 filament_retract_lift = 0.25 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_model!="XL" and printer_notes=~/.*PRINTER_MODEL_MK(2|2.5).*/ and ! (printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and single_extruder_multi_material) +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="MK2SMM" and printer_notes!~/.*PG.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2|2.5).*/ and ! (printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and single_extruder_multi_material) [filament:Prusament PVB @0.8 nozzle] inherits = Prusament PVB first_layer_temperature = 225 temperature = 225 filament_max_volumetric_speed = 15 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and ! single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_notes!~/.*PG.*/ and ! single_extruder_multi_material slowdown_below_layer_time = 20 ## Filaments 0.8 nozzle MMU2 [filament:Generic HIPS @MMU2 0.8 nozzle] inherits = Generic HIPS @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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 ASA @MMU2 0.8 nozzle] inherits = Prusament ASA @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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 filament_max_volumetric_speed = 14 [filament:Prusament PC Blend @MMU2 0.8 nozzle] inherits = Prusament PC Blend @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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_max_volumetric_speed = 12 [filament:Generic PETG @MMU2 0.8 nozzle] inherits = Generic PETG @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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_max_volumetric_speed = 18 first_layer_temperature = 240 temperature = 240 @@ -8847,7 +10675,7 @@ filament_ramming_parameters = "120 140 5.51613 5.6129 5.70968 5.77419 5.77419 5. [filament:Prusament PETG @MMU2 0.8 nozzle] inherits = Prusament PETG @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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_max_volumetric_speed = 18 first_layer_temperature = 240 temperature = 240 @@ -8864,26 +10692,26 @@ filament_colour = #BBBBBB [filament:Generic PLA @MMU2 0.8 nozzle] inherits = Generic PLA @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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_max_volumetric_speed = 14 first_layer_temperature = 215 temperature = 210 [filament:Prusament PLA @MMU2 0.8 nozzle] inherits = Prusament PLA @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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_max_volumetric_speed = 14 first_layer_temperature = 215 temperature = 210 [filament:Verbatim BVOH @MMU2 0.8 nozzle] inherits = Verbatim BVOH @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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_max_volumetric_speed = 8 [filament:PrimaSelect PVA+ @MMU2 0.8 nozzle] inherits = PrimaSelect PVA+ @MMU2 -compatible_printers_condition = nozzle_diameter[0]==0.8 and printer_model!="XL" and printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material +compatible_printers_condition = nozzle_diameter[0]==0.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_max_volumetric_speed = 8 ## Filaments 0.8 nozzle MINI @@ -9413,6 +11241,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #EC0000 +[sla_material:Prusament Resin Model Solid Grey @0.025] +inherits = *common 0.025* +exposure_time = 4.5 +initial_exposure_time = 35 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #9C9D9D + +[sla_material:Prusament Resin Model Alabaster White @0.025] +inherits = *common 0.025* +exposure_time = 4.5 +initial_exposure_time = 30 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #D6D7D8 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.025] inherits = *common 0.025* exposure_time = 7 @@ -10426,6 +12270,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #EC0000 +[sla_material:Prusament Resin Model Solid Grey @0.05] +inherits = *common 0.05* +exposure_time = 5 +initial_exposure_time = 35 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #9C9D9D + +[sla_material:Prusament Resin Model Alabaster White @0.05] +inherits = *common 0.05* +exposure_time = 5 +initial_exposure_time = 30 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #D6D7D8 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.05] inherits = *common 0.05* exposure_time = 8 @@ -10878,6 +12738,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #3AD200 +[sla_material:Prusament Resin Model Solid Grey @0.1] +inherits = *common 0.1* +exposure_time = 13 +initial_exposure_time = 45 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #9C9D9D + +[sla_material:Prusament Resin Model Alabaster White @0.1] +inherits = *common 0.1* +exposure_time = 13 +initial_exposure_time = 45 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #D6D7D8 + [sla_material:Prusament Resin BioBased60 Magma Red @0.1] inherits = *common 0.1* exposure_time = 13 @@ -11134,6 +13010,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #EC0000 +[sla_material:Prusament Resin Model Solid Grey @0.025 SL1S] +inherits = *0.025_sl1s* +exposure_time = 2 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #9C9D9D + +[sla_material:Prusament Resin Model Alabaster White @0.025 SL1S] +inherits = *0.025_sl1s* +exposure_time = 2 +initial_exposure_time = 20 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #D6D7D8 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.025 SL1S] inherits = *0.025_sl1s* exposure_time = 3.5 @@ -11612,6 +13504,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #EC0000 +[sla_material:Prusament Resin Model Solid Grey @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.2 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #9C9D9D + +[sla_material:Prusament Resin Model Alabaster White @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.2 +initial_exposure_time = 20 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #D6D7D8 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.05 SL1S] inherits = *0.05_sl1s* exposure_time = 4 @@ -12294,6 +14202,30 @@ material_type = Tough material_vendor = 3DJake material_colour = #007EFD +[sla_material:LOCTITE 3D IND475 @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 4 +initial_exposure_time = 15 +material_type = Flexible +material_vendor = Henkel +material_colour = #FFFFFF + +[sla_material:LOCTITE 3D PRO476 @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 7 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Henkel +material_colour = #595959 + +[sla_material:LOCTITE 3D 3843 HDT60 High Toughness @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 13 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Henkel +material_colour = #595959 + ## 0.1 SL1S ## Prusa Polymers 0.1 @@ -12394,6 +14326,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #EC0000 +[sla_material:Prusament Resin Model Solid Grey @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 2.8 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #9C9D9D + +[sla_material:Prusament Resin Model Alabaster White @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 2.8 +initial_exposure_time = 20 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #D6D7D8 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.1 SL1S] inherits = *0.1_sl1s* exposure_time = 5 @@ -12754,6 +14702,30 @@ material_type = Tough material_vendor = 3DJake material_colour = #007EFD +[sla_material:LOCTITE 3D IND475 @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 6.5 +initial_exposure_time = 15 +material_type = Flexible +material_vendor = Henkel +material_colour = #FFFFFF + +[sla_material:LOCTITE 3D PRO476 @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 9 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Henkel +material_colour = #595959 + +[sla_material:LOCTITE 3D 3843 HDT60 High Toughness @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 18 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Henkel +material_colour = #595959 + [printer:*common*] printer_technology = FFF bed_shape = 0x0,250x0,250x210,0x210 @@ -13577,7 +15549,7 @@ max_layer_height = 0.25 min_layer_height = 0.07 silent_mode = 0 remaining_times = 1 -printer_notes = PRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XL\nPG +printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XL\nPG retract_lift_below = 359 retract_speed = 35 deretract_speed = 25 @@ -13643,13 +15615,120 @@ machine_max_acceleration_travel = 1500 inherits = *commonXL* printer_variant = 0.8 nozzle_diameter = 0.8 -retract_length = 0.8 +retract_length = 0.6 +retract_before_wipe = 50% retract_lift = 0.25 +retract_speed = 25 +deretract_speed = 15 max_layer_height = 0.6 min_layer_height = 0.2 default_print_profile = 0.40mm QUALITY @XL 0.8 default_filament_profile = "Prusament PLA @PG 0.8" +[printer:*commonMK4*] +inherits = *common* +bed_shape = 0x0,250x0,250x210,0x210 +max_print_height = 220 +printer_variant = 0.4 +printer_model = MK4 +nozzle_diameter = 0.4 +end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] +machine_limits_usage = emit_to_gcode +machine_max_acceleration_e = 2500 +machine_max_acceleration_extruding = 2000 +machine_max_acceleration_retracting = 1200 +machine_max_acceleration_travel = 2000 +machine_max_acceleration_x = 2500 +machine_max_acceleration_y = 2500 +machine_max_acceleration_z = 200 +machine_max_feedrate_e = 100 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 40 +machine_max_jerk_e = 10 +machine_max_jerk_x = 8 +machine_max_jerk_y = 8 +machine_max_jerk_z = 2 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +max_layer_height = 0.25 +min_layer_height = 0.07 +silent_mode = 0 +remaining_times = 1 +printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK4\nPG +retract_lift_below = 219 +retract_speed = 35 +deretract_speed = 25 +retract_before_travel = 1.5 +retract_before_wipe = 80% +retract_layer_change = 1 +retract_length = 0.8 +start_gcode = M17 ; enable steppers\nM862.3 P "[printer_model]" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]=="PC" or filament_type[initial_tool]=="NYLON"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]=="FLEX"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\n; probe to clean the nozzle\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)+32} Y{((first_layer_print_min[1]) - 4)} Z{5} F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{32} H{4}\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} Z{40} F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 ; mesh bed leveling\nM104 S[first_layer_temperature] ; set extruder temp\nG0 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5} Z{30} F4800\n\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 Z0.2 F720\nG92 E0\n\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\n{if filament_type[initial_tool]=="FLEX"}\nG1 E4 F2400 ; deretraction\n{else}\nG1 E2 F2400 ; deretraction\n{endif}\n\n; move right\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32) + 32} E{32 * 0.15} F1000\n; move down\nG1 Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5} E{1.5 * 0.15} F1000\n; move left\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} E{32 * 0.30} F800\n\nG92 E0\nM221 S100 ; set flow to 100% +default_print_profile = 0.20mm QUALITY @MK4 0.4 +default_filament_profile = "Prusament PLA @PG" +thumbnails = 16x16,313x173,440x240 +thumbnails_format = PNG +gcode_flavor = marlin2 +high_current_on_filament_swap = 0 +retract_lift = 0.2 + +[printer:Original Prusa MK4 0.4 nozzle] +inherits = *commonMK4* +max_layer_height = 0.30 + +[printer:Original Prusa MK4 0.6 nozzle] +inherits = *commonMK4* +printer_variant = 0.6 +nozzle_diameter = 0.6 +retract_length = 0.7 +retract_lift = 0.2 +max_layer_height = 0.40 +min_layer_height = 0.15 +default_print_profile = 0.25mm QUALITY @MK4 0.6 + +[printer:Original Prusa MK4 0.5 nozzle] +inherits = *commonMK4* +printer_variant = 0.5 +nozzle_diameter = 0.5 +retract_length = 0.7 +max_layer_height = 0.32 +min_layer_height = 0.07 +default_print_profile = 0.20mm QUALITY @MK4 0.5 + +[printer:Original Prusa MK4 0.3 nozzle] +inherits = *commonMK4* +printer_variant = 0.3 +nozzle_diameter = 0.3 +retract_length = 0.7 +max_layer_height = 0.22 +min_layer_height = 0.05 +default_print_profile = 0.16mm QUALITY @MK4 0.3 + +[printer:Original Prusa MK4 0.25 nozzle] +inherits = *commonMK4* +printer_variant = 0.25 +nozzle_diameter = 0.25 +retract_length = 0.8 +retract_lift = 0.15 +max_layer_height = 0.15 +min_layer_height = 0.05 +default_print_profile = 0.12mm QUALITY @MK4 0.25 +machine_max_acceleration_travel = 1500 + +[printer:Original Prusa MK4 0.8 nozzle] +inherits = *commonMK4* +printer_variant = 0.8 +nozzle_diameter = 0.8 +retract_length = 0.6 +retract_before_wipe = 50% +retract_lift = 0.25 +retract_speed = 25 +deretract_speed = 15 +max_layer_height = 0.6 +min_layer_height = 0.2 +default_print_profile = 0.40mm QUALITY @MK4 0.8 +default_filament_profile = "Prusament PLA @PG 0.8" + [printer:Original Prusa SL1] printer_technology = SLA printer_model = SL1 diff --git a/src/libnest2d/include/libnest2d/nester.hpp b/src/libnest2d/include/libnest2d/nester.hpp index 52c738a4c1..78da28759c 100644 --- a/src/libnest2d/include/libnest2d/nester.hpp +++ b/src/libnest2d/include/libnest2d/nester.hpp @@ -70,6 +70,7 @@ class _Item { int binid_{BIN_ID_UNSET}, priority_{0}; bool fixed_{false}; + std::function on_packed_; public: @@ -205,6 +206,23 @@ public: sl::vertex(sh_, idx) = v; } + void setShape(RawShape rsh) + { + sh_ = std::move(rsh); + invalidateCache(); + } + + void setOnPackedFn(std::function onpackedfn) + { + on_packed_ = onpackedfn; + } + + void onPacked() + { + if (on_packed_) + on_packed_(*this); + } + /** * @brief Calculate the shape area. * diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index a17d549822..0ef0929e16 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -901,6 +901,7 @@ public: if(can_pack) { ret = PackResult(item); + item.onPacked(); merged_pile_ = nfp::merge(merged_pile_, item.transformedShape()); } else { ret = PackResult(best_overfit); diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index cd58f34c6c..381f18b700 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -522,44 +522,6 @@ static bool has_missing_twin_edge(const SkeletalTrapezoidationGraph &graph) return false; } -inline static std::unordered_map try_to_fix_degenerated_voronoi_diagram_by_rotation( - Geometry::VoronoiDiagram &voronoi_diagram, - const Polygons &polys, - Polygons &polys_rotated, - std::vector &segments, - const double fix_angle) -{ - std::unordered_map vertex_mapping; - for (Polygon &poly : polys_rotated) - poly.rotate(fix_angle); - - assert(polys_rotated.size() == polys.size()); - for (size_t poly_idx = 0; poly_idx < polys.size(); ++poly_idx) { - assert(polys_rotated[poly_idx].size() == polys[poly_idx].size()); - for (size_t point_idx = 0; point_idx < polys[poly_idx].size(); ++point_idx) - vertex_mapping.insert({polys_rotated[poly_idx][point_idx], polys[poly_idx][point_idx]}); - } - - segments.clear(); - for (size_t poly_idx = 0; poly_idx < polys_rotated.size(); poly_idx++) - for (size_t point_idx = 0; point_idx < polys_rotated[poly_idx].size(); point_idx++) - segments.emplace_back(&polys_rotated, poly_idx, point_idx); - - voronoi_diagram.clear(); - construct_voronoi(segments.begin(), segments.end(), &voronoi_diagram); - -#ifdef ARACHNE_DEBUG_VORONOI - { - static int iRun = 0; - dump_voronoi_to_svg(debug_out_path("arachne_voronoi-diagram-rotated-%d.svg", iRun++).c_str(), voronoi_diagram, to_points(polys), to_lines(polys)); - } -#endif - - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); - - return vertex_mapping; -} - inline static void rotate_back_skeletal_trapezoidation_graph_after_fix(SkeletalTrapezoidationGraph &graph, const double fix_angle, const std::unordered_map &vertex_mapping) @@ -626,6 +588,56 @@ VoronoiDiagramStatus detect_voronoi_diagram_known_issues(const Geometry::Voronoi return VoronoiDiagramStatus::NO_ISSUE_DETECTED; } +inline static std::pair, double> try_to_fix_degenerated_voronoi_diagram_by_rotation( + Geometry::VoronoiDiagram &voronoi_diagram, + const Polygons &polys, + Polygons &polys_rotated, + std::vector &segments, + const std::vector &fix_angles) +{ + const Polygons polys_rotated_original = polys_rotated; + double fixed_by_angle = fix_angles.front(); + std::unordered_map vertex_mapping; + + for (const double &fix_angle : fix_angles) { + vertex_mapping.clear(); + polys_rotated = polys_rotated_original; + fixed_by_angle = fix_angle; + + for (Polygon &poly : polys_rotated) + poly.rotate(fix_angle); + + assert(polys_rotated.size() == polys.size()); + for (size_t poly_idx = 0; poly_idx < polys.size(); ++poly_idx) { + assert(polys_rotated[poly_idx].size() == polys[poly_idx].size()); + for (size_t point_idx = 0; point_idx < polys[poly_idx].size(); ++point_idx) + vertex_mapping.insert({polys_rotated[poly_idx][point_idx], polys[poly_idx][point_idx]}); + } + + segments.clear(); + for (size_t poly_idx = 0; poly_idx < polys_rotated.size(); poly_idx++) + for (size_t point_idx = 0; point_idx < polys_rotated[poly_idx].size(); point_idx++) + segments.emplace_back(&polys_rotated, poly_idx, point_idx); + + voronoi_diagram.clear(); + construct_voronoi(segments.begin(), segments.end(), &voronoi_diagram); + +#ifdef ARACHNE_DEBUG_VORONOI + { + static int iRun = 0; + dump_voronoi_to_svg(debug_out_path("arachne_voronoi-diagram-rotated-%d.svg", iRun++).c_str(), voronoi_diagram, to_points(polys), to_lines(polys)); + } +#endif + + if (detect_voronoi_diagram_known_issues(voronoi_diagram, segments) == VoronoiDiagramStatus::NO_ISSUE_DETECTED) + break; + } + + assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); + + return {vertex_mapping, fixed_by_angle}; +} + void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) { #ifdef ARACHNE_DEBUG @@ -669,8 +681,9 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) // When any Voronoi vertex is missing, the Voronoi diagram is not planar, or some voronoi edge is // intersecting input segment, rotate the input polygon and try again. - VoronoiDiagramStatus status = detect_voronoi_diagram_known_issues(voronoi_diagram, segments); - const double fix_angle = PI / 6; + VoronoiDiagramStatus status = detect_voronoi_diagram_known_issues(voronoi_diagram, segments); + const std::vector fix_angles = {PI / 6, PI / 5, PI / 7, PI / 11}; + double fixed_by_angle = fix_angles.front(); std::unordered_map vertex_mapping; // polys_copy is referenced through items stored in the std::vector segments. @@ -683,16 +696,15 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) else if (status == VoronoiDiagramStatus::VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT) BOOST_LOG_TRIVIAL(warning) << "Detected Voronoi edge intersecting input segment, input polygons will be rotated back and forth."; - vertex_mapping = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angle); + std::tie(vertex_mapping, fixed_by_angle) = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angles); - assert(!detect_missing_voronoi_vertex(voronoi_diagram, segments)); - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram, segments)); - assert(!detect_voronoi_edge_intersecting_input_segment(voronoi_diagram, segments)); - if (detect_missing_voronoi_vertex(voronoi_diagram, segments)) + VoronoiDiagramStatus status_after_fix = detect_voronoi_diagram_known_issues(voronoi_diagram, segments); + assert(status_after_fix == VoronoiDiagramStatus::NO_ISSUE_DETECTED); + if (status_after_fix == VoronoiDiagramStatus::MISSING_VORONOI_VERTEX) BOOST_LOG_TRIVIAL(error) << "Detected missing Voronoi vertex even after the rotation of input."; - else if (!Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram, segments)) + else if (status_after_fix == VoronoiDiagramStatus::NON_PLANAR_VORONOI_DIAGRAM) BOOST_LOG_TRIVIAL(error) << "Detected non-planar Voronoi diagram even after the rotation of input."; - else if (detect_voronoi_edge_intersecting_input_segment(voronoi_diagram, segments)) + else if (status_after_fix == VoronoiDiagramStatus::VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT) BOOST_LOG_TRIVIAL(error) << "Detected Voronoi edge intersecting input segment even after the rotation of input."; } @@ -759,8 +771,8 @@ process_voronoi_diagram: // diagram on slightly rotated input polygons that usually make the Voronoi generator generate a non-degenerated Voronoi diagram. if (status == VoronoiDiagramStatus::NO_ISSUE_DETECTED && has_missing_twin_edge(this->graph)) { BOOST_LOG_TRIVIAL(warning) << "Detected degenerated Voronoi diagram, input polygons will be rotated back and forth."; - status = VoronoiDiagramStatus::OTHER_TYPE_OF_VORONOI_DIAGRAM_DEGENERATION; - vertex_mapping = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angle); + status = VoronoiDiagramStatus::OTHER_TYPE_OF_VORONOI_DIAGRAM_DEGENERATION; + std::tie(vertex_mapping, fixed_by_angle) = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angles); assert(!detect_missing_voronoi_vertex(voronoi_diagram, segments)); if (detect_missing_voronoi_vertex(voronoi_diagram, segments)) @@ -784,7 +796,7 @@ process_voronoi_diagram: } if (status != VoronoiDiagramStatus::NO_ISSUE_DETECTED) - rotate_back_skeletal_trapezoidation_graph_after_fix(this->graph, fix_angle, vertex_mapping); + rotate_back_skeletal_trapezoidation_graph_after_fix(this->graph, fixed_by_angle, vertex_mapping); #ifdef ARACHNE_DEBUG assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index de5251639b..8631d9e17b 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -113,8 +113,7 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const //h^2 = (L / b)^2 [square it] //h^2 = L^2 / b^2 [factor the divisor] const auto height_2 = int64_t(double(area_removed_so_far) * double(area_removed_so_far) / double(base_length_2)); - coord_t weighted_average_width; - const int64_t extrusion_area_error = calculateExtrusionAreaDeviationError(previous, current, next, weighted_average_width); + const int64_t extrusion_area_error = calculateExtrusionAreaDeviationError(previous, current, next); if ((height_2 <= scaled(0.001) //Almost exactly colinear (barring rounding errors). && Line::distance_to_infinite(current.p, previous.p, next.p) <= scaled(0.001)) // Make sure that height_2 is not small because of cancellation of positive and negative areas // We shouldn't remove middle junctions of colinear segments if the area changed for the C-P segment is exceeding the maximum allowed @@ -189,8 +188,7 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const junctions = new_junctions; } -int64_t ExtrusionLine::calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C, coord_t& weighted_average_width) -{ +int64_t ExtrusionLine::calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C) { /* * A B C A C * --------------- ************** @@ -208,27 +206,19 @@ int64_t ExtrusionLine::calculateExtrusionAreaDeviationError(ExtrusionJunction A, * weighted-average width for the entire extrusion line. * * */ - const int64_t ab_length = (B - A).cast().norm(); - const int64_t bc_length = (C - B).cast().norm(); - const coord_t width_diff = std::max(std::abs(B.w - A.w), std::abs(C.w - B.w)); - if (width_diff > 1) - { + const int64_t ab_length = (B.p - A.p).cast().norm(); + const int64_t bc_length = (C.p - B.p).cast().norm(); + if (const coord_t width_diff = std::max(std::abs(B.w - A.w), std::abs(C.w - B.w)); width_diff > 1) { // Adjust the width only if there is a difference, or else the rounding errors may produce the wrong // weighted average value. - const int64_t ab_weight = (A.w + B.w) / 2; - const int64_t bc_weight = (B.w + C.w) / 2; - assert(((ab_length * ab_weight + bc_length * bc_weight) / (C - A).cast().norm()) <= std::numeric_limits::max()); - weighted_average_width = (ab_length * ab_weight + bc_length * bc_weight) / (C - A).cast().norm(); - assert((int64_t(std::abs(ab_weight - weighted_average_width)) * ab_length + int64_t(std::abs(bc_weight - weighted_average_width)) * bc_length) <= double(std::numeric_limits::max())); - return std::abs(ab_weight - weighted_average_width) * ab_length + std::abs(bc_weight - weighted_average_width) * bc_length; - } - else - { + const int64_t ab_weight = (A.w + B.w) / 2; + const int64_t bc_weight = (B.w + C.w) / 2; + const int64_t weighted_average_width = (ab_length * ab_weight + bc_length * bc_weight) / (ab_length + bc_length); + const int64_t ac_length = (C.p - A.p).cast().norm(); + return std::abs((ab_weight * ab_length + bc_weight * bc_length) - (weighted_average_width * ac_length)); + } else { // If the width difference is very small, then select the width of the segment that is longer - weighted_average_width = ab_length > bc_length ? A.w : B.w; - assert((int64_t(width_diff) * int64_t(bc_length)) <= std::numeric_limits::max()); - assert((int64_t(width_diff) * int64_t(ab_length)) <= std::numeric_limits::max()); - return ab_length > bc_length ? width_diff * bc_length : width_diff * ab_length; + return ab_length > bc_length ? int64_t(width_diff) * bc_length : int64_t(width_diff) * ab_length; } } diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp index c0c5e7db1b..d39e1e07b9 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp @@ -186,9 +186,8 @@ struct ExtrusionLine * \param A Start point of the 3-point-straight line * \param B Intermediate point of the 3-point-straight line * \param C End point of the 3-point-straight line - * \param weighted_average_width The weighted average of the widths of the two colinear extrusion segments * */ - static int64_t calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C, coord_t& weighted_average_width); + static int64_t calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C); bool is_contour() const; diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 31751ab322..b3293e17f2 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -583,8 +583,12 @@ static void process_arrangeable(const ArrangePolygon &arrpoly, outp.emplace_back(std::move(p)); outp.back().rotation(rotation); outp.back().translation({offs.x(), offs.y()}); + outp.back().inflate(arrpoly.inflation); outp.back().binId(arrpoly.bed_idx); outp.back().priority(arrpoly.priority); + outp.back().setOnPackedFn([&arrpoly](Item &itm){ + itm.inflate(-arrpoly.inflation); + }); } template auto call_with_bed(const Points &bed, Fn &&fn) diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp index 6d4001a50c..4ed00668c9 100644 --- a/src/libslic3r/Arrange.hpp +++ b/src/libslic3r/Arrange.hpp @@ -71,7 +71,7 @@ static const constexpr int UNARRANGED = -1; /// polygon belongs: UNARRANGED means no place for the polygon /// (also the initial state before arrange), 0..N means the index of the bed. /// Zero is the physical bed, larger than zero means a virtual bed. -struct ArrangePolygon { +struct ArrangePolygon { ExPolygon poly; /// The 2D silhouette to be arranged Vec2crd translation{0, 0}; /// The translation of the poly double rotation{0.0}; /// The rotation of the poly in radians diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 5a608cb054..a0d5e1360d 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -2958,6 +2958,8 @@ namespace Slic3r { unsigned int object_cnt = 0; for (const ModelObject* object : model.objects) { + if (!object->is_cut()) + continue; object_cnt++; pt::ptree& obj_tree = tree.add("objects.object", ""); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 22c26b3a55..bd4101dc9a 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -438,6 +438,10 @@ void GCode::PlaceholderParserIntegration::reset() this->opt_e_position = nullptr; this->opt_e_retracted = nullptr; this->opt_e_restart_extra = nullptr; + this->opt_extruded_volume = nullptr; + this->opt_extruded_weight = nullptr; + this->opt_extruded_volume_total = nullptr; + this->opt_extruded_weight_total = nullptr; this->num_extruders = 0; this->position.clear(); this->e_position.clear(); @@ -463,10 +467,19 @@ void GCode::PlaceholderParserIntegration::init(const GCodeWriter &writer) this->output_config.set_key_value("e_position", opt_e_position); } } + this->opt_extruded_volume = new ConfigOptionFloats(this->num_extruders, 0.f); + this->opt_extruded_weight = new ConfigOptionFloats(this->num_extruders, 0.f); + this->opt_extruded_volume_total = new ConfigOptionFloat(0.f); + this->opt_extruded_weight_total = new ConfigOptionFloat(0.f); + this->parser.set("extruded_volume", this->opt_extruded_volume); + this->parser.set("extruded_weight", this->opt_extruded_weight); + this->parser.set("extruded_volume_total", this->opt_extruded_volume_total); + this->parser.set("extruded_weight_total", this->opt_extruded_weight_total); // Reserve buffer for current position. this->position.assign(3, 0); this->opt_position = new ConfigOptionFloats(this->position); + this->output_config.set_key_value("position", this->opt_position); // Store zhop variable into the parser itself, it is a read-only variable to the script. this->opt_zhop = new ConfigOptionFloat(writer.get_zhop()); this->parser.set("zhop", this->opt_zhop); @@ -483,10 +496,22 @@ void GCode::PlaceholderParserIntegration::update_from_gcodewriter(const GCodeWri assert(! extruders.empty() && num_extruders == extruders.back().id() + 1); this->e_retracted.assign(num_extruders, 0); this->e_restart_extra.assign(num_extruders, 0); + this->opt_extruded_volume->values.assign(num_extruders, 0); + this->opt_extruded_weight->values.assign(num_extruders, 0); + double total_volume = 0.; + double total_weight = 0.; for (const Extruder &e : extruders) { this->e_retracted[e.id()] = e.retracted(); this->e_restart_extra[e.id()] = e.restart_extra(); + double v = e.extruded_volume(); + double w = v * e.filament_density() * 0.001; + this->opt_extruded_volume->values[e.id()] = v; + this->opt_extruded_weight->values[e.id()] = w; + total_volume += v; + total_weight += w; } + opt_extruded_volume_total->value = total_volume; + opt_extruded_weight_total->value = total_weight; opt_e_retracted->values = this->e_retracted; opt_e_restart_extra->values = this->e_restart_extra; if (! writer.config.use_relative_e_distances) { @@ -3384,10 +3409,12 @@ Vec2d GCode::point_to_gcode_quantized(const Point &point) const // convert a model-space scaled point into G-code coordinates Point GCode::gcode_to_point(const Vec2d &point) const { - Vec2d extruder_offset = EXTRUDER_CONFIG(extruder_offset); - return Point( - scale_(point(0) - m_origin(0) + extruder_offset(0)), - scale_(point(1) - m_origin(1) + extruder_offset(1))); + Vec2d pt = point - m_origin; + if (const Extruder *extruder = m_writer.extruder(); extruder) + // This function may be called at the very start from toolchange G-code when the extruder is not assigned yet. + pt += m_config.extruder_offset.get_at(extruder->id()); + return scaled(pt); + } } // namespace Slic3r diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 98f49095dc..346ececba7 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -362,6 +362,10 @@ private: ConfigOptionFloats *opt_e_position { nullptr }; ConfigOptionFloats *opt_e_retracted { nullptr }; ConfigOptionFloats *opt_e_restart_extra { nullptr }; + ConfigOptionFloats *opt_extruded_volume { nullptr }; + ConfigOptionFloats *opt_extruded_weight { nullptr }; + ConfigOptionFloat *opt_extruded_volume_total { nullptr }; + ConfigOptionFloat *opt_extruded_weight_total { nullptr }; // Caches of the data passed to the script. size_t num_extruders; std::vector position; diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 60ef1403fc..4496de5bf6 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -566,6 +566,11 @@ public: SpanOfConstPtrs objects() const { return SpanOfConstPtrs(const_cast(m_objects.data()), m_objects.size()); } PrintObject* get_object(size_t idx) { return const_cast(m_objects[idx]); } const PrintObject* get_object(size_t idx) const { return m_objects[idx]; } + const PrintObject* get_print_object_by_model_object_id(ObjectID object_id) const { + auto it = std::find_if(m_objects.begin(), m_objects.end(), + [object_id](const PrintObject* obj) { return obj->model_object()->id() == object_id; }); + return (it == m_objects.end()) ? nullptr : *it; + } // PrintObject by its ObjectID, to be used to uniquely bind slicing warnings to their source PrintObjects // in the notification center. const PrintObject* get_object(ObjectID object_id) const { diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index f5cf9de7a2..71361e68f6 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -579,6 +579,71 @@ int GLVolumeCollection::load_wipe_tower_preview( return int(volumes.size() - 1); } +// Load SLA auxiliary GLVolumes (for support trees or pad). +// This function produces volumes for multiple instances in a single shot, +// as some object specific mesh conversions may be expensive. +void GLVolumeCollection::load_object_auxiliary( + const SLAPrintObject* print_object, + int obj_idx, + // pairs of + const std::vector>& instances, + SLAPrintObjectStep milestone, + // Timestamp of the last change of the milestone + size_t timestamp) +{ + if (print_object->get_mesh_to_print() == nullptr) + return; + const Transform3d mesh_trafo_inv = print_object->trafo().inverse(); + + auto add_volume = [this, &instances, timestamp](int obj_idx, int inst_idx, const ModelInstance& model_instance, SLAPrintObjectStep step, + const TriangleMesh& mesh, const ColorRGBA& color, std::optional convex_hull = std::nullopt) { + if (mesh.empty()) + return; + + GLVolume& v = *this->volumes.emplace_back(new GLVolume(color)); +#if ENABLE_SMOOTH_NORMALS + v.model.init_from(mesh, true); +#else + v.model.init_from(mesh); + v.model.set_color(color); + v.mesh_raycaster = std::make_unique(std::make_shared(mesh)); +#endif // ENABLE_SMOOTH_NORMALS + v.composite_id = GLVolume::CompositeID(obj_idx, -int(step), inst_idx); + v.geometry_id = std::pair(timestamp, model_instance.id().id); + if (convex_hull.has_value()) + v.set_convex_hull(*convex_hull); + v.is_modifier = false; + v.shader_outside_printer_detection_enabled = (step == slaposSupportTree); + v.set_instance_transformation(model_instance.get_transformation()); + }; + + // Get the support mesh. + if (milestone == SLAPrintObjectStep::slaposSupportTree) { + TriangleMesh supports_mesh = print_object->support_mesh(); + if (!supports_mesh.empty()) { + supports_mesh.transform(mesh_trafo_inv); + TriangleMesh convex_hull = supports_mesh.convex_hull_3d(); + for (const std::pair& instance_idx : instances) { + const ModelInstance& model_instance = *print_object->model_object()->instances[instance_idx.first]; + add_volume(obj_idx, (int)instance_idx.first, model_instance, slaposSupportTree, supports_mesh, GLVolume::SLA_SUPPORT_COLOR, convex_hull); + } + } + } + + // Get the pad mesh. + if (milestone == SLAPrintObjectStep::slaposPad) { + TriangleMesh pad_mesh = print_object->pad_mesh(); + if (!pad_mesh.empty()) { + pad_mesh.transform(mesh_trafo_inv); + TriangleMesh convex_hull = pad_mesh.convex_hull_3d(); + for (const std::pair& instance_idx : instances) { + const ModelInstance& model_instance = *print_object->model_object()->instances[instance_idx.first]; + add_volume(obj_idx, (int)instance_idx.first, model_instance, slaposPad, pad_mesh, GLVolume::SLA_PAD_COLOR, convex_hull); + } + } + } +} + GLVolume* GLVolumeCollection::new_toolpath_volume(const ColorRGBA& rgba) { GLVolume* out = new_nontoolpath_volume(rgba); diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index d685d64897..f9eb4f2d41 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -430,6 +430,16 @@ public: float pos_x, float pos_y, float width, float depth, float height, float cone_angle, float rotation_angle, bool size_unknown, float brim_width); #endif // ENABLE_OPENGL_ES + // Load SLA auxiliary GLVolumes (for support trees or pad). + void load_object_auxiliary( + const SLAPrintObject* print_object, + int obj_idx, + // pairs of + const std::vector>& instances, + SLAPrintObjectStep milestone, + // Timestamp of the last change of the milestone + size_t timestamp); + GLVolume* new_toolpath_volume(const ColorRGBA& rgba); GLVolume* new_nontoolpath_volume(const ColorRGBA& rgba); // Render the volumes by OpenGL. diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index efb5f2e36e..8e77d830b7 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1884,6 +1884,15 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re size_t volume_idx; }; + // SLA steps to pull the preview meshes for. + typedef std::array SLASteps; + SLASteps sla_steps = { slaposDrillHoles, slaposSupportTree, slaposPad }; + struct SLASupportState { + std::array::value> step; + }; + // State of the sla_steps for all SLAPrintObjects. + std::vector sla_support_state; + std::vector instance_ids_selected; std::vector map_glvolume_old_to_new(m_volumes.volumes.size(), size_t(-1)); std::vector deleted_volumes; @@ -1909,6 +1918,37 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re } } + if (printer_technology == ptSLA) { + const SLAPrint* sla_print = this->sla_print(); +#ifndef NDEBUG + // Verify that the SLAPrint object is synchronized with m_model. + check_model_ids_equal(*m_model, sla_print->model()); +#endif // NDEBUG + sla_support_state.reserve(sla_print->objects().size()); + for (const SLAPrintObject* print_object : sla_print->objects()) { + SLASupportState state; + for (size_t istep = 0; istep < sla_steps.size(); ++istep) { + state.step[istep] = print_object->step_state_with_timestamp(sla_steps[istep]); + if (state.step[istep].state == PrintStateBase::State::Done) { + std::shared_ptr m = print_object->get_mesh_to_print(); + if (m == nullptr || m->empty()) + // Consider the DONE step without a valid mesh as invalid for the purpose + // of mesh visualization. + state.step[istep].state = PrintStateBase::State::Invalidated; + else { + for (const ModelInstance* model_instance : print_object->model_object()->instances) { + // Only the instances, which are currently printable, will have the SLA support structures kept. + // The instances outside the print bed will have the GLVolumes of their support structures released. + if (model_instance->is_printable()) + aux_volume_state.emplace_back(state.step[istep].timestamp, model_instance->id()); + } + } + } + } + sla_support_state.emplace_back(state); + } + } + std::sort(model_volume_state.begin(), model_volume_state.end(), model_volume_state_lower); std::sort(aux_volume_state.begin(), aux_volume_state.end(), model_volume_state_lower); // Release all ModelVolume based GLVolumes not found in the current Model. Find the GLVolume of a hollowed mesh. @@ -2023,6 +2063,75 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re } } + if (printer_technology == ptSLA) { + size_t idx = 0; + const SLAPrint *sla_print = this->sla_print(); + std::vector shift_zs(m_model->objects.size(), 0); + double relative_correction_z = sla_print->relative_correction().z(); + if (relative_correction_z <= EPSILON) + relative_correction_z = 1.; + for (const SLAPrintObject *print_object : sla_print->objects()) { + SLASupportState &state = sla_support_state[idx ++]; + const ModelObject *model_object = print_object->model_object(); + // Find an index of the ModelObject + int object_idx; + // There may be new SLA volumes added to the scene for this print_object. + // Find the object index of this print_object in the Model::objects list. + auto it = std::find(sla_print->model().objects.begin(), sla_print->model().objects.end(), model_object); + assert(it != sla_print->model().objects.end()); + object_idx = it - sla_print->model().objects.begin(); + // Cache the Z offset to be applied to all volumes with this object_idx. + shift_zs[object_idx] = print_object->get_current_elevation() / relative_correction_z; + // Collect indices of this print_object's instances, for which the SLA support meshes are to be added to the scene. + // pairs of + std::vector> instances[std::tuple_size::value]; + for (size_t print_instance_idx = 0; print_instance_idx < print_object->instances().size(); ++ print_instance_idx) { + const SLAPrintObject::Instance &instance = print_object->instances()[print_instance_idx]; + // Find index of ModelInstance corresponding to this SLAPrintObject::Instance. + auto it = std::find_if(model_object->instances.begin(), model_object->instances.end(), + [&instance](const ModelInstance *mi) { return mi->id() == instance.instance_id; }); + assert(it != model_object->instances.end()); + int instance_idx = it - model_object->instances.begin(); + for (size_t istep = 0; istep < sla_steps.size(); ++istep) { + if (state.step[istep].state == PrintStateBase::State::Done) { + // Check whether there is an existing auxiliary volume to be updated, or a new auxiliary volume to be created. + ModelVolumeState key(state.step[istep].timestamp, instance.instance_id.id); + auto it = std::lower_bound(aux_volume_state.begin(), aux_volume_state.end(), key, model_volume_state_lower); + assert(it != aux_volume_state.end() && it->geometry_id == key.geometry_id); + if (it->new_geometry()) { + // This can be an SLA support structure that should not be rendered (in case someone used undo + // to revert to before it was generated). If that's the case, we should not generate anything. + if (model_object->sla_points_status != sla::PointsStatus::NoPoints) + instances[istep].emplace_back(std::pair(instance_idx, print_instance_idx)); + else + shift_zs[object_idx] = 0.; + } + else { + // Recycling an old GLVolume. Update the Object/Instance indices into the current Model. + m_volumes.volumes[it->volume_idx]->composite_id = GLVolume::CompositeID(object_idx, m_volumes.volumes[it->volume_idx]->volume_idx(), instance_idx); + m_volumes.volumes[it->volume_idx]->set_instance_transformation(model_object->instances[instance_idx]->get_transformation()); + } + } + } + } + + for (size_t istep = 0; istep < sla_steps.size(); ++istep) { + if (!instances[istep].empty()) + m_volumes.load_object_auxiliary(print_object, object_idx, instances[istep], sla_steps[istep], state.step[istep].timestamp); + } + } + + // Shift-up all volumes of the object so that it has the right elevation with respect to the print bed + for (GLVolume* volume : m_volumes.volumes) { + const ModelObject* model_object = (volume->object_idx() < (int)m_model->objects.size()) ? m_model->objects[volume->object_idx()] : nullptr; + if (model_object != nullptr && model_object->instances[volume->instance_idx()]->is_printable()) { + const SLAPrintObject* po = sla_print->get_print_object_by_model_object_id(model_object->id()); + if (po != nullptr) + volume->set_sla_shift_z(po->get_current_elevation() / sla_print->relative_correction().z()); + } + } + } + if (printer_technology == ptFFF && m_config->has("nozzle_diameter")) { // Should the wipe tower be visualized ? unsigned int extruders_count = (unsigned int)dynamic_cast(m_config->option("nozzle_diameter"))->values.size(); @@ -2059,7 +2168,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re } update_volumes_colors_by_extruder(); - // Update selection indices based on the old/new GLVolumeCollection. + // Update selection indices based on the old/new GLVolumeCollection. if (m_selection.get_mode() == Selection::Instance) m_selection.instances_changed(instance_ids_selected); else @@ -3491,6 +3600,9 @@ void GLCanvas3D::do_move(const std::string& snapshot_type) int instance_idx = v->instance_idx(); int volume_idx = v->volume_idx(); + if (volume_idx < 0) + continue; + std::pair done_id(object_idx, instance_idx); if (0 <= object_idx && object_idx < (int)m_model->objects.size()) { @@ -3505,7 +3617,7 @@ void GLCanvas3D::do_move(const std::string& snapshot_type) #else model_object->instances[instance_idx]->set_offset(v->get_instance_offset()); #endif // ENABLE_WORLD_COORDINATE - else if (volume_idx >= 0 && selection_mode == Selection::Volume) + else if (selection_mode == Selection::Volume) #if ENABLE_WORLD_COORDINATE model_object->volumes[volume_idx]->set_transformation(v->get_volume_transformation()); #else @@ -3596,6 +3708,9 @@ void GLCanvas3D::do_rotate(const std::string& snapshot_type) const int instance_idx = v->instance_idx(); const int volume_idx = v->volume_idx(); + if (volume_idx < 0) + continue; + done.insert(std::pair(object_idx, instance_idx)); // Rotate instances/volumes. @@ -3672,6 +3787,9 @@ void GLCanvas3D::do_scale(const std::string& snapshot_type) const int instance_idx = v->instance_idx(); const int volume_idx = v->volume_idx(); + if (volume_idx < 0) + continue; + done.insert(std::pair(object_idx, instance_idx)); // Rotate instances/volumes @@ -3685,7 +3803,7 @@ void GLCanvas3D::do_scale(const std::string& snapshot_type) model_object->instances[instance_idx]->set_offset(v->get_instance_offset()); #endif // ENABLE_WORLD_COORDINATE } - else if (selection_mode == Selection::Volume && volume_idx >= 0) { + else if (selection_mode == Selection::Volume) { #if ENABLE_WORLD_COORDINATE model_object->instances[instance_idx]->set_transformation(v->get_instance_transformation()); model_object->volumes[volume_idx]->set_transformation(v->get_volume_transformation()); @@ -6800,9 +6918,9 @@ void GLCanvas3D::_load_sla_shells() // adds objects' volumes for (const SLAPrintObject* obj : print->objects()) { unsigned int initial_volumes_count = (unsigned int)m_volumes.volumes.size(); - for (const SLAPrintObject::Instance& instance : obj->instances()) { - std::shared_ptr m = obj->get_mesh_to_print(); - if (m && !m->empty()) { + std::shared_ptr m = obj->get_mesh_to_print(); + if (m && !m->empty()) { + for (const SLAPrintObject::Instance& instance : obj->instances()) { add_volume(*obj, 0, instance, *m, GLVolume::MODEL_COLOR[0], true); // Set the extruder_id and volume_id to achieve the same color as in the 3D scene when // through the update_volumes_colors_by_extruder() call. @@ -6813,7 +6931,7 @@ void GLCanvas3D::_load_sla_shells() add_volume(*obj, -int(slaposPad), instance, pad_mesh, GLVolume::SLA_PAD_COLOR, false); } } - double shift_z = obj->get_current_elevation(); + const double shift_z = obj->get_current_elevation(); for (unsigned int i = initial_volumes_count; i < m_volumes.volumes.size(); ++ i) { // apply shift z m_volumes.volumes[i]->set_sla_shift_z(shift_z); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index 0a7d459ac5..1fe409df41 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -875,6 +875,7 @@ void GLGizmoCut3D::on_set_state() } m_selected.clear(); m_parent.set_use_color_clip_plane(false); + m_c->selection_info()->set_use_shift(false); } } @@ -1238,7 +1239,10 @@ BoundingBoxf3 GLGizmoCut3D::transformed_bounding_box(const Vec3d& plane_center, { const Selection& selection = m_parent.get_selection(); - const Vec3d& instance_offset = selection.get_first_volume()->get_instance_offset(); + const auto first_volume = selection.get_first_volume(); + Vec3d instance_offset = first_volume->get_instance_offset(); + instance_offset[Z] += first_volume->get_sla_shift_z(); + const auto cut_matrix = Transform3d::Identity() * rotation_m.inverse() * translation_transform(instance_offset - plane_center); const Selection::IndicesList& idxs = selection.get_volume_idxs(); @@ -1356,6 +1360,12 @@ void GLGizmoCut3D::render_clipper_cut() void GLGizmoCut3D::on_render() { + if (m_state == On) { + // This gizmo is showing the object elevated. Tell the common + // SelectionInfo object to lie about the actual shift. + m_c->selection_info()->set_use_shift(true); + } + update_clipper(); init_picking_models(); @@ -2288,7 +2298,10 @@ bool GLGizmoCut3D::process_cut_line(SLAGizmoEventType action, const Vec2d& mouse const Vec3d new_plane_center = m_bb_center + cross_dir * cross_dir.dot(pt - m_bb_center); // update transformed bb const auto new_tbb = transformed_bounding_box(new_plane_center, m); - const Vec3d& instance_offset = m_parent.get_selection().get_first_volume()->get_instance_offset(); + const GLVolume* first_volume = m_parent.get_selection().get_first_volume(); + Vec3d instance_offset = first_volume->get_instance_offset(); + instance_offset[Z] += first_volume->get_sla_shift_z(); + const Vec3d trans_center_pos = m.inverse() * (new_plane_center - instance_offset) + new_tbb.center(); if (new_tbb.contains(trans_center_pos)) { Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Cut by line"), UndoRedo::SnapshotType::GizmoAction); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index eeec7916f3..4e45263fac 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -3089,8 +3089,8 @@ void GLGizmoEmboss::draw_advanced() } if (ImGui::IsItemHovered()) ImGui::SetTooltip("%s", (m_keep_up? - _u8L("Unlock the text's up orientation when moving text along the object's surface."): - _u8L("Lock the text's up orientation when moving text along the object's surface.") + _u8L("Unlock the text's rotation when moving text along the object's surface."): + _u8L("Lock the text's rotation when moving text along the object's surface.") ).c_str()); // when more collection add selector @@ -3499,6 +3499,7 @@ bool priv::start_create_volume_on_surface_job( { assert(gl_volume != nullptr); if (gl_volume == nullptr) return false; + if (gl_volume->volume_idx() < 0) return false; Plater *plater = wxGetApp().plater(); const ModelObjectPtrs &objects = plater->model().objects; @@ -3549,7 +3550,7 @@ void priv::find_closest_volume(const Selection &selection, for (unsigned int id : indices) { const GLVolume *gl_volume = selection.get_volume(id); const ModelVolume *volume = get_model_volume(*gl_volume, objects); - if (!volume->is_model_part()) continue; + if (volume == nullptr || !volume->is_model_part()) continue; Slic3r::Polygon hull = CameraUtils::create_hull2d(camera, *gl_volume); Vec2d c = hull.centroid().cast(); Vec2d d = c - screen_center; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index c0073e7fbb..03fcefd259 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -101,6 +101,8 @@ void GLGizmoHollow::on_render() m_selection_rectangle.render(m_parent); m_c->object_clipper()->render_cut(); + if (are_sla_supports_shown()) + m_c->supports_clipper()->render_cut(); glsafe(::glDisable(GL_BLEND)); } @@ -772,6 +774,14 @@ RENDER_AGAIN: if (m_imgui->slider_float("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f")) m_c->object_clipper()->set_position_by_ratio(clp_dist, true); + // make sure supports are shown/hidden as appropriate + ImGui::Separator(); + bool show_sups = are_sla_supports_shown(); + if (m_imgui->checkbox(m_desc["show_supports"], show_sups)) { + show_sla_supports(show_sups); + force_refresh = true; + } + m_imgui->disabled_end(); m_imgui->end(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp index 3ac438902d..348fa5ca75 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.cpp @@ -30,7 +30,8 @@ CommonGizmosDataID GLGizmoSlaBase::on_get_requirements() const int(CommonGizmosDataID::SelectionInfo) | int(CommonGizmosDataID::InstancesHider) | int(CommonGizmosDataID::Raycaster) - | int(CommonGizmosDataID::ObjectClipper)); + | int(CommonGizmosDataID::ObjectClipper) + | int(CommonGizmosDataID::SupportsClipper)); } void GLGizmoSlaBase::update_volumes() @@ -50,27 +51,54 @@ void GLGizmoSlaBase::update_volumes() TriangleMesh backend_mesh; std::shared_ptr preview_mesh_ptr = po->get_mesh_to_print(); - if (preview_mesh_ptr) - backend_mesh = TriangleMesh{*preview_mesh_ptr}; + if (preview_mesh_ptr != nullptr) + backend_mesh = TriangleMesh(*preview_mesh_ptr); if (!backend_mesh.empty()) { - // The backend has generated a valid mesh. Use it - backend_mesh.transform(po->trafo().inverse()); - m_volumes.volumes.emplace_back(new GLVolume()); - GLVolume* new_volume = m_volumes.volumes.back(); - new_volume->model.init_from(backend_mesh); - new_volume->set_instance_transformation(po->model_object()->instances[m_parent.get_selection().get_instance_idx()]->get_transformation()); - new_volume->set_sla_shift_z(po->get_current_elevation()); - new_volume->mesh_raycaster = std::make_unique(backend_mesh); auto last_comp_step = static_cast(po->last_completed_step()); if (last_comp_step == slaposCount) last_comp_step = -1; m_input_enabled = last_comp_step >= m_min_sla_print_object_step; - if (m_input_enabled) - new_volume->selected = true; // to set the proper color - else - new_volume->set_color(DISABLED_COLOR); + + const int object_idx = m_parent.get_selection().get_object_idx(); + const int instance_idx = m_parent.get_selection().get_instance_idx(); + const Geometry::Transformation& inst_trafo = po->model_object()->instances[instance_idx]->get_transformation(); + const double current_elevation = po->get_current_elevation(); + + auto add_volume = [this, object_idx, instance_idx, &inst_trafo, current_elevation](const TriangleMesh& mesh, int volume_id, bool add_mesh_raycaster = false) { + GLVolume* volume = m_volumes.volumes.emplace_back(new GLVolume()); + volume->model.init_from(mesh); + volume->set_instance_transformation(inst_trafo); + volume->set_sla_shift_z(current_elevation); + if (add_mesh_raycaster) + volume->mesh_raycaster = std::make_unique(mesh); + if (m_input_enabled) + volume->selected = true; // to set the proper color + else + volume->set_color(DISABLED_COLOR); + volume->composite_id = GLVolume::CompositeID(object_idx, volume_id, instance_idx); + }; + + const Transform3d po_trafo_inverse = po->trafo().inverse(); + + // main mesh + backend_mesh.transform(po_trafo_inverse); + add_volume(backend_mesh, 0, true); + + // supports mesh + TriangleMesh supports_mesh = po->support_mesh(); + if (!supports_mesh.empty()) { + supports_mesh.transform(po_trafo_inverse); + add_volume(supports_mesh, -int(slaposSupportTree)); + } + + // pad mesh + TriangleMesh pad_mesh = po->pad_mesh(); + if (!pad_mesh.empty()) { + pad_mesh.transform(po_trafo_inverse); + add_volume(pad_mesh, -int(slaposPad)); + } } if (m_volumes.volumes.empty()) { @@ -110,16 +138,20 @@ void GLGizmoSlaBase::render_volumes() clipping_plane.set_normal(-clipping_plane.get_normal()); m_volumes.set_clipping_plane(clipping_plane.get_data()); - m_volumes.render(GLVolumeCollection::ERenderType::Opaque, false, camera.get_view_matrix(), camera.get_projection_matrix()); - shader->stop_using(); + for (GLVolume* v : m_volumes.volumes) { + v->is_active = m_show_sla_supports || (!v->is_sla_pad() && !v->is_sla_support()); + } + m_volumes.render(GLVolumeCollection::ERenderType::Opaque, true, camera.get_view_matrix(), camera.get_projection_matrix()); + shader->stop_using(); } void GLGizmoSlaBase::register_volume_raycasters_for_picking() { for (size_t i = 0; i < m_volumes.volumes.size(); ++i) { const GLVolume* v = m_volumes.volumes[i]; - m_volume_raycasters.emplace_back(m_parent.add_raycaster_for_picking(SceneRaycaster::EType::Gizmo, VOLUME_RAYCASTERS_BASE_ID + (int)i, *v->mesh_raycaster, v->world_matrix())); + if (!v->is_sla_pad() && !v->is_sla_support()) + m_volume_raycasters.emplace_back(m_parent.add_raycaster_for_picking(SceneRaycaster::EType::Gizmo, VOLUME_RAYCASTERS_BASE_ID + (int)i, *v->mesh_raycaster, v->world_matrix())); } } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.hpp index 4384775988..acda5a8a16 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaBase.hpp @@ -40,11 +40,15 @@ protected: bool unproject_on_mesh(const Vec2d& mouse_pos, std::pair& pos_and_normal); + bool are_sla_supports_shown() const { return m_show_sla_supports; } + void show_sla_supports(bool show) { m_show_sla_supports = show; } + const GLVolumeCollection &volumes() const { return m_volumes; } private: GLVolumeCollection m_volumes; bool m_input_enabled{ false }; + bool m_show_sla_supports{ false }; int m_min_sla_print_object_step{ -1 }; std::vector> m_volume_raycasters; }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index c60e71783d..8563d330c0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -24,8 +24,10 @@ namespace Slic3r { namespace GUI { GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) - : GLGizmoSlaBase(parent, icon_filename, sprite_id, slaposDrillHoles) -{} +: GLGizmoSlaBase(parent, icon_filename, sprite_id, slaposDrillHoles) +{ + show_sla_supports(true); +} bool GLGizmoSlaSupports::on_init() { @@ -126,6 +128,7 @@ void GLGizmoSlaSupports::on_render() m_selection_rectangle.render(m_parent); m_c->object_clipper()->render_cut(); + m_c->supports_clipper()->render_cut(); glsafe(::glDisable(GL_BLEND)); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp index a8dc16c558..debb225358 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -453,83 +453,74 @@ void SupportsClipper::on_update() if (! mo || ! is_sla) return; - const GLCanvas3D* canvas = get_pool()->get_canvas(); - const PrintObjects& print_objects = canvas->sla_print()->objects(); - const SLAPrintObject* print_object = (m_print_object_idx >= 0 && m_print_object_idx < int(print_objects.size())) - ? print_objects[m_print_object_idx] - : nullptr; + const SLAPrintObject* po = get_pool()->selection_info()->print_object(); + if (po == nullptr) + return; - // Find the respective SLAPrintObject. - if (m_print_object_idx < 0 || m_print_objects_count != int(print_objects.size())) { - m_print_objects_count = print_objects.size(); - m_print_object_idx = -1; - for (const SLAPrintObject* po : print_objects) { - ++m_print_object_idx; - if (po->model_object()->id() == mo->id()) { - print_object = po; - break; - } - } + if (po->get_mesh_to_print() == nullptr) { + // The object has been not sliced yet. We better dump the cached data. + m_supports_clipper.reset(); + m_pad_clipper.reset(); + return; } - if (print_object - && print_object->is_step_done(slaposSupportTree) - && ! print_object->support_mesh().empty()) - { - // If the supports are already calculated, save the timestamp of the respective step - // so we can later tell they were recalculated. - size_t timestamp = print_object->step_state_with_timestamp(slaposSupportTree).timestamp; - if (! m_clipper || timestamp != m_old_timestamp) { - // The timestamp has changed. - m_clipper.reset(new MeshClipper); - // The mesh should already have the shared vertices calculated. - m_clipper->set_mesh(print_object->support_mesh().its); - m_old_timestamp = timestamp; - } + const TriangleMesh& support_mesh = po->support_mesh(); + if (support_mesh.empty()) { + // The supports are not available yet. We better dump the cached data. + m_supports_clipper.reset(); + } + else { + m_supports_clipper.reset(new MeshClipper); + m_supports_clipper->set_mesh(support_mesh.its); + } + + const TriangleMesh& pad_mesh = po->pad_mesh(); + if (pad_mesh.empty()) { + // The supports are not available yet. We better dump the cached data. + m_pad_clipper.reset(); + } + else { + m_pad_clipper.reset(new MeshClipper); + m_pad_clipper->set_mesh(pad_mesh.its); } - else - // The supports are not valid. We better dump the cached data. - m_clipper.reset(); } void SupportsClipper::on_release() { - m_clipper.reset(); - m_old_timestamp = 0; + m_supports_clipper.reset(); + m_pad_clipper.reset(); m_print_object_idx = -1; } void SupportsClipper::render_cut() const { const CommonGizmosDataObjects::ObjectClipper* ocl = get_pool()->object_clipper(); - if (ocl->get_position() == 0. - || ! m_clipper) + if (ocl->get_position() == 0.) return; + const SLAPrintObject* po = get_pool()->selection_info()->print_object(); + if (po == nullptr) + return; + + Geometry::Transformation po_trafo(po->trafo()); + const SelectionInfo* sel_info = get_pool()->selection_info(); - const ModelObject* mo = sel_info->model_object(); - const Geometry::Transformation inst_trafo = mo->instances[sel_info->get_active_instance()]->get_transformation(); - //Geometry::Transformation vol_trafo = mo->volumes.front()->get_transformation(); - Geometry::Transformation trafo = inst_trafo;// * vol_trafo; - trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., sel_info->get_sla_shift())); + Geometry::Transformation inst_trafo = sel_info->model_object()->instances[sel_info->get_active_instance()]->get_transformation(); + inst_trafo = Geometry::Transformation(inst_trafo.get_matrix() * po_trafo.get_matrix().inverse()); + inst_trafo.set_offset(inst_trafo.get_offset() + Vec3d(0.0, 0.0, sel_info->get_sla_shift())); + if (m_supports_clipper != nullptr) { + m_supports_clipper->set_plane(*ocl->get_clipping_plane()); + m_supports_clipper->set_transformation(inst_trafo); + m_supports_clipper->render_cut({ 1.0f, 0.f, 0.37f, 1.0f }); + } - // Get transformation of supports - Geometry::Transformation supports_trafo = trafo; - supports_trafo.set_scaling_factor(Vec3d::Ones()); - supports_trafo.set_offset(Vec3d(trafo.get_offset()(0), trafo.get_offset()(1), sel_info->get_sla_shift())); - supports_trafo.set_rotation(Vec3d(0., 0., trafo.get_rotation()(2))); - // I don't know why, but following seems to be correct. - supports_trafo.set_mirror(Vec3d(trafo.get_mirror()(0) * trafo.get_mirror()(1) * trafo.get_mirror()(2), - 1, - 1.)); - - m_clipper->set_plane(*ocl->get_clipping_plane()); - m_clipper->set_transformation(supports_trafo); - - m_clipper->render_cut({ 1.0f, 0.f, 0.37f, 1.0f }); - m_clipper->render_contour({ 1.f, 1.f, 1.f, 1.f }); + if (m_pad_clipper != nullptr) { + m_pad_clipper->set_plane(*ocl->get_clipping_plane()); + m_pad_clipper->set_transformation(inst_trafo); + m_pad_clipper->render_cut({ 0.6f, 0.f, 0.222f, 1.0f }); + } } diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp index 01b888be0a..785c660766 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp @@ -293,10 +293,10 @@ protected: void on_release() override; private: - size_t m_old_timestamp = 0; int m_print_object_idx = -1; int m_print_objects_count = 0; - std::unique_ptr m_clipper; + std::unique_ptr m_supports_clipper; + std::unique_ptr m_pad_clipper; }; } // namespace CommonGizmosDataObjects diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 4595ae2544..826dc24076 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -2,6 +2,9 @@ #include "libslic3r/BuildVolume.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/Print.hpp" +#include "libslic3r/SLAPrint.hpp" +#include "libslic3r/Geometry/ConvexHull.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" @@ -11,6 +14,7 @@ #include "slic3r/GUI/NotificationManager.hpp" #include "slic3r/GUI/format.hpp" + #include "libnest2d/common.hpp" #include @@ -93,28 +97,28 @@ void ArrangeJob::prepare_all() { void ArrangeJob::prepare_selected() { clear_input(); - + Model &model = m_plater->model(); double stride = bed_stride(m_plater); - + std::vector obj_sel(model.objects.size(), nullptr); for (auto &s : m_plater->get_selection().get_content()) if (s.first < int(obj_sel.size())) obj_sel[size_t(s.first)] = &s.second; - + // Go through the objects and check if inside the selection for (size_t oidx = 0; oidx < model.objects.size(); ++oidx) { const Selection::InstanceIdxsList * instlist = obj_sel[oidx]; ModelObject *mo = model.objects[oidx]; - + std::vector inst_sel(mo->instances.size(), false); - + if (instlist) for (auto inst_id : *instlist) inst_sel[size_t(inst_id)] = true; - + for (size_t i = 0; i < inst_sel.size(); ++i) { ModelInstance * mi = mo->instances[i]; ArrangePolygon &&ap = get_arrange_poly_(mi); @@ -123,11 +127,11 @@ void ArrangeJob::prepare_selected() { (inst_sel[i] ? m_selected : m_unselected) : m_unprintable; - + cont.emplace_back(std::move(ap)); } } - + if (auto wti = get_wipe_tower(*m_plater)) { ArrangePolygon &&ap = get_arrange_poly(wti, m_plater); @@ -135,14 +139,120 @@ void ArrangeJob::prepare_selected() { m_unselected; cont.emplace_back(std::move(ap)); } - + // If the selection was empty arrange everything - if (m_selected.empty()) m_selected.swap(m_unselected); - + if (m_selected.empty()) + m_selected.swap(m_unselected); + // The strides have to be removed from the fixed items. For the // arrangeable (selected) items bed_idx is ignored and the // translation is irrelevant. - for (auto &p : m_unselected) p.translation(X) -= p.bed_idx * stride; + for (auto &p : m_unselected) + p.translation(X) -= p.bed_idx * stride; +} + +static void update_arrangepoly_slaprint(arrangement::ArrangePolygon &ret, + const SLAPrintObject &po, + const ModelInstance &inst) +{ + // The 1.1 multiplier is a safety gap, as the offset might be bigger + // in sharp edges of a polygon, depending on clipper's offset algorithm + coord_t pad_infl = 0; + { + double infl = po.config().pad_enable.getBool() * ( + po.config().pad_brim_size.getFloat() + + po.config().pad_around_object.getBool() * + po.config().pad_object_gap.getFloat() ); + + pad_infl = scaled(1.1 * infl); + } + + auto laststep = po.last_completed_step(); + + if (laststep < slaposCount && laststep > slaposSupportTree) { + auto omesh = po.get_mesh_to_print(); + auto &smesh = po.support_mesh(); + + Vec3d rotation = inst.get_rotation(); + rotation.z() = 0.; + Transform3f trafo_instance = + Geometry::assemble_transform(inst.get_offset().z() * Vec3d::UnitZ(), + rotation, + inst.get_scaling_factor(), + inst.get_mirror()).cast(); + + trafo_instance = trafo_instance * po.trafo().cast().inverse(); + + auto polys = reserve_vector(3); + auto zlvl = -po.get_elevation(); + + if (omesh) { + polys.emplace_back(its_convex_hull_2d_above(*omesh, trafo_instance, zlvl)); + ret.poly.contour = polys.back(); + ret.poly.holes = {}; + } + + polys.emplace_back(its_convex_hull_2d_above(smesh.its, trafo_instance, zlvl)); + ret.poly.contour = Geometry::convex_hull(polys); + ret.poly.holes = {}; + } + + ret.inflation = pad_infl; +} + +static coord_t brim_offset(const PrintObject &po, const ModelInstance &inst) +{ + const BrimType brim_type = po.config().brim_type.value; + const float brim_separation = po.config().brim_separation.getFloat(); + const float brim_width = po.config().brim_width.getFloat(); + const bool has_outer_brim = brim_type == BrimType::btOuterOnly || + brim_type == BrimType::btOuterAndInner; + + // How wide is the brim? (in scaled units) + return has_outer_brim ? scaled(brim_width + brim_separation) : 0; +} + +template +Polygon support_layers_chull (Points &pts, It from_lyr, It to_lyr) { + + size_t cap = 0; + for (auto it = from_lyr; it != to_lyr; ++it) { + for (const ExPolygon &expoly : (*it)->support_islands) + cap += expoly.contour.points.size(); + } + + pts.reserve(pts.size() + cap); + + for (auto it = from_lyr; it != to_lyr; ++it) { + for (const ExPolygon &expoly : (*it)->support_islands) + std::copy(expoly.contour.begin(), expoly.contour.end(), + std::back_inserter(pts)); + } + + Polygon ret = Geometry::convex_hull(pts); + + return ret; +} + +static void update_arrangepoly_fffprint(arrangement::ArrangePolygon &ret, + const PrintObject &po, + const ModelInstance &inst) +{ + auto laststep = po.last_completed_step(); + + coord_t infl = brim_offset(po, inst); + + if (laststep < posCount && laststep > posSupportMaterial) { + Points pts = std::move(ret.poly.contour.points); + Polygon poly = support_layers_chull(pts, + po.support_layers().begin(), + po.support_layers().end()); + + ret.poly.contour = std::move(poly); + ret.poly.holes = {}; + } + + ret.inflation = infl; } arrangement::ArrangePolygon ArrangeJob::get_arrange_poly_(ModelInstance *mi) @@ -159,9 +269,38 @@ arrangement::ArrangePolygon ArrangeJob::get_arrange_poly_(ModelInstance *mi) return ap; } +coord_t get_skirt_offset(const Plater* plater) { + float skirt_inset = 0.f; + // Try to subtract the skirt from the bed shape so we don't arrange outside of it. + if (plater->printer_technology() == ptFFF && plater->fff_print().has_skirt()) { + const auto& print = plater->fff_print(); + skirt_inset = print.config().skirts.value * print.skirt_flow().width() + + print.config().skirt_distance.value; + } + + return scaled(skirt_inset); +} + void ArrangeJob::prepare() { wxGetKeyState(WXK_SHIFT) ? prepare_selected() : prepare_all(); + + coord_t min_offset = 0; + for (auto &ap : m_selected) { + min_offset = std::max(ap.inflation, min_offset); + } + + if (m_plater->printer_technology() == ptSLA) { + // Apply the max offset for all the objects + for (auto &ap : m_selected) { + ap.inflation = min_offset; + } + } else { // it's fff, brims only need to be minded from bed edges + for (auto &ap : m_selected) { + ap.inflation = 0; + } + m_min_bed_inset = min_offset; + } } void ArrangeJob::process(Ctl &ctl) @@ -174,6 +313,8 @@ void ArrangeJob::process(Ctl &ctl) prepare(); params = get_arrange_params(m_plater); get_bed_shape(*m_plater->config(), bed); + coord_t min_inset = get_skirt_offset(m_plater) + m_min_bed_inset; + params.min_bed_distance = std::max(params.min_bed_distance, min_inset); }).wait(); auto count = unsigned(m_selected.size() + m_unprintable.size()); @@ -286,7 +427,26 @@ template<> arrangement::ArrangePolygon get_arrange_poly(ModelInstance *inst, const Plater * plater) { - return get_arrange_poly(PtrWrapper{inst}, plater); + auto ap = get_arrange_poly(PtrWrapper{inst}, plater); + + auto obj_id = inst->get_object()->id(); + if (plater->printer_technology() == ptSLA) { + const SLAPrintObject *po = + plater->sla_print().get_print_object_by_model_object_id(obj_id); + + if (po) { + update_arrangepoly_slaprint(ap, *po, *inst); + } + } else { + const PrintObject *po = + plater->fff_print().get_print_object_by_model_object_id(obj_id); + + if (po) { + update_arrangepoly_fffprint(ap, *po, *inst); + } + } + + return ap; } arrangement::ArrangeParams get_arrange_params(Plater *p) diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.hpp b/src/slic3r/GUI/Jobs/ArrangeJob.hpp index 106cc57ddf..a422d44070 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.hpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.hpp @@ -21,6 +21,8 @@ class ArrangeJob : public Job ArrangePolygons m_selected, m_unselected, m_unprintable; std::vector m_unarranged; + coord_t m_min_bed_inset = 0.; + Plater *m_plater; // clear m_selected and m_unselected, reserve space for next usage @@ -102,6 +104,8 @@ arrangement::ArrangePolygon get_arrange_poly(ModelInstance *inst, arrangement::ArrangeParams get_arrange_params(Plater *p); +coord_t get_skirt_offset(const Plater* plater); + }} // namespace Slic3r::GUI #endif // ARRANGEJOB_HPP diff --git a/src/slic3r/GUI/Jobs/EmbossJob.cpp b/src/slic3r/GUI/Jobs/EmbossJob.cpp index 208cb2c0bd..a265c4de9f 100644 --- a/src/slic3r/GUI/Jobs/EmbossJob.cpp +++ b/src/slic3r/GUI/Jobs/EmbossJob.cpp @@ -483,10 +483,46 @@ TriangleMesh priv::create_default_mesh() return triangle_mesh; } +namespace{ +void update_volume_name(const ModelVolume &volume, const ObjectList *obj_list) +{ + if (obj_list == nullptr) + return; + + const std::vector* objects = obj_list->objects(); + if (objects == nullptr) + return; + + int object_idx = -1; + int volume_idx = -1; + for (size_t oi = 0; oi < objects->size(); ++oi) { + const ModelObject *mo = objects->at(oi); + if (mo == nullptr) + continue; + if (volume.get_object()->id() != mo->id()) + continue; + const ModelVolumePtrs& volumes = mo->volumes; + for (size_t vi = 0; vi < volumes.size(); ++vi) { + const ModelVolume *mv = volumes[vi]; + if (mv == nullptr) + continue; + if (mv->id() == volume.id()){ + object_idx = static_cast(oi); + volume_idx = static_cast(vi); + break; + } + } + if (volume_idx > 0) + break; + } + obj_list->update_name_in_list(object_idx, volume_idx); +} +} + void UpdateJob::update_volume(ModelVolume *volume, TriangleMesh &&mesh, const TextConfiguration &text_configuration, - const std::string &volume_name) + std::string_view volume_name) { // check inputs bool is_valid_input = @@ -506,19 +542,12 @@ void UpdateJob::update_volume(ModelVolume *volume, // discard information about rotation, should not be stored in volume volume->text_configuration->style.prop.angle.reset(); - GUI_App &app = wxGetApp(); // may be move to input - GLCanvas3D *canvas = app.plater()->canvas3D(); - const Selection &selection = canvas->get_selection(); - const GLVolume *gl_volume = selection.get_volume(*selection.get_volume_idxs().begin()); - int object_idx = gl_volume->object_idx(); + GUI_App &app = wxGetApp(); // may be move ObjectList and Plater to input? + // update volume name in right panel( volume / object name) if (volume->name != volume_name) { volume->name = volume_name; - - // update volume name in right panel( volume / object name) - int volume_idx = gl_volume->volume_idx(); - ObjectList *obj_list = app.obj_list(); - obj_list->update_name_in_list(object_idx, volume_idx); + update_volume_name(*volume, app.obj_list()); } // When text is object. @@ -528,11 +557,12 @@ void UpdateJob::update_volume(ModelVolume *volume, volume->get_object()->ensure_on_bed(); // redraw scene - bool refresh_immediately = false; - canvas->reload_scene(refresh_immediately); + Plater *plater = app.plater(); + if (plater == nullptr) + return; - // Change buttons "Export G-code" into "Slice now" - canvas->post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); + // Update Model and redraw scene + plater->update(); } void priv::update_volume(TriangleMesh &&mesh, const DataUpdate &data, Transform3d* tr) @@ -646,8 +676,9 @@ void priv::create_volume( if (manager.get_current_type() != GLGizmosManager::Emboss) manager.open_gizmo(GLGizmosManager::Emboss); - // redraw scene - canvas->reload_scene(true); + // update model and redraw scene + //canvas->reload_scene(true); + plater->update(); } ModelVolume *priv::get_volume(ModelObjectPtrs &objects, diff --git a/src/slic3r/GUI/Jobs/EmbossJob.hpp b/src/slic3r/GUI/Jobs/EmbossJob.hpp index d3896c0a65..d4b32cf616 100644 --- a/src/slic3r/GUI/Jobs/EmbossJob.hpp +++ b/src/slic3r/GUI/Jobs/EmbossJob.hpp @@ -145,7 +145,7 @@ public: static void update_volume(ModelVolume *volume, TriangleMesh &&mesh, const TextConfiguration &text_configuration, - const std::string &volume_name); + std::string_view volume_name); }; struct SurfaceVolumeData diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index 6a173683f6..b8a579ed5d 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -18,6 +18,7 @@ void FillBedJob::prepare() m_selected.clear(); m_unselected.clear(); m_bedpts.clear(); + m_min_bed_inset = 0.; m_object_idx = m_plater->get_selected_object_idx(); if (m_object_idx == -1) @@ -29,7 +30,7 @@ void FillBedJob::prepare() m_selected.reserve(model_object->instances.size()); for (ModelInstance *inst : model_object->instances) if (inst->printable) { - ArrangePolygon ap = get_arrange_poly(PtrWrapper{inst}, m_plater); + ArrangePolygon ap = get_arrange_poly(inst, m_plater); // Existing objects need to be included in the result. Only // the needed amount of object will be added, no more. ++ap.priority; @@ -101,6 +102,23 @@ void FillBedJob::prepare() for (auto &p : m_unselected) if (p.bed_idx > 0) p.translation(X) -= p.bed_idx * stride; + + coord_t min_offset = 0; + for (auto &ap : m_selected) { + min_offset = std::max(ap.inflation, min_offset); + } + + if (m_plater->printer_technology() == ptSLA) { + // Apply the max offset for all the objects + for (auto &ap : m_selected) { + ap.inflation = min_offset; + } + } else { // it's fff, brims only need to be minded from bed edges + for (auto &ap : m_selected) { + ap.inflation = 0; + } + m_min_bed_inset = min_offset; + } } void FillBedJob::process(Ctl &ctl) @@ -110,6 +128,8 @@ void FillBedJob::process(Ctl &ctl) ctl.call_on_main_thread([this, ¶ms] { prepare(); params = get_arrange_params(m_plater); + coord_t min_inset = get_skirt_offset(m_plater) + m_min_bed_inset; + params.min_bed_distance = std::max(params.min_bed_distance, min_inset); }).wait(); ctl.update_status(0, statustxt); diff --git a/src/slic3r/GUI/Jobs/FillBedJob.hpp b/src/slic3r/GUI/Jobs/FillBedJob.hpp index b1417bbbd4..b953e0e981 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.hpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.hpp @@ -16,6 +16,7 @@ class FillBedJob : public Job ArrangePolygons m_selected; ArrangePolygons m_unselected; + coord_t m_min_bed_inset = 0.; Points m_bedpts; diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 2b77fe7ff4..28cf367fdf 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1396,6 +1396,18 @@ void Selection::scale_to_fit_print_volume(const BuildVolume& volume) // used to keep track whether the undo/redo snapshot has already been taken bool undoredo_snapshot = false; + if (wxGetApp().plater()->printer_technology() == ptSLA) { + // remove SLA auxiliary volumes from the selection to ensure that the proper bounding box is calculated + std::vector to_remove; + for (unsigned int i : m_list) { + if ((*m_volumes)[i]->volume_idx() < 0) + to_remove.push_back(i); + } + + if (!to_remove.empty()) + remove_volumes(m_mode, to_remove); + } + switch (volume.type()) { case BuildVolume::Type::Rectangle: { undoredo_snapshot = fit_rectangle(volume, !undoredo_snapshot); break; } @@ -3006,7 +3018,7 @@ static void verify_instances_rotation_synchronized(const Model &model, const GLV continue; const Transform3d::ConstLinearPart& rotation0 = volumes[idx_volume_first]->get_instance_transformation().get_matrix().linear(); for (int i = idx_volume_first + 1; i < (int)volumes.size(); ++i) - if (volumes[i]->object_idx() == idx_object) { + if (volumes[i]->object_idx() == idx_object && volumes[i]->volume_idx() >= 0) { const Transform3d::ConstLinearPart& rotation = volumes[i]->get_instance_transformation().get_matrix().linear(); assert(is_rotation_xy_synchronized(rotation, rotation0)); } diff --git a/src/slic3r/GUI/SurfaceDrag.cpp b/src/slic3r/GUI/SurfaceDrag.cpp index a202ae5de4..40b01a2af8 100644 --- a/src/slic3r/GUI/SurfaceDrag.cpp +++ b/src/slic3r/GUI/SurfaceDrag.cpp @@ -9,50 +9,6 @@ #include "libslic3r/Emboss.hpp" namespace Slic3r::GUI { - -/// -/// Calculate offset from mouse position to center of text -/// -/// Position on screen[in Px] e.g. mouse position -/// Selected volume(text) -/// Actual position and view direction of camera -/// Offset in screen coordinate -static Vec2d calc_screen_offset_to_volume_center(const Vec2d &screen_coor, const ModelVolume &volume, const Camera &camera) -{ - const Transform3d &volume_tr = volume.get_matrix(); - assert(volume.text_configuration.has_value()); - - auto calc_offset = [&screen_coor, &volume_tr, &camera, &volume](const Transform3d &instrance_tr) -> Vec2d { - Transform3d to_world = instrance_tr * volume_tr; - - // Use fix of .3mf loaded tranformation when exist - if (volume.text_configuration->fix_3mf_tr.has_value()) - to_world = to_world * (*volume.text_configuration->fix_3mf_tr); - // zero point of volume in world coordinate system - Vec3d volume_center = to_world.translation(); - // screen coordinate of volume center - Vec2i coor = CameraUtils::project(camera, volume_center); - return coor.cast() - screen_coor; - }; - - auto object = volume.get_object(); - assert(!object->instances.empty()); - // Speed up for one instance - if (object->instances.size() == 1) - return calc_offset(object->instances.front()->get_matrix()); - - Vec2d nearest_offset; - double nearest_offset_size = std::numeric_limits::max(); - for (const ModelInstance *instance : object->instances) { - Vec2d offset = calc_offset(instance->get_matrix()); - double offset_size = offset.norm(); - if (nearest_offset_size < offset_size) - continue; - nearest_offset_size = offset_size; - nearest_offset = offset; - } - return nearest_offset; -} // Calculate scale in world for check in debug [[maybe_unused]] static std::optional calc_scale(const Matrix3d &from, const Matrix3d &to, const Vec3d &dir) @@ -109,7 +65,8 @@ bool on_mouse_surface_drag(const wxMouseEvent &mouse_event, gl_volumes[hovered_idx_] != gl_volume) return false; - const ModelObject *object = get_model_object(*gl_volume, canvas.get_model()->objects); + const ModelObjectPtrs &objects = canvas.get_model()->objects; + const ModelObject *object = get_model_object(*gl_volume, objects); assert(object != nullptr); if (object == nullptr) return false; @@ -148,7 +105,26 @@ bool on_mouse_surface_drag(const wxMouseEvent &mouse_event, // wxCoord == int --> wx/types.h Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); Vec2d mouse_pos = mouse_coord.cast(); - Vec2d mouse_offset = calc_screen_offset_to_volume_center(mouse_pos, *volume, camera); + + // world_matrix_fixed() without sla shift + Transform3d to_world = world_matrix_fixed(*gl_volume, objects); + + // zero point of volume in world coordinate system + Vec3d volume_center = to_world.translation(); + // screen coordinate of volume center + Vec2i coor = CameraUtils::project(camera, volume_center); + Vec2d mouse_offset = coor.cast() - mouse_pos; + Vec2d mouse_offset_without_sla_shift = mouse_offset; + if (double sla_shift = gl_volume->get_sla_shift_z(); !is_approx(sla_shift, 0.)) { + Transform3d to_world_without_sla_move = instance->get_matrix() * volume->get_matrix(); + if (volume->text_configuration.has_value() && volume->text_configuration->fix_3mf_tr.has_value()) + to_world_without_sla_move = to_world_without_sla_move * (*volume->text_configuration->fix_3mf_tr); + // zero point of volume in world coordinate system + volume_center = to_world_without_sla_move.translation(); + // screen coordinate of volume center + coor = CameraUtils::project(camera, volume_center); + mouse_offset_without_sla_shift = coor.cast() - mouse_pos; + } Transform3d volume_tr = gl_volume->get_volume_transformation().get_matrix(); @@ -165,7 +141,7 @@ bool on_mouse_surface_drag(const wxMouseEvent &mouse_event, std::optional start_angle; if (up_limit.has_value()) start_angle = Emboss::calc_up(world_tr, *up_limit); - surface_drag = SurfaceDrag{mouse_offset, world_tr, instance_tr_inv, gl_volume, condition, start_angle}; + surface_drag = SurfaceDrag{mouse_offset, world_tr, instance_tr_inv, gl_volume, condition, start_angle, true, mouse_offset_without_sla_shift}; // disable moving with object by mouse canvas.enable_moving(false); @@ -181,7 +157,7 @@ bool on_mouse_surface_drag(const wxMouseEvent &mouse_event, // wxCoord == int --> wx/types.h Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); Vec2d mouse_pos = mouse_coord.cast(); - Vec2d offseted_mouse = mouse_pos + surface_drag->mouse_offset; + Vec2d offseted_mouse = mouse_pos + surface_drag->mouse_offset_without_sla_shift; std::optional hit = ray_from_camera( raycast_manager, offseted_mouse, camera, &surface_drag->condition); diff --git a/src/slic3r/GUI/SurfaceDrag.hpp b/src/slic3r/GUI/SurfaceDrag.hpp index bb2600c28f..48d6a33fe2 100644 --- a/src/slic3r/GUI/SurfaceDrag.hpp +++ b/src/slic3r/GUI/SurfaceDrag.hpp @@ -39,6 +39,9 @@ struct SurfaceDrag // Flag whether coordinate hit some volume bool exist_hit = true; + + // hold screen coor offset of cursor from object center without SLA shift + Vec2d mouse_offset_without_sla_shift; }; /// diff --git a/tests/libslic3r/test_arachne.cpp b/tests/libslic3r/test_arachne.cpp index c4564f77c5..61792c37f9 100644 --- a/tests/libslic3r/test_arachne.cpp +++ b/tests/libslic3r/test_arachne.cpp @@ -689,4 +689,58 @@ TEST_CASE("Arachne - #8846 - Degenerated Voronoi diagram - Voronoi edges interse // Total extrusion length should be around 500mm when the part is ok and 680mm when it has perimeters in places where they shouldn't be. REQUIRE(total_extrusion_length <= scaled(500.)); +} + +// This test case was distilled from GitHub issue #10034. +// In this test case previous rotation by PI / 6 wasn't able to fix non-planar Voronoi diagram. +TEST_CASE("Arachne - #10034 - Degenerated Voronoi diagram - That wasn't fixed by rotation by PI / 6", "[ArachneDegeneratedDiagram10034RotationNotWorks]") { + Polygon poly_0 = { + Point(43612632, -25179766), Point(58456010, 529710), Point(51074898, 17305660), Point(49390982, 21042355), + Point(48102357, 23840161), Point(46769686, 26629546), Point(45835761, 28472742), Point(45205450, 29623133), + Point(45107431, 29878059), Point(45069846, 30174950), Point(45069846, 50759533), Point(-45069846, 50759533), + Point(-45069852, 29630557), Point(-45105780, 29339980), Point(-45179725, 29130704), Point(-46443313, 26398986), + Point(-52272109, 13471493), Point(-58205450, 95724), Point(-29075091, -50359531), Point(29075086, -50359531), + }; + + Polygon poly_1 = { + Point(-37733905, 45070445), Point(-37813254, 45116257), Point(-39353851, 47784650), Point(-39353851, 47876274), + Point(-38632470, 49125743), Point(-38553121, 49171555), Point(-33833475, 49171555), Point(-33754126, 49125743), + Point(-33032747, 47876277), Point(-33032747, 47784653), Point(-34007855, 46095721), Point(-34573350, 45116257), + Point(-34652699, 45070445), + }; + + Polygon poly_2 = { + Point(-44016799, 40706401), Point(-44116953, 40806555), Point(-44116953, 46126289), Point(-44016799, 46226443), + Point(-42211438, 46226443), Point(-42132089, 46180631), Point(-40591492, 43512233), Point(-40591492, 43420609), + Point(-41800123, 41327194), Point(-42132089, 40752213), Point(-42211438, 40706401), + }; + + Polygon poly_3 = { + Point(6218189, 10966609), Point(6138840, 11012421), Point(4598238, 13680817), Point(4598238, 13772441), Point(6138840, 16440843), + Point(6218189, 16486655), Point(9299389, 16486655), Point(9378738, 16440843), Point(10919340, 13772441), Point(10919340, 13680817), + Point(10149039, 12346618), Point(9378738, 11012421), Point(9299389, 10966609), + }; + + Polygon poly_4 = { + Point(13576879, 6718065), Point(13497530, 6763877), Point(11956926, 9432278), Point(11956926, 9523902), + Point(13497528, 12192302), Point(13576877, 12238114), Point(16658079, 12238112), Point(16737428, 12192300), + Point(18278031, 9523904), Point(18278031, 9432280), Point(17507729, 8098077), Point(16737428, 6763877), + Point(16658079, 6718065), + }; + + Polygons polygons = { + poly_0, poly_1, poly_2, poly_3, poly_4, + }; + + coord_t ext_perimeter_spacing = 407079; + coord_t perimeter_spacing = 407079; + coord_t inset_count = 1; + + Arachne::WallToolPaths wall_tool_paths(polygons, ext_perimeter_spacing, perimeter_spacing, inset_count, 0, 0.2, PrintObjectConfig::defaults(), PrintConfig::defaults()); + wall_tool_paths.generate(); + std::vector perimeters = wall_tool_paths.getToolPaths(); + +#ifdef ARACHNE_DEBUG_OUT + export_perimeters_to_svg(debug_out_path("arachne-degenerated-diagram-10034-rotation-not-works.svg"), polygons, perimeters, union_ex(wall_tool_paths.getInnerContour())); +#endif } \ No newline at end of file