From 808f8740e9f8e9a16592313543a573514ff076e5 Mon Sep 17 00:00:00 2001 From: Gregory Diaz Date: Mon, 27 Jul 2015 15:00:00 -0700 Subject: [PATCH 1/9] Added updated config.ini, material and quality settings as well as macros for Me3d --- .../PrinterConnections/PrinterSetupStatus.cs | 1 + .../PrinterSettings/Me3D/Me2/config.ini | 69 +++++++++++-------- .../Me3D/Me2/material/POLYFLEX.slice | 9 +-- .../Me3D/Me2/material/PolyMax.slice | 4 ++ .../Me3D/Me2/material/PolyPlus.slice | 4 ++ .../Me3D/Me2/material/PolyPlusLT.slice | 7 ++ .../Me3D/Me2/material/PolyWood.slice | 4 ++ .../Me3D/Me2/quality/Fast.slice | 3 +- .../Me3D/Me2/quality/Ultra-Fine.slice | 3 +- .../Me3D/Me2/quality/Vase.slice | 4 ++ StaticData/PrinterSettings/Me3D/Me2/setup.ini | 1 + 11 files changed, 72 insertions(+), 37 deletions(-) create mode 100644 StaticData/PrinterSettings/Me3D/Me2/material/PolyMax.slice create mode 100644 StaticData/PrinterSettings/Me3D/Me2/material/PolyPlus.slice create mode 100644 StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice create mode 100644 StaticData/PrinterSettings/Me3D/Me2/material/PolyWood.slice create mode 100644 StaticData/PrinterSettings/Me3D/Me2/quality/Vase.slice diff --git a/PrinterControls/PrinterConnections/PrinterSetupStatus.cs b/PrinterControls/PrinterConnections/PrinterSetupStatus.cs index f944fdfa5..353b10313 100644 --- a/PrinterControls/PrinterConnections/PrinterSetupStatus.cs +++ b/PrinterControls/PrinterConnections/PrinterSetupStatus.cs @@ -127,6 +127,7 @@ namespace MatterHackers.MatterControl macroDict["Offset 1"] = "M565 Z1"; macroDict["Offset 1.1"] = "M565 Z1.1"; macroDict["Offset 1.2"] = "M565 Z1.2"; + macroDict["Z Offset"] = "G1 Z10; G28; G29; G1 Z10; G1 X5 Y5 F4000; M117 Lower Z to bed; M114;"; //Determine if baud rate is needed and show controls if required string baudRate; diff --git a/StaticData/PrinterSettings/Me3D/Me2/config.ini b/StaticData/PrinterSettings/Me3D/Me2/config.ini index 565edfbd9..9a7becd8a 100644 --- a/StaticData/PrinterSettings/Me3D/Me2/config.ini +++ b/StaticData/PrinterSettings/Me3D/Me2/config.ini @@ -1,24 +1,25 @@ -avoid_crossing_perimeters = 0 +avoid_crossing_perimeters = 1 bed_shape = rectangular bed_size = 200,220 bed_temperature = 0 bottom_clip_amount = 0 -bottom_solid_layers = 1mm +bottom_solid_layers = 4 bridge_acceleration = 0 bridge_fan_speed = 100 bridge_flow_ratio = 1 bridge_speed = 50 brim_width = 0 build_height = 180 -cancel_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0; turn off temperature\nM140 S0; turn off heated bed\nM106 S0; Turn off fan\nM18;\nM117 Look...awesome!; Put message on LCD screen +cancel_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0; turn off temperature\nM140 S0; turn off heated bed\nM106 S0; Turn off fan\nM18;\nM117 Print cancelled center_part_on_bed = 1 complete_objects = 0 +connect_gcode = cool_extruder_lift = 0 cooling = 1 create_raft = 0 default_acceleration = 0 disable_fan_first_layers = 1 -end_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28 ; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heated bed\nM106 S0 ; Turn off fan\nM18;\nM117 Look...awesome! ; Put message on LCD screen +end_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28 ; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heated bed\nM106 S0 ; Turn off fan\nM18;\nM117 All Done!!! external_perimeter_speed = 80% external_perimeters_first = 0 extra_perimeters = 1 @@ -26,6 +27,7 @@ extruder_clearance_height = 20 extruder_clearance_radius = 40 extruder_count = 1 extruder_offset = 0x0 +extruder_wipe_temperature = 0 extruders_share_temperature = 0 extrusion_axis = E extrusion_multiplier = 1 @@ -34,14 +36,14 @@ fan_always_on = 0 fan_below_layer_time = 60 filament_diameter = 1.75 fill_angle = 45 -fill_density = 0.2 +fill_density = 20% fill_pattern = honeycomb first_layer_acceleration = 0 first_layer_bed_temperature = 0 -first_layer_extrusion_width = 150% +first_layer_extrusion_width = 0 first_layer_height = 0.2 -first_layer_speed = 40 -first_layer_temperature = 225 +first_layer_speed = 20 +first_layer_temperature = 220 g0 = 0 gap_fill_speed = 20 gcode_arcs = 1 @@ -49,72 +51,79 @@ gcode_comments = 0 gcode_flavor = reprap gcode_output_type = REPRAP has_fan = 1 +has_hardware_leveling = 1 has_heated_bed = 0 +has_power_control = 0 has_sd_card_reader = 1 +show_reset_connection = 0 +heat_extruder_before_homing = 0 infill_acceleration = 0 infill_every_layers = 1 infill_extruder = 1 infill_extrusion_width = 0 infill_first = 0 infill_only_where_needed = 0 -infill_overlap_perimeter = .06 +infill_overlap_perimeter = 0.05 infill_speed = 100 infill_type = GRID layer_gcode = -layer_height = 0.2 +layer_height = 0.1 max_fan_speed = 100 -min_extrusion_before_retract = 1 +min_extrusion_before_retract = 0 min_fan_speed = 80 min_print_speed = 10 -min_skirt_length = 10 +min_skirt_length = 1 notes = nozzle_diameter = 0.4 only_retract_when_crossing_perimeters = 1 ooze_prevention = 0 output_filename_format = [input_filename_base].gcode overhangs = 1 -pause_gcode = G91;\nG1 F250 Z10 X10 E-16; Retract filament from barrel\nG90;\n;M104 S0; // set to holding temp\n +pause_gcode = G91;\nG1 F250 Z10 X10 E-16; Retract filament from barrel\nG90;\nM104 S0; // set to holding temp\nM117 Print paused perimeter_acceleration = 0 perimeter_extruder = 1 perimeter_extrusion_width = 0 perimeter_speed = 100 -perimeters = 1 +perimeters = 2 post_process = print_center = 100,110 raft_air_gap = .2 +raft_extruder = 0 raft_extra_distance_around_part = 5 raft_fan_speed_percent = 100 raft_layers = 0 raft_print_speed = 100% +bed_remove_part_temperature = 0 randomize_start = 0 repair_outlines_extensive_stitching = 1 repair_outlines_keep_open = 1 resolution = 0 -resume_gcode = ;M109 S[temperature]; // Set print temperature \nG91;\nG1 F250 Z-10 X-10 E16; Prime filament filament from barrel\nG90; -retract_before_travel = 2 +resume_gcode = M117 Print resumed\nM109 S[temperature]; // Set print temperature \nG91;\nG1 F250 Z-10 X-10 E16; Prime filament filament from barrel\nG90; +retract_before_travel = 0.5 retract_layer_change = 1 -retract_length = 4 +retract_length = 2 retract_length_tool_change = 10 -retract_lift = 0.1 +retract_lift = 0 retract_restart_extra = 0 retract_restart_extra_toolchange = 0 -retract_speed = 40 -skirt_distance = 6 +retract_speed = 50 +skirt_distance = 3 skirt_height = 1 skirts = 1 -slowdown_below_layer_time = 15 +slowdown_below_layer_time = 8 small_perimeter_speed = 30 solid_fill_pattern = rectilinear solid_infill_below_area = 70 solid_infill_every_layers = 0 solid_infill_extrusion_width = 0 solid_infill_speed = 60 +solid_shell = 0 spiral_vase = 0 standby_temperature_delta = -5 -start_gcode = ;Me3D - startup sequence - Me2 (G5,G6,G7) Build 30/08/14\n;Remove the ";" to activate any line\n;MAKE SURE YOU KNOW WHAT EACH LINE DOES BEFORE YOU CHANGE IT!!! The Me2 is 100% hackable and so has limited physical protection from errors in the g-code\n;M501\n;M500\n;M190 S[bed_temperature] ; // Uncomment to add your own bed temperature line\nM104 S[temperature] ; // Start heater and continue g-code\nG21 ; // set units to millimeters\n;M92 E106.707 ; // Set E-Steps\n;M92 X80 ; // Set X Steps\n;M92 Y80 ; // Set Y Steps\n;M92 Z80 ; // Set Z Steps\nM201 X3000 Y3000; // max accel print\nM202 X3000 Y3000; // max accel travel\nM205 X15; // max xyjerk mm/s\nM208 X200 Y200 Z200; // set build size\n;M17 X Y Z; // Enable motors\nG91; // Relative position\nG1 Z10; // clear bed \nG90 ; // ABS position\nG28; // home axes\nG29; // perform auto levelling at three corners\nM82 ; // use absolute distances for extrusion\nG1 Z15 F4000; // Raise Z axis clear\nG1 X-5 F4000; // Move to X axis zero\nG1 Y0 F4000;\nG92 E0; // zero the extruded length\nM109 S[temperature]; // Set print temperature and wait\nG1 F50 E30; // extrude feed stock to prime hotend barrel and purge\nG92 E0; // zero the extruded length again\nM117 Awesome!!! // Put message on LCD screen +start_gcode = ;Me3D - MC1.3 startup sequence - Me2 (G5,G6,G7) Build 07/15\n;Remove the ";" to activate any line\n;MAKE SURE YOU KNOW WHAT EACH LINE DOES BEFORE YOU CHANGE IT!!! The Me2 is 100% hackable and so has limited physical protection from errors in the g-code\nM104 S[temperature] ; // Start heater and continue g-code\nG21 ; // set units to millimeters\nM201 X3000 Y3000; // max accel print\nM202 X3000 Y3000; // max accel travel\nM205 X10; // max xyjerk mm/s\nG91; // Relative position\nG1 Z10; // clear bed \nG90 ; // ABS position\nG28; // home axes\nG29; // perform auto levelling at three corners\nM82 ; // use absolute distances for extrusion\nG1 Z15 F4000; // Raise Z axis clear\nG1 X-5 F4000; // Move to X axis zero\nG1 Y5 F4000;\nG92 E0; // zero the extruded length\nM109 S[temperature]; // Set print temperature and wait\nG1 F100 E19; // extrude feed stock to prime hotend barrel and purge\n; //Create purge line\nG1 Z[z_offset] F1000; // z_offset variable only available in 1.2.3 and above\nG91; // Relative motion \nG1 Z0.3;\nG1 X10 Y1 F1000; // Change this value to move the position of the line on the bed\nG1 X120 E20;\nG1 Y1;\nG1 X-100 E16.5;\nG1 X-20 E2;\nG1 X10 Y-3 F500;\nG1 Y5 F4000;\nG92 E0;\nG90;\nG92 E0; // zero the extruded length again\nM117 OK...let's print start_perimeters_at_concave_points = 0 start_perimeters_at_non_overhang = 0 -support_material = 1 +support_material = 0 support_material_angle = 45 support_material_create_internal_support = 0 support_material_enforce_layers = 0 @@ -122,23 +131,23 @@ support_material_extruder = 1 support_material_extrusion_width = 0 support_material_infill_angle = 45 support_material_interface_extruder = 1 -support_material_interface_layers = 3 +support_material_interface_layers = 0 support_material_interface_spacing = 0 support_material_pattern = honeycomb -support_material_spacing = 5 +support_material_spacing = 2 support_material_speed = 100 -support_material_threshold = 60 +support_material_threshold = 19 support_material_xy_distance = 1 support_material_z_distance = 0.15 -support_material_z_gap_layers = 2 -support_type = GRID -temperature = 220 +support_material_z_gap_layers = 3 +support_type = LINES +temperature = 205 thin_walls = 1 threads = 2 toolchange_gcode = top_infill_extrusion_width = 0 top_solid_infill_speed = 50 -top_solid_layers = 1mm +top_solid_layers = 4 travel_speed = 120 use_firmware_retraction = 0 use_relative_e_distances = 0 diff --git a/StaticData/PrinterSettings/Me3D/Me2/material/POLYFLEX.slice b/StaticData/PrinterSettings/Me3D/Me2/material/POLYFLEX.slice index 4f2f37642..f4e81062e 100644 --- a/StaticData/PrinterSettings/Me3D/Me2/material/POLYFLEX.slice +++ b/StaticData/PrinterSettings/Me3D/Me2/material/POLYFLEX.slice @@ -1,8 +1,8 @@ fan_always_on = 1 disable_fan_first_layers = 0 -retract_length = 0 -first_layer_temperature = 230 -temperature = 230 +retract_length = 2 +first_layer_temperature = 220 +temperature = 215 external_perimeter_speed = 50 infill_speed = 50 solid_infill_speed = 50 @@ -11,4 +11,5 @@ top_solid_infill_speed = 50 perimeter_speed = 40 avoid_crossing_perimeters = 1 min_fan_speed = 100 -min_print_speed = 15 \ No newline at end of file +min_print_speed = 15 +retract_speed = 20 \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/material/PolyMax.slice b/StaticData/PrinterSettings/Me3D/Me2/material/PolyMax.slice new file mode 100644 index 000000000..69dacb783 --- /dev/null +++ b/StaticData/PrinterSettings/Me3D/Me2/material/PolyMax.slice @@ -0,0 +1,4 @@ +first_layer_bed_temperature = 0 +first_layer_temperature = 210 +temperature = 205 +bed_temperature = 0 \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlus.slice b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlus.slice new file mode 100644 index 000000000..69dacb783 --- /dev/null +++ b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlus.slice @@ -0,0 +1,4 @@ +first_layer_bed_temperature = 0 +first_layer_temperature = 210 +temperature = 205 +bed_temperature = 0 \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice new file mode 100644 index 000000000..3bc5d73ad --- /dev/null +++ b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice @@ -0,0 +1,7 @@ +first_layer_bed_temperature = 0 +first_layer_temperature = 85 +temperature = 85 +bed_temperature = 0 +start_gcode = ;Me3D - MC1.3 startup sequence - Me2 (G5,G6,G7) Build 06/24/15\n;Remove the ";" to activate any line\n;MAKE SURE YOU KNOW WHAT EACH LINE DOES BEFORE YOU CHANGE IT!!! The Me2 is 100% hackable and so has limited physical protection from errors in the g-code\nM104 S[temperature] ; // Start heater and continue g-code\nG21 ; // set units to millimeters\nM201 X3000 Y3000; // max accel print\nM202 X3000 Y3000; // max accel travel\nM205 X10; // max xyjerk mm/s\nG91; // Relative position\nG1 Z10; // clear bed \nG90 ; // ABS position\nG28; // home axes\nG29; // perform auto levelling at three corners\nM82 ; // use absolute distances for extrusion\nG1 Z15 F4000; // Raise Z axis clear\nG1 X-5 F4000; // Move to X axis zero\nG1 Y5 F4000;\nG92 E0; // zero the extruded length\nM109 S[temperature]; // Set print temperature and wait\nM302 S75; // Set cold extrusion level\nG1 F100 E19; // extrude feed stock to prime hotend barrel and purge\n; //Create purge line\nG1 Z[z_offset] F1000; // z_offset variable only available in 1.2.3 and above\nG91; // Relative motion \nG1 Z0.3;\nG1 X10 Y1 F1000; // Change this value to move the position of the line on the bed\nG1 X120 E20;\nG1 Y1;\nG1 X-100 E16.5;\nG1 X-20 E2;\nG1 X10 Y-3 F500;\nG1 Y5 F4000;\nG92 E0;\nG90;\nG92 E0; // zero the extruded length again\nM117 OK...let's print; // Put message on LCD screen +end_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28 ; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heated bed\nM106 S0 ; Turn off fan\nM18;\nM117 All Done!!! ; Put message on LCD screen\nM302 S170; Reset cold extrusion temperature +cancel_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0; turn off temperature\nM140 S0; turn off heated bed\nM106 S0; Turn off fan\nM18;\nM117 Print cancelled; Put message on LCD screen\nM302 S170; Reset cold extrusion temperature \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/material/PolyWood.slice b/StaticData/PrinterSettings/Me3D/Me2/material/PolyWood.slice new file mode 100644 index 000000000..2c99c6c9d --- /dev/null +++ b/StaticData/PrinterSettings/Me3D/Me2/material/PolyWood.slice @@ -0,0 +1,4 @@ +first_layer_bed_temperature = 0 +first_layer_temperature = 210 +temperature = 180 +bed_temperature = 0 \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/quality/Fast.slice b/StaticData/PrinterSettings/Me3D/Me2/quality/Fast.slice index ae159ae1a..5c2338f29 100644 --- a/StaticData/PrinterSettings/Me3D/Me2/quality/Fast.slice +++ b/StaticData/PrinterSettings/Me3D/Me2/quality/Fast.slice @@ -2,5 +2,4 @@ layer_height = 0.3 infill_speed = 80 perimeter_speed = 80 external_perimeter_speed = 100% -support_material_speed = 80 -first_layer_speed = 35 \ No newline at end of file +support_material_speed = 80 \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/quality/Ultra-Fine.slice b/StaticData/PrinterSettings/Me3D/Me2/quality/Ultra-Fine.slice index 879515e6e..92cea249f 100644 --- a/StaticData/PrinterSettings/Me3D/Me2/quality/Ultra-Fine.slice +++ b/StaticData/PrinterSettings/Me3D/Me2/quality/Ultra-Fine.slice @@ -4,4 +4,5 @@ infill_speed = 30 solid_infill_speed = 30 support_material_speed = 30 top_solid_infill_speed = 30 -perimeter_speed = 30 \ No newline at end of file +perimeter_speed = 30 +min_print_speed = 3 \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/quality/Vase.slice b/StaticData/PrinterSettings/Me3D/Me2/quality/Vase.slice new file mode 100644 index 000000000..7b3d16d23 --- /dev/null +++ b/StaticData/PrinterSettings/Me3D/Me2/quality/Vase.slice @@ -0,0 +1,4 @@ +fill_density = 0 +perimeters = 2 +top_solid_layers = 0 +bottom_solid_layers = 4 \ No newline at end of file diff --git a/StaticData/PrinterSettings/Me3D/Me2/setup.ini b/StaticData/PrinterSettings/Me3D/Me2/setup.ini index 0dc1566a1..7707ef5bc 100644 --- a/StaticData/PrinterSettings/Me3D/Me2/setup.ini +++ b/StaticData/PrinterSettings/Me3D/Me2/setup.ini @@ -1,3 +1,4 @@ baud_rate = 250000 windows_driver = MHSerial.inf default_material_presets = PLA +default_macros = Z Offset From 4831f246919c2fac27775e9111ff42212a614e52 Mon Sep 17 00:00:00 2001 From: Gregory Diaz Date: Mon, 27 Jul 2015 15:17:14 -0700 Subject: [PATCH 2/9] Removed Start Gcode in material setting --- StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice | 3 --- 1 file changed, 3 deletions(-) diff --git a/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice index 3bc5d73ad..e78454c16 100644 --- a/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice +++ b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice @@ -2,6 +2,3 @@ first_layer_bed_temperature = 0 first_layer_temperature = 85 temperature = 85 bed_temperature = 0 -start_gcode = ;Me3D - MC1.3 startup sequence - Me2 (G5,G6,G7) Build 06/24/15\n;Remove the ";" to activate any line\n;MAKE SURE YOU KNOW WHAT EACH LINE DOES BEFORE YOU CHANGE IT!!! The Me2 is 100% hackable and so has limited physical protection from errors in the g-code\nM104 S[temperature] ; // Start heater and continue g-code\nG21 ; // set units to millimeters\nM201 X3000 Y3000; // max accel print\nM202 X3000 Y3000; // max accel travel\nM205 X10; // max xyjerk mm/s\nG91; // Relative position\nG1 Z10; // clear bed \nG90 ; // ABS position\nG28; // home axes\nG29; // perform auto levelling at three corners\nM82 ; // use absolute distances for extrusion\nG1 Z15 F4000; // Raise Z axis clear\nG1 X-5 F4000; // Move to X axis zero\nG1 Y5 F4000;\nG92 E0; // zero the extruded length\nM109 S[temperature]; // Set print temperature and wait\nM302 S75; // Set cold extrusion level\nG1 F100 E19; // extrude feed stock to prime hotend barrel and purge\n; //Create purge line\nG1 Z[z_offset] F1000; // z_offset variable only available in 1.2.3 and above\nG91; // Relative motion \nG1 Z0.3;\nG1 X10 Y1 F1000; // Change this value to move the position of the line on the bed\nG1 X120 E20;\nG1 Y1;\nG1 X-100 E16.5;\nG1 X-20 E2;\nG1 X10 Y-3 F500;\nG1 Y5 F4000;\nG92 E0;\nG90;\nG92 E0; // zero the extruded length again\nM117 OK...let's print; // Put message on LCD screen -end_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28 ; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heated bed\nM106 S0 ; Turn off fan\nM18;\nM117 All Done!!! ; Put message on LCD screen\nM302 S170; Reset cold extrusion temperature -cancel_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0; turn off temperature\nM140 S0; turn off heated bed\nM106 S0; Turn off fan\nM18;\nM117 Print cancelled; Put message on LCD screen\nM302 S170; Reset cold extrusion temperature \ No newline at end of file From 69ce007b5e9628c957077b384e7adb4b7bd4d548 Mon Sep 17 00:00:00 2001 From: Gregory Diaz Date: Mon, 27 Jul 2015 16:17:05 -0700 Subject: [PATCH 3/9] Made changes to quality settings for ROBO 3D --- StaticData/PrinterSettings/ROBO 3D/R1/quality/High.slice | 3 ++- StaticData/PrinterSettings/ROBO 3D/R1/quality/Low.slice | 5 +++-- StaticData/PrinterSettings/ROBO 3D/R1/quality/Medium.slice | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/StaticData/PrinterSettings/ROBO 3D/R1/quality/High.slice b/StaticData/PrinterSettings/ROBO 3D/R1/quality/High.slice index 04301f9c0..2c0500063 100644 --- a/StaticData/PrinterSettings/ROBO 3D/R1/quality/High.slice +++ b/StaticData/PrinterSettings/ROBO 3D/R1/quality/High.slice @@ -2,4 +2,5 @@ layer_height = 0.1 first_layer_height = 0.3 perimeters = 2 fill_density = 0.25 -top_solid_layers = 8 +top_solid_layers = 1.2mm +bottom_solid_layers = 1mm diff --git a/StaticData/PrinterSettings/ROBO 3D/R1/quality/Low.slice b/StaticData/PrinterSettings/ROBO 3D/R1/quality/Low.slice index 974f8e6cb..fbe604407 100644 --- a/StaticData/PrinterSettings/ROBO 3D/R1/quality/Low.slice +++ b/StaticData/PrinterSettings/ROBO 3D/R1/quality/Low.slice @@ -2,8 +2,9 @@ layer_height = 0.3 first_layer_height = 0.3 bottom_clip_amount = 0 perimeters = 2 -top_solid_layers = 3 +top_solid_layers = 1.2mm fill_density = 0.2 fill_pattern = rectilinear solid_infill_below_area = 40 -infill_speed = 60 \ No newline at end of file +infill_speed = 60 +bottom_solid_layers = 0.9mm \ No newline at end of file diff --git a/StaticData/PrinterSettings/ROBO 3D/R1/quality/Medium.slice b/StaticData/PrinterSettings/ROBO 3D/R1/quality/Medium.slice index 61de1dbe7..4ed260d92 100644 --- a/StaticData/PrinterSettings/ROBO 3D/R1/quality/Medium.slice +++ b/StaticData/PrinterSettings/ROBO 3D/R1/quality/Medium.slice @@ -1,4 +1,6 @@ layer_height = 0.2 first_layer_height = 0.3 perimeters = 2 -fill_density = 0.25 \ No newline at end of file +fill_density = 0.25 +top_solid_layers = 1.2mm +bottom_solid_layers = 1mm \ No newline at end of file From a57833d86f89bae3c715b8a5de17e1051a36cc45 Mon Sep 17 00:00:00 2001 From: Gregory Diaz Date: Tue, 28 Jul 2015 07:56:00 -0700 Subject: [PATCH 4/9] Changed default temperature for R1 to 210 --- StaticData/PrinterSettings/ROBO 3D/R1/config.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StaticData/PrinterSettings/ROBO 3D/R1/config.ini b/StaticData/PrinterSettings/ROBO 3D/R1/config.ini index 4701a8c9e..25cc41db5 100644 --- a/StaticData/PrinterSettings/ROBO 3D/R1/config.ini +++ b/StaticData/PrinterSettings/ROBO 3D/R1/config.ini @@ -128,7 +128,7 @@ support_material_xy_distance = 0.7 support_material_z_distance = 0.15 support_material_z_gap_layers = 1 support_type = LINES -temperature = 215 +temperature = 210 thin_walls = 1 threads = 2 toolchange_gcode = From d6fb0f1aab18386f046056ca33e7d5eb411aecda Mon Sep 17 00:00:00 2001 From: Gregory Diaz Date: Tue, 28 Jul 2015 08:18:32 -0700 Subject: [PATCH 5/9] Makes sense to keep start and end gcode for this material(ME3D) --- StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice | 3 +++ 1 file changed, 3 insertions(+) diff --git a/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice index e78454c16..3bc5d73ad 100644 --- a/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice +++ b/StaticData/PrinterSettings/Me3D/Me2/material/PolyPlusLT.slice @@ -2,3 +2,6 @@ first_layer_bed_temperature = 0 first_layer_temperature = 85 temperature = 85 bed_temperature = 0 +start_gcode = ;Me3D - MC1.3 startup sequence - Me2 (G5,G6,G7) Build 06/24/15\n;Remove the ";" to activate any line\n;MAKE SURE YOU KNOW WHAT EACH LINE DOES BEFORE YOU CHANGE IT!!! The Me2 is 100% hackable and so has limited physical protection from errors in the g-code\nM104 S[temperature] ; // Start heater and continue g-code\nG21 ; // set units to millimeters\nM201 X3000 Y3000; // max accel print\nM202 X3000 Y3000; // max accel travel\nM205 X10; // max xyjerk mm/s\nG91; // Relative position\nG1 Z10; // clear bed \nG90 ; // ABS position\nG28; // home axes\nG29; // perform auto levelling at three corners\nM82 ; // use absolute distances for extrusion\nG1 Z15 F4000; // Raise Z axis clear\nG1 X-5 F4000; // Move to X axis zero\nG1 Y5 F4000;\nG92 E0; // zero the extruded length\nM109 S[temperature]; // Set print temperature and wait\nM302 S75; // Set cold extrusion level\nG1 F100 E19; // extrude feed stock to prime hotend barrel and purge\n; //Create purge line\nG1 Z[z_offset] F1000; // z_offset variable only available in 1.2.3 and above\nG91; // Relative motion \nG1 Z0.3;\nG1 X10 Y1 F1000; // Change this value to move the position of the line on the bed\nG1 X120 E20;\nG1 Y1;\nG1 X-100 E16.5;\nG1 X-20 E2;\nG1 X10 Y-3 F500;\nG1 Y5 F4000;\nG92 E0;\nG90;\nG92 E0; // zero the extruded length again\nM117 OK...let's print; // Put message on LCD screen +end_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28 ; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heated bed\nM106 S0 ; Turn off fan\nM18;\nM117 All Done!!! ; Put message on LCD screen\nM302 S170; Reset cold extrusion temperature +cancel_gcode = G91; Set to Relative position\nG1 Z3 E-3; move z axis up\nG28; home axis\nG92 E0; zero the extruded length\nG1 F250 E-16; Retract filament from barrel\nG92 E0; zero the extruded length again\nG90; Set to Absolute position\nM104 S0; turn off temperature\nM140 S0; turn off heated bed\nM106 S0; Turn off fan\nM18;\nM117 Print cancelled; Put message on LCD screen\nM302 S170; Reset cold extrusion temperature \ No newline at end of file From 26e6ed4d6691257d857d5c50365fbf4cd3d26b74 Mon Sep 17 00:00:00 2001 From: Gregory Diaz Date: Tue, 28 Jul 2015 09:38:42 -0700 Subject: [PATCH 6/9] changed default temp for R1 to 200 (requested by ROBO 3D) --- StaticData/PrinterSettings/ROBO 3D/R1/config.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StaticData/PrinterSettings/ROBO 3D/R1/config.ini b/StaticData/PrinterSettings/ROBO 3D/R1/config.ini index 25cc41db5..583109fb9 100644 --- a/StaticData/PrinterSettings/ROBO 3D/R1/config.ini +++ b/StaticData/PrinterSettings/ROBO 3D/R1/config.ini @@ -128,7 +128,7 @@ support_material_xy_distance = 0.7 support_material_z_distance = 0.15 support_material_z_gap_layers = 1 support_type = LINES -temperature = 210 +temperature = 200 thin_walls = 1 threads = 2 toolchange_gcode = From 2e706a084f678712383a5328417d0128b21d31d3 Mon Sep 17 00:00:00 2001 From: larsbrubaker Date: Tue, 28 Jul 2015 11:52:21 -0700 Subject: [PATCH 7/9] Working on a new print tracking translator for printer communication. --- .../Io/TrackPrinterPosition.cs | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 PrinterCommunication/Io/TrackPrinterPosition.cs diff --git a/PrinterCommunication/Io/TrackPrinterPosition.cs b/PrinterCommunication/Io/TrackPrinterPosition.cs new file mode 100644 index 000000000..58c29529a --- /dev/null +++ b/PrinterCommunication/Io/TrackPrinterPosition.cs @@ -0,0 +1,84 @@ +/* +Copyright (c) 2014, Lars Brubaker +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 MatterHackers.Agg; +using MatterHackers.GCodeVisualizer; +using MatterHackers.VectorMath; + +namespace MatterHackers.MatterControl.PrinterCommunication.Io +{ + public class TrackPrinterPosition : GCodeFileProxy + { + public RootedObjectEventHandler DestinationChanged = new RootedObjectEventHandler(); + + private Vector3 currentDestination; + + private double currentExtruderDestination; + + public Vector3 CurrentDestination { get { return currentDestination; } } + + public TrackPrinterPosition(GCodeFile source) + : base(source) + { + } + + private string KeepTrackOfPostionAndDestination(string lineBeingSent) + { + if (lineBeingSent.StartsWith("G0 ") || lineBeingSent.StartsWith("G1 ")) + { + Vector3 newDestination = currentDestination; + if (PrinterConnectionAndCommunication.Instance.MovementMode == PrinterMachineInstruction.MovementTypes.Relative) + { + newDestination = Vector3.Zero; + } + + GCodeFile.GetFirstNumberAfter("X", lineBeingSent, out newDestination.x); + GCodeFile.GetFirstNumberAfter("Y", lineBeingSent, out newDestination.y); + GCodeFile.GetFirstNumberAfter("Z", lineBeingSent, out newDestination.z); + + GCodeFile.GetFirstNumberAfter("E", lineBeingSent, out currentExtruderDestination); + GCodeFile.GetFirstNumberAfter("F", lineBeingSent, out currentFeedRate); + + if (PrinterConnectionAndCommunication.Instance.MovementMode == PrinterMachineInstruction.MovementTypes.Relative) + { + newDestination += currentDestination; + } + + if (currentDestination != newDestination) + { + currentDestination = newDestination; + DestinationChanged.CallEvents(this, null); + } + } + + return lineBeingSent; + } + } +} \ No newline at end of file From 0aa0f7e97ff719b04f60aa554df1ac9af6471522 Mon Sep 17 00:00:00 2001 From: larsbrubaker Date: Tue, 28 Jul 2015 12:12:42 -0700 Subject: [PATCH 8/9] Now we can rename folders in file provider. --- Library/LibraryRowItemCollection.cs | 14 +++++++------- Library/LibraryRowItemPart.cs | 12 ++++++------ Library/PrintLibraryWidget.cs | 19 +++++++++++++++++-- Library/Provider/LibraryProviderFileSystem.cs | 2 +- StaticData/Translations/Master.txt | 9 +++++++++ 5 files changed, 40 insertions(+), 16 deletions(-) diff --git a/Library/LibraryRowItemCollection.cs b/Library/LibraryRowItemCollection.cs index 22bf6334b..484c8635c 100644 --- a/Library/LibraryRowItemCollection.cs +++ b/Library/LibraryRowItemCollection.cs @@ -48,12 +48,12 @@ namespace MatterHackers.MatterControl.PrintLibrary { LibraryProvider parentProvider; PrintItemCollection printItemCollection; - int collectionIndex; + public int CollectionIndex { get; private set; } public LibraryRowItemCollection(PrintItemCollection collection, int collectionIndex, LibraryDataView libraryDataView, LibraryProvider parentProvider, GuiWidget thumbnailWidget) : base(libraryDataView, thumbnailWidget) { - this.collectionIndex = collectionIndex; + this.CollectionIndex = collectionIndex; this.parentProvider = parentProvider; this.printItemCollection = collection; this.ItemName = printItemCollection.Name; @@ -85,12 +85,12 @@ namespace MatterHackers.MatterControl.PrintLibrary public override void RemoveFromCollection() { - int collectionItemCollectionCount = LibraryDataView.CurrentLibraryProvider.GetCollectionChildCollectionCount(collectionIndex); - int collectionItemItemCount = LibraryDataView.CurrentLibraryProvider.GetCollectionItemCount(collectionIndex); + int collectionItemCollectionCount = LibraryDataView.CurrentLibraryProvider.GetCollectionChildCollectionCount(CollectionIndex); + int collectionItemItemCount = LibraryDataView.CurrentLibraryProvider.GetCollectionItemCount(CollectionIndex); if (collectionItemCollectionCount > 0 || collectionItemItemCount > 0) { - string message = collectionNotEmtyMessage.FormatWith(LibraryDataView.CurrentLibraryProvider.GetCollectionItem(collectionIndex).Name); + string message = collectionNotEmtyMessage.FormatWith(LibraryDataView.CurrentLibraryProvider.GetCollectionItem(CollectionIndex).Name); UiThread.RunOnIdle(() => { // Let the user know this collection is not empty and check if they want to delete it. @@ -99,7 +99,7 @@ namespace MatterHackers.MatterControl.PrintLibrary } else { - LibraryDataView.CurrentLibraryProvider.RemoveCollection(collectionIndex); + LibraryDataView.CurrentLibraryProvider.RemoveCollection(CollectionIndex); } } @@ -107,7 +107,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (messageBoxResponse) { - LibraryDataView.CurrentLibraryProvider.RemoveCollection(collectionIndex); + LibraryDataView.CurrentLibraryProvider.RemoveCollection(CollectionIndex); } } diff --git a/Library/LibraryRowItemPart.cs b/Library/LibraryRowItemPart.cs index 7cbb25c9e..fce1d609d 100644 --- a/Library/LibraryRowItemPart.cs +++ b/Library/LibraryRowItemPart.cs @@ -53,7 +53,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { public bool isActivePrint = false; LibraryProvider libraryProvider; - private int itemIndex; + public int ItemIndex { get; private set; } double thumbnailWidth = 0; public PrintItemWrapper printItemInstance = null; @@ -73,7 +73,7 @@ namespace MatterHackers.MatterControl.PrintLibrary this.ItemName = libraryProvider.GetPrintItemName(itemIndex); this.libraryProvider = libraryProvider; - this.itemIndex = itemIndex; + this.ItemIndex = itemIndex; CreateGuiElements(); @@ -84,7 +84,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { get { - return libraryProvider.IsItemProtected(itemIndex); + return libraryProvider.IsItemProtected(ItemIndex); } } @@ -92,7 +92,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (printItemInstance == null) { - printItemInstance = await libraryProvider.GetPrintItemWrapperAsync(this.itemIndex, ReportProgressRatio); + printItemInstance = await libraryProvider.GetPrintItemWrapperAsync(this.ItemIndex, ReportProgressRatio); } return printItemInstance; @@ -223,7 +223,7 @@ namespace MatterHackers.MatterControl.PrintLibrary public async override void RemoveFromCollection() { - LibraryDataView.CurrentLibraryProvider.RemoveItem(itemIndex); + LibraryDataView.CurrentLibraryProvider.RemoveItem(ItemIndex); } protected override SlideWidget GetItemActionButtons() @@ -287,7 +287,7 @@ namespace MatterHackers.MatterControl.PrintLibrary protected async override void RemoveThisFromPrintLibrary() { // TODO: The LibraryProvider does not need a printitemwrapper to remove an item! Why not an interger like the others? - LibraryDataView.CurrentLibraryProvider.RemoveItem(itemIndex); + LibraryDataView.CurrentLibraryProvider.RemoveItem(ItemIndex); } private void ExportQueueItemWindow_Closed(object sender, EventArgs e) diff --git a/Library/PrintLibraryWidget.cs b/Library/PrintLibraryWidget.cs index 7b27cc63d..a2203955b 100644 --- a/Library/PrintLibraryWidget.cs +++ b/Library/PrintLibraryWidget.cs @@ -281,9 +281,24 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (renameItemWindow == null) { - string currentName = "currentName"; + LibraryRowItem rowItem = libraryDataView.SelectedItems[0]; + LibraryRowItemPart partItem = rowItem as LibraryRowItemPart; + LibraryRowItemCollection collectionItem = rowItem as LibraryRowItemCollection; + + string currentName = libraryDataView.SelectedItems[0].ItemName; + renameItemWindow = new RenameItemWindow(currentName, (returnInfo) => - { + { + if (partItem != null) + { + LibraryDataView.CurrentLibraryProvider.RenameItem(partItem.ItemIndex, returnInfo.newName); + } + else if (collectionItem != null) + { + LibraryDataView.CurrentLibraryProvider.RenameCollection(collectionItem.CollectionIndex, returnInfo.newName); + } + + libraryDataView.SelectedItems.Clear(); }); renameItemWindow.Closed += (sender2, e2) => { renameItemWindow = null; }; diff --git a/Library/Provider/LibraryProviderFileSystem.cs b/Library/Provider/LibraryProviderFileSystem.cs index ecbef9688..a7bd45ac5 100644 --- a/Library/Provider/LibraryProviderFileSystem.cs +++ b/Library/Provider/LibraryProviderFileSystem.cs @@ -191,7 +191,7 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider string sourceDir = Path.Combine(rootPath, currentDirectoryDirectories[collectionIndexToRename]); if (Directory.Exists(sourceDir)) { - string destDir = Path.Combine(Path.GetDirectoryName(sourceDir), sourceDir); + string destDir = Path.Combine(Path.GetDirectoryName(sourceDir), newName); Directory.Move(sourceDir, destDir); Stopwatch time = Stopwatch.StartNew(); // Wait for up to some amount of time for the directory to be gone. diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 3149168b7..39e981abe 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -3430,3 +3430,12 @@ Translated:Cloud Library English:Rename Translated:Rename +English:Rename Item: +Translated:Rename Item: + +English:New Name +Translated:New Name + +English:Enter New Name Here +Translated:Enter New Name Here + From 7e35924fb6ed3d40d767793c5ffef2cdfa5ba1c9 Mon Sep 17 00:00:00 2001 From: larsbrubaker Date: Tue, 28 Jul 2015 13:19:29 -0700 Subject: [PATCH 9/9] Made non-edit selection work More authoritative source (less state caching) Removed a bunch of dead code Made the buttons show all the time Made the bread crumbs smaller. --- Library/LibraryDataView.cs | 150 +--------------------------------- Library/LibraryRowItem.cs | 88 +++++++------------- Library/LibraryRowItemPart.cs | 8 +- Library/PrintLibraryWidget.cs | 26 +++--- 4 files changed, 48 insertions(+), 224 deletions(-) diff --git a/Library/LibraryDataView.cs b/Library/LibraryDataView.cs index 6226e92e0..306c5c14a 100644 --- a/Library/LibraryDataView.cs +++ b/Library/LibraryDataView.cs @@ -92,8 +92,6 @@ namespace MatterHackers.MatterControl.PrintLibrary AddChild(topToBottomItemList); AddAllItems(); - - this.MouseLeaveBounds += new EventHandler(control_MouseLeaveBounds); } public delegate void HoverValueChangedEventHandler(object sender, EventArgs e); @@ -148,45 +146,11 @@ namespace MatterHackers.MatterControl.PrintLibrary this.editMode = value; if (this.editMode == false) { - this.ClearSelectedItems(); - } - } - } - } - - public int HoverIndex - { - get - { - return hoverIndex; - } - set - { - if (value < -1 || value >= topToBottomItemList.Children.Count) - { - throw new ArgumentOutOfRangeException(); - } - - if (value != hoverIndex) - { - hoverIndex = value; - OnHoverIndexChanged(); - - for (int index = 0; index < topToBottomItemList.Children.Count; index++) - { - GuiWidget child = topToBottomItemList.Children[index]; - if (index == HoverIndex) + while (SelectedItems.Count > 1) { - ((LibraryRowItem)child.Children[0]).IsHoverItem = true; + SelectedItems.RemoveAt(SelectedItems.Count - 1); } - else if (((LibraryRowItem)child.Children[0]).IsHoverItem == true) - { - ((LibraryRowItem)child.Children[0]).IsHoverItem = false; - } - child.Invalidate(); } - - Invalidate(); } } } @@ -225,62 +189,6 @@ namespace MatterHackers.MatterControl.PrintLibrary } } - public int SelectedIndex - { - get - { - return selectedIndex; - } - set - { - if (value < -1 || value >= topToBottomItemList.Children.Count) - { - throw new ArgumentOutOfRangeException(); - } - selectedIndex = value; - OnSelectedIndexChanged(); - } - } - - public GuiWidget SelectedItem - { - get - { - if (SelectedIndex != -1) - { - return Children[SelectedIndex]; - } - - return null; - } - - set - { - for (int i = 0; i < Children.Count; i++) - { - if (Children[SelectedIndex] == value) - { - SelectedIndex = i; - } - } - } - } - - public PrintItemWrapper SelectedPart - { - get - { - if (SelectedIndex >= 0) - { - return LibraryDataView.CurrentLibraryProvider.GetPrintItemWrapperAsync(SelectedIndex).Result; - } - else - { - return null; - } - } - } - private int Count { get @@ -298,10 +206,6 @@ namespace MatterHackers.MatterControl.PrintLibrary itemHolder.AddChild(child); itemHolder.VAnchor = VAnchor.FitToChildren; topToBottomItemList.AddChild(itemHolder, indexInChildrenList); - - itemHolder.MouseEnterBounds += new EventHandler(itemToAdd_MouseEnterBounds); - itemHolder.MouseLeaveBounds += new EventHandler(itemToAdd_MouseLeaveBounds); - itemHolder.ParentChanged += new EventHandler(itemHolder_ParentChanged); } public void ClearSelected() @@ -317,7 +221,6 @@ namespace MatterHackers.MatterControl.PrintLibrary { foreach (LibraryRowItem item in SelectedItems) { - item.isSelectedItem = false; item.selectionCheckBox.Checked = false; } this.SelectedItems.Clear(); @@ -397,14 +300,6 @@ namespace MatterHackers.MatterControl.PrintLibrary } } - public void RemoveSelectedIndex() - { - if (SelectedIndex >= 0 && SelectedIndex < Count) - { - RemoveChild(SelectedIndex); - } - } - public void RemoveSelectedItems() { foreach (LibraryRowItem item in SelectedItems) @@ -476,47 +371,6 @@ namespace MatterHackers.MatterControl.PrintLibrary } } - private void control_MouseLeaveBounds(object sender, EventArgs e) - { - HoverIndex = -1; - } - - private void itemHolder_ParentChanged(object sender, EventArgs e) - { - FlowLayoutWidget itemHolder = (FlowLayoutWidget)sender; - itemHolder.MouseEnterBounds -= new EventHandler(itemToAdd_MouseEnterBounds); - itemHolder.MouseLeaveBounds -= new EventHandler(itemToAdd_MouseLeaveBounds); - itemHolder.ParentChanged -= new EventHandler(itemHolder_ParentChanged); - } - - private void itemToAdd_MouseEnterBounds(object sender, EventArgs e) - { - GuiWidget widgetEntered = ((GuiWidget)sender); - for (int index = 0; index < topToBottomItemList.Children.Count; index++) - { - GuiWidget child = topToBottomItemList.Children[index]; - if (child == widgetEntered) - { - HoverIndex = index; - } - } - } - - private void itemToAdd_MouseLeaveBounds(object sender, EventArgs e) - { - GuiWidget widgetLeft = ((GuiWidget)sender); - - if (SelectedIndex >= 0) - { - if (widgetLeft != topToBottomItemList.Children[SelectedIndex]) - { - widgetLeft.BackgroundColor = new RGBA_Bytes(); - widgetLeft.Invalidate(); - Invalidate(); - } - } - } - private void LibraryDataReloaded(object sender, EventArgs e) { UiThread.RunOnIdle(AddAllItems); diff --git a/Library/LibraryRowItem.cs b/Library/LibraryRowItem.cs index be63ba92d..7aaf2cb44 100644 --- a/Library/LibraryRowItem.cs +++ b/Library/LibraryRowItem.cs @@ -39,7 +39,13 @@ namespace MatterHackers.MatterControl.PrintLibrary { public abstract class LibraryRowItem : GuiWidget { - public bool isSelectedItem = false; + public bool IsSelectedItem + { + get + { + return libraryDataView.SelectedItems.Contains(this); + } + } public CheckBox selectionCheckBox; public RGBA_Bytes WidgetBackgroundColor; public RGBA_Bytes WidgetTextColor; @@ -47,10 +53,8 @@ namespace MatterHackers.MatterControl.PrintLibrary protected TextWidget partLabel; protected SlideWidget rightButtonOverlay; protected GuiWidget selectionCheckBoxContainer; - private bool editMode = false; private bool isHoverItem = false; private LinkButtonFactory linkButtonFactory = new LinkButtonFactory(); - private ConditionalClickWidget primaryClickContainer; private GuiWidget thumbnailWidget; private event EventHandler unregisterEvents; @@ -63,18 +67,6 @@ namespace MatterHackers.MatterControl.PrintLibrary public string ItemName { get; protected set; } - public bool EditMode - { - get { return editMode; } - set - { - if (this.editMode != value) - { - this.editMode = value; - } - } - } - public bool IsHoverItem { get { return isHoverItem; } @@ -110,6 +102,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (this.libraryDataView.EditMode) { + this.selectionCheckBox.Checked = this.IsSelectedItem; selectionCheckBoxContainer.Visible = true; rightButtonOverlay.Visible = false; } @@ -120,7 +113,7 @@ namespace MatterHackers.MatterControl.PrintLibrary base.OnDraw(graphics2D); - if (this.isSelectedItem) + if (this.IsSelectedItem) { this.BackgroundColor = ActiveTheme.Instance.PrimaryAccentColor; this.partLabel.TextColor = RGBA_Bytes.White; @@ -199,13 +192,6 @@ namespace MatterHackers.MatterControl.PrintLibrary primaryContainer.AddChild(primaryFlow); - // The ConditionalClickWidget supplies a user driven Enabled property based on a delegate of your choosing - primaryClickContainer = new ConditionalClickWidget(() => libraryDataView.EditMode); - primaryClickContainer.HAnchor = HAnchor.ParentLeftRight; - primaryClickContainer.VAnchor = VAnchor.ParentBottomTop; - - primaryContainer.AddChild(primaryClickContainer); - rightButtonOverlay = GetItemActionButtons(); rightButtonOverlay.Visible = false; @@ -236,7 +222,6 @@ namespace MatterHackers.MatterControl.PrintLibrary private void AddHandlers() { //ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents); - primaryClickContainer.Click += onLibraryItemClick; GestureFling += (object sender, FlingEventArgs eventArgs) => { if (!this.libraryDataView.EditMode) @@ -252,7 +237,6 @@ namespace MatterHackers.MatterControl.PrintLibrary } this.Invalidate(); }; - //selectionCheckBox.CheckedStateChanged += selectionCheckBox_CheckedStateChanged; } private void onAddLinkClick(object sender, EventArgs e) @@ -267,50 +251,40 @@ namespace MatterHackers.MatterControl.PrintLibrary } } - private void onLibraryItemClick(object sender, EventArgs e) - { - if (this.libraryDataView.EditMode == false) - { - //UiThread.RunOnIdle((state) => - //{ - // openPartView(state); - //}); - } - else - { - if (this.isSelectedItem == false) - { - this.isSelectedItem = true; - this.selectionCheckBox.Checked = true; - libraryDataView.SelectedItems.Add(this); - } - else - { - this.isSelectedItem = false; - this.selectionCheckBox.Checked = false; - libraryDataView.SelectedItems.Remove(this); - } - } - } - private void onThemeChanged(object sender, EventArgs e) { //Set background and text color to new theme this.Invalidate(); } - private void selectionCheckBox_CheckedStateChanged(object sender, EventArgs e) + public override void OnMouseDown(MouseEventArgs mouseEvent) { - if (selectionCheckBox.Checked == true) + if (this.libraryDataView.EditMode) { - this.isSelectedItem = true; - libraryDataView.SelectedItems.Add(this); + if (this.IsSelectedItem) + { + libraryDataView.SelectedItems.Remove(this); + } + else + { + libraryDataView.SelectedItems.Add(this); + } } else { - this.isSelectedItem = false; - libraryDataView.SelectedItems.Remove(this); + // we only have single selection + if (this.IsSelectedItem) + { + // It is aleady selected, do nothing. + } + else + { + libraryDataView.SelectedItems.Clear(); + libraryDataView.SelectedItems.Add(this); + } } + + base.OnMouseDown(mouseEvent); } private void SetDisplayAttributes() diff --git a/Library/LibraryRowItemPart.cs b/Library/LibraryRowItemPart.cs index fce1d609d..71c277f77 100644 --- a/Library/LibraryRowItemPart.cs +++ b/Library/LibraryRowItemPart.cs @@ -170,7 +170,7 @@ namespace MatterHackers.MatterControl.PrintLibrary base.OnDraw(graphics2D); - if (this.isSelectedItem) + if (this.IsSelectedItem) { this.BackgroundColor = ActiveTheme.Instance.PrimaryAccentColor; this.partLabel.TextColor = RGBA_Bytes.White; @@ -318,15 +318,13 @@ namespace MatterHackers.MatterControl.PrintLibrary } else { - if (this.isSelectedItem == false) + if (this.IsSelectedItem == false) { - this.isSelectedItem = true; this.selectionCheckBox.Checked = true; libraryDataView.SelectedItems.Add(this); } else { - this.isSelectedItem = false; this.selectionCheckBox.Checked = false; libraryDataView.SelectedItems.Remove(this); } @@ -411,12 +409,10 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (selectionCheckBox.Checked == true) { - this.isSelectedItem = true; libraryDataView.SelectedItems.Add(this); } else { - this.isSelectedItem = false; libraryDataView.SelectedItems.Remove(this); } } diff --git a/Library/PrintLibraryWidget.cs b/Library/PrintLibraryWidget.cs index a2203955b..a23c55676 100644 --- a/Library/PrintLibraryWidget.cs +++ b/Library/PrintLibraryWidget.cs @@ -59,6 +59,7 @@ namespace MatterHackers.MatterControl.PrintLibrary private static CreateFolderWindow createFolderWindow = null; private static RenameItemWindow renameItemWindow = null; private static TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); + private static TextImageButtonFactory navigationButtonFactory = new TextImageButtonFactory(); private TextImageButtonFactory editButtonFactory = new TextImageButtonFactory(); private TextWidget navigationLabel; private FlowLayoutWidget breadCrumbDisplayHolder; @@ -162,8 +163,8 @@ namespace MatterHackers.MatterControl.PrintLibrary //allControls.AddChild(navigationPanel); allControls.AddChild(searchPanel); - allControls.AddChild(breadCrumbDisplayHolder); allControls.AddChild(itemOperationButtons); + allControls.AddChild(breadCrumbDisplayHolder); libraryDataView = new LibraryDataView(); allControls.AddChild(libraryDataView); allControls.AddChild(buttonPanel); @@ -272,7 +273,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { Button renameFromLibraryButton = editButtonFactory.Generate("Rename".Localize()); renameFromLibraryButton.Margin = new BorderDouble(3, 0); - editButtonsEnableData.Add(new ButtonEnableData(true, false)); + editButtonsEnableData.Add(new ButtonEnableData(false, false)); itemOperationButtons.AddChild(renameFromLibraryButton); renameFromLibraryButton.Click += (sender, e) => @@ -325,7 +326,6 @@ namespace MatterHackers.MatterControl.PrintLibrary editButtonsEnableData.Add(new ButtonEnableData(true, true)); itemOperationButtons.AddChild(addToQueueButton); - itemOperationButtons.Visible = false; editButtonFactory.FixedWidth = oldWidth; } @@ -340,6 +340,12 @@ namespace MatterHackers.MatterControl.PrintLibrary public void SetBreadCrumbs(object sender, EventArgs e) { + navigationButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; + navigationButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; + navigationButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; + navigationButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor; + navigationButtonFactory.FixedHeight = 22 * TextWidget.GlobalPointSizeScaleRatio; + breadCrumbDisplayHolder.CloseAndRemoveAllChildren(); LibraryProvider currentProvider = LibraryDataView.CurrentLibraryProvider; bool first = true; @@ -361,8 +367,8 @@ namespace MatterHackers.MatterControl.PrintLibrary breadCrumbDisplayHolder.AddChild(separator); } - Button installUpdateLink = textImageButtonFactory.Generate(localCurrentProvider.Name); - installUpdateLink.Click += (sender2, e2) => + Button gotoProviderButton = navigationButtonFactory.Generate(localCurrentProvider.Name); + gotoProviderButton.Click += (sender2, e2) => { UiThread.RunOnIdle(() => { @@ -370,7 +376,7 @@ namespace MatterHackers.MatterControl.PrintLibrary libraryDataView.RebuildView(); }); }; - breadCrumbDisplayHolder.AddChild(installUpdateLink); + breadCrumbDisplayHolder.AddChild(gotoProviderButton); first = false; } @@ -421,9 +427,6 @@ namespace MatterHackers.MatterControl.PrintLibrary enterEditModeButton.Visible = false; leaveEditModeButton.Visible = true; libraryDataView.EditMode = true; - itemOperationButtons.Visible = true; - breadCrumbDisplayHolder.Visible = false; - SetEditButtonsStates(); } private void leaveEditModeButtonClick(object sender, EventArgs e) @@ -431,9 +434,6 @@ namespace MatterHackers.MatterControl.PrintLibrary enterEditModeButton.Visible = true; leaveEditModeButton.Visible = false; libraryDataView.EditMode = false; - itemOperationButtons.Visible = false; - breadCrumbDisplayHolder.Visible = true; - SetEditButtonsStates(); } private void searchButtonClick(object sender, EventArgs e) @@ -463,7 +463,7 @@ namespace MatterHackers.MatterControl.PrintLibrary for(int buttonIndex=0; buttonIndex 0 && libraryDataView.EditMode); + bool enabledStateToSet = (selectedCount > 0); var child = itemOperationButtons.Children[buttonIndex]; var button = child as Button; if (button != null)