commit
4beeb6292a
17 changed files with 819 additions and 242 deletions
|
|
@ -31,17 +31,13 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
{
|
||||
public static class SettingsKey
|
||||
{
|
||||
public const string active_quality_key = nameof(active_quality_key);
|
||||
public const string active_material_key = nameof(active_material_key);
|
||||
public const string active_quality_key = nameof(active_quality_key);
|
||||
public const string air_gap_speed = nameof(air_gap_speed);
|
||||
public const string auto_connect = nameof(auto_connect);
|
||||
public const string auto_release_motors = nameof(auto_release_motors);
|
||||
/// <summary>
|
||||
/// The baby step offset for extruder index 0
|
||||
/// </summary>
|
||||
public const string avoid_crossing_perimeters = nameof(avoid_crossing_perimeters);
|
||||
public const string baby_step_z_offset = nameof(baby_step_z_offset);
|
||||
/// <summary>
|
||||
/// The baby step offset for extruder index 1
|
||||
/// </summary>
|
||||
public const string baby_step_z_offset_1 = nameof(baby_step_z_offset_1);
|
||||
public const string backup_firmware_before_update = nameof(backup_firmware_before_update);
|
||||
public const string baud_rate = nameof(baud_rate);
|
||||
|
|
@ -49,16 +45,34 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
public const string bed_shape = nameof(bed_shape);
|
||||
public const string bed_size = nameof(bed_size);
|
||||
public const string bed_temperature = nameof(bed_temperature);
|
||||
public const string before_toolchange_gcode = nameof(before_toolchange_gcode);
|
||||
public const string before_toolchange_gcode_1 = nameof(before_toolchange_gcode_1);
|
||||
public const string bottom_infill_speed = nameof(bottom_infill_speed);
|
||||
public const string bottom_solid_layers = nameof(bottom_solid_layers);
|
||||
public const string bridge_fan_speed = nameof(bridge_fan_speed);
|
||||
public const string bridge_over_infill = nameof(bridge_over_infill);
|
||||
public const string bridge_speed = nameof(bridge_speed);
|
||||
public const string brims = nameof(brims);
|
||||
public const string build_height = nameof(build_height);
|
||||
public const string calibration_files = nameof(calibration_files);
|
||||
public const string cancel_gcode = nameof(cancel_gcode);
|
||||
public const string coast_at_end_distance = nameof(coast_at_end_distance);
|
||||
public const string com_port = nameof(com_port);
|
||||
public const string complete_objects = nameof(complete_objects);
|
||||
public const string connect_gcode = nameof(connect_gcode);
|
||||
public const string cool_extruder_lift = nameof(cool_extruder_lift);
|
||||
public const string cooling = nameof(cooling);
|
||||
public const string create_brim = nameof(create_brim);
|
||||
public const string create_raft = nameof(create_raft);
|
||||
public const string create_skirt = nameof(create_skirt);
|
||||
public const string created_date = nameof(created_date);
|
||||
public const string default_material_presets = nameof(default_material_presets);
|
||||
public const string device_token = nameof(device_token);
|
||||
public const string device_type = nameof(device_type);
|
||||
public const string disable_fan_first_layers = nameof(disable_fan_first_layers);
|
||||
public const string driver_type = nameof(driver_type);
|
||||
public const string emulate_endstops = nameof(emulate_endstops);
|
||||
public const string enable_fan = nameof(enable_fan);
|
||||
public const string enable_line_splitting = nameof(enable_line_splitting);
|
||||
public const string enable_network_printing = nameof(enable_network_printing);
|
||||
public const string enable_retractions = nameof(enable_retractions);
|
||||
|
|
@ -66,21 +80,33 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
public const string end_gcode = nameof(end_gcode);
|
||||
public const string expand_thin_walls = nameof(expand_thin_walls);
|
||||
public const string external_perimeter_extrusion_width = nameof(external_perimeter_extrusion_width);
|
||||
public const string external_perimeter_speed = nameof(external_perimeter_speed);
|
||||
public const string external_perimeters_first = nameof(external_perimeters_first);
|
||||
public const string extruder_count = nameof(extruder_count);
|
||||
public const string extruder_offset = nameof(extruder_offset);
|
||||
public const string extruder_wipe_temperature = nameof(extruder_wipe_temperature);
|
||||
public const string extruders_share_temperature = nameof(extruders_share_temperature);
|
||||
public const string extrusion_multiplier = nameof(extrusion_multiplier);
|
||||
public const string extrusion_ratio = nameof(extrusion_ratio);
|
||||
public const string feedrate_ratio = nameof(feedrate_ratio);
|
||||
public const string filament_1_has_been_loaded = nameof(filament_1_has_been_loaded);
|
||||
public const string filament_cost = nameof(filament_cost);
|
||||
public const string filament_density = nameof(filament_density);
|
||||
public const string filament_diameter = nameof(filament_diameter);
|
||||
public const string filament_has_been_loaded = nameof(filament_has_been_loaded);
|
||||
public const string filament_runout_sensor = nameof(filament_runout_sensor);
|
||||
public const string fill_angle = nameof(fill_angle);
|
||||
public const string fill_density = nameof(fill_density);
|
||||
public const string fill_pattern = nameof(fill_pattern);
|
||||
public const string fill_thin_gaps = nameof(fill_thin_gaps);
|
||||
public const string first_layer_bed_temperature = nameof(first_layer_bed_temperature);
|
||||
public const string first_layer_extrusion_width = nameof(first_layer_extrusion_width);
|
||||
public const string first_layer_height = nameof(first_layer_height);
|
||||
public const string first_layer_speed = nameof(first_layer_speed);
|
||||
public const string first_layer_temperature = nameof(first_layer_temperature);
|
||||
public const string g0 = nameof(g0);
|
||||
public const string gcode_flavor = nameof(gcode_flavor);
|
||||
public const string gcode_output_type = nameof(gcode_output_type);
|
||||
public const string has_fan = nameof(has_fan);
|
||||
public const string has_hardware_leveling = nameof(has_hardware_leveling);
|
||||
public const string has_heated_bed = nameof(has_heated_bed);
|
||||
|
|
@ -92,73 +118,138 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
public const string inactive_cool_down = nameof(inactive_cool_down);
|
||||
public const string include_firmware_updater = nameof(include_firmware_updater);
|
||||
public const string infill_overlap_perimeter = nameof(infill_overlap_perimeter);
|
||||
public const string infill_speed = nameof(infill_speed);
|
||||
public const string infill_type = nameof(infill_type);
|
||||
public const string insert_filament_markdown2 = nameof(insert_filament_markdown2);
|
||||
public const string insert_filament_1_markdown = nameof(insert_filament_1_markdown);
|
||||
public const string insert_filament_markdown2 = nameof(insert_filament_markdown2);
|
||||
public const string interface_layer_speed = nameof(interface_layer_speed);
|
||||
public const string ip_address = nameof(ip_address);
|
||||
public const string ip_port = nameof(ip_port);
|
||||
public const string jerk_velocity = nameof(jerk_velocity);
|
||||
public const string print_time_estimate_multiplier = nameof(print_time_estimate_multiplier);
|
||||
public const string laser_speed_025 = nameof(laser_speed_025);
|
||||
public const string laser_speed_100 = nameof(laser_speed_100);
|
||||
public const string layer_gcode = nameof(layer_gcode);
|
||||
public const string layer_height = nameof(layer_height);
|
||||
public const string layer_name = nameof(layer_name);
|
||||
public const string layer_to_pause = nameof(layer_to_pause);
|
||||
public const string leveling_sample_points = nameof(leveling_sample_points);
|
||||
public const string load_filament_length = nameof(load_filament_length);
|
||||
public const string load_filament_speed = nameof(load_filament_speed);
|
||||
public const string make = nameof(make);
|
||||
public const string manual_movement_speeds = nameof(manual_movement_speeds);
|
||||
public const string max_acceleration = nameof(max_acceleration);
|
||||
public const string max_fan_speed = nameof(max_fan_speed);
|
||||
public const string max_fan_speed_layer_time = nameof(max_fan_speed_layer_time);
|
||||
public const string max_velocity = nameof(max_velocity);
|
||||
public const string merge_overlapping_lines = nameof(merge_overlapping_lines);
|
||||
public const string min_extrusion_before_retract = nameof(min_extrusion_before_retract);
|
||||
public const string min_fan_speed = nameof(min_fan_speed);
|
||||
public const string max_fan_speed = nameof(max_fan_speed);
|
||||
public const string min_fan_speed_layer_time = nameof(min_fan_speed_layer_time);
|
||||
public const string min_print_speed = nameof(min_print_speed);
|
||||
public const string min_skirt_length = nameof(min_skirt_length);
|
||||
public const string model = nameof(model);
|
||||
public const string nozzle_diameter = nameof(nozzle_diameter);
|
||||
public const string number_of_first_layers = nameof(number_of_first_layers);
|
||||
public const string oem_profile_token = nameof(oem_profile_token);
|
||||
public const string output_only_first_layer = nameof(output_only_first_layer);
|
||||
public const string pause_gcode = nameof(pause_gcode);
|
||||
public const string perimeter_extrusion_width = nameof(perimeter_extrusion_width);
|
||||
public const string perimeter_speed = nameof(perimeter_speed);
|
||||
public const string perimeter_start_end_overlap = nameof(perimeter_start_end_overlap);
|
||||
public const string perimeters = nameof(perimeters);
|
||||
public const string print_center = nameof(print_center);
|
||||
public const string print_leveling_data = nameof(print_leveling_data);
|
||||
public const string print_leveling_enabled = nameof(print_leveling_enabled);
|
||||
public const string print_leveling_probe_start = nameof(print_leveling_probe_start);
|
||||
public const string probe_has_been_calibrated = nameof(probe_has_been_calibrated);
|
||||
public const string print_leveling_required_to_print = nameof(print_leveling_required_to_print);
|
||||
public const string print_leveling_solution = nameof(print_leveling_solution);
|
||||
public const string leveling_sample_points = nameof(leveling_sample_points);
|
||||
public const string load_filament_speed = nameof(load_filament_speed);
|
||||
public const string probe_offset_sample_point = nameof(probe_offset_sample_point);
|
||||
public const string print_time_estimate_multiplier = nameof(print_time_estimate_multiplier);
|
||||
public const string printer_name = nameof(printer_name);
|
||||
public const string probe_has_been_calibrated = nameof(probe_has_been_calibrated);
|
||||
public const string probe_offset_sample_point = nameof(probe_offset_sample_point);
|
||||
public const string progress_reporting = nameof(progress_reporting);
|
||||
public const string publish_bed_image = nameof(publish_bed_image);
|
||||
public const string raft_air_gap = nameof(raft_air_gap);
|
||||
public const string raft_extra_distance_around_part = nameof(raft_extra_distance_around_part);
|
||||
public const string raft_extruder = nameof(raft_extruder);
|
||||
public const string raft_layers = nameof(raft_layers);
|
||||
public const string raft_print_speed = nameof(raft_print_speed);
|
||||
public const string randomize_start = nameof(randomize_start);
|
||||
public const string read_regex = nameof(read_regex);
|
||||
public const string recover_first_layer_speed = nameof(recover_first_layer_speed);
|
||||
public const string recover_is_enabled = nameof(recover_is_enabled);
|
||||
public const string recover_position_before_z_home = nameof(recover_position_before_z_home);
|
||||
public const string repair_outlines_extensive_stitching = nameof(repair_outlines_extensive_stitching);
|
||||
public const string repair_outlines_keep_open = nameof(repair_outlines_keep_open);
|
||||
public const string reset_long_extrusion = nameof(reset_long_extrusion);
|
||||
public const string resolution = nameof(resolution);
|
||||
public const string resume_gcode = nameof(resume_gcode);
|
||||
public const string running_clean_markdown2 = nameof(running_clean_markdown2);
|
||||
public const string retract_before_travel = nameof(retract_before_travel);
|
||||
public const string retract_length = nameof(retract_length);
|
||||
public const string retract_length_tool_change = nameof(retract_length_tool_change);
|
||||
public const string retract_lift = nameof(retract_lift);
|
||||
public const string retract_restart_extra = nameof(retract_restart_extra);
|
||||
public const string retract_restart_extra_time_to_apply = nameof(retract_restart_extra_time_to_apply);
|
||||
public const string retract_restart_extra_toolchange = nameof(retract_restart_extra_toolchange);
|
||||
public const string retract_speed = nameof(retract_speed);
|
||||
public const string retract_when_changing_islands = nameof(retract_when_changing_islands);
|
||||
public const string running_clean_1_markdown = nameof(running_clean_1_markdown);
|
||||
public const string running_clean_markdown2 = nameof(running_clean_markdown2);
|
||||
public const string seconds_to_reheat = nameof(seconds_to_reheat);
|
||||
public const string selector_ip_address = nameof(selector_ip_address);
|
||||
public const string send_with_checksum = nameof(send_with_checksum);
|
||||
public const string filament_has_been_loaded = nameof(filament_has_been_loaded);
|
||||
public const string filament_1_has_been_loaded = nameof(filament_1_has_been_loaded);
|
||||
public const string show_reset_connection = nameof(show_reset_connection);
|
||||
public const string skirt_distance = nameof(skirt_distance);
|
||||
public const string skirt_height = nameof(skirt_height);
|
||||
public const string skirts = nameof(skirts);
|
||||
public const string sla_printer = nameof(sla_printer);
|
||||
public const string slowdown_below_layer_time = nameof(slowdown_below_layer_time);
|
||||
public const string small_perimeter_speed = nameof(small_perimeter_speed);
|
||||
public const string solid_fill_pattern = nameof(solid_fill_pattern);
|
||||
public const string solid_infill_extrusion_width = nameof(solid_infill_extrusion_width);
|
||||
public const string solid_infill_speed = nameof(solid_infill_speed);
|
||||
public const string solid_shell = nameof(solid_shell);
|
||||
public const string spiral_vase = nameof(spiral_vase);
|
||||
public const string standby_temperature_delta = nameof(standby_temperature_delta);
|
||||
public const string start_gcode = nameof(start_gcode);
|
||||
public const string start_perimeters_at_concave_points = nameof(start_perimeters_at_concave_points);
|
||||
public const string start_perimeters_at_non_overhang = nameof(start_perimeters_at_non_overhang);
|
||||
public const string support_air_gap = nameof(support_air_gap);
|
||||
public const string support_material_create_perimeter = nameof(support_material_create_perimeter);
|
||||
public const string support_material_extruder = nameof(support_material_extruder);
|
||||
public const string support_material_infill_angle = nameof(support_material_infill_angle);
|
||||
public const string support_material_interface_extruder = nameof(support_material_interface_extruder);
|
||||
public const string support_material_interface_layers = nameof(support_material_interface_layers);
|
||||
public const string support_material_percent = nameof(support_material_percent);
|
||||
public const string support_material_spacing = nameof(support_material_spacing);
|
||||
public const string support_material_speed = nameof(support_material_speed);
|
||||
public const string support_material_xy_distance = nameof(support_material_xy_distance);
|
||||
public const string support_type = nameof(support_type);
|
||||
public const string temperature = nameof(temperature);
|
||||
public const string temperature1 = nameof(temperature1);
|
||||
public const string temperature2 = nameof(temperature2);
|
||||
public const string temperature3 = nameof(temperature3);
|
||||
public const string thin_walls = nameof(thin_walls);
|
||||
public const string threads = nameof(threads);
|
||||
public const string toolchange_gcode = nameof(toolchange_gcode);
|
||||
public const string toolchange_gcode_1 = nameof(toolchange_gcode_1);
|
||||
public const string top_infill_extrusion_width = nameof(top_infill_extrusion_width);
|
||||
public const string top_solid_infill_speed = nameof(top_solid_infill_speed);
|
||||
public const string top_solid_layers = nameof(top_solid_layers);
|
||||
public const string travel_speed = nameof(travel_speed);
|
||||
public const string trim_filament_markdown = nameof(trim_filament_markdown);
|
||||
public const string unload_filament_length = nameof(unload_filament_length);
|
||||
public const string unload_filament_time = nameof(unload_filament_time);
|
||||
public const string use_firmware_retraction = nameof(use_firmware_retraction);
|
||||
public const string use_relative_e_distances = nameof(use_relative_e_distances);
|
||||
public const string use_z_probe = nameof(use_z_probe);
|
||||
public const string validate_layer_height = nameof(validate_layer_height);
|
||||
public const string vibration_limit = nameof(vibration_limit);
|
||||
public const string windows_driver = nameof(windows_driver);
|
||||
public const string wipe_shield_distance = nameof(wipe_shield_distance);
|
||||
public const string wipe_tower_size = nameof(wipe_tower_size);
|
||||
public const string write_regex = nameof(write_regex);
|
||||
public const string xy_offsets_have_been_calibrated = nameof(xy_offsets_have_been_calibrated);
|
||||
public const string z_homes_to_max = nameof(z_homes_to_max);
|
||||
public const string z_offset = nameof(z_offset);
|
||||
public const string z_probe_samples = nameof(z_probe_samples);
|
||||
|
|
@ -166,101 +257,5 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
public const string z_probe_z_offset = nameof(z_probe_z_offset);
|
||||
public const string z_servo_depolyed_angle = nameof(z_servo_depolyed_angle);
|
||||
public const string z_servo_retracted_angle = nameof(z_servo_retracted_angle);
|
||||
public const string small_perimeter_speed = nameof(small_perimeter_speed);
|
||||
public const string bridge_speed = nameof(bridge_speed);
|
||||
public const string air_gap_speed = nameof(air_gap_speed);
|
||||
public const string external_perimeter_speed = nameof(external_perimeter_speed);
|
||||
public const string infill_speed = nameof(infill_speed);
|
||||
public const string perimeter_speed = nameof(perimeter_speed);
|
||||
public const string solid_infill_speed = nameof(solid_infill_speed);
|
||||
public const string support_material_speed = nameof(support_material_speed);
|
||||
public const string interface_layer_speed = nameof(interface_layer_speed);
|
||||
public const string travel_speed = nameof(travel_speed);
|
||||
public const string retract_speed = nameof(retract_speed);
|
||||
public const string create_raft = nameof(create_raft);
|
||||
public const string bottom_solid_layers = nameof(bottom_solid_layers);
|
||||
public const string perimeters = nameof(perimeters);
|
||||
public const string raft_extra_distance_around_part = nameof(raft_extra_distance_around_part);
|
||||
public const string support_material_interface_layers = nameof(support_material_interface_layers);
|
||||
public const string top_solid_layers = nameof(top_solid_layers);
|
||||
public const string raft_print_speed = nameof(raft_print_speed);
|
||||
public const string before_toolchange_gcode = nameof(before_toolchange_gcode);
|
||||
public const string toolchange_gcode = nameof(toolchange_gcode);
|
||||
public const string before_toolchange_gcode_1 = nameof(before_toolchange_gcode_1);
|
||||
public const string toolchange_gcode_1 = nameof(toolchange_gcode_1);
|
||||
public const string retract_before_travel = nameof(retract_before_travel);
|
||||
public const string retract_length = nameof(retract_length);
|
||||
public const string retract_lift = nameof(retract_lift);
|
||||
public const string retract_restart_extra = nameof(retract_restart_extra);
|
||||
public const string retract_restart_extra_time_to_apply = nameof(retract_restart_extra_time_to_apply);
|
||||
public const string bottom_infill_speed = nameof(bottom_infill_speed);
|
||||
public const string bridge_over_infill = nameof(bridge_over_infill);
|
||||
public const string extrusion_multiplier = nameof(extrusion_multiplier);
|
||||
public const string fill_angle = nameof(fill_angle);
|
||||
public const string min_extrusion_before_retract = nameof(min_extrusion_before_retract);
|
||||
public const string min_print_speed = nameof(min_print_speed);
|
||||
public const string raft_air_gap = nameof(raft_air_gap);
|
||||
public const string avoid_crossing_perimeters = nameof(avoid_crossing_perimeters);
|
||||
public const string unload_filament_time = nameof(unload_filament_time);
|
||||
public const string complete_objects = nameof(complete_objects);
|
||||
public const string cool_extruder_lift = nameof(cool_extruder_lift);
|
||||
public const string cooling = nameof(cooling);
|
||||
public const string enable_fan = nameof(enable_fan);
|
||||
public const string min_fan_speed_layer_time = nameof(min_fan_speed_layer_time);
|
||||
public const string max_fan_speed_layer_time = nameof(max_fan_speed_layer_time);
|
||||
public const string bridge_fan_speed = nameof(bridge_fan_speed);
|
||||
public const string disable_fan_first_layers = nameof(disable_fan_first_layers);
|
||||
public const string external_perimeters_first = nameof(external_perimeters_first);
|
||||
public const string fill_pattern = nameof(fill_pattern);
|
||||
public const string first_layer_temperature = nameof(first_layer_temperature);
|
||||
public const string gcode_flavor = nameof(gcode_flavor);
|
||||
public const string gcode_output_type = nameof(gcode_output_type);
|
||||
public const string solid_shell = nameof(solid_shell);
|
||||
public const string min_skirt_length = nameof(min_skirt_length);
|
||||
public const string output_only_first_layer = nameof(output_only_first_layer);
|
||||
public const string perimeter_extrusion_width = nameof(perimeter_extrusion_width);
|
||||
public const string raft_layers = nameof(raft_layers);
|
||||
public const string randomize_start = nameof(randomize_start);
|
||||
public const string coast_at_end_distance = nameof(coast_at_end_distance);
|
||||
public const string retract_length_tool_change = nameof(retract_length_tool_change);
|
||||
public const string retract_when_changing_islands = nameof(retract_when_changing_islands);
|
||||
public const string retract_restart_extra_toolchange = nameof(retract_restart_extra_toolchange);
|
||||
public const string reset_long_extrusion = nameof(reset_long_extrusion);
|
||||
public const string repair_outlines_extensive_stitching = nameof(repair_outlines_extensive_stitching);
|
||||
public const string repair_outlines_keep_open = nameof(repair_outlines_keep_open);
|
||||
public const string resolution = nameof(resolution);
|
||||
public const string skirt_distance = nameof(skirt_distance);
|
||||
public const string skirt_height = nameof(skirt_height);
|
||||
public const string skirts = nameof(skirts);
|
||||
public const string brims = nameof(brims);
|
||||
public const string slowdown_below_layer_time = nameof(slowdown_below_layer_time);
|
||||
public const string solid_fill_pattern = nameof(solid_fill_pattern);
|
||||
public const string solid_infill_extrusion_width = nameof(solid_infill_extrusion_width);
|
||||
public const string standby_temperature_delta = nameof(standby_temperature_delta);
|
||||
public const string start_perimeters_at_concave_points = nameof(start_perimeters_at_concave_points);
|
||||
public const string start_perimeters_at_non_overhang = nameof(start_perimeters_at_non_overhang);
|
||||
public const string support_air_gap = nameof(support_air_gap);
|
||||
public const string support_material_percent = nameof(support_material_percent);
|
||||
public const string support_material_infill_angle = nameof(support_material_infill_angle);
|
||||
public const string support_material_create_perimeter = nameof(support_material_create_perimeter);
|
||||
public const string support_material_extruder = nameof(support_material_extruder);
|
||||
public const string raft_extruder = nameof(raft_extruder);
|
||||
public const string support_material_interface_extruder = nameof(support_material_interface_extruder);
|
||||
public const string support_material_spacing = nameof(support_material_spacing);
|
||||
public const string support_material_xy_distance = nameof(support_material_xy_distance);
|
||||
public const string support_type = nameof(support_type);
|
||||
public const string extruder_wipe_temperature = nameof(extruder_wipe_temperature);
|
||||
public const string thin_walls = nameof(thin_walls);
|
||||
public const string threads = nameof(threads);
|
||||
public const string top_infill_extrusion_width = nameof(top_infill_extrusion_width);
|
||||
public const string use_firmware_retraction = nameof(use_firmware_retraction);
|
||||
public const string use_relative_e_distances = nameof(use_relative_e_distances);
|
||||
public const string vibration_limit = nameof(vibration_limit);
|
||||
public const string wipe_shield_distance = nameof(wipe_shield_distance);
|
||||
public const string wipe_tower_size = nameof(wipe_tower_size);
|
||||
public const string driver_type = nameof(driver_type);
|
||||
public const string create_brim = nameof(create_brim);
|
||||
public const string create_skirt = nameof(create_skirt);
|
||||
public const string first_layer_bed_temperature = nameof(first_layer_bed_temperature);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -905,6 +905,16 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
RebuildGCodeOnChange = false
|
||||
},
|
||||
new SliceSettingData()
|
||||
{
|
||||
SlicerConfigName = SettingsKey.xy_offsets_have_been_calibrated,
|
||||
PresentationName = "X Y Nozzle Offsets Have Been Calibrated".Localize(),
|
||||
HelpText = "Flag keeping track if xy calibration wizard has been run.".Localize(),
|
||||
DataEditType = DataEditTypes.CHECK_BOX,
|
||||
ShowIfSet = "!has_hardware_leveling",
|
||||
DefaultValue = "0",
|
||||
RebuildGCodeOnChange = false
|
||||
},
|
||||
new SliceSettingData()
|
||||
{
|
||||
SlicerConfigName = SettingsKey.filament_has_been_loaded,
|
||||
PresentationName = "Filament Has Been Loaded".Localize(),
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ namespace MatterHackers.MatterControl
|
|||
this.Connection.ErrorReported += ApplicationController.Instance.Connection_ErrorReported;
|
||||
this.Connection.ConnectionSucceeded += Connection_ConnectionSucceeded;
|
||||
this.Connection.CommunicationStateChanged += Connection_CommunicationStateChanged;
|
||||
this.Connection.DetailedPrintingStateChanged += Connection_CommunicationStateChanged;
|
||||
this.Connection.PrintFinished += Connection_PrintFinished;
|
||||
|
||||
// Initialize bed settings
|
||||
|
|
@ -480,6 +481,7 @@ namespace MatterHackers.MatterControl
|
|||
// Unregister listeners
|
||||
this.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
this.Connection.CommunicationStateChanged -= Connection_CommunicationStateChanged;
|
||||
this.Connection.DetailedPrintingStateChanged -= Connection_CommunicationStateChanged;
|
||||
this.Connection.ConnectionSucceeded -= Connection_ConnectionSucceeded;
|
||||
this.Connection.PrintFinished -= Connection_PrintFinished;
|
||||
this.Connection.TemporarilyHoldingTemp -= ApplicationController.Instance.Connection_TemporarilyHoldingTemp;
|
||||
|
|
|
|||
|
|
@ -38,9 +38,16 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
{
|
||||
public class XyCalibrationWizard : PrinterSetupWizard
|
||||
{
|
||||
public XyCalibrationWizard(PrinterConfig printer)
|
||||
private int extruderToCalibrateIndex;
|
||||
XyCalibrationData xyCalibrationData;
|
||||
private bool startPrint;
|
||||
|
||||
public XyCalibrationWizard(PrinterConfig printer, int extruderToCalibrateIndex, XyCalibrationData xyCalibrationData = null, bool startPrint = false)
|
||||
: base(printer)
|
||||
{
|
||||
this.extruderToCalibrateIndex = extruderToCalibrateIndex;
|
||||
this.xyCalibrationData = xyCalibrationData;
|
||||
this.startPrint = startPrint;
|
||||
this.WindowTitle = $"{ApplicationController.Instance.ProductName} - " + "Nozzle Calibration Wizard".Localize();
|
||||
this.WindowSize = new Vector2(600 * GuiWidget.DeviceScale, 700 * GuiWidget.DeviceScale);
|
||||
|
||||
|
|
@ -51,7 +58,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
public static bool NeedsToBeRun(PrinterConfig printer)
|
||||
{
|
||||
// we have a probe that we are using and we have not done leveling yet
|
||||
return UsingZProbe(printer) && !printer.Settings.GetValue<bool>(SettingsKey.probe_has_been_calibrated);
|
||||
return UsingZProbe(printer) && !printer.Settings.GetValue<bool>(SettingsKey.xy_offsets_have_been_calibrated);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
|
|
@ -70,17 +77,40 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
|
||||
private IEnumerator<WizardPage> GetPages()
|
||||
{
|
||||
var xyCalibrationData = new XyCalibrationData();
|
||||
if (xyCalibrationData == null)
|
||||
{
|
||||
xyCalibrationData = new XyCalibrationData(extruderToCalibrateIndex);
|
||||
|
||||
yield return new XyCalibrationSelectPage(this, printer, xyCalibrationData);
|
||||
|
||||
yield return new XyCalibrationStartPrintPage(this, printer, xyCalibrationData);
|
||||
yield return new XyCalibrationSelectPage(this, printer, xyCalibrationData);
|
||||
yield return new XyCalibrationStartPrintPage(this, printer, xyCalibrationData);
|
||||
}
|
||||
else if(startPrint)
|
||||
{
|
||||
yield return new XyCalibrationStartPrintPage(this, printer, xyCalibrationData);
|
||||
}
|
||||
else // we are returing to the wizard and need to collect the data
|
||||
{
|
||||
yield return new XyCalibrationCollectDataPage(this, printer, xyCalibrationData);
|
||||
yield return new XyCalibrationDataRecieved(this, printer, xyCalibrationData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class XyCalibrationData
|
||||
{
|
||||
public XyCalibrationData(int extruderToCalibrateIndex)
|
||||
{
|
||||
this.ExtruderToCalibrateIndex = extruderToCalibrateIndex;
|
||||
}
|
||||
|
||||
public int ExtruderToCalibrateIndex { get; private set; }
|
||||
public enum QualityType { Coarse, Normal, Fine }
|
||||
public QualityType Quality { get; set; } = QualityType.Normal;
|
||||
/// <summary>
|
||||
/// The index of the calibration print that was picked
|
||||
/// </summary>
|
||||
public int XPick { get; set; } = -1;
|
||||
public int YPick { get; set; } = -1;
|
||||
public double Offset { get; set; } = .1;
|
||||
}
|
||||
}
|
||||
|
|
@ -47,14 +47,14 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
public override void OnClosed(EventArgs e)
|
||||
{
|
||||
// Unregister listeners
|
||||
printer.Connection.CommunicationStateChanged -= CheckHomeFinished;
|
||||
printer.Connection.DetailedPrintingStateChanged -= CheckHomeFinished;
|
||||
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
public override void OnLoad(EventArgs args)
|
||||
{
|
||||
printer.Connection.CommunicationStateChanged += CheckHomeFinished;
|
||||
printer.Connection.DetailedPrintingStateChanged += CheckHomeFinished;
|
||||
|
||||
printer.Connection.HomeAxis(PrinterConnection.Axis.XYZ);
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
this.CreateTextField("Congratulations, your nozzle offsets have been collected and are ready to be saved. Click next to save and finish the wizard".Localize());
|
||||
|
||||
var row = new SettingsRow(
|
||||
var row = new SettingsRow(
|
||||
"X Offset".Localize(),
|
||||
null,
|
||||
theme,
|
||||
|
|
@ -71,6 +71,26 @@ namespace MatterHackers.MatterControl
|
|||
VAnchor = VAnchor.Center,
|
||||
Margin = new BorderDouble(right: 10)
|
||||
});
|
||||
|
||||
this.NextButton.Visible = false;
|
||||
|
||||
var nextButton = theme.CreateDialogButton("Finish".Localize());
|
||||
nextButton.Name = "FinishCalibration";
|
||||
nextButton.Click += (s, e) =>
|
||||
{
|
||||
// TODO: removed fixed index
|
||||
var hotendOffset = printer.Settings.Helpers.ExtruderOffset(1);
|
||||
hotendOffset.X += xOffset;
|
||||
hotendOffset.Y += yOffset;
|
||||
|
||||
printer.Settings.Helpers.SetExtruderOffset(1, hotendOffset);
|
||||
|
||||
this.DialogWindow.CloseOnIdle();
|
||||
};
|
||||
|
||||
theme.ApplyPrimaryActionStyle(nextButton);
|
||||
|
||||
this.AddPageAction(nextButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
166
MatterControlLib/CustomWidgets/XyCalibrationCollectDataPage.cs
Normal file
166
MatterControlLib/CustomWidgets/XyCalibrationCollectDataPage.cs
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
Copyright (c) 2019, Lars Brubaker, John Lewin
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The views and conclusions contained in the software and documentation are those
|
||||
of the authors and should not be interpreted as representing official policies,
|
||||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling;
|
||||
|
||||
namespace MatterHackers.MatterControl
|
||||
{
|
||||
public class XyCalibrationCollectDataPage : WizardPage
|
||||
{
|
||||
private List<RadioButton> xButtons;
|
||||
private XyCalibrationData xyCalibrationData;
|
||||
private List<RadioButton> yButtons;
|
||||
private bool HaveWrittenData = false;
|
||||
|
||||
public XyCalibrationCollectDataPage(ISetupWizard setupWizard, PrinterConfig printer, XyCalibrationData xyCalibrationData)
|
||||
: base(setupWizard)
|
||||
{
|
||||
this.xyCalibrationData = xyCalibrationData;
|
||||
this.WindowTitle = "Nozzle Offset Calibration Wizard".Localize();
|
||||
this.HeaderText = "Nozzle Offset Calibration".Localize() + ":";
|
||||
this.Name = "Nozzle Offset Calibration Wizard";
|
||||
|
||||
contentRow.Padding = theme.DefaultContainerPadding;
|
||||
|
||||
contentRow.AddChild(new TextWidget("Choose the calibration you would like to perform.".Localize(), textColor: theme.TextColor, pointSize: theme.DefaultFontSize)
|
||||
{
|
||||
Margin = new Agg.BorderDouble(0, 15, 0, 0)
|
||||
});
|
||||
|
||||
// disable the next button until we recieve data about both the x and y axis alignment
|
||||
NextButton.Enabled = false;
|
||||
|
||||
var xButtonsGroup = new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
{
|
||||
HAnchor = HAnchor.Fit | HAnchor.Left
|
||||
};
|
||||
contentRow.AddChild(xButtonsGroup);
|
||||
xButtons = new List<RadioButton>();
|
||||
xButtons.Add(new RadioButton("-2".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
xButtons.Add(new RadioButton("-1".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
xButtons.Add(new RadioButton(" 0".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
xButtons.Add(new RadioButton("+1".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
xButtons.Add(new RadioButton("+2".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
foreach (var button in xButtons)
|
||||
{
|
||||
xButtonsGroup.AddChild(button);
|
||||
button.CheckedStateChanged += XButton_CheckedStateChanged;
|
||||
}
|
||||
|
||||
var yButtonsGroup = new FlowLayoutWidget()
|
||||
{
|
||||
HAnchor = HAnchor.Fit | HAnchor.Left
|
||||
};
|
||||
contentRow.AddChild(yButtonsGroup);
|
||||
yButtonsGroup.AddChild(new GuiWidget(24 * GuiWidget.DeviceScale, 16));
|
||||
yButtons = new List<RadioButton>();
|
||||
yButtons.Add(new RadioButton("-2".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
yButtons.Add(new RadioButton("-1".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
yButtons.Add(new RadioButton(" 0".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
yButtons.Add(new RadioButton("+1".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
yButtons.Add(new RadioButton("+2".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize));
|
||||
foreach (var button in yButtons)
|
||||
{
|
||||
var column = new FlowLayoutWidget(FlowDirection.TopToBottom);
|
||||
yButtonsGroup.AddChild(column);
|
||||
|
||||
button.HAnchor = HAnchor.Center;
|
||||
column.AddChild(button);
|
||||
column.AddChild(new TextWidget(button.Text, textColor: theme.TextColor, pointSize: theme.DefaultFontSize)
|
||||
{
|
||||
HAnchor = HAnchor.Left
|
||||
});
|
||||
button.Text = "";
|
||||
|
||||
button.CheckedStateChanged += YButton_CheckedStateChanged;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnClosed(EventArgs e)
|
||||
{
|
||||
// save the offsets to the extruder
|
||||
if (!HaveWrittenData
|
||||
&& xyCalibrationData.XPick != -1
|
||||
&& xyCalibrationData.YPick != -1)
|
||||
{
|
||||
var hotendOffset = printer.Settings.Helpers.ExtruderOffset(xyCalibrationData.ExtruderToCalibrateIndex);
|
||||
hotendOffset.X -= xyCalibrationData.Offset * -2 + xyCalibrationData.Offset * xyCalibrationData.XPick;
|
||||
hotendOffset.Y -= xyCalibrationData.Offset * -2 + xyCalibrationData.Offset * xyCalibrationData.YPick;
|
||||
|
||||
printer.Settings.Helpers.SetExtruderOffset(xyCalibrationData.ExtruderToCalibrateIndex, hotendOffset);
|
||||
HaveWrittenData = true;
|
||||
}
|
||||
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
private void CheckIfCanAdvance()
|
||||
{
|
||||
if (xyCalibrationData.YPick != -1
|
||||
&& xyCalibrationData.XPick != -1)
|
||||
{
|
||||
NextButton.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void XButton_CheckedStateChanged(object sender, System.EventArgs e)
|
||||
{
|
||||
int i = 0;
|
||||
foreach (var button in xButtons)
|
||||
{
|
||||
if (button == sender)
|
||||
{
|
||||
xyCalibrationData.XPick = i;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
CheckIfCanAdvance();
|
||||
}
|
||||
|
||||
private void YButton_CheckedStateChanged(object sender, System.EventArgs e)
|
||||
{
|
||||
int i = 0;
|
||||
foreach (var button in yButtons)
|
||||
{
|
||||
if (button == sender)
|
||||
{
|
||||
xyCalibrationData.YPick = i;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
CheckIfCanAdvance();
|
||||
}
|
||||
}
|
||||
}
|
||||
140
MatterControlLib/CustomWidgets/XyCalibrationDataRecieved.cs
Normal file
140
MatterControlLib/CustomWidgets/XyCalibrationDataRecieved.cs
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
Copyright (c) 2019, Lars Brubaker, John Lewin
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The views and conclusions contained in the software and documentation are those
|
||||
of the authors and should not be interpreted as representing official policies,
|
||||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling;
|
||||
|
||||
namespace MatterHackers.MatterControl
|
||||
{
|
||||
public class XyCalibrationDataRecieved : WizardPage
|
||||
{
|
||||
public XyCalibrationDataRecieved(ISetupWizard setupWizard, PrinterConfig printer, XyCalibrationData xyCalibrationData)
|
||||
: base(setupWizard)
|
||||
{
|
||||
this.WindowTitle = "Nozzle Offset Calibration Wizard".Localize();
|
||||
this.HeaderText = "Nozzle Offset Calibration".Localize() + ":";
|
||||
this.Name = "Nozzle Offset Calibration Wizard";
|
||||
|
||||
contentRow.Padding = theme.DefaultContainerPadding;
|
||||
|
||||
var doneCalibratingButton = theme.CreateDialogButton("Done".Localize());
|
||||
bool printAgain = false;
|
||||
|
||||
// check if we picked an outside of the calibration
|
||||
if (xyCalibrationData.XPick == 0
|
||||
|| xyCalibrationData.XPick == 4
|
||||
|| xyCalibrationData.YPick == 0
|
||||
|| xyCalibrationData.YPick == 4)
|
||||
{
|
||||
// offer to re-run the calibration with the same settings as last time
|
||||
contentRow.AddChild(new TextWidget("Your printer has been ajusted but we need to run callibration again to improve accuracy.".Localize(), textColor: theme.TextColor, pointSize: theme.DefaultFontSize)
|
||||
{
|
||||
Margin = new Agg.BorderDouble(0, 15, 0, 0)
|
||||
});
|
||||
doneCalibratingButton = theme.CreateDialogButton("Print Again".Localize());
|
||||
printAgain = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (xyCalibrationData.Quality)
|
||||
{
|
||||
case XyCalibrationData.QualityType.Coarse:
|
||||
// if we are on coarse calibration offer to move down to normal
|
||||
contentRow.AddChild(new TextWidget("Coarse calibration complete, we will now do a fine calibration to improve accuracy.".Localize(), textColor: theme.TextColor, pointSize: theme.DefaultFontSize)
|
||||
{
|
||||
Margin = new Agg.BorderDouble(0, 15, 0, 0)
|
||||
});
|
||||
doneCalibratingButton = theme.CreateDialogButton("Print Next".Localize());
|
||||
// switch to normal calibration
|
||||
xyCalibrationData.Quality = XyCalibrationData.QualityType.Normal;
|
||||
printAgain = true;
|
||||
break;
|
||||
|
||||
case XyCalibrationData.QualityType.Normal:
|
||||
// let the user know they are done with calibration, but if they would like they can print a fine calibration for even better results
|
||||
// add a button to request fine calibration
|
||||
var normalMessage = "Your nozzles should now be calibrated.".Localize();
|
||||
normalMessage += "\n\n" + "You can continue to ultra fine calibration, but for most uses this is not necessary.".Localize();
|
||||
contentRow.AddChild(new TextWidget(normalMessage, textColor: theme.TextColor, pointSize: theme.DefaultFontSize)
|
||||
{
|
||||
Margin = new Agg.BorderDouble(0, 15, 0, 0)
|
||||
});
|
||||
var startFineCalibratingButton = theme.CreateDialogButton("Print Ultra Fine Calibration".Localize());
|
||||
startFineCalibratingButton.HAnchor = HAnchor.Fit | HAnchor.Right;
|
||||
startFineCalibratingButton.VAnchor = VAnchor.Absolute;
|
||||
startFineCalibratingButton.Name = "Fine Calibration Print";
|
||||
startFineCalibratingButton.Click += (s, e) =>
|
||||
{
|
||||
// close this dialog
|
||||
this.DialogWindow.CloseOnIdle();
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
// switch to fine
|
||||
xyCalibrationData.Quality = XyCalibrationData.QualityType.Fine;
|
||||
// start up at the print window
|
||||
DialogWindow.Show(new XyCalibrationWizard(printer, xyCalibrationData.ExtruderToCalibrateIndex, xyCalibrationData, true));
|
||||
});
|
||||
};
|
||||
contentRow.AddChild(startFineCalibratingButton);
|
||||
break;
|
||||
|
||||
case XyCalibrationData.QualityType.Fine:
|
||||
// done!
|
||||
contentRow.AddChild(new TextWidget("Offset Calibration complete.".Localize(), textColor: theme.TextColor, pointSize: theme.DefaultFontSize)
|
||||
{
|
||||
Margin = new Agg.BorderDouble(0, 15, 0, 0)
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// this is the last page of the wizard hide the next button
|
||||
this.NextButton.Visible = false;
|
||||
|
||||
doneCalibratingButton.Name = "Done Calibration Print";
|
||||
doneCalibratingButton.Click += (s, e) =>
|
||||
{
|
||||
// close this window
|
||||
this.DialogWindow.CloseOnIdle();
|
||||
if (printAgain)
|
||||
{
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
DialogWindow.Show(new XyCalibrationWizard(printer, xyCalibrationData.ExtruderToCalibrateIndex, xyCalibrationData, true));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
theme.ApplyPrimaryActionStyle(doneCalibratingButton);
|
||||
|
||||
this.AddPageAction(doneCalibratingButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -27,14 +27,10 @@ of the authors and should not be interpreted as representing official policies,
|
|||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling;
|
||||
using MatterHackers.MatterControl.DesignTools;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using MatterHackers.VectorMath;
|
||||
|
||||
namespace MatterHackers.MatterControl
|
||||
{
|
||||
|
|
@ -62,93 +58,29 @@ namespace MatterHackers.MatterControl
|
|||
{
|
||||
Checked = xyCalibrationData.Quality == XyCalibrationData.QualityType.Coarse
|
||||
});
|
||||
coarseCalibration.CheckedStateChanged += (s, e) => xyCalibrationData.Quality = XyCalibrationData.QualityType.Coarse;
|
||||
coarseCalibration.CheckedStateChanged += (s, e) =>
|
||||
{
|
||||
xyCalibrationData.Quality = XyCalibrationData.QualityType.Coarse;
|
||||
xyCalibrationData.Offset = .5;
|
||||
};
|
||||
contentRow.AddChild(normalCalibration = new RadioButton("Normal Calibration: Start here".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize)
|
||||
{
|
||||
Checked = xyCalibrationData.Quality == XyCalibrationData.QualityType.Normal
|
||||
});
|
||||
normalCalibration.CheckedStateChanged += (s, e) => xyCalibrationData.Quality = XyCalibrationData.QualityType.Normal;
|
||||
normalCalibration.CheckedStateChanged += (s, e) =>
|
||||
{
|
||||
xyCalibrationData.Quality = XyCalibrationData.QualityType.Normal;
|
||||
xyCalibrationData.Offset = .1;
|
||||
};
|
||||
contentRow.AddChild(fineCalibration = new RadioButton("Fine Calibration: When you want that extra precision".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize)
|
||||
{
|
||||
Checked = xyCalibrationData.Quality == XyCalibrationData.QualityType.Fine
|
||||
});
|
||||
fineCalibration.CheckedStateChanged += (s, e) => xyCalibrationData.Quality = XyCalibrationData.QualityType.Fine;
|
||||
}
|
||||
}
|
||||
|
||||
public class XyCalibrationStartPrintPage : WizardPage
|
||||
{
|
||||
public XyCalibrationStartPrintPage(ISetupWizard setupWizard, PrinterConfig printer, XyCalibrationData xyCalibrationData)
|
||||
: base(setupWizard)
|
||||
{
|
||||
this.WindowTitle = "Nozzle Offset Calibration Wizard".Localize();
|
||||
this.HeaderText = "Nozzle Offset Calibration".Localize();
|
||||
this.Name = "Nozzle Offset Calibration Wizard";
|
||||
|
||||
var content = "Here is what we are going to do:".Localize();
|
||||
content += "\n\n • " + "Stash your current bed".Localize();
|
||||
content += "\n • " + "Print the calibration object".Localize();
|
||||
content += "\n • " + "Collect data".Localize();
|
||||
content += "\n • " + "Restore your current bed, after all calibration is complete".Localize();
|
||||
|
||||
contentRow.AddChild(this.CreateTextField(content));
|
||||
|
||||
contentRow.Padding = theme.DefaultContainerPadding;
|
||||
|
||||
this.NextButton.Visible = false;
|
||||
|
||||
var startCalibrationPrint = theme.CreateDialogButton("Start Print".Localize());
|
||||
startCalibrationPrint.Name = "Start Calibration Print";
|
||||
startCalibrationPrint.Click += (s, e) =>
|
||||
fineCalibration.CheckedStateChanged += (s, e) =>
|
||||
{
|
||||
this.DialogWindow.CloseOnIdle();
|
||||
// stash the current bed
|
||||
var scene = printer.Bed.Scene;
|
||||
scene.Children.Modify((list) => list.Clear());
|
||||
IObject3D item = null;
|
||||
// add the calibration object to the bed
|
||||
switch(xyCalibrationData.Quality)
|
||||
{
|
||||
case XyCalibrationData.QualityType.Coarse:
|
||||
item = XyCalibrationTabObject3D.Create(1,
|
||||
Math.Max(printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2, printer.Settings.GetValue<double>(SettingsKey.layer_height) * 2),
|
||||
.5,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter)).GetAwaiter().GetResult();
|
||||
break;
|
||||
|
||||
case XyCalibrationData.QualityType.Fine:
|
||||
item = XyCalibrationFaceObject3D.Create(1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2,
|
||||
printer.Settings.GetValue<double>(SettingsKey.layer_height),
|
||||
.05,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter),
|
||||
printer.Settings.GetValue<double>(SettingsKey.wipe_tower_size),
|
||||
8).GetAwaiter().GetResult();
|
||||
break;
|
||||
|
||||
default:
|
||||
item = XyCalibrationFaceObject3D.Create(1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2,
|
||||
printer.Settings.GetValue<double>(SettingsKey.layer_height),
|
||||
.1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter),
|
||||
printer.Settings.GetValue<double>(SettingsKey.wipe_tower_size),
|
||||
8).GetAwaiter().GetResult();
|
||||
break;
|
||||
}
|
||||
|
||||
// move the part to the center of the bed
|
||||
var bedBounds = printer.Bed.Bounds;
|
||||
var aabb = item.GetAxisAlignedBoundingBox();
|
||||
item.Matrix *= Matrix4X4.CreateTranslation(bedBounds.Center.X - aabb.MinXYZ.X - aabb.XSize / 2, bedBounds.Center.Y - aabb.MinXYZ.Y - aabb.YSize / 2, -aabb.MinXYZ.Z);
|
||||
scene.Children.Add(item);
|
||||
// switch to 3D view
|
||||
// start the calibration print
|
||||
xyCalibrationData.Quality = XyCalibrationData.QualityType.Fine;
|
||||
xyCalibrationData.Offset = .05;
|
||||
};
|
||||
|
||||
theme.ApplyPrimaryActionStyle(startCalibrationPrint);
|
||||
|
||||
this.AddPageAction(startCalibrationPrint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
195
MatterControlLib/CustomWidgets/XyCalibrationStartPrintPage.cs
Normal file
195
MatterControlLib/CustomWidgets/XyCalibrationStartPrintPage.cs
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
/*
|
||||
Copyright (c) 2019, Lars Brubaker, John Lewin
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The views and conclusions contained in the software and documentation are those
|
||||
of the authors and should not be interpreted as representing official policies,
|
||||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling;
|
||||
using MatterHackers.MatterControl.DesignTools;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using MatterHackers.VectorMath;
|
||||
|
||||
namespace MatterHackers.MatterControl
|
||||
{
|
||||
public class XyCalibrationStartPrintPage : WizardPage
|
||||
{
|
||||
private XyCalibrationData xyCalibrationData;
|
||||
|
||||
public XyCalibrationStartPrintPage(ISetupWizard setupWizard, PrinterConfig printer, XyCalibrationData xyCalibrationData)
|
||||
: base(setupWizard)
|
||||
{
|
||||
this.xyCalibrationData = xyCalibrationData;
|
||||
this.WindowTitle = "Nozzle Offset Calibration Wizard".Localize();
|
||||
this.HeaderText = "Nozzle Offset Calibration".Localize();
|
||||
this.Name = "Nozzle Offset Calibration Wizard";
|
||||
|
||||
var content = "Here is what we are going to do:".Localize();
|
||||
content += "\n\n • " + "Stash your current bed".Localize();
|
||||
content += "\n • " + "Print the calibration object".Localize();
|
||||
content += "\n • " + "Collect data".Localize();
|
||||
content += "\n • " + "Restore your current bed, after all calibration is complete".Localize();
|
||||
|
||||
contentRow.AddChild(this.CreateTextField(content));
|
||||
|
||||
contentRow.Padding = theme.DefaultContainerPadding;
|
||||
|
||||
this.NextButton.Visible = false;
|
||||
|
||||
var startCalibrationPrint = theme.CreateDialogButton("Start Print".Localize());
|
||||
startCalibrationPrint.Name = "Start Calibration Print";
|
||||
startCalibrationPrint.Click += async (s, e) =>
|
||||
{
|
||||
// stash the current bed
|
||||
var scene = printer.Bed.Scene;
|
||||
scene.Children.Modify((list) => list.Clear());
|
||||
|
||||
// create the item we are adding
|
||||
IObject3D item = CreateCorectCalibrationObject(printer, xyCalibrationData);
|
||||
|
||||
// add the calibration object to the bed
|
||||
scene.Children.Add(item);
|
||||
|
||||
// move the part to the center of the bed
|
||||
var bedBounds = printer.Bed.Bounds;
|
||||
var aabb = item.GetAxisAlignedBoundingBox();
|
||||
item.Matrix *= Matrix4X4.CreateTranslation(bedBounds.Center.X - aabb.MinXYZ.X - aabb.XSize / 2, bedBounds.Center.Y - aabb.MinXYZ.Y - aabb.YSize / 2, -aabb.MinXYZ.Z);
|
||||
// switch to 3D view
|
||||
// register callbacks for print compleation
|
||||
printer.Connection.Disposed += Connection_Disposed;
|
||||
printer.Connection.CommunicationStateChanged += Connection_CommunicationStateChanged;
|
||||
|
||||
// close this window
|
||||
this.DialogWindow.CloseOnIdle();
|
||||
|
||||
// Save the bed that we have created before starting print operation
|
||||
await printer.Bed.SaveChanges(null, CancellationToken.None);
|
||||
|
||||
// start the calibration print
|
||||
await ApplicationController.Instance.PrintPart(
|
||||
printer.Bed.EditContext,
|
||||
printer,
|
||||
null,
|
||||
CancellationToken.None);
|
||||
};
|
||||
|
||||
theme.ApplyPrimaryActionStyle(startCalibrationPrint);
|
||||
|
||||
this.AddPageAction(startCalibrationPrint);
|
||||
}
|
||||
|
||||
private void RestoreBedAndClearPrinterCallbacks()
|
||||
{
|
||||
printer.Connection.Disposed -= Connection_Disposed;
|
||||
printer.Connection.CommunicationStateChanged -= Connection_CommunicationStateChanged;
|
||||
}
|
||||
|
||||
private void Connection_CommunicationStateChanged(object sender, EventArgs e)
|
||||
{
|
||||
switch (printer.Connection.CommunicationState)
|
||||
{
|
||||
// We are no longer running this calibration, unwind anything that we have done
|
||||
case PrinterCommunication.CommunicationStates.Disconnected:
|
||||
case PrinterCommunication.CommunicationStates.AttemptingToConnect:
|
||||
case PrinterCommunication.CommunicationStates.FailedToConnect:
|
||||
case PrinterCommunication.CommunicationStates.ConnectionLost:
|
||||
case PrinterCommunication.CommunicationStates.PrintingFromSd:
|
||||
RestoreBedAndClearPrinterCallbacks();
|
||||
break;
|
||||
|
||||
// The print hase finished, open the window to collect our calibration results
|
||||
case PrinterCommunication.CommunicationStates.FinishedPrint:
|
||||
// open up the next part of the wizard
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
DialogWindow.Show(new XyCalibrationWizard(printer, xyCalibrationData.ExtruderToCalibrateIndex, xyCalibrationData));
|
||||
});
|
||||
// close down our listening to the printer and restor the bed
|
||||
RestoreBedAndClearPrinterCallbacks();
|
||||
break;
|
||||
|
||||
// printing the calibration normaly
|
||||
case PrinterCommunication.CommunicationStates.Connected:
|
||||
case PrinterCommunication.CommunicationStates.PreparingToPrint:
|
||||
case PrinterCommunication.CommunicationStates.Printing:
|
||||
case PrinterCommunication.CommunicationStates.Paused:
|
||||
case PrinterCommunication.CommunicationStates.Disconnecting:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void Connection_Disposed(object sender, EventArgs e)
|
||||
{
|
||||
RestoreBedAndClearPrinterCallbacks();
|
||||
}
|
||||
|
||||
private static IObject3D CreateCorectCalibrationObject(PrinterConfig printer, XyCalibrationData xyCalibrationData)
|
||||
{
|
||||
IObject3D item;
|
||||
switch (xyCalibrationData.Quality)
|
||||
{
|
||||
case XyCalibrationData.QualityType.Coarse:
|
||||
item = XyCalibrationTabObject3D.Create(1,
|
||||
Math.Max(printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2, printer.Settings.GetValue<double>(SettingsKey.layer_height) * 2),
|
||||
.5,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter)).GetAwaiter().GetResult();
|
||||
break;
|
||||
|
||||
case XyCalibrationData.QualityType.Fine:
|
||||
item = XyCalibrationFaceObject3D.Create(1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2,
|
||||
printer.Settings.GetValue<double>(SettingsKey.layer_height),
|
||||
.05,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter),
|
||||
printer.Settings.GetValue<double>(SettingsKey.wipe_tower_size),
|
||||
6).GetAwaiter().GetResult();
|
||||
break;
|
||||
|
||||
default:
|
||||
item = XyCalibrationFaceObject3D.Create(1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2,
|
||||
printer.Settings.GetValue<double>(SettingsKey.layer_height),
|
||||
.1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter),
|
||||
printer.Settings.GetValue<double>(SettingsKey.wipe_tower_size),
|
||||
6).GetAwaiter().GetResult();
|
||||
break;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
void PrintHasCompleated()
|
||||
{
|
||||
// if we are done callibrating
|
||||
printer.Settings.SetValue(SettingsKey.xy_offsets_have_been_calibrated, "1");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -176,19 +176,27 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
var step = new Vector2(spaceBetween + TabWidth, Offset);
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
var offsetMultiple = i - 2;
|
||||
for (int j = 0; j < Layers; j++)
|
||||
{
|
||||
var calibrationMaterial = (j % 2 == 0);
|
||||
var cube = PlatonicSolids.CreateCube();
|
||||
var yOffset = calibrationMaterial ? position.Y : TabDepth / 2;
|
||||
var offset = Matrix4X4.CreateTranslation(position.X, yOffset, BaseHeight + .5 * ChangingHeight + j * ChangingHeight);
|
||||
content.Children.Add(new Object3D()
|
||||
var item = new Object3D()
|
||||
{
|
||||
Mesh = cube,
|
||||
Color = Color.Yellow,
|
||||
Matrix = Matrix4X4.CreateScale(TabWidth, TabDepth, ChangingHeight) * offset,
|
||||
MaterialIndex = calibrationMaterial ? CalibrationMaterialIndex : 0
|
||||
});
|
||||
};
|
||||
content.Children.Add(item);
|
||||
if (calibrationMaterial)
|
||||
{
|
||||
item.MaterialIndex = CalibrationMaterialIndex;
|
||||
item.Color = Color.Yellow;
|
||||
item.Matrix = Matrix4X4.CreateScale(TabWidth, TabDepth, ChangingHeight) * Matrix4X4.CreateTranslation(position.X, position.Y + Offset * offsetMultiple, BaseHeight + .5 * ChangingHeight + j * ChangingHeight);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.Color = Color.LightBlue;
|
||||
item.Matrix = Matrix4X4.CreateScale(TabWidth + spaceBetween * 2, TabDepth, ChangingHeight) * Matrix4X4.CreateTranslation(position.X, position.Y, BaseHeight + .5 * ChangingHeight + j * ChangingHeight);
|
||||
}
|
||||
}
|
||||
position += step;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication
|
|||
public event EventHandler BedTemperatureRead;
|
||||
|
||||
public event EventHandler CommunicationStateChanged;
|
||||
public event EventHandler DetailedPrintingStateChanged;
|
||||
|
||||
public event EventHandler ConnectionFailed;
|
||||
|
||||
|
|
@ -592,7 +593,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication
|
|||
}
|
||||
|
||||
communicationState = value;
|
||||
OnCommunicationStateChanged(null);
|
||||
CommunicationStateChanged?.Invoke(this, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -763,7 +764,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication
|
|||
if (_printingStatePrivate != value)
|
||||
{
|
||||
_printingStatePrivate = value;
|
||||
OnCommunicationStateChanged(null);
|
||||
DetailedPrintingStateChanged?.Invoke(this, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1324,29 +1325,6 @@ You will then need to logout and log back in to the computer for the changes to
|
|||
}
|
||||
}
|
||||
|
||||
public void OnCommunicationStateChanged(EventArgs e)
|
||||
{
|
||||
// Call instance event
|
||||
CommunicationStateChanged?.Invoke(this, e);
|
||||
#if __ANDROID__
|
||||
|
||||
//Path to the printer output file
|
||||
string pathToPrintOutputFile = Path.Combine(ApplicationDataStorage.Instance.PublicDataStoragePath, "print_output.txt");
|
||||
|
||||
if (CommunicationState == CommunicationStates.FinishedPrint)
|
||||
{
|
||||
//Only write to the text file if file exists
|
||||
if (File.Exists(pathToPrintOutputFile))
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
File.WriteAllLines(pathToPrintOutputFile, this.TerminalLog.PrinterLines);
|
||||
});
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public void OnConnectionFailed(ConnectionFailure reason, string failureDetails = null)
|
||||
{
|
||||
communicationPossible = false;
|
||||
|
|
|
|||
|
|
@ -163,7 +163,16 @@ namespace MatterHackers.MatterControl.PrinterControls
|
|||
|
||||
xyCalibrateButton.Click += (s, e) => UiThread.RunOnIdle(() =>
|
||||
{
|
||||
DialogWindow.Show(new XyCalibrationWizard(printer));
|
||||
// TODO: check that we are able to print (no errors)
|
||||
bool printerCanPrint = true;
|
||||
if (printerCanPrint)
|
||||
{
|
||||
DialogWindow.Show(new XyCalibrationWizard(printer, 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
// show the error dialog for printer errors and warnings
|
||||
}
|
||||
});
|
||||
|
||||
settingsRow.BorderColor = Color.Transparent;
|
||||
|
|
|
|||
|
|
@ -112,8 +112,9 @@ namespace MatterHackers.MatterControl
|
|||
UiThread.RunOnIdle(() => tuningAdjustmentControlsContainer.Width = tuningAdjustmentControlsContainer.Width + 1);
|
||||
|
||||
// Register listeners
|
||||
printer.Connection.CommunicationStateChanged += onPrinterStatusChanged;
|
||||
printer.Connection.EnableChanged += onPrinterStatusChanged;
|
||||
printer.Connection.CommunicationStateChanged += OnPrinterStatusChanged;
|
||||
printer.Connection.DetailedPrintingStateChanged += OnPrinterStatusChanged;
|
||||
printer.Connection.EnableChanged += OnPrinterStatusChanged;
|
||||
|
||||
SetVisibleControls();
|
||||
}
|
||||
|
|
@ -163,13 +164,14 @@ namespace MatterHackers.MatterControl
|
|||
public override void OnClosed(EventArgs e)
|
||||
{
|
||||
// Unregister listeners
|
||||
printer.Connection.CommunicationStateChanged -= onPrinterStatusChanged;
|
||||
printer.Connection.EnableChanged -= onPrinterStatusChanged;
|
||||
printer.Connection.CommunicationStateChanged -= OnPrinterStatusChanged;
|
||||
printer.Connection.DetailedPrintingStateChanged -= OnPrinterStatusChanged;
|
||||
printer.Connection.EnableChanged -= OnPrinterStatusChanged;
|
||||
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
private void onPrinterStatusChanged(object sender, EventArgs e)
|
||||
private void OnPrinterStatusChanged(object sender, EventArgs e)
|
||||
{
|
||||
SetVisibleControls();
|
||||
UiThread.RunOnIdle(this.Invalidate);
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
SettingsKey.use_z_probe,
|
||||
SettingsKey.validate_layer_height,
|
||||
SettingsKey.write_regex,
|
||||
SettingsKey.xy_offsets_have_been_calibrated,
|
||||
SettingsKey.z_offset,
|
||||
SettingsKey.z_probe_samples,
|
||||
SettingsKey.z_probe_xy_offset,
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
[SettingsKey.print_leveling_data] = "",
|
||||
[SettingsKey.print_leveling_enabled] = "0",
|
||||
[SettingsKey.probe_has_been_calibrated] = "0",
|
||||
[SettingsKey.xy_offsets_have_been_calibrated] = "0",
|
||||
[SettingsKey.filament_has_been_loaded] = "0",
|
||||
[SettingsKey.filament_1_has_been_loaded] = "0"
|
||||
};
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ using MatterHackers.Agg.Platform;
|
|||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.MatterControl;
|
||||
using MatterHackers.MatterControl.Library;
|
||||
using MatterHackers.MatterControl.PartPreviewWindow;
|
||||
using MatterHackers.MatterControl.Tests.Automation;
|
||||
using MatterHackers.MeshVisualizer;
|
||||
using MatterHackers.VectorMath;
|
||||
|
|
@ -67,6 +68,93 @@ namespace MatterHackers.PolygonMesh.UnitTests
|
|||
Assert.IsTrue(loadedItem.Children.Count == 1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task AutoArrangeChildrenTests()
|
||||
{
|
||||
// arange a single item around the origin
|
||||
{
|
||||
var scene = new InteractiveScene();
|
||||
Object3D cube1;
|
||||
scene.Children.Add(cube1 = new Object3D()
|
||||
{
|
||||
Mesh = PlatonicSolids.CreateCube(20, 20, 20),
|
||||
Matrix = Matrix4X4.CreateTranslation(34, 22, 10)
|
||||
});
|
||||
|
||||
Assert.IsTrue(new AxisAlignedBoundingBox(24, 12, 0, 44, 32, 20).Equals(cube1.GetAxisAlignedBoundingBox(), .001));
|
||||
|
||||
await scene.AutoArrangeChildren(Vector3.Zero);
|
||||
|
||||
Assert.IsTrue(new AxisAlignedBoundingBox(-10, -10, 0, 10, 10, 20).Equals(cube1.GetAxisAlignedBoundingBox(), .001));
|
||||
}
|
||||
|
||||
// arange a single item around a typical bed center
|
||||
{
|
||||
var scene = new InteractiveScene();
|
||||
Object3D cube1;
|
||||
scene.Children.Add(cube1 = new Object3D()
|
||||
{
|
||||
Mesh = PlatonicSolids.CreateCube(20, 20, 20),
|
||||
Matrix = Matrix4X4.CreateTranslation(34, 22, 10)
|
||||
});
|
||||
|
||||
Assert.IsTrue(new AxisAlignedBoundingBox(24, 12, 0, 44, 32, 20).Equals(cube1.GetAxisAlignedBoundingBox(), .001));
|
||||
|
||||
await scene.AutoArrangeChildren(new Vector3(100, 100, 0));
|
||||
|
||||
Assert.IsTrue(new AxisAlignedBoundingBox(90, 90, 0, 110, 110, 20).Equals(cube1.GetAxisAlignedBoundingBox(), .001));
|
||||
}
|
||||
|
||||
// arange 4 items
|
||||
{
|
||||
var scene = new InteractiveScene();
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
scene.Children.Add(new Object3D()
|
||||
{
|
||||
Mesh = PlatonicSolids.CreateCube(20, 20, 20),
|
||||
Matrix = Matrix4X4.CreateTranslation(i * 134, i * -122, 10)
|
||||
});
|
||||
}
|
||||
|
||||
var sceneAabb = scene.GetAxisAlignedBoundingBox();
|
||||
Assert.Greater(sceneAabb.XSize, 60);
|
||||
Assert.Greater(sceneAabb.YSize, 60);
|
||||
|
||||
await scene.AutoArrangeChildren(Vector3.Zero);
|
||||
|
||||
sceneAabb = scene.GetAxisAlignedBoundingBox();
|
||||
Assert.Less(sceneAabb.XSize, 60);
|
||||
Assert.Less(sceneAabb.YSize, 60);
|
||||
}
|
||||
|
||||
// arange 4 items, starting with 1 selected
|
||||
{
|
||||
var scene = new InteractiveScene();
|
||||
Object3D child = null;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
scene.Children.Add(child = new Object3D()
|
||||
{
|
||||
Mesh = PlatonicSolids.CreateCube(20, 20, 20),
|
||||
Matrix = Matrix4X4.CreateTranslation(i * 134, i * -122, 10)
|
||||
});
|
||||
}
|
||||
|
||||
scene.SelectedItem = child;
|
||||
|
||||
var sceneAabb = scene.GetAxisAlignedBoundingBox();
|
||||
Assert.Greater(sceneAabb.XSize, 60);
|
||||
Assert.Greater(sceneAabb.YSize, 60);
|
||||
|
||||
await scene.AutoArrangeChildren(Vector3.Zero);
|
||||
|
||||
sceneAabb = scene.GetAxisAlignedBoundingBox();
|
||||
Assert.Less(sceneAabb.XSize, 60);
|
||||
Assert.Less(sceneAabb.YSize, 60);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CreatesAndLinksAmfsForUnsavedMeshes()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue