diff --git a/resources/profiles/Voron/Voron_v1_350_afterburner_thumbnail.png b/resources/profiles/Voron/Voron_v1_350_afterburner_thumbnail.png
new file mode 100644
index 0000000000..07c3202cac
Binary files /dev/null and b/resources/profiles/Voron/Voron_v1_350_afterburner_thumbnail.png differ
diff --git a/resources/profiles/Voron/printbed-v1-350.stl b/resources/profiles/Voron/printbed-v1-350.stl
new file mode 100644
index 0000000000..3a7e16b997
Binary files /dev/null and b/resources/profiles/Voron/printbed-v1-350.stl differ
diff --git a/resources/profiles/Zonestar.idx b/resources/profiles/Zonestar.idx
new file mode 100644
index 0000000000..7259ff432e
--- /dev/null
+++ b/resources/profiles/Zonestar.idx
@@ -0,0 +1,2 @@
+min_slic3r_version = 2.4.1
+1.0.0 Initial version
diff --git a/resources/profiles/Zonestar.ini b/resources/profiles/Zonestar.ini
new file mode 100644
index 0000000000..286000f19f
--- /dev/null
+++ b/resources/profiles/Zonestar.ini
@@ -0,0 +1,744 @@
+# Zonestar print profiles
+
+# based on https://github.com/slic3r/slic3r-profiles/pull/19 by @ZONESTAR3D
+
+[vendor]
+# Vendor name will be shown by the Config Wizard.
+name = Zonestar
+# 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.0.0
+# Where to get the updates from?
+config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Zonestar/
+
+# The printer models will be shown by the Configuration Wizard in this order,
+# 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:Z5]
+name = Zonestar Z5
+variants = 0.4
+technology = FFF
+bed_model = bed_220.stl
+bed_texture = 220_texture.svg
+default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
+
+[printer_model:Z6]
+name = Zonestar Z6
+variants = 0.4
+technology = FFF
+bed_model = bed_150.stl
+bed_texture = 150_texture.svg
+default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
+
+[printer_model:Z5X]
+name = Zonestar Z5X
+variants = 0.4
+technology = FFF
+bed_model = bed_310.stl
+bed_texture = 310_texture.svg
+default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
+
+[printer_model:Z8]
+name = Zonestar Z8
+variants = 0.4
+technology = FFF
+bed_model = bed_310.stl
+bed_texture = 310_texture.svg
+default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
+
+[printer_model:Z9]
+name = Zonestar Z9
+variants = 0.4
+technology = FFF
+bed_model = bed_310.stl
+bed_texture = 310_texture.svg
+default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
+
+###################
+#### print ####
+###################
+
+[print:*common*]
+avoid_crossing_perimeters = 0
+avoid_crossing_perimeters_max_detour = 0
+bottom_fill_pattern = monotonic
+bottom_solid_layers = 4
+bottom_solid_min_thickness = 0
+bridge_acceleration = 0
+bridge_angle = 0
+bridge_flow_ratio = 1
+bridge_speed = 60
+brim_separation = 0
+brim_type = outer_only
+brim_width = 4
+clip_multipart_objects = 1
+complete_objects = 0
+default_acceleration = 0
+dont_support_bridges = 1
+draft_shield = disabled
+elefant_foot_compensation = 0
+ensure_vertical_shell_thickness = 1
+external_perimeter_extrusion_width = 0.45
+external_perimeter_speed = 50%
+external_perimeters_first = 0
+extra_perimeters = 0
+extruder_clearance_height = 20
+extruder_clearance_radius = 20
+extrusion_width = 0.45
+fill_angle = 45
+fill_density = 20%
+fill_pattern = grid
+first_layer_acceleration = 0
+first_layer_acceleration_over_raft = 0
+first_layer_extrusion_width = 0.45
+first_layer_height = 0.3
+first_layer_speed = 25
+first_layer_speed_over_raft = 30
+fuzzy_skin = none
+fuzzy_skin_point_dist = 0.8
+fuzzy_skin_thickness = 0.3
+gap_fill_enabled = 1
+gap_fill_speed = 20
+gcode_comments = 0
+gcode_label_objects = 0
+gcode_resolution = 0.0125
+gcode_substitutions =
+infill_acceleration = 0
+infill_anchor = 600%
+infill_anchor_max = 50
+infill_every_layers = 1
+infill_extruder = 1
+infill_extrusion_width = 0.45
+infill_first = 0
+infill_only_where_needed = 0
+infill_overlap = 25%
+infill_speed = 60
+inherits =
+interface_shells = 0
+ironing = 0
+ironing_flowrate = 15%
+ironing_spacing = 0.1
+ironing_speed = 15
+ironing_type = top
+layer_height = 0.2
+max_print_speed = 80
+max_volumetric_speed = 0
+min_skirt_length = 0
+mmu_segmented_region_max_width = 0
+notes =
+only_retract_when_crossing_perimeters = 0
+ooze_prevention = 0
+output_filename_format = {printer_model}_{input_filename_base}.gcode
+overhangs = 1
+perimeter_acceleration = 0
+perimeter_extruder = 1
+perimeter_extrusion_width = 0.45
+perimeter_speed = 50
+perimeters = 3
+post_process =
+print_settings_id =
+raft_contact_distance = 0.1
+raft_expansion = 1.5
+raft_first_layer_density = 90%
+raft_first_layer_expansion = 3
+raft_layers = 0
+resolution = 0
+seam_position = aligned
+single_extruder_multi_material_priming = 0
+skirt_distance = 6
+skirt_height = 1
+skirts = 0
+slice_closing_radius = 0.049
+slicing_mode = regular
+small_perimeter_speed = 15
+solid_infill_below_area = 0
+solid_infill_every_layers = 0
+solid_infill_extruder = 1
+solid_infill_extrusion_width = 0.45
+solid_infill_speed = 20
+spiral_vase = 0
+standby_temperature_delta = -5
+support_material = 0
+support_material_angle = 0
+support_material_auto = 1
+support_material_bottom_contact_distance = 0
+support_material_bottom_interface_layers = -1
+support_material_buildplate_only = 0
+support_material_closing_radius = 2
+support_material_contact_distance = 0.2
+support_material_enforce_layers = 0
+support_material_extruder = 1
+support_material_extrusion_width = 0.35
+support_material_interface_contact_loops = 0
+support_material_interface_extruder = 1
+support_material_interface_layers = 3
+support_material_interface_pattern = rectilinear
+support_material_interface_spacing = 0
+support_material_interface_speed = 100%
+support_material_pattern = rectilinear
+support_material_spacing = 2.5
+support_material_speed = 60
+support_material_style = grid
+support_material_synchronize_layers = 0
+support_material_threshold = 0
+support_material_with_sheath = 1
+support_material_xy_spacing = 50%
+thick_bridges = 1
+thin_walls = 0
+threads = 4
+top_fill_pattern = monotonic
+top_infill_extrusion_width = 0.4
+top_solid_infill_speed = 15
+top_solid_layers = 5
+top_solid_min_thickness = 0
+travel_speed = 100
+travel_speed_z = 0
+wipe_tower = 0
+xy_size_compensation = 0
+compatible_printers_condition = nozzle_diameter[0]==0.4 and num_extruders==1
+
+[print:0.20mm @Zonestar MULTI]
+inherits = *common*
+wipe_tower = 1
+wipe_tower_x = 125
+wipe_tower_y = 195
+compatible_printers_condition = nozzle_diameter[0]==0.4 and num_extruders>1
+
+
+[print:0.20mm @Zonestar SINGLE]
+inherits = *common*
+
+###################
+#### filament ####
+###################
+[filament:Generic ABS @Zonestar]
+bed_temperature = 100
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+extrusion_multiplier = 1
+fan_always_on = 0
+fan_below_layer_time = 60
+filament_colour = #29B2B2
+filament_cooling_final_speed = 3.4
+filament_cooling_initial_speed = 2.2
+filament_cooling_moves = 4
+filament_cost = 0
+filament_density = 0
+filament_diameter = 1.75
+filament_load_time = 0
+filament_loading_speed = 28
+filament_loading_speed_start = 3
+filament_minimal_purge_on_wipe_tower = 50
+filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
+filament_type = ABS
+filament_unloading_speed = 40
+filament_unloading_speed_start = 60
+filament_vendor = Generic
+first_layer_bed_temperature = 100
+first_layer_temperature = 245
+max_fan_speed = 0
+min_fan_speed = 0
+min_print_speed = 15
+slowdown_below_layer_time = 25
+temperature = 245
+
+[filament:Generic PETG @Zonestar]
+bed_temperature = 70
+bridge_fan_speed = 100
+cooling = 1
+disable_fan_first_layers = 3
+end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
+extrusion_multiplier = 1
+fan_always_on = 1
+fan_below_layer_time = 60
+filament_colour = #29B2B2
+filament_cooling_final_speed = 3.4
+filament_cooling_initial_speed = 2.2
+filament_cooling_moves = 4
+filament_diameter = 1.75
+filament_loading_speed = 28
+filament_loading_speed_start = 3
+filament_max_volumetric_speed = 0
+filament_minimal_purge_on_wipe_tower = 50
+filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
+filament_spool_weight = 0
+filament_toolchange_delay = 0
+filament_type = PETG
+filament_unloading_speed = 40
+filament_unloading_speed_start = 60
+filament_vendor = Generic
+first_layer_bed_temperature = 70
+first_layer_temperature = 210
+full_fan_speed_layer = 0
+max_fan_speed = 50
+min_fan_speed = 25
+min_print_speed = 10
+slowdown_below_layer_time = 5
+start_filament_gcode = "; Filament gcode\n"
+temperature = 210
+
+[filament:Generic PLA @Zonestar]
+bed_temperature = 60
+bridge_fan_speed = 100
+cooling = 1
+disable_fan_first_layers = 3
+extrusion_multiplier = 1
+fan_always_on = 1
+fan_below_layer_time = 60
+filament_colour = #29B2B2
+filament_cooling_final_speed = 3.4
+filament_cooling_initial_speed = 2.2
+filament_cooling_moves = 4
+filament_cost = 0
+filament_density = 0
+filament_diameter = 1.75
+filament_loading_speed = 28
+filament_loading_speed_start = 3
+filament_max_volumetric_speed = 0
+filament_minimal_purge_on_wipe_tower = 50
+filament_notes = ""
+filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
+filament_toolchange_delay = 0
+filament_type = PLA
+filament_unloading_speed = 40
+filament_unloading_speed_start = 60
+filament_vendor = Generic
+filament_wipe = nil
+first_layer_bed_temperature = 60
+first_layer_temperature = 200
+full_fan_speed_layer = 5
+max_fan_speed = 100
+min_fan_speed = 50
+min_print_speed = 10
+slowdown_below_layer_time = 5
+temperature = 200
+
+[filament:Generic TPU @Zonestar]
+bed_temperature = 50
+bridge_fan_speed = 100
+cooling = 1
+disable_fan_first_layers = 3
+extrusion_multiplier = 1
+fan_always_on = 0
+fan_below_layer_time = 60
+filament_colour = #29B2B2
+filament_cooling_final_speed = 3.4
+filament_cooling_initial_speed = 2.2
+filament_cooling_moves = 4
+filament_diameter = 1.75
+filament_loading_speed = 28
+filament_loading_speed_start = 3
+filament_max_volumetric_speed = 3
+filament_minimal_purge_on_wipe_tower = 50
+filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
+filament_toolchange_delay = 0
+filament_type = FLEX
+filament_unloading_speed = 30
+filament_unloading_speed_start = 30
+filament_vendor = Generic
+first_layer_bed_temperature = 50
+first_layer_temperature = 225
+full_fan_speed_layer = 0
+max_fan_speed = 100
+min_fan_speed = 50
+min_print_speed = 10
+slowdown_below_layer_time = 5
+temperature = 225
+
+###################
+#### printer ####
+###################
+[printer:*common*]
+printer_technology = FFF
+before_layer_gcode =
+between_objects_gcode =
+color_change_gcode = M600
+cooling_tube_retraction = 35
+default_filament_profile =
+default_print_profile =
+deretract_speed =
+end_gcode =
+extra_loading_move = -2
+gcode_flavor = marlin2
+high_current_on_filament_swap = 0
+host_type = octoprint
+layer_gcode =
+machine_limits_usage = ignore
+machine_max_acceleration_e = 10000
+machine_max_acceleration_extruding = 1500
+machine_max_acceleration_retracting = 1500
+machine_max_acceleration_travel = 1500
+machine_max_acceleration_x = 9000
+machine_max_acceleration_y = 9000
+machine_max_acceleration_z = 500
+machine_max_feedrate_e = 120
+machine_max_feedrate_x = 500
+machine_max_feedrate_y = 500
+machine_max_feedrate_z = 12
+machine_max_jerk_e = 2.5
+machine_max_jerk_x = 10
+machine_max_jerk_y = 10
+machine_max_jerk_z = 0.2
+machine_min_extruding_rate = 0
+machine_min_travel_rate = 0
+max_layer_height = 0.3
+min_layer_height = 0.1
+nozzle_diameter = 0.4
+pause_print_gcode =
+remaining_times = 0
+retract_speed = 40
+silent_mode = 0
+single_extruder_multi_material = 0
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_firmware_retraction = 0
+use_relative_e_distances = 1
+use_volumetric_e = 0
+variable_layer_height = 0
+wipe = 0
+z_offset = 0
+
+[printer:Zonestar Z5+M2 HOTEND]
+inherits = *common*
+printer_model = Z5
+printer_variant = 0.4
+bed_shape = 0x0,220x0,220x220,0x220
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar MULTI
+deretract_speed = 30,30
+before_layer_gcode = G92 E0
+end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #FF0000;#00FF00
+extruder_offset = 0x0,0x0
+max_layer_height = 0.3,0.3
+max_print_height = 220
+min_layer_height = 0.15,0.15
+nozzle_diameter = 0.4,0.4
+retract_before_travel = 2,2
+retract_before_wipe = 0%
+retract_layer_change = 0
+retract_length = 10,10
+retract_length_toolchange = 0,0
+retract_lift = 0,0
+retract_lift_above = 0,0
+retract_lift_below = 0,0
+retract_restart_extra = 0,0
+retract_restart_extra_toolchange = 0,0
+retract_speed = 35,35
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 1
+wipe = 0,0
+
+
+[printer:Zonestar Z6]
+inherits = *common*
+printer_model = Z6
+printer_variant = 0.4
+bed_shape = 0x0,150x0,150x150,0x150
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar SINGLE
+deretract_speed = 30
+end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #00FF00
+extruder_offset = 0x0
+min_layer_height = 0.1
+max_layer_height = 0.3
+max_print_height = 150
+nozzle_diameter = 0.4
+retract_before_travel = 2
+retract_before_wipe = 0%
+retract_layer_change = 0
+retract_length = 6.5
+retract_length_toolchange = 0
+retract_lift = 0
+retract_lift_above = 0
+retract_lift_below = 0
+retract_restart_extra = 0
+retract_restart_extra_toolchange = 0
+retract_speed = 40
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000; lift nozzle\nG1 X5 Y5 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y100 E8 F600 ; prime nozzle\nG1 Y50 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 0
+
+[printer:Zonestar Z5X]
+inherits = *common*
+printer_model = Z5X
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar SINGLE
+deretract_speed = 30
+end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #00FF00
+extruder_offset = 0x0
+min_layer_height = 0.1
+max_layer_height = 0.3
+max_print_height = 400
+nozzle_diameter = 0.4
+retract_before_travel = 2
+retract_before_wipe = 0%
+retract_layer_change = 0
+retract_length = 6.5
+retract_length_toolchange = 0
+retract_lift = 0
+retract_lift_above = 0
+retract_lift_below = 0
+retract_restart_extra = 0
+retract_restart_extra_toolchange = 0
+retract_speed = 40
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000; lift nozzle\nG1 X5 Y5 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y50 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 0
+
+#Z8 with different types of hotend
+[printer:Zonestar Z8+M3 HOTEND]
+inherits = *common*
+printer_model = Z8
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar MULTI
+deretract_speed = 30,30,30
+before_layer_gcode = G92 E0
+end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #FF0000;#00FF00;#0000FF
+extruder_offset = 0x0,0x0,0x0
+max_layer_height = 0.3,0.3,0.3
+max_print_height = 400
+min_layer_height = 0.15,0.15,0.15
+nozzle_diameter = 0.4,0.4,0.4
+retract_before_travel = 2,2,2
+retract_before_wipe = 0%,0%,0%
+retract_layer_change = 0,0,0
+retract_length = 10,10,10
+retract_length_toolchange = 0,0,0
+retract_lift = 0,0,0
+retract_lift_above = 0,0,0
+retract_lift_below = 0,0,0
+retract_restart_extra = 0,0,0
+retract_restart_extra_toolchange = 0,0,0
+retract_speed = 35,35,35
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 1
+wipe = 0,0,0
+layer_gcode = G92 E0
+
+[printer:Zonestar Z8+M4 HOTEND]
+inherits = *common*
+printer_model = Z8
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar MULTI
+deretract_speed = 30,30,30,30
+before_layer_gcode = G92 E0
+end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF
+extruder_offset = 0x0,0x0,0x0,0x0
+max_layer_height = 0.3,0.3,0.3,0.3
+max_print_height = 400
+min_layer_height = 0.15,0.15,0.15,0.15
+nozzle_diameter = 0.4,0.4,0.4,0.4
+retract_before_travel = 2,2,2,2
+retract_before_wipe = 0%,0%,0%,0%
+retract_layer_change = 0,0,0,0
+retract_length = 10,10,10,10
+retract_length_toolchange = 0,0,0,0
+retract_lift = 0,0,0,0
+retract_lift_above = 0,0,0,0
+retract_lift_below = 0,0,0,0
+retract_restart_extra = 0,0,0,0
+retract_restart_extra_toolchange = 0,0,0,0
+retract_speed = 35,35,35,35
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 1
+wipe = 0,0,0,0
+layer_gcode = G92 E0
+
+[printer:Zonestar Z8+E4 HOTEND]
+inherits = *common*
+printer_model = Z8
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar MULTI
+deretract_speed = 30,30,30,30
+before_layer_gcode = G92 E0
+end_gcode = G1 E-30 F2100 ;pull out filament\nG28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF
+extruder_offset = 0x0,0x0,0x0,0x0
+max_layer_height = 0.3,0.3,0.3,0.3
+max_print_height = 400
+min_layer_height = 0.1,0.1,0.1,0.1
+nozzle_diameter = 0.4,0.4,0.4,0.4
+retract_before_travel = 2,2,2,2
+retract_before_wipe = 0%,0%,0%,0%
+retract_layer_change = 0,0,0,0
+retract_length = 8,8,8,8
+retract_length_toolchange = 0,0,0,0
+retract_lift = 0,0,0,0
+retract_lift_above = 0,0,0,0
+retract_lift_below = 0,0,0,0
+retract_restart_extra = 0,0,0,0
+retract_restart_extra_toolchange = 0,0,0,0
+retract_speed = 35,35,35,35
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+toolchange_gcode = G92 E0\nG1 E-30 F1200;pull filament\nG92 E0\nT[next_extruder];Change extruder\nG92 E0\nG1 E15 F1800; push filament-1\nG1 E25 F900; pushfilament-2\nG1 E29 F1200; push filament-3\nG92 E0
+use_relative_e_distances = 1
+wipe = 0,0,0,0
+layer_gcode = G92 E0
+
+[printer:Zonestar Z8+DDE]
+inherits = *common*
+printer_model = Z8
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic TPU @Zonestar
+default_print_profile = 0.20mm @Zonestar SINGLE
+deretract_speed = 30
+end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #00FF00
+extruder_offset = 0x0
+max_layer_height = 0.3
+max_print_height = 400
+min_layer_height = 0.1
+nozzle_diameter = 0.4
+retract_before_travel = 2
+retract_before_wipe = 0%
+retract_layer_change = 0
+retract_length = 6.5
+retract_length_toolchange = 0
+retract_lift = 0
+retract_lift_above = 0
+retract_lift_below = 0
+retract_restart_extra = 0
+retract_restart_extra_toolchange = 0
+retract_speed = 40
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 0
+
+#Z9 with different types of hotend
+[printer:Zonestar Z9+M3 HOTEND]
+inherits = *common*
+printer_model = Z9
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar MULTI
+deretract_speed = 30,30,30
+before_layer_gcode = G92 E0
+end_gcode = G28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #FF0000;#00FF00;#0000FF
+extruder_offset = 0x0,0x0,0x0
+max_layer_height = 0.3,0.3,0.3
+max_print_height = 400
+min_layer_height = 0.15,0.15,0.15
+nozzle_diameter = 0.4,0.4,0.4
+retract_before_travel = 2,2,2
+retract_before_wipe = 0%,0%,0%
+retract_layer_change = 0,0,0
+retract_length = 10,10,10
+retract_length_toolchange = 0,0,0
+retract_lift = 0,0,0
+retract_lift_above = 0,0,0
+retract_lift_below = 0,0,0
+retract_restart_extra = 0,0,0
+retract_restart_extra_toolchange = 0,0,0
+retract_speed = 35,35,35
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 1
+wipe = 0,0,0
+layer_gcode = G92 E0
+
+[printer:Zonestar Z9+M4 HOTEND]
+inherits = *common*
+printer_model = Z9
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar MULTI
+deretract_speed = 30,30,30,30
+before_layer_gcode = G92 E0
+end_gcode = G28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF
+extruder_offset = 0x0,0x0,0x0,0x0
+max_layer_height = 0.3,0.3,0.3,0.3
+max_print_height = 400
+min_layer_height = 0.15,0.15,0.15,0.15
+nozzle_diameter = 0.4,0.4,0.4,0.4
+retract_before_travel = 2,2,2,2
+retract_before_wipe = 0%,0%,0%,0%
+retract_layer_change = 0,0,0,0
+retract_length = 10,10,10,10
+retract_length_toolchange = 0,0,0,0
+retract_lift = 0,0,0,0
+retract_lift_above = 0,0,0,0
+retract_lift_below = 0,0,0,0
+retract_restart_extra = 0,0,0,0
+retract_restart_extra_toolchange = 0,0,0,0
+retract_speed = 35,35,35,35
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 1
+wipe = 0,0,0,0
+layer_gcode = G92 E0
+
+[printer:Zonestar Z9+E4 HOTEND]
+inherits = *common*
+printer_model = Z9
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic PLA @Zonestar
+default_print_profile = 0.20mm @Zonestar MULTI
+deretract_speed = 30,30,30,30
+before_layer_gcode = G92 E0
+end_gcode = G1 E-30 F2100 ;pull out filament\nG28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF
+extruder_offset = 0x0,0x0,0x0,0x0
+max_layer_height = 0.3,0.3,0.3,0.3
+max_print_height = 400
+min_layer_height = 0.1,0.1,0.1,0.1
+nozzle_diameter = 0.4,0.4,0.4,0.4
+retract_before_travel = 2,2,2,2
+retract_before_wipe = 0%,0%,0%,0%
+retract_layer_change = 0,0,0,0
+retract_length = 8,8,8,8
+retract_length_toolchange = 0,0,0,0
+retract_lift = 0,0,0,0
+retract_lift_above = 0,0,0,0
+retract_lift_below = 0,0,0,0
+retract_restart_extra = 0,0,0,0
+retract_restart_extra_toolchange = 0,0,0,0
+retract_speed = 35,35,35,35
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+toolchange_gcode = G92 E0\nG1 E-30 F1200;pull filament\nG92 E0\nT[next_extruder];Change extruder\nG92 E0\nG1 E15 F1800; push filament-1\nG1 E25 F900; pushfilament-2\nG1 E29 F1200; push filament-3\nG92 E0
+use_relative_e_distances = 1
+wipe = 0,0,0,0
+layer_gcode = G92 E0
+
+[printer:Zonestar Z9+DDE]
+inherits = *common*
+printer_model = Z9
+printer_variant = 0.4
+bed_shape = 0x0,310x0,310x310,0x310
+default_filament_profile = Generic TPU @Zonestar
+default_print_profile = 0.20mm @Zonestar SINGLE
+deretract_speed = 30
+end_gcode = G28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors
+extruder_colour = #00FF00
+extruder_offset = 0x0
+max_layer_height = 0.3
+max_print_height = 400
+min_layer_height = 0.1
+nozzle_diameter = 0.4
+retract_before_travel = 2
+retract_before_wipe = 0%
+retract_layer_change = 0
+retract_length = 6.5
+retract_length_toolchange = 0
+retract_lift = 0
+retract_lift_above = 0
+retract_lift_below = 0
+retract_restart_extra = 0
+retract_restart_extra_toolchange = 0
+retract_speed = 40
+start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
+use_relative_e_distances = 0
diff --git a/resources/profiles/Zonestar/150_texture.svg b/resources/profiles/Zonestar/150_texture.svg
new file mode 100644
index 0000000000..32e4ec4a39
--- /dev/null
+++ b/resources/profiles/Zonestar/150_texture.svg
@@ -0,0 +1,142 @@
+
+
diff --git a/resources/profiles/Zonestar/220_texture.svg b/resources/profiles/Zonestar/220_texture.svg
new file mode 100644
index 0000000000..079e498ec5
--- /dev/null
+++ b/resources/profiles/Zonestar/220_texture.svg
@@ -0,0 +1,198 @@
+
+
diff --git a/resources/profiles/Zonestar/310_texture.svg b/resources/profiles/Zonestar/310_texture.svg
new file mode 100644
index 0000000000..1d60390197
--- /dev/null
+++ b/resources/profiles/Zonestar/310_texture.svg
@@ -0,0 +1,270 @@
+
+
diff --git a/resources/profiles/Zonestar/Z5X_thumbnail.png b/resources/profiles/Zonestar/Z5X_thumbnail.png
new file mode 100644
index 0000000000..5abdfea426
Binary files /dev/null and b/resources/profiles/Zonestar/Z5X_thumbnail.png differ
diff --git a/resources/profiles/Zonestar/Z5_thumbnail.png b/resources/profiles/Zonestar/Z5_thumbnail.png
new file mode 100644
index 0000000000..5a7fc70c4b
Binary files /dev/null and b/resources/profiles/Zonestar/Z5_thumbnail.png differ
diff --git a/resources/profiles/Zonestar/Z6_thumbnail.png b/resources/profiles/Zonestar/Z6_thumbnail.png
new file mode 100644
index 0000000000..62f25553ed
Binary files /dev/null and b/resources/profiles/Zonestar/Z6_thumbnail.png differ
diff --git a/resources/profiles/Zonestar/Z8_thumbnail.png b/resources/profiles/Zonestar/Z8_thumbnail.png
new file mode 100644
index 0000000000..24c0657561
Binary files /dev/null and b/resources/profiles/Zonestar/Z8_thumbnail.png differ
diff --git a/resources/profiles/Zonestar/Z9_thumbnail.png b/resources/profiles/Zonestar/Z9_thumbnail.png
new file mode 100644
index 0000000000..e8b093cc51
Binary files /dev/null and b/resources/profiles/Zonestar/Z9_thumbnail.png differ
diff --git a/resources/profiles/Zonestar/bed_150.stl b/resources/profiles/Zonestar/bed_150.stl
new file mode 100644
index 0000000000..bb18542717
Binary files /dev/null and b/resources/profiles/Zonestar/bed_150.stl differ
diff --git a/resources/profiles/Zonestar/bed_220.stl b/resources/profiles/Zonestar/bed_220.stl
new file mode 100644
index 0000000000..8610b8ff61
Binary files /dev/null and b/resources/profiles/Zonestar/bed_220.stl differ
diff --git a/resources/profiles/Zonestar/bed_310.stl b/resources/profiles/Zonestar/bed_310.stl
new file mode 100644
index 0000000000..2e5f544427
Binary files /dev/null and b/resources/profiles/Zonestar/bed_310.stl differ
diff --git a/resources/shaders/110/flat_clip.fs b/resources/shaders/110/flat_clip.fs
new file mode 100644
index 0000000000..ececb8eb1a
--- /dev/null
+++ b/resources/shaders/110/flat_clip.fs
@@ -0,0 +1,15 @@
+#version 110
+
+const vec3 ZERO = vec3(0.0, 0.0, 0.0);
+
+uniform vec4 uniform_color;
+
+varying vec3 clipping_planes_dots;
+
+void main()
+{
+ if (any(lessThan(clipping_planes_dots, ZERO)))
+ discard;
+
+ gl_FragColor = uniform_color;
+}
diff --git a/resources/shaders/110/flat_clip.vs b/resources/shaders/110/flat_clip.vs
new file mode 100644
index 0000000000..cdf7d4b3b2
--- /dev/null
+++ b/resources/shaders/110/flat_clip.vs
@@ -0,0 +1,23 @@
+#version 110
+
+uniform mat4 view_model_matrix;
+uniform mat4 projection_matrix;
+uniform mat4 volume_world_matrix;
+
+// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane.
+uniform vec2 z_range;
+// Clipping plane - general orientation. Used by the SLA gizmo.
+uniform vec4 clipping_plane;
+
+attribute vec3 v_position;
+
+varying vec3 clipping_planes_dots;
+
+void main()
+{
+ // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded.
+ vec4 world_pos = volume_world_matrix * vec4(v_position, 1.0);
+ clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z);
+
+ gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
+}
diff --git a/resources/shaders/140/flat_clip.fs b/resources/shaders/140/flat_clip.fs
new file mode 100644
index 0000000000..b77e0bfaa6
--- /dev/null
+++ b/resources/shaders/140/flat_clip.fs
@@ -0,0 +1,17 @@
+#version 140
+
+const vec3 ZERO = vec3(0.0, 0.0, 0.0);
+
+uniform vec4 uniform_color;
+
+in vec3 clipping_planes_dots;
+
+out vec4 out_color;
+
+void main()
+{
+ if (any(lessThan(clipping_planes_dots, ZERO)))
+ discard;
+
+ out_color = uniform_color;
+}
diff --git a/resources/shaders/140/flat_clip.vs b/resources/shaders/140/flat_clip.vs
new file mode 100644
index 0000000000..40cddf1e5a
--- /dev/null
+++ b/resources/shaders/140/flat_clip.vs
@@ -0,0 +1,23 @@
+#version 140
+
+uniform mat4 view_model_matrix;
+uniform mat4 projection_matrix;
+uniform mat4 volume_world_matrix;
+
+// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane.
+uniform vec2 z_range;
+// Clipping plane - general orientation. Used by the SLA gizmo.
+uniform vec4 clipping_plane;
+
+in vec3 v_position;
+
+out vec3 clipping_planes_dots;
+
+void main()
+{
+ // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded.
+ vec4 world_pos = volume_world_matrix * vec4(v_position, 1.0);
+ clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z);
+
+ gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
+}
diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp
index c31cc07ba8..c9ef93916c 100644
--- a/src/slic3r/GUI/3DScene.cpp
+++ b/src/slic3r/GUI/3DScene.cpp
@@ -1132,8 +1132,8 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab
glsafe(::glEnableClientState(GL_NORMAL_ARRAY));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
- shader->set_uniform("z_range", m_z_range, 2);
- shader->set_uniform("clipping_plane", m_clipping_plane, 4);
+ shader->set_uniform("z_range", m_z_range);
+ shader->set_uniform("clipping_plane", m_clipping_plane);
shader->set_uniform("print_volume.type", static_cast(m_print_volume.type));
shader->set_uniform("print_volume.xy_data", m_print_volume.data);
shader->set_uniform("print_volume.z_data", m_print_volume.zs);
diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp
index a92bac9617..3f6b1361d5 100644
--- a/src/slic3r/GUI/3DScene.hpp
+++ b/src/slic3r/GUI/3DScene.hpp
@@ -591,10 +591,10 @@ private:
PrintVolume m_print_volume;
// z range for clipping in shaders
- float m_z_range[2];
+ std::array m_z_range;
// plane coeffs for clipping in shaders
- float m_clipping_plane[4];
+ std::array m_clipping_plane;
struct Slope
{
@@ -707,7 +707,10 @@ public:
void set_print_volume(const PrintVolume& print_volume) { m_print_volume = print_volume; }
void set_z_range(float min_z, float max_z) { m_z_range[0] = min_z; m_z_range[1] = max_z; }
- void set_clipping_plane(const double* coeffs) { m_clipping_plane[0] = coeffs[0]; m_clipping_plane[1] = coeffs[1]; m_clipping_plane[2] = coeffs[2]; m_clipping_plane[3] = coeffs[3]; }
+ void set_clipping_plane(const std::array& coeffs) { m_clipping_plane = coeffs; }
+
+ const std::array& get_z_range() const { return m_z_range; }
+ const std::array& get_clipping_plane() const { return m_clipping_plane; }
bool is_slope_active() const { return m_slope.active; }
void set_slope_active(bool active) { m_slope.active = active; }
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 8b2e5077c8..3c73f7ed9e 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -5315,14 +5315,18 @@ void GLCanvas3D::_picking_pass()
glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
+#if !ENABLE_LEGACY_OPENGL_REMOVAL
m_camera_clipping_plane = m_gizmos.get_clipping_plane();
if (m_camera_clipping_plane.is_active()) {
::glClipPlane(GL_CLIP_PLANE0, (GLdouble*)m_camera_clipping_plane.get_data());
::glEnable(GL_CLIP_PLANE0);
}
+#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
_render_volumes_for_picking();
+#if !ENABLE_LEGACY_OPENGL_REMOVAL
if (m_camera_clipping_plane.is_active())
::glDisable(GL_CLIP_PLANE0);
+#endif !ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_LEGACY_OPENGL_REMOVAL
const Camera& camera = wxGetApp().plater()->get_camera();
@@ -5849,7 +5853,7 @@ void GLCanvas3D::_render_overlays()
void GLCanvas3D::_render_volumes_for_picking() const
{
#if ENABLE_LEGACY_OPENGL_REMOVAL
- GLShaderProgram* shader = wxGetApp().get_shader("flat");
+ GLShaderProgram* shader = wxGetApp().get_shader("flat_clip");
if (shader == nullptr)
return;
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
@@ -5877,6 +5881,9 @@ void GLCanvas3D::_render_volumes_for_picking() const
const Camera& camera = wxGetApp().plater()->get_camera();
shader->set_uniform("view_model_matrix", camera.get_view_matrix() * volume.first->world_matrix());
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
+ shader->set_uniform("volume_world_matrix", volume.first->world_matrix());
+ shader->set_uniform("z_range", m_volumes.get_z_range());
+ shader->set_uniform("clipping_plane", m_volumes.get_clipping_plane());
#else
glsafe(::glColor4fv(picking_decode(id).data()));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
diff --git a/src/slic3r/GUI/GLShader.cpp b/src/slic3r/GUI/GLShader.cpp
index ce7ff85dc3..1e0b8d24db 100644
--- a/src/slic3r/GUI/GLShader.cpp
+++ b/src/slic3r/GUI/GLShader.cpp
@@ -264,6 +264,12 @@ void GLShaderProgram::set_uniform(int id, const std::array& value) con
glsafe(::glUniform4fv(id, 1, static_cast(value.data())));
}
+void GLShaderProgram::set_uniform(int id, const std::array& value) const
+{
+ const std::array f_value = { float(value[0]), float(value[1]), float(value[2]), float(value[3]) };
+ set_uniform(id, f_value);
+}
+
void GLShaderProgram::set_uniform(int id, const float* value, size_t size) const
{
if (id >= 0) {
diff --git a/src/slic3r/GUI/GLShader.hpp b/src/slic3r/GUI/GLShader.hpp
index e50cf2a6e8..6ad4e01b3a 100644
--- a/src/slic3r/GUI/GLShader.hpp
+++ b/src/slic3r/GUI/GLShader.hpp
@@ -57,6 +57,7 @@ public:
void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); }
void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); }
void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); }
+ void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); }
void set_uniform(const char* name, const float* value, size_t size) const { set_uniform(get_uniform_location(name), value, size); }
void set_uniform(const char* name, const Transform3f& value) const { set_uniform(get_uniform_location(name), value); }
void set_uniform(const char* name, const Transform3d& value) const { set_uniform(get_uniform_location(name), value); }
@@ -85,6 +86,7 @@ public:
void set_uniform(int id, const std::array& value) const;
void set_uniform(int id, const std::array& value) const;
void set_uniform(int id, const std::array& value) const;
+ void set_uniform(int id, const std::array& value) const;
void set_uniform(int id, const float* value, size_t size) const;
void set_uniform(int id, const Transform3f& value) const;
void set_uniform(int id, const Transform3d& value) const;
diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp
index 80aa400cf3..884bc38cdb 100644
--- a/src/slic3r/GUI/GLShadersManager.cpp
+++ b/src/slic3r/GUI/GLShadersManager.cpp
@@ -39,6 +39,8 @@ std::pair GLShadersManager::init()
valid &= append_shader("imgui", { prefix + "imgui.vs", prefix + "imgui.fs" });
// basic shader, used to render all what was previously rendered using the immediate mode
valid &= append_shader("flat", { prefix + "flat.vs", prefix + "flat.fs" });
+ // basic shader with plane clipping, used to render volumes in picking pass
+ valid &= append_shader("flat_clip", { prefix + "flat_clip.vs", prefix + "flat_clip.fs" });
// basic shader for textures, used to render textures
valid &= append_shader("flat_texture", { prefix + "flat_texture.vs", prefix + "flat_texture.fs" });
// used to render 3D scene background
diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp
index 72b8283074..4c1ad0acfb 100644
--- a/src/slic3r/GUI/GUI.cpp
+++ b/src/slic3r/GUI/GUI.cpp
@@ -555,10 +555,10 @@ void desktop_execute_get_result(wxString command, wxArrayString& output)
if (wxGetEnv("APPIMAGE", nullptr)) {
// We're running from AppImage
wxExecuteEnv exec_env = get_appimage_exec_env();
- ::wxExecute(command, output, 0, &exec_env);
+ ::wxExecute(command, output, wxEXEC_SYNC | wxEXEC_NOEVENTS, &exec_env);
} else {
// Looks like we're NOT running from AppImage, we'll make no changes to the environment.
- ::wxExecute(command, output);
+ ::wxExecute(command, output, wxEXEC_SYNC | wxEXEC_NOEVENTS);
}
}
#endif // __linux__
diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp
index 3298d3876a..3b8d247c18 100644
--- a/src/slic3r/GUI/MeshUtils.hpp
+++ b/src/slic3r/GUI/MeshUtils.hpp
@@ -25,16 +25,14 @@ struct Camera;
// lm_FIXME: Following class might possibly be replaced by Eigen::Hyperplane
class ClippingPlane
{
- double m_data[4];
+ std::array m_data;
public:
- ClippingPlane()
- {
+ ClippingPlane() {
*this = ClipsNothing();
}
- ClippingPlane(const Vec3d& direction, double offset)
- {
+ ClippingPlane(const Vec3d& direction, double offset) {
set_normal(direction);
set_offset(offset);
}
@@ -50,8 +48,7 @@ public:
}
bool is_point_clipped(const Vec3d& point) const { return distance(point) < 0.; }
- void set_normal(const Vec3d& normal)
- {
+ void set_normal(const Vec3d& normal) {
const Vec3d norm_dir = normal.normalized();
m_data[0] = norm_dir.x();
m_data[1] = norm_dir.y();
@@ -62,12 +59,11 @@ public:
Vec3d get_normal() const { return Vec3d(m_data[0], m_data[1], m_data[2]); }
bool is_active() const { return m_data[3] != DBL_MAX; }
static ClippingPlane ClipsNothing() { return ClippingPlane(Vec3d(0., 0., 1.), DBL_MAX); }
- const double* get_data() const { return m_data; }
+ const std::array& get_data() const { return m_data; }
// Serialization through cereal library
template
- void serialize( Archive & ar )
- {
+ void serialize( Archive & ar ) {
ar( m_data[0], m_data[1], m_data[2], m_data[3] );
}
};