From ce884b387bd6e1b2f8a9dbe9da0ebb08a95ba16d Mon Sep 17 00:00:00 2001 From: Thomas Karl Pietrowski Date: Thu, 8 Sep 2016 00:36:01 +0200 Subject: [PATCH 001/114] i18n: de: Adding translated comment Adding german translation primary as example for CURA-570. --- cura.desktop.in | 1 + 1 file changed, 1 insertion(+) diff --git a/cura.desktop.in b/cura.desktop.in index 0ac25c9521..04349ac39f 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -5,6 +5,7 @@ Name[de]=Cura GenericName=3D Printing Software GenericName[de]=3D-Druck-Software Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. +Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D printer um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, sodass Ihr Druck großartig wird. Exec=@CMAKE_INSTALL_FULL_BINDIR@/cura %F TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura Icon=@CMAKE_INSTALL_FULL_DATADIR@/cura/resources/images/cura-icon.png From 06939c340ec4aee1ed964f9f6e0b2fd67954f4c3 Mon Sep 17 00:00:00 2001 From: Thomas Karl Pietrowski Date: Thu, 8 Sep 2016 23:55:32 +0200 Subject: [PATCH 002/114] i18n: de: Fix spelling --- cura.desktop.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura.desktop.in b/cura.desktop.in index 04349ac39f..ceb5c99f08 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -5,7 +5,7 @@ Name[de]=Cura GenericName=3D Printing Software GenericName[de]=3D-Druck-Software Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. -Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D printer um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, sodass Ihr Druck großartig wird. +Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D-Drucker um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, damit Ihr Druck großartig wird. Exec=@CMAKE_INSTALL_FULL_BINDIR@/cura %F TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura Icon=@CMAKE_INSTALL_FULL_DATADIR@/cura/resources/images/cura-icon.png From 4ffcabd8560d952d0dc81f16632733c084e490bd Mon Sep 17 00:00:00 2001 From: nickthetait Date: Thu, 15 Sep 2016 09:11:46 -0600 Subject: [PATCH 003/114] Standardize formatting of fdmprinter definition Used custom settings in JSON Editor Plugin for Eclipse and afterwards removed some extra whitespace changes that are not desired Fixes github #980 --- resources/definitions/fdmprinter.def.json | 298 ++++++++++++++-------- 1 file changed, 195 insertions(+), 103 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index eae6593fb8..9c31e97b62 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -265,7 +265,9 @@ "label": "Disallowed areas", "description": "A list of polygons with areas the print head is not allowed to enter.", "type": "polygons", - "default_value": [], + "default_value": + [ + ], "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false @@ -379,7 +381,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "machine_max_feedrate_x": { + "machine_max_feedrate_x": + { "label": "Maximum Speed X", "description": "The maximum speed for the motor of the X-direction.", "unit": "mm/s", @@ -389,7 +392,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_feedrate_y": { + "machine_max_feedrate_y": + { "label": "Maximum Speed Y", "description": "The maximum speed for the motor of the Y-direction.", "unit": "mm/s", @@ -399,7 +403,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_feedrate_z": { + "machine_max_feedrate_z": + { "label": "Maximum Speed Z", "description": "The maximum speed for the motor of the Z-direction.", "unit": "mm/s", @@ -409,7 +414,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_feedrate_e": { + "machine_max_feedrate_e": + { "label": "Maximum Feedrate", "description": "The maximum speed of the filament.", "unit": "mm/s", @@ -419,7 +425,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_x": { + "machine_max_acceleration_x": + { "label": "Maximum Acceleration X", "description": "Maximum acceleration for the motor of the X-direction", "unit": "mm/s²", @@ -429,7 +436,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_y": { + "machine_max_acceleration_y": + { "label": "Maximum Acceleration Y", "description": "Maximum acceleration for the motor of the Y-direction.", "unit": "mm/s²", @@ -439,7 +447,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_z": { + "machine_max_acceleration_z": + { "label": "Maximum Acceleration Z", "description": "Maximum acceleration for the motor of the Z-direction.", "unit": "mm/s²", @@ -449,7 +458,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_e": { + "machine_max_acceleration_e": + { "label": "Maximum Filament Acceleration", "description": "Maximum acceleration for the motor of the filament.", "unit": "mm/s²", @@ -459,7 +469,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_acceleration": { + "machine_acceleration": + { "label": "Default Acceleration", "description": "The default acceleration of print head movement.", "unit": "mm/s²", @@ -469,7 +480,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_jerk_xy": { + "machine_max_jerk_xy": + { "label": "Default X-Y Jerk", "description": "Default jerk for movement in the horizontal plane.", "unit": "mm/s", @@ -479,7 +491,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_jerk_z": { + "machine_max_jerk_z": + { "label": "Default Z Jerk", "description": "Default jerk for the motor of the Z-direction.", "unit": "mm/s", @@ -489,7 +502,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_jerk_e": { + "machine_max_jerk_e": + { "label": "Default Filament Jerk", "description": "Default jerk for the motor of the filament.", "unit": "mm/s", @@ -499,7 +513,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_minimum_feedrate": { + "machine_minimum_feedrate": + { "label": "Minimum Feedrate", "description": "The minimal movement speed of the print head.", "unit": "mm/s", @@ -567,7 +582,7 @@ "minimum_value": "0.0001", "minimum_value_warning": "0.2", "maximum_value_warning": "5", - "value":"line_width", + "value": "line_width", "default_value": 0.4, "type": "float", "settable_per_mesh": true, @@ -582,7 +597,7 @@ "minimum_value_warning": "0.2", "maximum_value_warning": "5", "default_value": 0.4, - "value":"wall_line_width", + "value": "wall_line_width", "type": "float", "settable_per_mesh": true }, @@ -595,7 +610,7 @@ "minimum_value_warning": "0.2", "maximum_value_warning": "5", "default_value": 0.4, - "value":"wall_line_width", + "value": "wall_line_width", "type": "float", "settable_per_mesh": true } @@ -834,7 +849,8 @@ "settable_per_mesh": true, "children": { - "travel_compensate_overlapping_walls_0_enabled": { + "travel_compensate_overlapping_walls_0_enabled": + { "label": "Compensate Outer Wall Overlaps", "description": "Compensate the flow for parts of an outer wall being printed where there is already a wall in place.", "type": "bool", @@ -842,7 +858,8 @@ "value": "travel_compensate_overlapping_walls_enabled", "settable_per_mesh": true }, - "travel_compensate_overlapping_walls_x_enabled": { + "travel_compensate_overlapping_walls_x_enabled": + { "label": "Compensate Inner Wall Overlaps", "description": "Compensate the flow for parts of an inner wall being printed where there is already a wall in place.", "type": "bool", @@ -968,7 +985,8 @@ } } }, - "skin_overlap": { + "skin_overlap": + { "label": "Skin Overlap Percentage", "description": "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin.", "unit": "%", @@ -979,8 +997,10 @@ "value": "5 if top_bottom_pattern != 'concentric' else 0", "enabled": "top_bottom_pattern != 'concentric'", "settable_per_mesh": true, - "children": { - "skin_overlap_mm": { + "children": + { + "skin_overlap_mm": + { "label": "Skin Overlap", "description": "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin.", "unit": "mm", @@ -991,9 +1011,9 @@ "value": "skin_line_width * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0", "enabled": "top_bottom_pattern != 'concentric'", "settable_per_mesh": true - } - } - }, + } + } + }, "infill_wipe_dist": { "label": "Infill Wipe Distance", @@ -1095,7 +1115,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "material_extrusion_cool_down_speed": { + "material_extrusion_cool_down_speed": + { "label": "Extrusion Cool Down Speed Modifier", "description": "The extra speed by which the nozzle cools while extruding. The same value is used to signify the heat up speed lost when heating up while extruding.", "unit": "°C/s", @@ -1108,7 +1129,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "material_bed_temperature": { + "material_bed_temperature": + { "label": "Build Plate Temperature", "description": "The temperature used for the heated build plate. Set at 0 to pre-heat the printer manually.", "unit": "°C", @@ -1122,7 +1144,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "material_diameter": { + "material_diameter": + { "label": "Diameter", "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.", "unit": "mm", @@ -1134,7 +1157,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "material_flow": { + "material_flow": + { "label": "Flow", "description": "Flow compensation: the amount of material extruded is multiplied by this value.", "unit": "%", @@ -1145,7 +1169,8 @@ "maximum_value_warning": "150", "settable_per_mesh": true }, - "retraction_enable": { + "retraction_enable": + { "label": "Enable Retraction", "description": "Retract the filament when the nozzle is moving over a non-printed area. ", "type": "bool", @@ -1153,7 +1178,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_amount": { + "retraction_amount": + { "label": "Retraction Distance", "description": "The length of material retracted during a retraction move.", "unit": "mm", @@ -1165,7 +1191,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_speed": { + "retraction_speed": + { "label": "Retraction Speed", "description": "The speed at which the filament is retracted and primed during a retraction move.", "unit": "mm/s", @@ -1177,8 +1204,10 @@ "enabled": "retraction_enable", "settable_per_mesh": false, "settable_per_extruder": true, - "children": { - "retraction_retract_speed": { + "children": + { + "retraction_retract_speed": + { "label": "Retraction Retract Speed", "description": "The speed at which the filament is retracted during a retraction move.", "unit": "mm/s", @@ -1192,7 +1221,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_prime_speed": { + "retraction_prime_speed": + { "label": "Retraction Prime Speed", "description": "The speed at which the filament is primed during a retraction move.", "unit": "mm/s", @@ -1208,7 +1238,8 @@ } } }, - "retraction_extra_prime_amount": { + "retraction_extra_prime_amount": + { "label": "Retraction Extra Prime Amount", "description": "Some material can ooze away during a travel move, which can be compensated for here.", "unit": "mm³", @@ -1220,7 +1251,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_min_travel": { + "retraction_min_travel": + { "label": "Retraction Minimum Travel", "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.", "unit": "mm", @@ -1233,7 +1265,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_count_max": { + "retraction_count_max": + { "label": "Maximum Retraction Count", "description": "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.", "default_value": 90, @@ -1244,7 +1277,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_extrusion_window": { + "retraction_extrusion_window": + { "label": "Minimum Extrusion Distance Window", "description": "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.", "unit": "mm", @@ -1257,7 +1291,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_hop_enabled": { + "retraction_hop_enabled": + { "label": "Z Hop when Retracted", "description": "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.", "type": "bool", @@ -1266,7 +1301,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_hop_only_when_collides": { + "retraction_hop_only_when_collides": + { "label": "Z Hop Only Over Printed Parts", "description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.", "type": "bool", @@ -1275,7 +1311,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_hop": { + "retraction_hop": + { "label": "Z Hop Height", "description": "The height difference when performing a Z Hop.", "unit": "mm", @@ -1357,7 +1394,8 @@ } } }, - "retraction_hop_after_extruder_switch": { + "retraction_hop_after_extruder_switch": + { "label": "Z Hop After Extruder Switch", "description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.", "type": "bool", @@ -1539,7 +1577,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "speed_layer_0": { + "speed_layer_0": + { "label": "Initial Layer Speed", "description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate.", "unit": "mm/s", @@ -1580,7 +1619,8 @@ } } }, - "skirt_brim_speed": { + "skirt_brim_speed": + { "label": "Skirt/Brim Speed", "description": "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed, but sometimes you might want to print the skirt or brim at a different speed.", "unit": "mm/s", @@ -1642,9 +1682,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - - - "acceleration_enabled": { + "acceleration_enabled": + { "label": "Enable Acceleration Control", "description": "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality.", "type": "bool", @@ -1652,7 +1691,8 @@ "settable_per_mesh": false, "settable_per_extruder": false }, - "acceleration_print": { + "acceleration_print": + { "label": "Print Acceleration", "description": "The acceleration with which printing happens.", "unit": "mm/s²", @@ -1663,8 +1703,10 @@ "default_value": 3000, "enabled": "acceleration_enabled", "settable_per_mesh": true, - "children": { - "acceleration_infill": { + "children": + { + "acceleration_infill": + { "label": "Infill Acceleration", "description": "The acceleration with which infill is printed.", "unit": "mm/s²", @@ -1677,7 +1719,8 @@ "enabled": "acceleration_enabled", "settable_per_mesh": true }, - "acceleration_wall": { + "acceleration_wall": + { "label": "Wall Acceleration", "description": "The acceleration with which the walls are printed.", "unit": "mm/s²", @@ -1689,8 +1732,10 @@ "value": "acceleration_print", "enabled": "acceleration_enabled", "settable_per_mesh": true, - "children": { - "acceleration_wall_0": { + "children": + { + "acceleration_wall_0": + { "label": "Outer Wall Acceleration", "description": "The acceleration with which the outermost walls are printed.", "unit": "mm/s²", @@ -1703,7 +1748,8 @@ "enabled": "acceleration_enabled", "settable_per_mesh": true }, - "acceleration_wall_x": { + "acceleration_wall_x": + { "label": "Inner Wall Acceleration", "description": "The acceleration with which all inner walls are printed.", "unit": "mm/s²", @@ -1718,7 +1764,8 @@ } } }, - "acceleration_topbottom": { + "acceleration_topbottom": + { "label": "Top/Bottom Acceleration", "description": "The acceleration with which top/bottom layers are printed.", "unit": "mm/s²", @@ -1731,7 +1778,8 @@ "enabled": "acceleration_enabled", "settable_per_mesh": true }, - "acceleration_support": { + "acceleration_support": + { "label": "Support Acceleration", "description": "The acceleration with which the support structure is printed.", "unit": "mm/s²", @@ -1745,8 +1793,10 @@ "settable_per_mesh": false, "limit_to_extruder": "support_extruder_nr", "settable_per_extruder": true, - "children": { - "acceleration_support_infill": { + "children": + { + "acceleration_support_infill": + { "label": "Support Infill Acceleration", "description": "The acceleration with which the infill of support is printed.", "unit": "mm/s²", @@ -1761,7 +1811,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "acceleration_support_interface": { + "acceleration_support_interface": + { "label": "Support Interface Acceleration", "description": "The acceleration with which the roofs and bottoms of support are printed. Printing them at lower accelerations can improve overhang quality.", "unit": "mm/s²", @@ -1778,7 +1829,8 @@ } } }, - "acceleration_prime_tower": { + "acceleration_prime_tower": + { "label": "Prime Tower Acceleration", "description": "The acceleration with which the prime tower is printed.", "unit": "mm/s²", @@ -1793,7 +1845,8 @@ } } }, - "acceleration_travel": { + "acceleration_travel": + { "label": "Travel Acceleration", "description": "The acceleration with which travel moves are made.", "unit": "mm/s²", @@ -1806,7 +1859,8 @@ "enabled": "acceleration_enabled", "settable_per_mesh": false }, - "acceleration_layer_0": { + "acceleration_layer_0": + { "label": "Initial Layer Acceleration", "description": "The acceleration for the initial layer.", "unit": "mm/s²", @@ -1818,7 +1872,8 @@ "maximum_value_warning": "10000", "enabled": "acceleration_enabled", "settable_per_mesh": true, - "children": { + "children": + { "acceleration_print_layer_0": { "label": "Initial Layer Print Acceleration", @@ -1850,7 +1905,8 @@ } } }, - "acceleration_skirt_brim": { + "acceleration_skirt_brim": + { "label": "Skirt/Brim Acceleration", "description": "The acceleration with which the skirt and brim are printed. Normally this is done with the initial layer acceleration, but sometimes you might want to print the skirt or brim at a different acceleration.", "unit": "mm/s²", @@ -1864,8 +1920,8 @@ "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, - - "jerk_enabled": { + "jerk_enabled": + { "label": "Enable Jerk Control", "description": "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality.", "type": "bool", @@ -1873,7 +1929,8 @@ "settable_per_mesh": false, "settable_per_extruder": false }, - "jerk_print": { + "jerk_print": + { "label": "Print Jerk", "description": "The maximum instantaneous velocity change of the print head.", "unit": "mm/s", @@ -1884,8 +1941,10 @@ "default_value": 20, "enabled": "jerk_enabled", "settable_per_mesh": true, - "children": { - "jerk_infill": { + "children": + { + "jerk_infill": + { "label": "Infill Jerk", "description": "The maximum instantaneous velocity change with which infill is printed.", "unit": "mm/s", @@ -1898,7 +1957,8 @@ "enabled": "jerk_enabled", "settable_per_mesh": true }, - "jerk_wall": { + "jerk_wall": + { "label": "Wall Jerk", "description": "The maximum instantaneous velocity change with which the walls are printed.", "unit": "mm/s", @@ -1910,8 +1970,10 @@ "value": "jerk_print", "enabled": "jerk_enabled", "settable_per_mesh": true, - "children": { - "jerk_wall_0": { + "children": + { + "jerk_wall_0": + { "label": "Outer Wall Jerk", "description": "The maximum instantaneous velocity change with which the outermost walls are printed.", "unit": "mm/s", @@ -1924,7 +1986,8 @@ "enabled": "jerk_enabled", "settable_per_mesh": true }, - "jerk_wall_x": { + "jerk_wall_x": + { "label": "Inner Wall Jerk", "description": "The maximum instantaneous velocity change with which all inner walls are printed.", "unit": "mm/s", @@ -1939,7 +2002,8 @@ } } }, - "jerk_topbottom": { + "jerk_topbottom": + { "label": "Top/Bottom Jerk", "description": "The maximum instantaneous velocity change with which top/bottom layers are printed.", "unit": "mm/s", @@ -1952,7 +2016,8 @@ "enabled": "jerk_enabled", "settable_per_mesh": true }, - "jerk_support": { + "jerk_support": + { "label": "Support Jerk", "description": "The maximum instantaneous velocity change with which the support structure is printed.", "unit": "mm/s", @@ -1966,8 +2031,10 @@ "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_extruder_nr", - "children": { - "jerk_support_infill": { + "children": + { + "jerk_support_infill": + { "label": "Support Infill Jerk", "description": "The maximum instantaneous velocity change with which the infill of support is printed.", "unit": "mm/s", @@ -1982,7 +2049,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "jerk_support_interface": { + "jerk_support_interface": + { "label": "Support Interface Jerk", "description": "The maximum instantaneous velocity change with which the roofs and bottoms of support are printed.", "unit": "mm/s", @@ -1999,7 +2067,8 @@ } } }, - "jerk_prime_tower": { + "jerk_prime_tower": + { "label": "Prime Tower Jerk", "description": "The maximum instantaneous velocity change with which the prime tower is printed.", "unit": "mm/s", @@ -2014,7 +2083,8 @@ } } }, - "jerk_travel": { + "jerk_travel": + { "label": "Travel Jerk", "description": "The maximum instantaneous velocity change with which travel moves are made.", "unit": "mm/s", @@ -2027,7 +2097,8 @@ "enabled": "jerk_enabled", "settable_per_mesh": false }, - "jerk_layer_0": { + "jerk_layer_0": + { "label": "Initial Layer Jerk", "description": "The print maximum instantaneous velocity change for the initial layer.", "unit": "mm/s", @@ -2039,7 +2110,8 @@ "maximum_value_warning": "50", "enabled": "jerk_enabled", "settable_per_mesh": true, - "children": { + "children": + { "jerk_print_layer_0": { "label": "Initial Layer Print Jerk", @@ -2071,7 +2143,8 @@ } } }, - "jerk_skirt_brim": { + "jerk_skirt_brim": + { "label": "Skirt/Brim Jerk", "description": "The maximum instantaneous velocity change with which the skirt and brim are printed.", "unit": "mm/s", @@ -2360,7 +2433,8 @@ "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, - "children": { + "children": + { "support_line_distance": { "label": "Support Line Distance", @@ -2434,11 +2508,13 @@ "enabled": "support_enable", "settable_per_mesh": true }, - "support_xy_overrides_z": { + "support_xy_overrides_z": + { "label": "Support Distance Priority", "description": "Whether the Support X/Y Distance overrides the Support Z Distance or vice versa. When X/Y overrides Z the X/Y distance can push away the support from the model, influencing the actual Z distance to the overhang. We can disable this by not applying the X/Y distance around overhangs.", "type": "enum", - "options": { + "options": + { "xy_overrides_z": "X/Y overrides Z", "z_overrides_xy": "Z overrides X/Y" }, @@ -2447,7 +2523,8 @@ "enabled": "support_enable", "settable_per_mesh": true }, - "support_xy_distance_overhang": { + "support_xy_distance_overhang": + { "label": "Minimum Support X/Y Distance", "description": "Distance of the support structure from the overhang in the X/Y directions. ", "unit": "mm", @@ -2828,7 +2905,8 @@ "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" }, - "layer_0_z_overlap": { + "layer_0_z_overlap": + { "label": "Initial Layer Z Overlap", "description": "Make the first and second layer of the model overlap in the Z direction to compensate for the filament lost in the airgap. All models above the first model layer will be shifted down by this amount.", "unit": "mm", @@ -3057,7 +3135,8 @@ } } }, - "raft_acceleration": { + "raft_acceleration": + { "label": "Raft Print Acceleration", "description": "The acceleration with which the raft is printed.", "unit": "mm/s²", @@ -3070,8 +3149,10 @@ "enabled": "adhesion_type == \"raft\" and acceleration_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr", - "children": { - "raft_surface_acceleration": { + "children": + { + "raft_surface_acceleration": + { "label": "Raft Top Print Acceleration", "description": "The acceleration with which the top raft layers are printed.", "unit": "mm/s²", @@ -3085,7 +3166,8 @@ "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, - "raft_interface_acceleration": { + "raft_interface_acceleration": + { "label": "Raft Middle Print Acceleration", "description": "The acceleration with which the middle raft layer is printed.", "unit": "mm/s²", @@ -3099,7 +3181,8 @@ "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, - "raft_base_acceleration": { + "raft_base_acceleration": + { "label": "Raft Base Print Acceleration", "description": "The acceleration with which the base raft layer is printed.", "unit": "mm/s²", @@ -3115,7 +3198,8 @@ } } }, - "raft_jerk": { + "raft_jerk": + { "label": "Raft Print Jerk", "description": "The jerk with which the raft is printed.", "unit": "mm/s", @@ -3128,8 +3212,10 @@ "enabled": "adhesion_type == \"raft\" and jerk_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr", - "children": { - "raft_surface_jerk": { + "children": + { + "raft_surface_jerk": + { "label": "Raft Top Print Jerk", "description": "The jerk with which the top raft layers are printed.", "unit": "mm/s", @@ -3143,7 +3229,8 @@ "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, - "raft_interface_jerk": { + "raft_interface_jerk": + { "label": "Raft Middle Print Jerk", "description": "The jerk with which the middle raft layer is printed.", "unit": "mm/s", @@ -3157,7 +3244,8 @@ "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, - "raft_base_jerk": { + "raft_base_jerk": + { "label": "Raft Base Print Jerk", "description": "The jerk with which the base raft layer is printed.", "unit": "mm/s", @@ -3173,7 +3261,8 @@ } } }, - "raft_fan_speed": { + "raft_fan_speed": + { "label": "Raft Fan Speed", "description": "The fan speed for the raft.", "unit": "%", @@ -3264,7 +3353,8 @@ "enabled": "support_enable and machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false, - "children": { + "children": + { "support_infill_extruder_nr": { "label": "Support Infill Extruder", @@ -3601,13 +3691,15 @@ "settable_per_mesh": false, "settable_per_extruder": false }, - "conical_overhang_enabled": { + "conical_overhang_enabled": + { "label": "Make Overhang Printable", "description": "Change the geometry of the printed model such that minimal support is required. Steep overhangs will become shallow overhangs. Overhanging areas will drop down to become more vertical.", "type": "bool", "default_value": false }, - "conical_overhang_angle": { + "conical_overhang_angle": + { "label": "Maximum Model Angle", "description": "The maximum angle of overhangs after the they have been made printable. At a value of 0° all overhangs are replaced by a piece of model connected to the build plate, 90° will not change the model in any way.", "unit": "°", From 6c81c9a73581d1902d1557f78078ab7b136bfa40 Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Thu, 6 Oct 2016 15:07:25 +0100 Subject: [PATCH 004/114] Add an example AppData file so that Cura is visible in Linux software centers Fixes: https://github.com/Ultimaker/Cura/issues/530 --- CMakeLists.txt | 2 ++ cura.appdata.xml | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 cura.appdata.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index 265e471dd2..99c18b302c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,8 @@ if(NOT APPLE AND NOT WIN32) DESTINATION lib/python${PYTHON_VERSION_MAJOR}/dist-packages/cura) install(FILES ${CMAKE_BINARY_DIR}/cura.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) + install(FILES ${CMAKE_BINARY_DIR}/cura.appdata.xml + DESTINATION ${CMAKE_INSTALL_DATADIR}/appdata) install(FILES cura.sharedmimeinfo DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages/ RENAME cura.xml ) diff --git a/cura.appdata.xml b/cura.appdata.xml new file mode 100644 index 0000000000..5c67814fae --- /dev/null +++ b/cura.appdata.xml @@ -0,0 +1,31 @@ + + + + cura.desktop + CC0-1.0 + AGPL-3.0 and CC-BY-SA-4.0 + Cura + The world's most advanced 3d printer software + +

+ Cura creates a seamless integration between hardware, software and + materials for the best 3D printing experience around. + Cura supports the 3MF, OBJ and STL file formats and is available on + Windows, Mac and Linux. +

+
    +
  • Novices can start printing right away
  • +
  • Experts are able to customize 200 settings to achieve the best results
  • +
  • Optimized profiles for Ultimaker materials
  • +
  • Supported by a global network of Ultimaker certified service partners
  • +
  • Print multiple objects at once with different settings for each object
  • +
  • Cura supports STL, 3MF and OBJ file formats
  • +
  • Open source and completely free
  • +
+
+ + http://software.ultimaker.com/Cura.png + + https://ultimaker.com/en/products/cura-software + Cura +
From cece4b0f41bc9551fe8d688edbc4916cea5c94e0 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Mon, 10 Oct 2016 11:02:43 +0200 Subject: [PATCH 005/114] fix: nylon has standby temp 175 (CURA-2567) --- resources/materials/ultimaker_nylon_black.xml.fdm_material | 2 +- .../materials/ultimaker_nylon_transparent.xml.fdm_material | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/materials/ultimaker_nylon_black.xml.fdm_material b/resources/materials/ultimaker_nylon_black.xml.fdm_material index 2d013ab408..4eed0b025c 100644 --- a/resources/materials/ultimaker_nylon_black.xml.fdm_material +++ b/resources/materials/ultimaker_nylon_black.xml.fdm_material @@ -20,6 +20,6 @@ Generic Nylon profile. Serves as an example file, data in this file is not corre 250 60 - 100 + 175 diff --git a/resources/materials/ultimaker_nylon_transparent.xml.fdm_material b/resources/materials/ultimaker_nylon_transparent.xml.fdm_material index 639f5188d4..7d80a0568c 100644 --- a/resources/materials/ultimaker_nylon_transparent.xml.fdm_material +++ b/resources/materials/ultimaker_nylon_transparent.xml.fdm_material @@ -20,6 +20,6 @@ Generic Nylon profile. Serves as an example file, data in this file is not corre 250 60 - 100 + 175 From 99ca2f7752a116248ea6ecf5f396dea1427ef7b6 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Oct 2016 13:12:56 +0200 Subject: [PATCH 006/114] Put material selection in warning state for unsupported materials CURA-2271 --- resources/qml/SidebarHeader.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 9ed30477d8..3e36cfbaa0 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -244,6 +244,8 @@ Column } } + property var valueWarning: Cura.MachineManager.activeQualityId == "empty_quality" + enabled: !extrudersList.visible || base.currentExtruderIndex > -1 height: UM.Theme.getSize("setting_control").height From 4464b7d40a0b6c195565eaba550166e81db91286 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 10 Oct 2016 13:38:03 +0200 Subject: [PATCH 007/114] Fix installation of AppData file --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99c18b302c..c591ffa625 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,7 @@ if(NOT APPLE AND NOT WIN32) DESTINATION lib/python${PYTHON_VERSION_MAJOR}/dist-packages/cura) install(FILES ${CMAKE_BINARY_DIR}/cura.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) - install(FILES ${CMAKE_BINARY_DIR}/cura.appdata.xml + install(FILES cura.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/appdata) install(FILES cura.sharedmimeinfo DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages/ From 3f6877d2ec8f2df42ccac8f6488a5cb2a385e53b Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 12 Oct 2016 13:58:09 +0200 Subject: [PATCH 008/114] Keep per object extruder when switching machines. CURA-2533 --- cura/Settings/SettingOverrideDecorator.py | 9 +++++++++ .../PerObjectSettingsTool/PerObjectSettingsTool.py | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cura/Settings/SettingOverrideDecorator.py b/cura/Settings/SettingOverrideDecorator.py index 8c10542069..a8cfcd8d80 100644 --- a/cura/Settings/SettingOverrideDecorator.py +++ b/cura/Settings/SettingOverrideDecorator.py @@ -61,6 +61,15 @@ class SettingOverrideDecorator(SceneNodeDecorator): def getActiveExtruder(self): return self._extruder_stack + ## Gets the currently active extruders position + # + # \return An extruder's position, or None if no position info is available. + def getActiveExtruderPosition(self): + containers = ContainerRegistry.getInstance().findContainers(id = self.getActiveExtruder()) + if containers: + container_stack = containers[0] + return container_stack.getMetaDataEntry("position", default=None) + def _onSettingChanged(self, instance, property_name): # Reminder: 'property' is a built-in function if property_name == "value": # Only reslice if the value has changed. Application.getInstance().getBackend().forceSlice() diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py index a90bb4b6d0..5834a5c606 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py @@ -84,11 +84,20 @@ class PerObjectSettingsTool(Tool): default_stack = ExtruderManager.getInstance().getExtruderStack(0) if default_stack: default_stack_id = default_stack.getId() - else: default_stack_id = global_container_stack.getId() + else: + default_stack_id = global_container_stack.getId() root_node = Application.getInstance().getController().getScene().getRoot() for node in DepthFirstIterator(root_node): - node.callDecoration("setActiveExtruder", default_stack_id) + new_stack_id = default_stack_id + # Get position of old extruder stack for this node + old_extruder_pos = node.callDecoration("getActiveExtruderPosition") + if old_extruder_pos is not None: + # Fetch current (new) extruder stack at position + new_stack = ExtruderManager.getInstance().getExtruderStack(old_extruder_pos) + if new_stack: + new_stack_id = new_stack.getId() + node.callDecoration("setActiveExtruder", new_stack_id) self._updateEnabled() From fcb88f06ab3d9cd423f318e04bf7d3c7eeddbe4b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Oct 2016 16:18:54 +0200 Subject: [PATCH 009/114] Fix typo in incompatibility warning message This is the actual fix that we couldn't do due to the string freeze. Contributes to issue CURA-2626. --- cura/Settings/MachineManager.py | 2 +- plugins/CuraEngineBackend/CuraEngineBackend.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 9b62e3ac0d..0744485ad8 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -73,7 +73,7 @@ class MachineManager(QObject): self._auto_hotends_changed = {} self._material_incompatible_message = Message(catalog.i18nc("@info:status", - "The selected material is imcompatible with the selected machine or configuration.")) + "The selected material is incompatible with the selected machine or configuration.")) globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value) activeMaterialChanged = pyqtSignal() diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index c24ea1cf76..f82e210524 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -230,7 +230,7 @@ class CuraEngineBackend(Backend): if job.getResult() == StartSliceJob.StartJobResult.MaterialIncompatible: if Application.getInstance().getPlatformActivity: self._error_message = Message(catalog.i18nc("@info:status", - "The selected material is imcompatible with the selected machine or configuration.")) + "The selected material is incompatible with the selected machine or configuration.")) self._error_message.show() self.backendStateChange.emit(BackendState.Error) else: From a3ffc9e46f230d1fffcb6599daca689249951dfe Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Thu, 13 Oct 2016 11:10:40 +0200 Subject: [PATCH 010/114] A small fix for the case when Cura is starting up and there is no printer. CURA-2271 Warn for unsupported material/printcore combinations --- cura/Settings/ProfilesModel.py | 5 +++-- cura/Settings/QualityAndUserProfilesModel.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 8c0cb1a93c..0f7c8c1ae7 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -32,8 +32,9 @@ class ProfilesModel(InstanceContainersModel): extruder_manager = ExtruderManager.getInstance() active_extruder = extruder_manager.getActiveExtruderStack() extruder_stacks = extruder_manager.getActiveExtruderStacks() - extruder_stacks.remove(active_extruder) - extruder_stacks = [active_extruder] + extruder_stacks + if active_extruder in extruder_stacks: + extruder_stacks.remove(active_extruder) + extruder_stacks = [active_extruder] + extruder_stacks # Fetch the list of useable qualities across all extruders. # The actual list of quality profiles come from the first extruder in the extruder list. diff --git a/cura/Settings/QualityAndUserProfilesModel.py b/cura/Settings/QualityAndUserProfilesModel.py index 3ca5507c5b..db093126cc 100644 --- a/cura/Settings/QualityAndUserProfilesModel.py +++ b/cura/Settings/QualityAndUserProfilesModel.py @@ -29,8 +29,9 @@ class QualityAndUserProfilesModel(ProfilesModel): extruder_manager = ExtruderManager.getInstance() active_extruder = extruder_manager.getActiveExtruderStack() extruder_stacks = extruder_manager.getActiveExtruderStacks() - extruder_stacks.remove(active_extruder) - extruder_stacks = [active_extruder] + extruder_stacks + if active_extruder in extruder_stacks: + extruder_stacks.remove(active_extruder) + extruder_stacks = [active_extruder] + extruder_stacks # Fetch the list of useable qualities across all extruders. # The actual list of quality profiles come from the first extruder in the extruder list. From 1bc2f1e18977b124ae30ebf2ff91b1605cd8599d Mon Sep 17 00:00:00 2001 From: nickthetait Date: Thu, 13 Oct 2016 08:11:15 -0600 Subject: [PATCH 011/114] More formatting updates --- resources/definitions/fdmprinter.def.json | 41 +++++++++++++++-------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 2cbf19dadc..898c099a5d 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -392,7 +392,8 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "machine_max_feedrate_x": { + "machine_max_feedrate_x": + { "label": "Maximum Speed X", "description": "The maximum speed for the motor of the X-direction.", "unit": "mm/s", @@ -402,7 +403,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_feedrate_y": { + "machine_max_feedrate_y": + { "label": "Maximum Speed Y", "description": "The maximum speed for the motor of the Y-direction.", "unit": "mm/s", @@ -412,7 +414,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_feedrate_z": { + "machine_max_feedrate_z": + { "label": "Maximum Speed Z", "description": "The maximum speed for the motor of the Z-direction.", "unit": "mm/s", @@ -422,7 +425,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_feedrate_e": { + "machine_max_feedrate_e": + { "label": "Maximum Feedrate", "description": "The maximum speed of the filament.", "unit": "mm/s", @@ -432,7 +436,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_x": { + "machine_max_acceleration_x": + { "label": "Maximum Acceleration X", "description": "Maximum acceleration for the motor of the X-direction", "unit": "mm/s²", @@ -442,7 +447,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_y": { + "machine_max_acceleration_y": + { "label": "Maximum Acceleration Y", "description": "Maximum acceleration for the motor of the Y-direction.", "unit": "mm/s²", @@ -452,7 +458,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_z": { + "machine_max_acceleration_z": + { "label": "Maximum Acceleration Z", "description": "Maximum acceleration for the motor of the Z-direction.", "unit": "mm/s²", @@ -462,7 +469,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_acceleration_e": { + "machine_max_acceleration_e": + { "label": "Maximum Filament Acceleration", "description": "Maximum acceleration for the motor of the filament.", "unit": "mm/s²", @@ -472,7 +480,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_acceleration": { + "machine_acceleration": + { "label": "Default Acceleration", "description": "The default acceleration of print head movement.", "unit": "mm/s²", @@ -482,7 +491,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_jerk_xy": { + "machine_max_jerk_xy": + { "label": "Default X-Y Jerk", "description": "Default jerk for movement in the horizontal plane.", "unit": "mm/s", @@ -492,7 +502,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_jerk_z": { + "machine_max_jerk_z": + { "label": "Default Z Jerk", "description": "Default jerk for the motor of the Z-direction.", "unit": "mm/s", @@ -502,7 +513,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_max_jerk_e": { + "machine_max_jerk_e": + { "label": "Default Filament Jerk", "description": "Default jerk for the motor of the filament.", "unit": "mm/s", @@ -512,7 +524,8 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, - "machine_minimum_feedrate": { + "machine_minimum_feedrate": + { "label": "Minimum Feedrate", "description": "The minimal movement speed of the print head.", "unit": "mm/s", @@ -839,7 +852,7 @@ "maximum_value_warning": "machine_nozzle_size", "settable_per_mesh": true }, - "outer_inset_first": + "outer_inset_first": { "label": "Outer Before Inner Walls", "description": "Prints walls in order of outside to inside when enabled. This can help improve dimensional accuracy in X and Y when using a high viscosity plastic like ABS; however it can decrease outer surface print quality, especially on overhangs.", From 1cd50526664a9c673394b34124a138355932e079 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 17 Oct 2016 13:57:24 +0200 Subject: [PATCH 012/114] Fixed translation of 4 words in profiles page. CURA-570 --- resources/qml/Preferences/ProfilesPage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index 1bc705fe62..f85d967cfe 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -235,7 +235,7 @@ UM.ManagementPage Item { - UM.I18nCatalog { id: catalog; name: "uranium"; } + UM.I18nCatalog { id: catalog; name: "cura"; } UM.ConfirmRemoveDialog { From 98a2ebc157a96ef2f60453a4f6bd40065a31382f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 17 Oct 2016 14:10:02 +0200 Subject: [PATCH 013/114] Fix translation of machines page and some other references to Uranium CURA-570 --- resources/qml/Preferences/GeneralPage.qml | 4 ++-- resources/qml/Preferences/MachinesPage.qml | 4 ++-- resources/qml/Preferences/ProfilesPage.qml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index f727af5a10..adbad802ef 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Uranium is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2016 Ultimaker B.V. +// Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index f2937c04e6..78553bb37f 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -1,5 +1,5 @@ // Copyright (c) 2016 Ultimaker B.V. -// Uranium is released under the terms of the AGPLv3 or higher. +// Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 @@ -229,7 +229,7 @@ UM.ManagementPage } } - UM.I18nCatalog { id: catalog; name: "uranium"; } + UM.I18nCatalog { id: catalog; name: "cura"; } UM.ConfirmRemoveDialog { diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index f85d967cfe..621ecb3184 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Uranium is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2016 Ultimaker B.V. +// Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 From e2d32ef963dbd73af78d59b26aa0d62eb27ff95d Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 17 Oct 2016 14:17:28 +0200 Subject: [PATCH 014/114] Change references from Uranium to Cura --- resources/qml/Preferences/ReadOnlySpinBox.qml | 2 +- resources/qml/Preferences/ReadOnlyTextArea.qml | 2 +- resources/qml/Preferences/ReadOnlyTextField.qml | 2 +- resources/qml/Preferences/SettingVisibilityPage.qml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/qml/Preferences/ReadOnlySpinBox.qml b/resources/qml/Preferences/ReadOnlySpinBox.qml index 8692f55708..90314ac323 100644 --- a/resources/qml/Preferences/ReadOnlySpinBox.qml +++ b/resources/qml/Preferences/ReadOnlySpinBox.qml @@ -1,5 +1,5 @@ // Copyright (c) 2016 Ultimaker B.V. -// Uranium is released under the terms of the AGPLv3 or higher. +// Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 diff --git a/resources/qml/Preferences/ReadOnlyTextArea.qml b/resources/qml/Preferences/ReadOnlyTextArea.qml index 080aec5f53..1c457eb5d2 100644 --- a/resources/qml/Preferences/ReadOnlyTextArea.qml +++ b/resources/qml/Preferences/ReadOnlyTextArea.qml @@ -1,5 +1,5 @@ // Copyright (c) 2016 Ultimaker B.V. -// Uranium is released under the terms of the AGPLv3 or higher. +// Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 diff --git a/resources/qml/Preferences/ReadOnlyTextField.qml b/resources/qml/Preferences/ReadOnlyTextField.qml index 2ff0357020..a34c39cde3 100644 --- a/resources/qml/Preferences/ReadOnlyTextField.qml +++ b/resources/qml/Preferences/ReadOnlyTextField.qml @@ -1,5 +1,5 @@ // Copyright (c) 2016 Ultimaker B.V. -// Uranium is released under the terms of the AGPLv3 or higher. +// Cura is released under the terms of the AGPLv3 or higher. // Different than the name suggests, it is not always read-only. import QtQuick 2.1 diff --git a/resources/qml/Preferences/SettingVisibilityPage.qml b/resources/qml/Preferences/SettingVisibilityPage.qml index e68df94122..cada8adfda 100644 --- a/resources/qml/Preferences/SettingVisibilityPage.qml +++ b/resources/qml/Preferences/SettingVisibilityPage.qml @@ -1,5 +1,5 @@ // Copyright (c) 2016 Ultimaker B.V. -// Uranium is released under the terms of the AGPLv3 or higher. +// Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 From b3e3053323cbc30faa0dfbf02d55c30e8d04b74a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 17 Oct 2016 13:22:41 +0200 Subject: [PATCH 015/114] Move automatic file name generating to separate function This will make it easier to have multiple nodes here in the future. I'll have to modify this function for that, but I'll do that in a separate commit. Contributes to issue CURA-2617. --- .../RemovableDriveOutputDevice.py | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py index 8b6dce8292..2cd33dafdc 100644 --- a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py +++ b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py @@ -50,15 +50,7 @@ class RemovableDriveOutputDevice(OutputDevice): extension = file_formats[0]["extension"] if file_name is None: - for n in BreadthFirstIterator(node): - if n.getMeshData(): - file_name = n.getName() - if file_name: - break - - if not file_name: - Logger.log("e", "Could not determine a proper file name when trying to write to %s, aborting", self.getName()) - raise OutputDeviceError.WriteRequestFailedError() + file_name = self._automaticFileName(node) if extension: # Not empty string. extension = "." + extension @@ -88,6 +80,21 @@ class RemovableDriveOutputDevice(OutputDevice): Logger.log("e", "Operating system would not let us write to %s: %s", file_name, str(e)) raise OutputDeviceError.WriteRequestFailedError(catalog.i18nc("@info:status", "Could not save to {0}: {1}").format(file_name, str(e))) from e + ## Generate a file name automatically for the specified nodes to be saved + # in. + # + # The name generated will be the name of one of the nodes. Which node that + # is can not be guaranteed. + # + # \param root A node for which to generate a file name. + def _automaticFileName(self, root): + for child in BreadthFirstIterator(root): + if child.getMeshData(): + name = child.getName() + if name: + return name + raise OutputDeviceError.WriteRequestFailedError("Could not find a file name when trying to write to {device}.".format(device = self.getName())) + def _onProgress(self, job, progress): if hasattr(job, "_message"): job._message.setProgress(progress) From 96e516c676e78ab7671a48b97bbf1a6a3a81f63d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 17 Oct 2016 15:50:35 +0200 Subject: [PATCH 016/114] Allow for saving multiple scene nodes at the same time The selection saving saves the entire current selection and their child nodes. Contributes to issue CURA-2617. --- cura/PrinterOutputDevice.py | 2 +- plugins/GCodeWriter/GCodeWriter.py | 12 ++++++- .../RemovableDriveOutputDevice.py | 33 +++++++++++++------ plugins/USBPrinting/USBPrinterOutputDevice.py | 11 +++++-- 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index 12335e940b..bbf35da6f8 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -49,7 +49,7 @@ class PrinterOutputDevice(QObject, OutputDevice): self._printer_state = "" self._printer_type = "unknown" - def requestWrite(self, node, file_name = None, filter_by_machine = False): + def requestWrite(self, nodes, file_name = None, filter_by_machine = False): raise NotImplementedError("requestWrite needs to be implemented") ## Signals diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index ee35a05215..3784d9d13e 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -46,7 +46,17 @@ class GCodeWriter(MeshWriter): def __init__(self): super().__init__() - def write(self, stream, node, mode = MeshWriter.OutputMode.TextMode): + ## Writes the g-code for the entire scene to a stream. + # + # Note that even though the function accepts a collection of nodes, the + # entire scene is always written to the file since it is not possible to + # separate the g-code for just specific nodes. + # + # \param stream The stream to write the g-code to. + # \param nodes This is ignored. + # \param mode Additional information on how to format the g-code in the + # file. This must always be text mode. + def write(self, stream, nodes, mode = MeshWriter.OutputMode.TextMode): if mode != MeshWriter.OutputMode.TextMode: Logger.log("e", "GCode Writer does not support non-text mode.") return False diff --git a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py index 2cd33dafdc..8de1720107 100644 --- a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py +++ b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py @@ -1,3 +1,6 @@ +# Copyright (c) 2016 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + import os.path from UM.Application import Application @@ -25,7 +28,16 @@ class RemovableDriveOutputDevice(OutputDevice): self._writing = False self._stream = None - def requestWrite(self, node, file_name = None, filter_by_machine = False): + ## Request the specified nodes to be written to the removable drive. + # + # \param nodes A collection of scene nodes that should be written to the + # removable drive. + # \param file_name \type{string} A suggestion for the file name to write + # to. If none is provided, a file name will be made from the names of the + # meshes. + # \param limit_mimetypes Should we limit the available MIME types to the + # MIME types available to the currently active machine? + def requestWrite(self, nodes, file_name = None, filter_by_machine = False): filter_by_machine = True # This plugin is indended to be used by machine (regardless of what it was told to do) if self._writing: raise OutputDeviceError.DeviceBusyError() @@ -50,7 +62,7 @@ class RemovableDriveOutputDevice(OutputDevice): extension = file_formats[0]["extension"] if file_name is None: - file_name = self._automaticFileName(node) + file_name = self._automaticFileName(nodes) if extension: # Not empty string. extension = "." + extension @@ -60,7 +72,7 @@ class RemovableDriveOutputDevice(OutputDevice): Logger.log("d", "Writing to %s", file_name) # Using buffering greatly reduces the write time for many lines of gcode self._stream = open(file_name, "wt", buffering = 1) - job = WriteMeshJob(writer, self._stream, node, MeshWriter.OutputMode.TextMode) + job = WriteMeshJob(writer, self._stream, nodes, MeshWriter.OutputMode.TextMode) job.setFileName(file_name) job.progress.connect(self._onProgress) job.finished.connect(self._onFinished) @@ -86,13 +98,14 @@ class RemovableDriveOutputDevice(OutputDevice): # The name generated will be the name of one of the nodes. Which node that # is can not be guaranteed. # - # \param root A node for which to generate a file name. - def _automaticFileName(self, root): - for child in BreadthFirstIterator(root): - if child.getMeshData(): - name = child.getName() - if name: - return name + # \param nodes A collection of nodes for which to generate a file name. + def _automaticFileName(self, nodes): + for root in nodes: + for child in BreadthFirstIterator(root): + if child.getMeshData(): + name = child.getName() + if name: + return name raise OutputDeviceError.WriteRequestFailedError("Could not find a file name when trying to write to {device}.".format(device = self.getName())) def _onProgress(self, job, progress): diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 4838fe9b96..d98f631a2e 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -1,4 +1,4 @@ -# Copyright (c) 2015 Ultimaker B.V. +# Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. from .avr_isp import stk500v2, ispBase, intelHex @@ -426,7 +426,14 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._error_state = error self.onError.emit() - def requestWrite(self, node, file_name = None, filter_by_machine = False): + ## Request the current scene to be sent to a USB-connected printer. + # + # \param nodes A collection of scene nodes to send. This is ignored. + # \param file_name \type{string} A suggestion for a file name to write. + # This is ignored. + # \param filter_by_machine Whether to filter MIME types by machine. This + # is ignored. + def requestWrite(self, nodes, file_name = None, filter_by_machine = False): Application.getInstance().showPrintMonitor.emit(True) self.startPrint() From fd50d9e316694e3e2768747308cbed2866c81793 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Wed, 19 Oct 2016 14:44:58 +0200 Subject: [PATCH 017/114] JSON fix: added comment in cool_min_layer_time description about Minimum Speed (CURA-2720) --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 420113c4cb..da3dfc56ba 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2367,7 +2367,7 @@ "cool_min_layer_time": { "label": "Minimum Layer Time", - "description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer.", + "description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated.", "unit": "s", "type": "float", "default_value": 5, From 98688bf0133daf380e06e792cb9a7ed6bf9e6e49 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 19 Oct 2016 15:46:22 +0200 Subject: [PATCH 018/114] Changed MachineManager.isActiveStackValid to MachineManager.areStacksValid. CURA-2730 --- cura/Settings/MachineManager.py | 63 ++++++++++++++-------- plugins/CuraEngineBackend/StartSliceJob.py | 2 +- resources/qml/Actions.qml | 4 +- resources/qml/Preferences/ProfilesPage.qml | 2 +- 4 files changed, 45 insertions(+), 26 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 0028ace4cd..4d4deddb68 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -34,7 +34,7 @@ class MachineManager(QObject): self.globalContainerChanged.connect(self.activeVariantChanged) self.globalContainerChanged.connect(self.activeQualityChanged) - self._active_stack_valid = None + self._stacks_valid = None self._onGlobalContainerChanged() ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) @@ -85,6 +85,7 @@ class MachineManager(QObject): globalValueChanged = pyqtSignal() # Emitted whenever a value inside global container is changed. activeStackValueChanged = pyqtSignal() # Emitted whenever a value inside the active stack is changed. activeStackValidationChanged = pyqtSignal() # Emitted whenever a validation inside active container is changed + stacksValidationChanged = pyqtSignal() # Emitted whenever a validation is changed blurSettings = pyqtSignal() # Emitted to force fields in the advanced sidebar to un-focus, so they update properly @@ -231,6 +232,13 @@ class MachineManager(QObject): quality = self._global_container_stack.findContainer({"type": "quality"}) quality.nameChanged.connect(self._onQualityNameChanged) + ## Update self._stacks_valid according to _checkStacksForErrors and emit if change. + def _updateStacksValid(self): + old_stacks_valid = self._stacks_valid + self._stacks_valid = self._checkStacksValid() + if old_stacks_valid != self._stacks_valid: + self.stacksValidationChanged.emit() + def _onActiveExtruderStackChanged(self): self.blurSettings.emit() # Ensure no-one has focus. @@ -246,10 +254,7 @@ class MachineManager(QObject): else: self._active_container_stack = self._global_container_stack - old_active_stack_valid = self._active_stack_valid - self._active_stack_valid = not self._checkStackForErrors(self._active_container_stack) - if old_active_stack_valid != self._active_stack_valid: - self.activeStackValidationChanged.emit() + self._updateStacksValid() if old_active_container_stack != self._active_container_stack: # Many methods and properties related to the active quality actually depend @@ -272,18 +277,18 @@ class MachineManager(QObject): self.activeStackValueChanged.emit() if property_name == "validationState": - if self._active_stack_valid: + if self._stacks_valid: + # fast update, we only have to look at the current changed property if self._active_container_stack.getProperty(key, "settable_per_extruder"): changed_validation_state = self._active_container_stack.getProperty(key, property_name) else: changed_validation_state = self._global_container_stack.getProperty(key, property_name) if changed_validation_state in (UM.Settings.ValidatorState.Exception, UM.Settings.ValidatorState.MaximumError, UM.Settings.ValidatorState.MinimumError): - self._active_stack_valid = False - self.activeStackValidationChanged.emit() + self._stacks_valid = False + self.stacksValidationChanged.emit() else: - if not self._checkStackForErrors(self._active_container_stack) and not self._checkStackForErrors(self._global_container_stack): - self._active_stack_valid = True - self.activeStackValidationChanged.emit() + # Normal check + self._updateStacksValid() @pyqtSlot(str) def setActiveMachine(self, stack_id): @@ -337,16 +342,30 @@ class MachineManager(QObject): def _createUniqueName(self, container_type, current_name, new_name, fallback_name): return UM.Settings.ContainerRegistry.getInstance().createUniqueName(container_type, current_name, new_name, fallback_name) - ## Convenience function to check if a stack has errors. - def _checkStackForErrors(self, stack): + ## Convenience function to check if a stack is valid. + def _checkStackValid(self, stack): if stack is None: - return False + return True for key in stack.getAllKeys(): validation_state = stack.getProperty(key, "validationState") if validation_state in (UM.Settings.ValidatorState.Exception, UM.Settings.ValidatorState.MaximumError, UM.Settings.ValidatorState.MinimumError): - return True - return False + return False + return True + + ## Return True if used stacks are valid. + def _checkStacksValid(self): + if not self._checkStackValid(self._global_container_stack): + return False + + if self._global_container_stack is None: + return True + stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + for stack in stacks: + if not self._checkStackValid(stack): + return False + + return True ## Remove all instances from the top instanceContainer (effectively removing all user-changed settings) @pyqtSlot() @@ -405,12 +424,12 @@ class MachineManager(QObject): for container in send_emits_containers: container.sendPostponedEmits() - ## Check if the global profile does not contain error states - # Note that the _active_stack_valid is cached due to performance issues - # Calling _checkStackForErrors on every change is simply too expensive - @pyqtProperty(bool, notify = activeStackValidationChanged) - def isActiveStackValid(self): - return bool(self._active_stack_valid) + ## Check if none of the stacks contain error states + # Note that the _stacks_valid is cached due to performance issues + # Calling _checkStack(s)ForErrors on every change is simply too expensive + @pyqtProperty(bool, notify = stacksValidationChanged) + def areStacksValid(self): + return bool(self._stacks_valid) @pyqtProperty(str, notify = activeStackChanged) def activeUserProfileId(self): diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 18c7fb1f5c..a610fe879a 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -75,7 +75,7 @@ class StartSliceJob(Job): return # Don't slice if there is a setting with an error value. - if not Application.getInstance().getMachineManager().isActiveStackValid: + if not Application.getInstance().getMachineManager().areStacksValid: self.setResult(StartJobResult.SettingError) return diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 3ee8630183..8d3936fb9c 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -121,7 +121,7 @@ Item Action { id: updateProfileAction; - enabled: Cura.MachineManager.isActiveStackValid && Cura.MachineManager.hasUserSettings && !Cura.MachineManager.isReadOnly(Cura.MachineManager.activeQualityId) + enabled: Cura.MachineManager.areStacksValid && Cura.MachineManager.hasUserSettings && !Cura.MachineManager.isReadOnly(Cura.MachineManager.activeQualityId) text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings"); onTriggered: Cura.ContainerManager.updateQualityChanges(); } @@ -137,7 +137,7 @@ Item Action { id: addProfileAction; - enabled: Cura.MachineManager.isActiveStackValid && Cura.MachineManager.hasUserSettings + enabled: Cura.MachineManager.areStacksValid && Cura.MachineManager.hasUserSettings text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings..."); } diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index 621ecb3184..3e1ee400a6 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -62,7 +62,7 @@ UM.ManagementPage Button { text: catalog.i18nc("@label", "Create") - enabled: base.canCreateProfile() + enabled: base.canCreateProfile() && Cura.MachineManager.areStacksValid visible: base.canCreateProfile() iconName: "list-add"; From d4f7a0e16c74b8f8ef8fbcba23fe0b6eae03e5f7 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 20 Oct 2016 11:39:01 +0200 Subject: [PATCH 019/114] Bugfix in logging when trying to import broken profile. CURA-787 --- cura/Settings/CuraContainerRegistry.py | 2 +- .../materials/generic_abs.xml.fdm_material | 8 ++++++++ .../materials/generic_cpe.xml.fdm_material | 8 ++++++++ .../materials/generic_nylon.xml.fdm_material | 8 +++++++- .../materials/generic_pla.xml.fdm_material | 8 ++++++++ .../ultimaker_abs_black.xml.fdm_material | 7 +++++++ .../ultimaker_abs_blue.xml.fdm_material | 7 +++++++ .../ultimaker_abs_green.xml.fdm_material | 7 +++++++ .../ultimaker_abs_grey.xml.fdm_material | 8 ++++++++ .../ultimaker_abs_orange.xml.fdm_material | 8 ++++++++ .../ultimaker_abs_pearl-gold.xml.fdm_material | 8 ++++++++ .../ultimaker_abs_red.xml.fdm_material | 8 ++++++++ ...maker_abs_silver-metallic.xml.fdm_material | 8 ++++++++ .../ultimaker_abs_white.xml.fdm_material | 8 ++++++++ .../ultimaker_abs_yellow.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_black.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_blue.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_dark-grey.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_green.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_light-grey.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_red.xml.fdm_material | 8 ++++++++ ...ultimaker_cpe_transparent.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_white.xml.fdm_material | 8 ++++++++ .../ultimaker_cpe_yellow.xml.fdm_material | 8 ++++++++ .../ultimaker_nylon_black.xml.fdm_material | 20 ++++++++++++++++++- ...timaker_nylon_transparent.xml.fdm_material | 20 ++++++++++++++++++- .../ultimaker_pla_black.xml.fdm_material | 8 ++++++++ .../ultimaker_pla_blue.xml.fdm_material | 8 ++++++++ .../ultimaker_pla_green.xml.fdm_material | 8 ++++++++ .../ultimaker_pla_magenta.xml.fdm_material | 8 ++++++++ .../ultimaker_pla_orange.xml.fdm_material | 8 ++++++++ ...ultimaker_pla_pearl-white.xml.fdm_material | 8 ++++++++ .../ultimaker_pla_red.xml.fdm_material | 8 ++++++++ ...maker_pla_silver-metallic.xml.fdm_material | 8 ++++++++ ...ultimaker_pla_transparent.xml.fdm_material | 8 ++++++++ .../ultimaker_pla_white.xml.fdm_material | 8 ++++++++ .../ultimaker_pla_yellow.xml.fdm_material | 8 ++++++++ 37 files changed, 307 insertions(+), 4 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 86fc5335be..fccd796c1e 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -165,7 +165,7 @@ class CuraContainerRegistry(ContainerRegistry): profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader. except Exception as e: # Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None. - Logger.log("e", "Failed to import profile from %s: %s while using profile reader", file_name, str(e), profile_reader.getPluginId()) + Logger.log("e", "Failed to import profile from %s: %s while using profile reader [%s]", file_name, str(e), profile_reader.getPluginId()) return { "status": "error", "message": catalog.i18nc("@info:status", "Failed to import profile from {0}: {1}", file_name, str(e))} if profile_or_list: # Success! name_seed = os.path.splitext(os.path.basename(file_name))[0] diff --git a/resources/materials/generic_abs.xml.fdm_material b/resources/materials/generic_abs.xml.fdm_material index ef2db0b7fd..fb24cd22f1 100644 --- a/resources/materials/generic_abs.xml.fdm_material +++ b/resources/materials/generic_abs.xml.fdm_material @@ -31,5 +31,13 @@ Generic ABS profile. Serves as an example file, data in this file is not correct + + + + + + yes + + diff --git a/resources/materials/generic_cpe.xml.fdm_material b/resources/materials/generic_cpe.xml.fdm_material index 1fa878e466..8472f95bd7 100644 --- a/resources/materials/generic_cpe.xml.fdm_material +++ b/resources/materials/generic_cpe.xml.fdm_material @@ -31,5 +31,13 @@ Generic CPE profile. Serves as an example file, data in this file is not correct + + + + + + yes + + diff --git a/resources/materials/generic_nylon.xml.fdm_material b/resources/materials/generic_nylon.xml.fdm_material index 7fdeef8645..c351215b8a 100644 --- a/resources/materials/generic_nylon.xml.fdm_material +++ b/resources/materials/generic_nylon.xml.fdm_material @@ -22,10 +22,16 @@ Generic Nylon profile. Serves as an example file, data in this file is not corre 60 175 + + + + + yes + + - yes diff --git a/resources/materials/generic_pla.xml.fdm_material b/resources/materials/generic_pla.xml.fdm_material index a98e0e469c..75b6271fe7 100644 --- a/resources/materials/generic_pla.xml.fdm_material +++ b/resources/materials/generic_pla.xml.fdm_material @@ -47,5 +47,13 @@ Generic PLA profile. Serves as an example file, data in this file is not correct 150 + + + + + + yes + + diff --git a/resources/materials/ultimaker_abs_black.xml.fdm_material b/resources/materials/ultimaker_abs_black.xml.fdm_material index 2993ae3133..da95f437c8 100644 --- a/resources/materials/ultimaker_abs_black.xml.fdm_material +++ b/resources/materials/ultimaker_abs_black.xml.fdm_material @@ -31,5 +31,12 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + diff --git a/resources/materials/ultimaker_abs_blue.xml.fdm_material b/resources/materials/ultimaker_abs_blue.xml.fdm_material index 4273ec8f9f..859bf74023 100644 --- a/resources/materials/ultimaker_abs_blue.xml.fdm_material +++ b/resources/materials/ultimaker_abs_blue.xml.fdm_material @@ -31,5 +31,12 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + diff --git a/resources/materials/ultimaker_abs_green.xml.fdm_material b/resources/materials/ultimaker_abs_green.xml.fdm_material index 87c178fb01..97e5828ff7 100644 --- a/resources/materials/ultimaker_abs_green.xml.fdm_material +++ b/resources/materials/ultimaker_abs_green.xml.fdm_material @@ -31,5 +31,12 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + diff --git a/resources/materials/ultimaker_abs_grey.xml.fdm_material b/resources/materials/ultimaker_abs_grey.xml.fdm_material index f8b67c7a41..4a02a309cd 100644 --- a/resources/materials/ultimaker_abs_grey.xml.fdm_material +++ b/resources/materials/ultimaker_abs_grey.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_abs_orange.xml.fdm_material b/resources/materials/ultimaker_abs_orange.xml.fdm_material index af3369ca97..b53ea76ab9 100644 --- a/resources/materials/ultimaker_abs_orange.xml.fdm_material +++ b/resources/materials/ultimaker_abs_orange.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_abs_pearl-gold.xml.fdm_material b/resources/materials/ultimaker_abs_pearl-gold.xml.fdm_material index 29bec52466..7c1e29d3e9 100644 --- a/resources/materials/ultimaker_abs_pearl-gold.xml.fdm_material +++ b/resources/materials/ultimaker_abs_pearl-gold.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_abs_red.xml.fdm_material b/resources/materials/ultimaker_abs_red.xml.fdm_material index 0d0dc3f098..1fb165d397 100644 --- a/resources/materials/ultimaker_abs_red.xml.fdm_material +++ b/resources/materials/ultimaker_abs_red.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_abs_silver-metallic.xml.fdm_material b/resources/materials/ultimaker_abs_silver-metallic.xml.fdm_material index fc7fb1c2b5..c8c5d7a6d7 100644 --- a/resources/materials/ultimaker_abs_silver-metallic.xml.fdm_material +++ b/resources/materials/ultimaker_abs_silver-metallic.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_abs_white.xml.fdm_material b/resources/materials/ultimaker_abs_white.xml.fdm_material index fbf4518c90..f0a0defc54 100644 --- a/resources/materials/ultimaker_abs_white.xml.fdm_material +++ b/resources/materials/ultimaker_abs_white.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_abs_yellow.xml.fdm_material b/resources/materials/ultimaker_abs_yellow.xml.fdm_material index 2b1a0a2784..2d0768b7c6 100644 --- a/resources/materials/ultimaker_abs_yellow.xml.fdm_material +++ b/resources/materials/ultimaker_abs_yellow.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated ABS profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_black.xml.fdm_material b/resources/materials/ultimaker_cpe_black.xml.fdm_material index 8e06ad7176..2fd8926016 100644 --- a/resources/materials/ultimaker_cpe_black.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_black.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_blue.xml.fdm_material b/resources/materials/ultimaker_cpe_blue.xml.fdm_material index f4675c7876..794e247755 100644 --- a/resources/materials/ultimaker_cpe_blue.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_blue.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_dark-grey.xml.fdm_material b/resources/materials/ultimaker_cpe_dark-grey.xml.fdm_material index aa22712d08..1a375fcb4b 100644 --- a/resources/materials/ultimaker_cpe_dark-grey.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_dark-grey.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_green.xml.fdm_material b/resources/materials/ultimaker_cpe_green.xml.fdm_material index f22425f658..766769e4ff 100644 --- a/resources/materials/ultimaker_cpe_green.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_green.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_light-grey.xml.fdm_material b/resources/materials/ultimaker_cpe_light-grey.xml.fdm_material index 1a996e9bf2..f8a12084ff 100644 --- a/resources/materials/ultimaker_cpe_light-grey.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_light-grey.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_red.xml.fdm_material b/resources/materials/ultimaker_cpe_red.xml.fdm_material index 77a9caa196..c9bc66af8e 100644 --- a/resources/materials/ultimaker_cpe_red.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_red.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_transparent.xml.fdm_material b/resources/materials/ultimaker_cpe_transparent.xml.fdm_material index ff3cbce64b..aa703ac1c3 100644 --- a/resources/materials/ultimaker_cpe_transparent.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_transparent.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_white.xml.fdm_material b/resources/materials/ultimaker_cpe_white.xml.fdm_material index bb72152d09..a473c441f5 100644 --- a/resources/materials/ultimaker_cpe_white.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_white.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_cpe_yellow.xml.fdm_material b/resources/materials/ultimaker_cpe_yellow.xml.fdm_material index 8fe699277d..d00520c948 100644 --- a/resources/materials/ultimaker_cpe_yellow.xml.fdm_material +++ b/resources/materials/ultimaker_cpe_yellow.xml.fdm_material @@ -31,5 +31,13 @@ Automatically generated CPE profile. Data in this file may not be not correct. + + + + + yes + + + diff --git a/resources/materials/ultimaker_nylon_black.xml.fdm_material b/resources/materials/ultimaker_nylon_black.xml.fdm_material index 4eed0b025c..0e4f0d5464 100644 --- a/resources/materials/ultimaker_nylon_black.xml.fdm_material +++ b/resources/materials/ultimaker_nylon_black.xml.fdm_material @@ -11,7 +11,7 @@ Generic Nylon profile. Serves as an example file, data in this file is not corre c64c2dbe-5691-4363-a7d9-66b2dc12837f 1 - #000000 + #27292b 1.14 @@ -21,5 +21,23 @@ Generic Nylon profile. Serves as an example file, data in this file is not corre 250 60 175 + + + + + + + + + + + + + + + yes + + + diff --git a/resources/materials/ultimaker_nylon_transparent.xml.fdm_material b/resources/materials/ultimaker_nylon_transparent.xml.fdm_material index 7d80a0568c..0c3e2a245c 100644 --- a/resources/materials/ultimaker_nylon_transparent.xml.fdm_material +++ b/resources/materials/ultimaker_nylon_transparent.xml.fdm_material @@ -11,7 +11,7 @@ Generic Nylon profile. Serves as an example file, data in this file is not corre e256615d-a04e-4f53-b311-114b90560af9 1 - #FFFFFF + #d0d0d0 1.14 @@ -21,5 +21,23 @@ Generic Nylon profile. Serves as an example file, data in this file is not corre 250 60 175 + + + + + + + + + + + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_black.xml.fdm_material b/resources/materials/ultimaker_pla_black.xml.fdm_material index 257f9b3235..d461cee3b4 100644 --- a/resources/materials/ultimaker_pla_black.xml.fdm_material +++ b/resources/materials/ultimaker_pla_black.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_blue.xml.fdm_material b/resources/materials/ultimaker_pla_blue.xml.fdm_material index e75b9fada1..e96469ded9 100644 --- a/resources/materials/ultimaker_pla_blue.xml.fdm_material +++ b/resources/materials/ultimaker_pla_blue.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_green.xml.fdm_material b/resources/materials/ultimaker_pla_green.xml.fdm_material index 41b015b216..0c17ed2455 100644 --- a/resources/materials/ultimaker_pla_green.xml.fdm_material +++ b/resources/materials/ultimaker_pla_green.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_magenta.xml.fdm_material b/resources/materials/ultimaker_pla_magenta.xml.fdm_material index 4f821337dc..8c25c4235f 100644 --- a/resources/materials/ultimaker_pla_magenta.xml.fdm_material +++ b/resources/materials/ultimaker_pla_magenta.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_orange.xml.fdm_material b/resources/materials/ultimaker_pla_orange.xml.fdm_material index 1cd028efad..2680850212 100644 --- a/resources/materials/ultimaker_pla_orange.xml.fdm_material +++ b/resources/materials/ultimaker_pla_orange.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_pearl-white.xml.fdm_material b/resources/materials/ultimaker_pla_pearl-white.xml.fdm_material index 7e23606f65..beb9bcbded 100644 --- a/resources/materials/ultimaker_pla_pearl-white.xml.fdm_material +++ b/resources/materials/ultimaker_pla_pearl-white.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_red.xml.fdm_material b/resources/materials/ultimaker_pla_red.xml.fdm_material index f4e381c815..44c3d76bbf 100644 --- a/resources/materials/ultimaker_pla_red.xml.fdm_material +++ b/resources/materials/ultimaker_pla_red.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_silver-metallic.xml.fdm_material b/resources/materials/ultimaker_pla_silver-metallic.xml.fdm_material index fd829abf6c..08b571cfc3 100644 --- a/resources/materials/ultimaker_pla_silver-metallic.xml.fdm_material +++ b/resources/materials/ultimaker_pla_silver-metallic.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_transparent.xml.fdm_material b/resources/materials/ultimaker_pla_transparent.xml.fdm_material index 773828b620..f323838855 100644 --- a/resources/materials/ultimaker_pla_transparent.xml.fdm_material +++ b/resources/materials/ultimaker_pla_transparent.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_white.xml.fdm_material b/resources/materials/ultimaker_pla_white.xml.fdm_material index acd5059cef..890ed3f965 100644 --- a/resources/materials/ultimaker_pla_white.xml.fdm_material +++ b/resources/materials/ultimaker_pla_white.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + yes + + + diff --git a/resources/materials/ultimaker_pla_yellow.xml.fdm_material b/resources/materials/ultimaker_pla_yellow.xml.fdm_material index 92d947e555..5004d7fff2 100644 --- a/resources/materials/ultimaker_pla_yellow.xml.fdm_material +++ b/resources/materials/ultimaker_pla_yellow.xml.fdm_material @@ -47,5 +47,13 @@ Automatically generated PLA profile. Data in this file may not be not correct. 150 + + + + + + yes + + From d308cd45bc518cd685cf4a62144cab82c66adb00 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 20 Oct 2016 16:16:33 +0200 Subject: [PATCH 020/114] Moved function out of MachineManager, changed "Valid" to "HaveErrors". CURA-2730 --- cura/Settings/MachineManager.py | 48 ++++++++-------------- plugins/CuraEngineBackend/StartSliceJob.py | 2 +- resources/qml/Actions.qml | 4 +- resources/qml/Preferences/ProfilesPage.qml | 2 +- 4 files changed, 22 insertions(+), 34 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 4d4deddb68..317b68fd47 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -34,7 +34,7 @@ class MachineManager(QObject): self.globalContainerChanged.connect(self.activeVariantChanged) self.globalContainerChanged.connect(self.activeQualityChanged) - self._stacks_valid = None + self._stacks_have_errors = None self._onGlobalContainerChanged() ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) @@ -233,10 +233,10 @@ class MachineManager(QObject): quality.nameChanged.connect(self._onQualityNameChanged) ## Update self._stacks_valid according to _checkStacksForErrors and emit if change. - def _updateStacksValid(self): - old_stacks_valid = self._stacks_valid - self._stacks_valid = self._checkStacksValid() - if old_stacks_valid != self._stacks_valid: + def _updateStacksHaveErrors(self): + old_stacks_have_errors = self._stacks_have_errors + self._stacks_have_errors = self._checkStacksHaveErrors() + if old_stacks_have_errors != self._stacks_have_errors: self.stacksValidationChanged.emit() def _onActiveExtruderStackChanged(self): @@ -254,7 +254,7 @@ class MachineManager(QObject): else: self._active_container_stack = self._global_container_stack - self._updateStacksValid() + self._updateStacksHaveErrors() if old_active_container_stack != self._active_container_stack: # Many methods and properties related to the active quality actually depend @@ -277,18 +277,18 @@ class MachineManager(QObject): self.activeStackValueChanged.emit() if property_name == "validationState": - if self._stacks_valid: + if not self._stacks_have_errors: # fast update, we only have to look at the current changed property if self._active_container_stack.getProperty(key, "settable_per_extruder"): changed_validation_state = self._active_container_stack.getProperty(key, property_name) else: changed_validation_state = self._global_container_stack.getProperty(key, property_name) if changed_validation_state in (UM.Settings.ValidatorState.Exception, UM.Settings.ValidatorState.MaximumError, UM.Settings.ValidatorState.MinimumError): - self._stacks_valid = False + self._stacks_have_errors = True self.stacksValidationChanged.emit() else: # Normal check - self._updateStacksValid() + self._updateStacksHaveErrors() @pyqtSlot(str) def setActiveMachine(self, stack_id): @@ -342,30 +342,18 @@ class MachineManager(QObject): def _createUniqueName(self, container_type, current_name, new_name, fallback_name): return UM.Settings.ContainerRegistry.getInstance().createUniqueName(container_type, current_name, new_name, fallback_name) - ## Convenience function to check if a stack is valid. - def _checkStackValid(self, stack): - if stack is None: + def _checkStacksHaveErrors(self): + if self._global_container_stack is not None and self._global_container_stack.hasErrors(): return True - for key in stack.getAllKeys(): - validation_state = stack.getProperty(key, "validationState") - if validation_state in (UM.Settings.ValidatorState.Exception, UM.Settings.ValidatorState.MaximumError, UM.Settings.ValidatorState.MinimumError): - return False - return True - - ## Return True if used stacks are valid. - def _checkStacksValid(self): - if not self._checkStackValid(self._global_container_stack): - return False - if self._global_container_stack is None: - return True + return False stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) for stack in stacks: - if not self._checkStackValid(stack): - return False + if stack.hasErrors(): + return True - return True + return False ## Remove all instances from the top instanceContainer (effectively removing all user-changed settings) @pyqtSlot() @@ -425,11 +413,11 @@ class MachineManager(QObject): container.sendPostponedEmits() ## Check if none of the stacks contain error states - # Note that the _stacks_valid is cached due to performance issues + # Note that the _stacks_have_errors is cached due to performance issues # Calling _checkStack(s)ForErrors on every change is simply too expensive @pyqtProperty(bool, notify = stacksValidationChanged) - def areStacksValid(self): - return bool(self._stacks_valid) + def stacksHaveErrors(self): + return bool(self._stacks_have_errors) @pyqtProperty(str, notify = activeStackChanged) def activeUserProfileId(self): diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index a610fe879a..650bc9e45d 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -75,7 +75,7 @@ class StartSliceJob(Job): return # Don't slice if there is a setting with an error value. - if not Application.getInstance().getMachineManager().areStacksValid: + if Application.getInstance().getMachineManager().stacksHaveErrors: self.setResult(StartJobResult.SettingError) return diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 8d3936fb9c..0ca775ad09 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -121,7 +121,7 @@ Item Action { id: updateProfileAction; - enabled: Cura.MachineManager.areStacksValid && Cura.MachineManager.hasUserSettings && !Cura.MachineManager.isReadOnly(Cura.MachineManager.activeQualityId) + enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && !Cura.MachineManager.isReadOnly(Cura.MachineManager.activeQualityId) text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings"); onTriggered: Cura.ContainerManager.updateQualityChanges(); } @@ -137,7 +137,7 @@ Item Action { id: addProfileAction; - enabled: Cura.MachineManager.areStacksValid && Cura.MachineManager.hasUserSettings + enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings..."); } diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index 3e1ee400a6..47d49849b4 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -62,7 +62,7 @@ UM.ManagementPage Button { text: catalog.i18nc("@label", "Create") - enabled: base.canCreateProfile() && Cura.MachineManager.areStacksValid + enabled: base.canCreateProfile() && !Cura.MachineManager.stacksHaveErrors visible: base.canCreateProfile() iconName: "list-add"; From 981907d26a582939afe023b0456460b4ba5ac511 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Fri, 21 Oct 2016 16:21:08 +0200 Subject: [PATCH 021/114] Revert "Revert "JSON feat: carve_multiple_volumes (CURA-2712)"" This reverts commit 2bff94ba9f6c0293b4f6c6a1fd79548422639a4d. reapplies 8ee22738bc75353aa9d12f1dcdf8bf41a3881602 --- resources/definitions/fdmprinter.def.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 6d0221a9c2..abe6a3e378 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3631,6 +3631,17 @@ "type": "bool", "default_value": false, "settable_per_mesh": true + }, + "carve_multiple_volumes": + { + "label": "Remove Mesh Intersection", + "description": "Remove areas where multiple objecs are overlapping with each other. This is may be used if merged dual material objects overlap with each other.", + "type": "bool", + "default_value": true, + "value": "machine_extruder_count > 1", + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": true } } }, From 8330b953e8c491de24614856b7e0c1567efce895 Mon Sep 17 00:00:00 2001 From: Chris Pearson Date: Sat, 22 Oct 2016 16:36:06 +0100 Subject: [PATCH 022/114] Add definition and mesh for Printrbot Play. --- resources/definitions/printrbot_play.def.json | 51 ++++++++++++++++++ resources/meshes/printrbot_play.stl | Bin 0 -> 5484 bytes 2 files changed, 51 insertions(+) create mode 100644 resources/definitions/printrbot_play.def.json create mode 100644 resources/meshes/printrbot_play.stl diff --git a/resources/definitions/printrbot_play.def.json b/resources/definitions/printrbot_play.def.json new file mode 100644 index 0000000000..bce67364f8 --- /dev/null +++ b/resources/definitions/printrbot_play.def.json @@ -0,0 +1,51 @@ +{ + "id": "printrbot_play", + "version": 2, + "name": "Printrbot Play", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Chris Pearson", + "manufacturer": "Printrbot", + "category": "Other", + "file_formats": "text/x-gcode", + "platform": "printrbot_play.stl" + }, + + "overrides": { + "machine_name": { "default_value": "Printrbot Play" }, + "machine_heated_bed": { "default_value": false }, + "machine_width": { "default_value": 100 }, + "machine_depth": { "default_value": 100 }, + "machine_height": { "default_value": 130 }, + "machine_center_is_zero": { "default_value": false }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "layer_height": { "default_value": 0.2 }, + "layer_height_0": { "default_value": 0.3 }, + "retraction_amount": { "default_value": 0.7 }, + "retraction_speed": { "default_value": 45}, + "adhesion_type": { "default_value": "skirt" }, + "machine_head_with_fans_polygon": { "default_value": [[-32,999],[37,999],[37,-32],[-32,-32]] }, + "gantry_height": { "default_value": 55 }, + "speed_print": { "default_value": 50 }, + "speed_travel": { "default_value": 55 }, + "machine_max_feedrate_x": {"default_value": 125}, + "machine_max_feedrate_y": {"default_value": 125}, + "machine_max_feedrate_z": { "default_value": 5 }, + "machine_max_acceleration_x": { "default_value": 2000 }, + "machine_max_acceleration_y": { "default_value": 2000 }, + "machine_max_acceleration_z": { "default_value": 30 }, + "machine_max_acceleration_e": { "default_value": 10000 }, + "machine_max_jerk_xy": { "default_value": 20 }, + "machine_max_jerk_z": { "default_value": 0.4 }, + "machine_max_jerk_e": { "default_value": 5.0 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_start_gcode": { + "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM106 ;start with the fan on for filament cooling\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG29 ;run auto bed leveling\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." + }, + "machine_end_gcode": { + "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" + } + } +} diff --git a/resources/meshes/printrbot_play.stl b/resources/meshes/printrbot_play.stl new file mode 100644 index 0000000000000000000000000000000000000000..fad1bbfc4a86dbb8cefc9190dbd8c49ec53d725c GIT binary patch literal 5484 zcmbuCzmH8p6vuBPp;J%@#r_4G4I0h9xP^uet#ZR=ZK)!eM8n!-YugBwMxqg&m8+0w z6c&}g!N1^q&zbMcckY`f5)Uuqo%5ORoF6lH?#){_#^SdHa0fa{^zqZ z48!Z!CpK??eRO2Q;b7Vthhcxx@uf@GKfXA=J6`zp%zqz}5^5o>1ja);`}@=8oyR+_ zp#;b9I+(V{uMeo9gj#w;Xngs3esTHS^&Cf?i!{96Z|{s}j`wmLN~onrgoe$(Fv>NQ z;22)(Z|_?UsiA~gdPHbgo)#AU2h>0bj^XwB;qG|y)YBY?5^CuYp<(r2SQTAE369}) zFzs3#PqKy*YUvT7VareU7r9F83>%}zY|iB#gEu}-z{}M4r&vitI9)UxF>1lizz@1Y z&V=8o;lqVm=EULipQbNFf<{Yhjr6kLCyrZ!kd zSpQ{0Evz8CRJ+8HB63~Tu0{UM^Mj1^BUcONC4r2*doatcX-5TVQ36@Gce+QYMG0i# z&HW#31zkfeN+2VL&%bvFwJ3qSy?k|C3Cj~c9>*kcOpJVWm#D=wgxHog=K)Y2nD1JCmOtW8RA3@`1T zAt|Aj9uXRtACz@VQi5Z6X-^MH3AOZy&_JFLJv5Zy7+$*5{I*mGwe*P4K)q2#XehyP z#8JD)?{J0Clc7h1hE0w6{lm_{e=z1Q;_s`8SV>EO4kE{~h+re@dRYEO2A~aBMR1q3Va2#>ejw$cXc~#ZYBSM3H8*#)fJm#%kf{x*H zzI1w0f@7Yw>@ocA-JX18XFNIs_b6zfg1CiI4;oxm_#1pg^*Mps;MVtdLcNe_+$;-G zR;3o?3O81GsWx{lR@SbnCF+}H8@bMfy)EybvdTP z5$9Dz8_)0@xzYW4C=oY660H9`S9M;?mA?;=Sfx?tZHag{06o{JgjLhuAmC;7_jiM3 zLM_&b7H#Rom62BsC9J3Y-JsF%?81Vl7c3xfa$;<~U}N4(+L~935?C#s=Z%Je-ic){ z^+FbS8z{NTHLn(A7x$fiUsX%gUMLz|)yUeSckvv|8a7@Ld9f&AdVY#_BQJz{VK*;D fo>x^ZmMeeC{QIhuu-ce*RC76UMyOu;OdQf5OWa_A literal 0 HcmV?d00001 From 9686c9db1cd594c0aed9b27f9ec61650d1678fc1 Mon Sep 17 00:00:00 2001 From: Chris Pearson Date: Sat, 22 Oct 2016 17:36:21 +0100 Subject: [PATCH 023/114] Add definition for Printrbot Play with heated bed upgrade. --- .../printrbot_play_heated.def.json | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 resources/definitions/printrbot_play_heated.def.json diff --git a/resources/definitions/printrbot_play_heated.def.json b/resources/definitions/printrbot_play_heated.def.json new file mode 100644 index 0000000000..878a4f358f --- /dev/null +++ b/resources/definitions/printrbot_play_heated.def.json @@ -0,0 +1,20 @@ +{ + "id": "printrbot_play_heated", + "version": 2, + "name": "Printrbot Play (Heated Bed)", + "inherits": "printrbot_play", + "metadata": { + "visible": true, + "author": "Chris Pearson", + "manufacturer": "Printrbot", + "category": "Other", + "file_formats": "text/x-gcode", + "platform": "" + }, + + "overrides": { + "machine_name": { "default_value": "Printrbot Play (Heated Bed)" }, + "machine_heated_bed": { "default_value": true }, + "machine_depth": { "default_value": 203 } + } +} From 5ce237502cd53b3374c887c5353bf353798fb676 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 23 Oct 2016 11:25:26 +0200 Subject: [PATCH 024/114] Fix "critical" error when starting with no active machine --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index fc5a083524..0afd1e5cd1 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -566,7 +566,7 @@ class MachineManager(QObject): quality = self._active_container_stack.findContainer(type = "quality") if quality: return Util.parseBool(quality.getMetaDataEntry("supported", True)) - return "" + return False ## Get the Quality ID associated with the currently active extruder # Note that this only returns the "quality", not the "quality_changes" From e82b2c0f80c0621b7c1c8afbccc293689ae76ccc Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 13 Oct 2016 20:54:26 +0200 Subject: [PATCH 025/114] Add support for global quality profiles Instead of using one of the extruder profiles as global quality, use proper global qualities. Contributes to CURA-2646 --- cura/QualityManager.py | 7 ++++--- cura/Settings/MachineManager.py | 9 +++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index 09e9d283ed..7354bfbb4f 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -82,8 +82,9 @@ class QualityManager: # \param material_containers (Optional) \type{List[ContainerInstance]} If nothing is specified then # the current set of selected materials is used. # \return the matching quality container \type{ContainerInstance} - def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None): - criteria = {"type": "quality"} + def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None, **kwargs): + criteria = kwargs + criteria["type"] = "quality" if quality_type: criteria["quality_type"] = quality_type result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) @@ -218,7 +219,7 @@ class QualityManager: result = [] for container in containers: # If the machine specifies we should filter by material, exclude containers that do not match any active material. - if filter_by_material and container.getMetaDataEntry("material") not in material_ids: + if filter_by_material and container.getMetaDataEntry("material") not in material_ids and not "global_quality" in kwargs: continue result.append(container) return result diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 326a011562..359aea4268 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -769,8 +769,13 @@ class MachineManager(QObject): if extruder_stacks: # Add an extra entry for the global stack. - result.append({"stack": global_container_stack, "quality": result[0]["quality"], - "quality_changes": empty_quality_changes}) + global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [], global_quality = "True") + + if not global_quality: + global_quality = self._empty_quality_container + + result.append({"stack": global_container_stack, "quality": global_quality, "quality_changes": empty_quality_changes}) + return result ## Determine the quality and quality changes settings for the current machine for a quality changes name. From e1dafc82887c50ed046e3f1fefc1ad48564ce36f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Oct 2016 13:23:07 +0200 Subject: [PATCH 026/114] Also properly set global profile when changing quality_changes profiles Contributes to CURA-2652 --- cura/Settings/MachineManager.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 359aea4268..d33bf636d3 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -819,9 +819,10 @@ class MachineManager(QObject): result.append({"stack": stack, "quality": quality, "quality_changes": quality_changes}) if extruder_stacks: - # Duplicate the quality from the 1st extruder into the global stack. If anyone - # then looks in the global stack, they should get a reasonable view. - result.append({"stack": global_container_stack, "quality": result[0]["quality"], "quality_changes": global_quality_changes}) + global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material], global_quality = "True") + if not global_quality: + global_quality = self._empty_quality_container + result.append({"stack": global_container_stack, "quality": global_quality, "quality_changes": global_quality_changes}) else: result.append({"stack": global_container_stack, "quality": global_quality, "quality_changes": global_quality_changes}) From 78ac4ef999b9bf4d9f011a9f7efa8a13dc1d8309 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Oct 2016 13:26:55 +0200 Subject: [PATCH 027/114] Set the global variant and material to empty for multi-extrusion machines For multi-extrusion machines, we do not want variant or material profiles in the stack, because these are extruder specific and may cause wrong values to be used for extruders that did not specify a value in the extruder. Contributes to CURA-2652 --- cura/Settings/MachineManager.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index d33bf636d3..ab3701c1eb 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -225,11 +225,26 @@ class MachineManager(QObject): self._global_container_stack.nameChanged.connect(self._onMachineNameChanged) self._global_container_stack.containersChanged.connect(self._onInstanceContainersChanged) self._global_container_stack.propertyChanged.connect(self._onPropertyChanged) - material = self._global_container_stack.findContainer({"type": "material"}) - material.nameChanged.connect(self._onMaterialNameChanged) - quality = self._global_container_stack.findContainer({"type": "quality"}) - quality.nameChanged.connect(self._onQualityNameChanged) + if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: + # For multi-extrusion machines, we do not want variant or material profiles in the stack, + # because these are extruder specific and may cause wrong values to be used for extruders + # that did not specify a value in the extruder. + global_variant = self._global_container_stack.findContainer(type = "variant") + if global_variant != self._empty_variant_container: + self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_variant), self._empty_variant_container) + + global_material = self._global_container_stack.findContainer(type = "material") + if global_material != self._empty_material_container: + self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_material), self._empty_material_container) + + else: + material = self._global_container_stack.findContainer({"type": "material"}) + material.nameChanged.connect(self._onMaterialNameChanged) + + quality = self._global_container_stack.findContainer({"type": "quality"}) + quality.nameChanged.connect(self._onQualityNameChanged) + def _onActiveExtruderStackChanged(self): self.blurSettings.emit() # Ensure no-one has focus. From 2c2bf7823f773c0dcea7342d8598b71989228866 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Oct 2016 15:21:11 +0200 Subject: [PATCH 028/114] Account for empty material when switching quality changes Contributes to CURA-2652 --- cura/Settings/MachineManager.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ab3701c1eb..8ba711a5c0 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -813,7 +813,10 @@ class MachineManager(QObject): # For the global stack, find a quality which matches the quality_type in # the quality changes profile and also satisfies any material constraints. quality_type = global_quality_changes.getMetaDataEntry("quality_type") - global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) + if global_container_stack.getProperty("machine_extruder_count", "value") > 1: + global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [], global_quality = True) + else: + global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) # Find the values for each extruder. extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() From df78bc47af4ca68047d1dee4b8e7fa362a3cfe06 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 23 Oct 2016 11:25:26 +0200 Subject: [PATCH 029/114] Fix "critical" error when starting with no active machine --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 326a011562..08af479211 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -566,7 +566,7 @@ class MachineManager(QObject): quality = self._active_container_stack.findContainer(type = "quality") if quality: return Util.parseBool(quality.getMetaDataEntry("supported", True)) - return "" + return False ## Get the Quality ID associated with the currently active extruder # Note that this only returns the "quality", not the "quality_changes" From 588f49fa5f31802bd643916e1a918235e6cfa9a3 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Oct 2016 11:19:49 +0200 Subject: [PATCH 030/114] Add global profiles for UM3 so this can be tested without dependencies Contributes to CURA-2652 --- .../ultimaker3/um3_global_Draft_Quality.inst.cfg | 13 +++++++++++++ .../ultimaker3/um3_global_Fast_Quality.inst.cfg | 13 +++++++++++++ .../ultimaker3/um3_global_High_Quality.inst.cfg | 13 +++++++++++++ .../ultimaker3/um3_global_Normal_Quality.inst.cfg | 13 +++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg create mode 100644 resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg create mode 100644 resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg create mode 100644 resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg diff --git a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg new file mode 100644 index 0000000000..96e25c6ad8 --- /dev/null +++ b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 2 +name = Draft Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +global_quality = True +weight = -2 + +[values] +layer_height = 0.2 diff --git a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg new file mode 100644 index 0000000000..6b1c3c4208 --- /dev/null +++ b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 2 +name = Fast Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +global_quality = True +weight = -1 + +[values] +layer_height = 0.15 diff --git a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg new file mode 100644 index 0000000000..af0741ff88 --- /dev/null +++ b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = high +global_quality = True +weight = 0 + +[values] +layer_height = 0.06 diff --git a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..a875b0f1ce --- /dev/null +++ b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +global_quality = True +weight = 0 + +[values] +layer_height = 0.1 From f952b45a6221b80166f4b8da73c804c864182749 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Oct 2016 13:36:31 +0200 Subject: [PATCH 031/114] Use the machine/extruder ID as base for duplicated profile ID Instead of using the ID of the duplicated container, which would cause the profile ID to be the old ID with the new ID appended. Fixes CURA-2782 --- cura/Settings/ContainerManager.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 7f2555af03..f94f628686 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -650,7 +650,10 @@ class ContainerManager(QObject): new_change_instances = [] for container in QualityManager.getInstance().findQualityChangesByName(quality_changes_name, machine_definition): - new_unique_id = self._createUniqueId(container.getId(), base_name) + base_id = container.getMetaDataEntry("extruder") + if not base_id: + base_id = container.getDefinition().getId() + new_unique_id = self._createUniqueId(base_id, base_name) new_container = container.duplicate(new_unique_id, base_name) new_change_instances.append(new_container) self._container_registry.addContainer(new_container) @@ -788,6 +791,7 @@ class ContainerManager(QObject): # Create a new quality_changes container for the quality. quality_changes = UM.Settings.InstanceContainer(self._createUniqueId(base_id, new_name)) + print(quality_changes.getId()) quality_changes.setName(new_name) quality_changes.addMetaDataEntry("type", "quality_changes") quality_changes.addMetaDataEntry("quality_type", quality_container.getMetaDataEntry("quality_type")) From 7f1b060ef90fb42bec8e2a4614552a8dc217f91b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 24 Oct 2016 13:50:49 +0200 Subject: [PATCH 032/114] SettingInstanceManager now also watches containerchanged of extruder stacks CURA-2674 --- cura/Settings/SettingInheritanceManager.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 84002128c7..b110febd87 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -56,9 +56,11 @@ class SettingInheritanceManager(QObject): if new_active_stack != self._active_container_stack: # Check if changed if self._active_container_stack: # Disconnect signal from old container (if any) self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged) + self._active_container_stack.containersChanged.disconnect(self._onContainersChanged) self._active_container_stack = new_active_stack self._active_container_stack.propertyChanged.connect(self._onPropertyChanged) + self._active_container_stack.containersChanged.connect(self._onContainersChanged) self._update() # Ensure that the settings_with_inheritance_warning list is populated. def _onPropertyChanged(self, key, property_name): @@ -178,7 +180,9 @@ class SettingInheritanceManager(QObject): self._onActiveExtruderChanged() def _onContainersChanged(self, container): - self._onActiveExtruderChanged() + # TODO: Multiple container changes in sequence now cause quite a few recalculations. + # This isn't that big of an issue, but it could be in the future. + self._update() @staticmethod def createSettingInheritanceManager(engine=None, script_engine=None): From be0e48664a4d99d89131845263aaece122c73247 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Oct 2016 14:24:02 +0200 Subject: [PATCH 033/114] Remove manually specified utf-8 encoding Since SaveFile now defaults to UTF-8 --- cura/CuraApplication.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 7c45408488..ec52c7aea1 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -382,7 +382,7 @@ class CuraApplication(QtApplication): if path: instance.setPath(path) - with SaveFile(path, "wt", -1, "utf-8") as f: + with SaveFile(path, "wt") as f: f.write(data) for stack in ContainerRegistry.getInstance().findContainerStacks(): @@ -409,7 +409,7 @@ class CuraApplication(QtApplication): path = Resources.getStoragePath(self.ResourceTypes.ExtruderStack, file_name) if path: stack.setPath(path) - with SaveFile(path, "wt", -1, "utf-8") as f: + with SaveFile(path, "wt") as f: f.write(data) From bfec96f58425517cb89fa91d4c41a085fa515c70 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Oct 2016 14:24:49 +0200 Subject: [PATCH 034/114] Set encoding to utf-8 when writing files Since we assume utf-8 in a lot of places. Contributes to CURA-2692 --- .../RemovableDriveOutputDevice/RemovableDriveOutputDevice.py | 2 +- plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py index 8b6dce8292..3bd957ec5e 100644 --- a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py +++ b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py @@ -67,7 +67,7 @@ class RemovableDriveOutputDevice(OutputDevice): try: Logger.log("d", "Writing to %s", file_name) # Using buffering greatly reduces the write time for many lines of gcode - self._stream = open(file_name, "wt", buffering = 1) + self._stream = open(file_name, "wt", buffering = 1, encoding = "utf-8") job = WriteMeshJob(writer, self._stream, node, MeshWriter.OutputMode.TextMode) job.setFileName(file_name) job.progress.connect(self._onProgress) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py index 2053b8acf9..4491a00d3d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py @@ -111,7 +111,7 @@ class MachineInstance: user_profile_file = os.path.join(user_storage, urllib.parse.quote_plus(self._name) + "_current_settings.inst.cfg") if not os.path.exists(user_storage): os.makedirs(user_storage) - with open(user_profile_file, "w") as file_handle: + with open(user_profile_file, "w", encoding = "utf-8") as file_handle: user_profile.write(file_handle) version_upgrade_manager.upgradeExtraFile(user_storage, urllib.parse.quote_plus(self._name), "user") From c0824260a3c94d579a23d558207995c03ea93e6b Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 24 Oct 2016 14:45:26 +0200 Subject: [PATCH 035/114] Fix homing UM2/UM2+ when printing with RepRap flavor --- resources/definitions/ultimaker2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json index 79c89ab068..c26a3a8856 100644 --- a/resources/definitions/ultimaker2.def.json +++ b/resources/definitions/ultimaker2.def.json @@ -21,7 +21,7 @@ "machine_name": { "default_value": "Ultimaker 2" }, "machine_start_gcode" : { "default_value": "", - "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG1 X10 Y0 F4000;move X/Y to min endstops\\nG28 Z0 ;move Z to bottom endstops\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\"" + "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG28 Z0 ;move Z to bottom endstops\\nG28 X0 Y0 ;move X/Y to endstops\\nG1 X15 Y0 F4000 ;move X/Y to front of printer\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\"" }, "machine_end_gcode" : { "default_value": "", From bdaa4a5a6dde66f152d2012625ca42fb881a7058 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Oct 2016 17:04:30 +0200 Subject: [PATCH 036/114] Add a method to get overrides for a specified (extruder)stack Since the main getOverrides method only accounts for the active extruder and we sometimes need to check other extruders in case of limit_to_extruder. Contributes to CURA-2752 --- cura/Settings/SettingInheritanceManager.py | 29 +++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index b110febd87..68891c7f4f 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -38,6 +38,22 @@ class SettingInheritanceManager(QObject): result.append(key) return result + @pyqtSlot(str, str, result = "QStringList") + def getOverridesForExtruder(self, key, extruder): + extruder = cura.Settings.ExtruderManager.getInstance().getExtruderStack(extruder) + if not extruder: + return [] + + definitions = self._global_container_stack.getBottom().findDefinitions(key=key) + if not definitions: + return + result = [] + for key in definitions[0].getAllKeys(): + if self._settingIsOverwritingInheritance(key, extruder): + result.append(key) + + return result + @pyqtSlot(str) def manualRemoveOverride(self, key): if key in self._settings_with_inheritance_warning: @@ -115,22 +131,23 @@ class SettingInheritanceManager(QObject): return self._settings_with_inheritance_warning ## Check if a setting has an inheritance function that is overwritten - def _settingIsOverwritingInheritance(self, key): + def _settingIsOverwritingInheritance(self, key, stack = None): has_setting_function = False - stack = self._active_container_stack + if not stack: + stack = self._active_container_stack containers = [] ## Check if the setting has a user state. If not, it is never overwritten. - has_user_state = self._active_container_stack.getProperty(key, "state") == UM.Settings.InstanceState.User + has_user_state = stack.getProperty(key, "state") == UM.Settings.InstanceState.User if not has_user_state: return False ## If a setting is not enabled, don't label it as overwritten (It's never visible anyway). - if not self._active_container_stack.getProperty(key, "enabled"): + if not stack.getProperty(key, "enabled"): return False ## Also check if the top container is not a setting function (this happens if the inheritance is restored). - if isinstance(self._active_container_stack.getTop().getProperty(key, "value"), UM.Settings.SettingFunction): + if isinstance(stack.getTop().getProperty(key, "value"), UM.Settings.SettingFunction): return False ## Mash all containers for all the stacks together. @@ -186,4 +203,4 @@ class SettingInheritanceManager(QObject): @staticmethod def createSettingInheritanceManager(engine=None, script_engine=None): - return SettingInheritanceManager() \ No newline at end of file + return SettingInheritanceManager() From 8ce81fec9f0e11c2416eeff6b5da3a587380deb0 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Oct 2016 17:06:48 +0200 Subject: [PATCH 037/114] Expand logic for showing the inherit button in SettingItem Hide it if the revert button is visible and make the overrides check limit_to_extruder in addition to the active stack. Contributes to CURA-2752 --- resources/qml/Settings/SettingItem.qml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index f399e7fe04..f7040976d5 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -194,10 +194,27 @@ Item { // Inherit button needs to be visible if; // - User made changes that override any loaded settings // - This setting item uses inherit button at all + // - The revert button is not visible. // - The type of the value of any deeper container is an "object" (eg; is a function) visible: { - return showInheritButton && Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; + if(!base.showInheritButton) + { + return false; + } + + if(revertButton.visible) + { + // The revert button already indicates there is a custom value for this setting, making this button superfluous. + return false; + } + + if(globalPropertyProvider.properties.limit_to_extruder == null || globalPropertyProvider.properties.limit_to_extruder == -1) + { + return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; + } + + return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, globalPropertyProvider.properties.limit_to_extruder).indexOf(definition.key) >= 0; } height: parent.height; From 3e3e6e6b1b93e915cce7daa8e8f2fb61e98b2cb5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 24 Oct 2016 17:39:27 +0200 Subject: [PATCH 038/114] Fix call to _configureProfile The footprint of the function changed, but the call wasn't updated, apparently. I pulled new_name up from one of the if-statements since they need to be computed for both branches now (and they are the same). Contributes to issue CURA-2785. --- cura/Settings/CuraContainerRegistry.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 86fc5335be..41772fb912 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -169,16 +169,15 @@ class CuraContainerRegistry(ContainerRegistry): return { "status": "error", "message": catalog.i18nc("@info:status", "Failed to import profile from {0}: {1}", file_name, str(e))} if profile_or_list: # Success! name_seed = os.path.splitext(os.path.basename(file_name))[0] + new_name = self.uniqueName(name_seed) if type(profile_or_list) is not list: profile = profile_or_list - self._configureProfile(profile, name_seed) + self._configureProfile(profile, name_seed, new_name) return { "status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile.getName()) } else: profile_index = -1 global_profile = None - new_name = self.uniqueName(name_seed) - for profile in profile_or_list: if profile_index >= 0: if len(machine_extruders) > profile_index: From ecbe4b264ad7c782aceb8cea7d952b56a246c339 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 25 Oct 2016 11:02:41 +0200 Subject: [PATCH 039/114] Added handling for key not found in extruder map --- cura/Settings/ExtruderManager.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index d0da064f92..0236f158aa 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -50,8 +50,11 @@ class ExtruderManager(QObject): @pyqtProperty(int, notify = extrudersChanged) def extruderCount(self): if not UM.Application.getInstance().getGlobalContainerStack(): - return 0 # No active machine, so no extruders. - return len(self._extruder_trains[UM.Application.getInstance().getGlobalContainerStack().getId()]) + return 0 # No active machine, so no extruders. + try: + return len(self._extruder_trains[UM.Application.getInstance().getGlobalContainerStack().getId()]) + except KeyError: + return 0 @pyqtProperty("QVariantMap", notify=extrudersChanged) def extruderIds(self): From 844b9729f4f2f8e8ec1e0fea45c1348b8610b73d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 25 Oct 2016 11:16:54 +0200 Subject: [PATCH 040/114] Fixed critical errors when first adding UM3 --- cura/Settings/ProfilesModel.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 6f17349edd..7d39d1c220 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -80,7 +80,10 @@ class ProfilesModel(InstanceContainersModel): quality = quality_result["quality"] break else: #No global container stack in the results: - quality = quality_results[0]["quality"] #Take any of the extruders. + if quality_results: + quality = quality_results[0]["quality"] #Take any of the extruders. + else: + quality = None if quality and quality.hasProperty("layer_height", "value"): item["layer_height"] = str(quality.getProperty("layer_height", "value")) + unit yield item From e6c68bcdc95aa13dca37697fb37865bf28792668 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 11:28:15 +0200 Subject: [PATCH 041/114] Add fallback if no unit is known for layer_height If there is no unit known, it is interpreted as there being no unit. There is currently mm, but if we changed that it is probably on purpose so we write no unit. Contributes to issue CURA-2723. --- cura/Settings/ProfilesModel.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 7d39d1c220..2ad9813e37 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -56,6 +56,8 @@ class ProfilesModel(InstanceContainersModel): machine_manager = Application.getInstance().getMachineManager() unit = global_container_stack.getBottom().getProperty("layer_height", "unit") + if not unit: + unit = "" for item in super()._recomputeItems(): profile = container_registry.findContainers(id = item["id"]) From bef3666a8830501df5c43f6fbd9e25a832381854 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Oct 2016 11:38:22 +0200 Subject: [PATCH 042/114] Still show the inherit button even when the revert is visible It was not a bug like I assumed Contributes to CURA-2752 --- resources/qml/Settings/SettingItem.qml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index f7040976d5..f093150597 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -194,7 +194,6 @@ Item { // Inherit button needs to be visible if; // - User made changes that override any loaded settings // - This setting item uses inherit button at all - // - The revert button is not visible. // - The type of the value of any deeper container is an "object" (eg; is a function) visible: { @@ -203,12 +202,6 @@ Item { return false; } - if(revertButton.visible) - { - // The revert button already indicates there is a custom value for this setting, making this button superfluous. - return false; - } - if(globalPropertyProvider.properties.limit_to_extruder == null || globalPropertyProvider.properties.limit_to_extruder == -1) { return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; From 29b357894dd157919cdf0711d926e80a69751277 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 24 Oct 2016 14:45:26 +0200 Subject: [PATCH 043/114] Fix homing UM2/UM2+ when printing with RepRap flavor --- resources/definitions/ultimaker2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json index 79c89ab068..c26a3a8856 100644 --- a/resources/definitions/ultimaker2.def.json +++ b/resources/definitions/ultimaker2.def.json @@ -21,7 +21,7 @@ "machine_name": { "default_value": "Ultimaker 2" }, "machine_start_gcode" : { "default_value": "", - "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG1 X10 Y0 F4000;move X/Y to min endstops\\nG28 Z0 ;move Z to bottom endstops\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\"" + "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG28 Z0 ;move Z to bottom endstops\\nG28 X0 Y0 ;move X/Y to endstops\\nG1 X15 Y0 F4000 ;move X/Y to front of printer\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\"" }, "machine_end_gcode" : { "default_value": "", From 35f43df2f6e9f02646b2e7b73b2ca816b13e6499 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:06:30 +0200 Subject: [PATCH 044/114] Make generic quality profiles global This way they will also be put in the global profile. Contributes to issue CURA-2723. --- resources/quality/high.inst.cfg | 1 + resources/quality/low.inst.cfg | 1 + resources/quality/normal.inst.cfg | 1 + 3 files changed, 3 insertions(+) diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 9e3e9f1f67..921dae9ae0 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -6,6 +6,7 @@ definition = fdmprinter [metadata] type = quality quality_type = high +global_quality = True weight = 1 [values] diff --git a/resources/quality/low.inst.cfg b/resources/quality/low.inst.cfg index 787325c27c..82d4e0d327 100644 --- a/resources/quality/low.inst.cfg +++ b/resources/quality/low.inst.cfg @@ -6,6 +6,7 @@ definition = fdmprinter [metadata] type = quality quality_type = low +global_quality = True weight = -1 [values] diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index e940bbda35..26da3b48da 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -6,6 +6,7 @@ definition = fdmprinter [metadata] type = quality quality_type = normal +global_quality = True weight = 0 [values] From b0d6d7034ab733613069299b4809e8a254c85ba5 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Oct 2016 13:10:03 +0200 Subject: [PATCH 045/114] Ensure we re-evaluate the inheritance icon binding when it changes Contributes to CURA-2752 --- resources/qml/Settings/SettingItem.qml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index f093150597..881cea39d2 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -202,6 +202,13 @@ Item { return false; } + if(!propertyProvider.properties.enabled) + { + // Note: This is not strictly necessary since a disabled setting is hidden anyway. + // But this will cause the binding to be re-evaluated when the enabled property changes. + return false; + } + if(globalPropertyProvider.properties.limit_to_extruder == null || globalPropertyProvider.properties.limit_to_extruder == -1) { return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; From 06521d7c49c83ea3d77cd996528e90b12eeef50f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:16:41 +0200 Subject: [PATCH 046/114] Cache global container stack We'll need it multiple times. Could be a bit faster. Contributes to issue CURA-2785. --- plugins/LegacyProfileReader/LegacyProfileReader.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 5105bf71da..96a9d96902 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -66,8 +66,9 @@ class LegacyProfileReader(ProfileReader): def read(self, file_name): if file_name.split(".")[-1] != "ini": return None + global_container_stack = Application.getInstance().getGlobalContainerStack() - multi_extrusion = Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1 + multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1 if multi_extrusion: Logger.log("e", "Unable to import legacy profile %s. Multi extrusion is not supported", file_name) raise Exception("Unable to import legacy profile. Multi extrusion is not supported") @@ -117,7 +118,7 @@ class LegacyProfileReader(ProfileReader): if "translation" not in dict_of_doom: Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?") return None - current_printer_definition = Application.getInstance().getGlobalContainerStack().getBottom() + current_printer_definition = global_container_stack.getBottom() profile.setDefinition(current_printer_definition) for new_setting in dict_of_doom["translation"]: #Evaluate all new settings that would get a value from the translations. old_setting_expression = dict_of_doom["translation"][new_setting] From d43901577397cdd616a4f42e5a5b3b0e3781c3ef Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:20:02 +0200 Subject: [PATCH 047/114] Abort importing profile if we have no global container stack You shouldn't be able to trigger it anyway, but if you do, it'll give a proper error that the import failed. Contributes to issue CURA-2785. --- plugins/LegacyProfileReader/LegacyProfileReader.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 96a9d96902..8d4afdae7a 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -67,6 +67,8 @@ class LegacyProfileReader(ProfileReader): if file_name.split(".")[-1] != "ini": return None global_container_stack = Application.getInstance().getGlobalContainerStack() + if not global_container_stack: + return None multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1 if multi_extrusion: From aef0880a1f3509c75de447054ee1fb081f6c8943 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:24:56 +0200 Subject: [PATCH 048/114] Fix setting the quality_type of imported profile The metadata entry was renamed a while ago. Contributes to issue CURA-2785. --- plugins/LegacyProfileReader/LegacyProfileReader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 8d4afdae7a..70a19f02ee 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -140,5 +140,5 @@ class LegacyProfileReader(ProfileReader): Logger.log("i", "A legacy profile was imported but everything evaluates to the defaults, creating an empty profile.") profile.setDirty(True) profile.addMetaDataEntry("type", "quality_changes") - profile.addMetaDataEntry("quality", "normal") + profile.addMetaDataEntry("quality_type", "normal") return profile \ No newline at end of file From 30e14478af9cd141ab6c08e609d73cf62ea99408 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Oct 2016 15:40:52 +0200 Subject: [PATCH 049/114] Replace quality profiles with optimised versions of Ruben's script With the global quality profiles merged this now works properly. CURA-2645 --- resources/definitions/ultimaker3.def.json | 93 +++++++++- .../um3_aa0.4_ABS_Draft_Print.inst.cfg | 148 +++------------- .../um3_aa0.4_ABS_Fast_Print.inst.cfg | 148 +++------------- .../um3_aa0.4_ABS_High_Quality.inst.cfg | 146 +++------------- .../um3_aa0.4_ABS_Normal_Quality.inst.cfg | 146 +++------------- .../um3_aa0.4_CPE_Draft_Print.inst.cfg | 147 +++------------- .../um3_aa0.4_CPE_Fast_Print.inst.cfg | 146 +++------------- .../um3_aa0.4_CPE_High_Quality.inst.cfg | 146 +++------------- .../um3_aa0.4_CPE_Normal_Quality.inst.cfg | 146 +++------------- .../um3_aa0.4_Nylon_Draft_Print.inst.cfg | 161 ++++-------------- .../um3_aa0.4_Nylon_Fast_Print.inst.cfg | 159 ++++------------- .../um3_aa0.4_Nylon_High_Quality.inst.cfg | 158 ++++------------- .../um3_aa0.4_Nylon_Normal_Quality.inst.cfg | 158 ++++------------- .../um3_aa0.4_PLA_Draft_Print.inst.cfg | 149 +++------------- .../um3_aa0.4_PLA_Fast_Print.inst.cfg | 148 +++------------- .../um3_aa0.4_PLA_High_Quality.inst.cfg | 149 +++------------- .../um3_aa0.4_PLA_Normal_Quality.inst.cfg | 147 +++------------- ...3_aa0.4_PVA_Not_Supported_Quality.inst.cfg | 113 ------------ ...3_bb0.4_ABS_Not_Supported_Quality.inst.cfg | 113 ------------ ...3_bb0.4_CPE_Not_Supported_Quality.inst.cfg | 113 ------------ ...bb0.4_Nylon_Not_Supported_Quality.inst.cfg | 113 ------------ ...3_bb0.4_PLA_Not_Supported_Quality.inst.cfg | 114 ------------- .../um3_bb0.4_PVA_Draft_Print.inst.cfg | 142 ++------------- .../um3_bb0.4_PVA_Fast_Print.inst.cfg | 141 ++------------- .../um3_bb0.4_PVA_High_Quality.inst.cfg | 141 ++------------- .../um3_bb0.4_PVA_Normal_Quality.inst.cfg | 141 ++------------- resources/variants/ultimaker3_aa04.inst.cfg | 34 +++- resources/variants/ultimaker3_bb04.inst.cfg | 16 +- .../ultimaker3_extended_aa04.inst.cfg | 31 ++++ .../ultimaker3_extended_bb04.inst.cfg | 16 ++ 30 files changed, 644 insertions(+), 3079 deletions(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 390d9e51a9..8be8751d68 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -38,8 +38,8 @@ "machine_depth": { "default_value": 215 }, "machine_height": { "default_value": 200 }, "machine_heated_bed": { "default_value": true }, - "machine_nozzle_heat_up_speed": { "default_value": 0.8 }, - "machine_nozzle_cool_down_speed": { "default_value": 1 }, + "machine_nozzle_heat_up_speed": { "default_value": 1.4 }, + "machine_nozzle_cool_down_speed": { "default_value": 0.8 }, "machine_head_with_fans_polygon": { "default_value": @@ -50,14 +50,12 @@ [ 60, -30 ] ] }, - "machine_center_is_zero": { "default_value": false }, "machine_gcode_flavor": { "default_value": "Griffin" }, "machine_max_feedrate_x": { "default_value": 300 }, "machine_max_feedrate_y": { "default_value": 300 }, "machine_max_feedrate_z": { "default_value": 40 }, "machine_acceleration": { "default_value": 3000 }, "gantry_height": { "default_value": 60 }, - "machine_use_extruder_offset_to_offset_coords": { "default_value": true }, "machine_disallowed_areas": { "default_value": [ [[-91.5, -115], [-115, -115], [-115, -104.6], [-91.5, -104.6]], [[-99.5, -104.6], [-115, -104.6], [-115, 104.6], [-99.5, 104.6]], @@ -69,16 +67,93 @@ [[100.5, -54.5], [100.5, 99.3], [115, 99.3], [115, -54.5]], [[77, 99.3], [77, 115], [115, 115], [115, 99.3]] ]}, - "machine_show_variants": { "default_value": true }, "machine_extruder_count": { "default_value": 2 }, - "print_sequence": {"enabled": false}, "extruder_prime_pos_abs": { "default_value": true }, - "extruder_prime_pos_x": { "enabled": false }, - "extruder_prime_pos_y": { "enabled": false }, "machine_start_gcode": { "default_value": "" }, "machine_end_gcode": { "default_value": "" }, "prime_tower_position_x": { "default_value": 175 }, "prime_tower_position_y": { "default_value": 179 }, - "speed_prime_tower": { "default_value": 30 } + + "extruder_prime_pos_x": { "enabled": false }, + "extruder_prime_pos_y": { "enabled": false }, + "print_sequence": {"enabled": false}, + + "acceleration_enabled": { "value": "True" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_print": { "value": "4000" }, + "acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_support_interface": { "value": "acceleration_topbottom" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 500 / 4000)" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 4000)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 500 / 1000)" }, + "brim_width": { "value": "3" }, + "cool_fan_full_at_height": { "value": "layer_height_0 + 4 * layer_height" }, + "cool_fan_speed": { "value": "50" }, + "cool_fan_speed_max": { "value": "100" }, + "cool_min_speed": { "value": "5" }, + "infill_line_width": { "value": "round(line_width * 0.5 / 0.35, 2)" }, + "infill_overlap": { "value": "0" }, + "infill_pattern": { "value": "'triangles'" }, + "infill_wipe_dist": { "value": "0" }, + "jerk_enabled": { "value": "True" }, + "jerk_layer_0": { "value": "jerk_topbottom" }, + "jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_print": { "value": "25" }, + "jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_support_interface": { "value": "jerk_topbottom" }, + "jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" }, + "jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" }, + "jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" }, + "layer_height_0": { "value": "round(machine_nozzle_size / 1.5, 2)" }, + "line_width": { "value": "machine_nozzle_size * 0.875" }, + "machine_min_cool_heat_time_window": { "value": "15" }, + "material_print_temperature": { "value": "200" }, + "material_standby_temperature": { "value": "100" }, + "multiple_mesh_overlap": { "value": "0" }, + "prime_tower_enable": { "value": "True" }, + "raft_airgap": { "value": "0" }, + "raft_base_speed": { "value": "20" }, + "raft_base_thickness": { "value": "0.3" }, + "raft_interface_line_spacing": { "value": "0.5" }, + "raft_interface_line_width": { "value": "0.5" }, + "raft_interface_speed": { "value": "20" }, + "raft_interface_thickness": { "value": "0.2" }, + "raft_jerk": { "value": "jerk_layer_0" }, + "raft_margin": { "value": "10" }, + "raft_speed": { "value": "25" }, + "raft_surface_layers": { "value": "1" }, + "retraction_amount": { "value": "2" }, + "retraction_count_max": { "value": "10" }, + "retraction_extrusion_window": { "value": "1" }, + "retraction_hop": { "value": "2" }, + "retraction_hop_enabled": { "value": "True" }, + "retraction_hop_only_when_collides": { "value": "True" }, + "retraction_min_travel": { "value": "5" }, + "retraction_prime_speed": { "value": "15" }, + "skin_overlap": { "value": "10" }, + "speed_layer_0": { "value": "20" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_print": { "value": "35" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" }, + "speed_travel": { "value": "250" }, + "speed_wall": { "value": "math.ceil(speed_print * 30 / 35)" }, + "speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 30)" }, + "speed_wall_x": { "value": "speed_wall" }, + "support_angle": { "value": "45" }, + "support_pattern": { "value": "'triangles'" }, + "support_use_towers": { "value": "False" }, + "support_xy_distance": { "value": "wall_line_width_0 * 2.5" }, + "support_xy_distance_overhang": { "value": "wall_line_width_0" }, + "support_z_distance": { "value": "0" }, + "switch_extruder_prime_speed": { "value": "15" }, + "switch_extruder_retraction_amount": { "value": "8" }, + "top_bottom_thickness": { "value": "1" }, + "travel_avoid_distance": { "value": "3" }, + "wall_0_inset": { "value": "0" }, + "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, + "wall_thickness": { "value": "1" } } } diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 4fcedc258a..6a1b477165 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -1,125 +1,23 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_abs_ultimaker3_AA_0.4 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 5 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = 240 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -raft_base_speed = =0.75 * raft_speed -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 60 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 35 / 60) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 45 / 60) -speed_wall_0 = =math.ceil(speed_wall * 35 / 45) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_abs_ultimaker3_AA_0.4 +weight = -2 + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = 240 +prime_tower_size = 16 +skin_overlap = 20 +speed_print = 60 +speed_topbottom = =math.ceil(speed_print * 35 / 60) +speed_wall = =math.ceil(speed_print * 45 / 60) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +wall_thickness = 1 + diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index ef4122439d..3b5d37024d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -1,125 +1,23 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = fast -material = generic_abs_ultimaker3_AA_0.4 -weight = -1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 5 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 7 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = 235 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 60 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 60) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 40 / 60) -speed_wall_0 = =math.ceil(speed_wall * 30 / 40) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_abs_ultimaker3_AA_0.4 +weight = -1 + +[values] +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = 235 +material_standby_temperature = 100 +prime_tower_size = 16 +speed_print = 60 +speed_topbottom = =math.ceil(speed_print * 30 / 60) +speed_wall = =math.ceil(speed_print * 40 / 60) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) + diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 8e4b7ea767..dcb8e85563 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -1,125 +1,21 @@ -[general] -version = 2 -name = High Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = high -material = generic_abs_ultimaker3_AA_0.4 -weight = 1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 5 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 12 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.06 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = 225 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 50) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 50) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = high +material = generic_abs_ultimaker3_AA_0.4 +weight = 1 + +[values] +cool_min_speed = 12 +machine_nozzle_cool_down_speed = 0.8 +machine_nozzle_heat_up_speed = 1.5 +material_standby_temperature = 100 +prime_tower_size = 16 +speed_print = 50 +speed_topbottom = =math.ceil(speed_print * 30 / 50) +speed_wall = =math.ceil(speed_print * 30 / 50) + diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index 7e17443c2b..4e99ac446e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -1,125 +1,21 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_abs_ultimaker3_AA_0.4 -weight = 0 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 5 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = 230 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 55 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 55) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 55) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_abs_ultimaker3_AA_0.4 +weight = 0 + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = 230 +material_standby_temperature = 100 +prime_tower_size = 16 +speed_print = 55 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +speed_wall = =math.ceil(speed_print * 30 / 55) + diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index f08ff93edc..d7e0ed62b6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -1,125 +1,22 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_cpe_ultimaker3_AA_0.4 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 70 -material_print_temperature = 250 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 60 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 35 / 60) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 45 / 60) -speed_wall_0 = =math.ceil(speed_wall * 35 / 45) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_cpe_ultimaker3_AA_0.4 +weight = -2 + +[values] +material_print_temperature = 250 +material_standby_temperature = 100 +prime_tower_size = 17 +skin_overlap = 20 +speed_print = 60 +speed_topbottom = =math.ceil(speed_print * 35 / 60) +speed_wall = =math.ceil(speed_print * 45 / 60) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +wall_thickness = 1 + diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index 32db69c965..5717bf50fe 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -1,125 +1,21 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = fast -material = generic_cpe_ultimaker3_AA_0.4 -weight = -1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 7 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 70 -material_print_temperature = 245 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 60 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 60) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 40 / 60) -speed_wall_0 = =math.ceil(speed_wall * 30 / 40) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_cpe_ultimaker3_AA_0.4 +weight = -1 + +[values] +cool_min_speed = 7 +material_print_temperature = 245 +material_standby_temperature = 100 +prime_tower_size = 17 +speed_print = 60 +speed_topbottom = =math.ceil(speed_print * 30 / 60) +speed_wall = =math.ceil(speed_print * 40 / 60) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) + diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index 205aa3da84..e058ef8cac 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -1,125 +1,21 @@ -[general] -version = 2 -name = High Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = high -material = generic_cpe_ultimaker3_AA_0.4 -weight = 1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 12 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.06 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 70 -material_print_temperature = 235 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 50) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 50) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = high +material = generic_cpe_ultimaker3_AA_0.4 +weight = 1 + +[values] +cool_min_speed = 12 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_standby_temperature = 100 +prime_tower_size = 17 +speed_print = 50 +speed_topbottom = =math.ceil(speed_print * 30 / 50) +speed_wall = =math.ceil(speed_print * 30 / 50) + diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index 15bd999cf4..1ccd1c54d3 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -1,125 +1,21 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_cpe_ultimaker3_AA_0.4 -weight = 0 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 70 -material_print_temperature = 240 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 55 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 55) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 55) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_cpe_ultimaker3_AA_0.4 +weight = 0 + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = 240 +material_standby_temperature = 100 +prime_tower_size = 17 +speed_print = 55 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +speed_wall = =math.ceil(speed_print * 30 / 55) + diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 31287dd903..6685c7d79e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -1,127 +1,34 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_nylon_ultimaker3_AA_0.4 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 40 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 20 -cool_min_speed = 10 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_overlap_mm = 0.05 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 60 -material_print_temperature = 255 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -ooze_shield_enabled = False -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = =round(layer_height_0 * 0.85, 2) -raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) -retraction_amount = 8 -retraction_count_max = 25 -retraction_extra_prime_amount = 0 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_speed = 25 -skin_overlap = 50 -speed_infill = =speed_print -speed_layer_0 = 10 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 70) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 30 -switch_extruder_retraction_amount = 30 -switch_extruder_retraction_speeds = 40 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_thickness = 1.3 - -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_surface_layers = 2 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') - -brim_width = 7 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -support_bottom_stair_step_height = 0.3 -wall_line_width_x = =wall_line_width - +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_nylon_ultimaker3_AA_0.4 +weight = -2 + +[values] +adhesion_type = raft +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +infill_overlap_mm = 0.05 +line_width = =machine_nozzle_size +material_print_temperature = 255 +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = 10 +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index 23c71c6160..fb9425eeff 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -1,125 +1,34 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = fast -material = generic_nylon_ultimaker3_AA_0.4 -weight = -1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 40 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 20 -cool_min_speed = 10 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_overlap_mm = 0.05 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 60 -material_print_temperature = 250 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -ooze_shield_enabled = False -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = =round(layer_height_0 * 0.85, 2) -raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) -retraction_amount = 8 -retraction_count_max = 25 -retraction_extra_prime_amount = 0 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_speed = 25 -skin_overlap = 50 -speed_infill = =speed_print -speed_layer_0 = 10 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 70) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 30 -switch_extruder_retraction_amount = 30 -switch_extruder_retraction_speeds = 40 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_surface_layers = 2 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') - -brim_width = 7 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -support_bottom_stair_step_height = 0.3 -wall_line_width_x = =wall_line_width +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_nylon_ultimaker3_AA_0.4 +weight = -1 + +[values] +adhesion_type = raft +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +infill_overlap_mm = 0.05 +line_width = =machine_nozzle_size +material_print_temperature = 250 +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = 10 +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index fd3ce07d37..80dfcd8035 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -1,125 +1,33 @@ -[general] -version = 2 -name = High Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = high -material = generic_nylon_ultimaker3_AA_0.4 -weight = 1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 40 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 20 -cool_min_speed = 15 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_overlap_mm = 0.05 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.06 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 60 -material_print_temperature = 245 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -ooze_shield_enabled = False -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = =round(layer_height_0 * 0.85, 2) -raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) -retraction_amount = 8 -retraction_count_max = 25 -retraction_extra_prime_amount = 0 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_speed = 25 -skin_overlap = 50 -speed_infill = =speed_print -speed_layer_0 = 10 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 70) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 30 -switch_extruder_retraction_amount = 30 -switch_extruder_retraction_speeds = 40 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_surface_layers = 2 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') - -brim_width = 7 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -support_bottom_stair_step_height = 0.3 -wall_line_width_x = =wall_line_width +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = high +material = generic_nylon_ultimaker3_AA_0.4 +weight = 1 + +[values] +adhesion_type = raft +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 15 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +infill_overlap_mm = 0.05 +line_width = =machine_nozzle_size +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = 10 +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index 0146702c2e..428d5b2a3a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -1,125 +1,33 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_nylon_ultimaker3_AA_0.4 -weight = 0 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 40 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 20 -cool_min_speed = 12 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_overlap_mm = 0.05 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 60 -material_print_temperature = 245 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -ooze_shield_enabled = False -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = =round(layer_height_0 * 0.85, 2) -raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) -retraction_amount = 8 -retraction_count_max = 25 -retraction_extra_prime_amount = 0 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_speed = 25 -skin_overlap = 50 -speed_infill = =speed_print -speed_layer_0 = 10 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 70) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 30 -switch_extruder_retraction_amount = 30 -switch_extruder_retraction_speeds = 40 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_surface_layers = 2 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') - -brim_width = 7 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -support_bottom_stair_step_height = 0.3 -wall_line_width_x = =wall_line_width +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_nylon_ultimaker3_AA_0.4 +weight = 0 + +[values] +adhesion_type = raft +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 12 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +infill_overlap_mm = 0.05 +line_width = =machine_nozzle_size +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = 10 +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index 369997b009..6bc898446b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -1,125 +1,26 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_pla_ultimaker3_AA_0.4 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_bed_temperature = 60 -material_print_temperature = 205 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 15 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 35 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 50 / 70) -speed_wall_0 = =math.ceil(speed_wall * 35 / 50) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_pla_ultimaker3_AA_0.4 +weight = -2 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_fan_speed = 100 -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = 205 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 20 +speed_topbottom = =math.ceil(speed_print * 35 / 70) +speed_wall = =math.ceil(speed_print * 50 / 70) +speed_wall_0 = =math.ceil(speed_wall * 35 / 50) +top_bottom_thickness = 1 +wall_thickness = 1 + diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index e9710301a8..3f2aa1e652 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -1,125 +1,25 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = fast -material = generic_pla_ultimaker3_AA_0.4 -weight = -1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_bed_temperature = 60 -material_print_temperature = 200 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 15 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 80 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 80) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 40 / 80) -speed_wall_0 = =math.ceil(speed_wall * 30 / 40) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_pla_ultimaker3_AA_0.4 +weight = -1 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_fan_speed = 100 -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_standby_temperature = 100 +prime_tower_enable = False +speed_print = 80 +speed_topbottom = =math.ceil(speed_print * 30 / 80) +speed_wall = =math.ceil(speed_print * 40 / 80) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) +top_bottom_thickness = 1 +wall_thickness = 1 + diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index 55b4986541..f71c51e7ff 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -1,125 +1,26 @@ -[general] -version = 2 -name = High Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = high -material = generic_pla_ultimaker3_AA_0.4 -weight = 1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_min_layer_time = 5 -cool_min_speed = 10 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.06 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_bed_temperature = 60 -material_print_temperature = 195 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 10 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 60 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 60) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 60) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = high +material = generic_pla_ultimaker3_AA_0.4 +weight = 1 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_fan_speed = 100 -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +cool_min_speed = 10 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = 195 +material_standby_temperature = 100 +skin_overlap = 10 +speed_print = 60 +speed_topbottom = =math.ceil(speed_print * 30 / 60) +speed_wall = =math.ceil(speed_print * 30 / 60) +top_bottom_thickness = 1 +wall_thickness = 1 + diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index 6800bcfb4e..84d9a5a001 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -1,126 +1,23 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pla_ultimaker3_AA_0.4 -weight = 0 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_min_layer_time = 5 -cool_min_speed = 7 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_bed_temperature = 60 -material_print_temperature = 200 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 15 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 10 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 70) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 - -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_pla_ultimaker3_AA_0.4 +weight = 0 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_fan_speed = 100 -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 10 +top_bottom_thickness = 1 +wall_thickness = 1 + diff --git a/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg index 97c0c35f0f..5076c4164a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg @@ -11,116 +11,3 @@ material = generic_pva_ultimaker3_AA_0.4 supported = false [values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 3 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = 215 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = 0 -raft_base_speed = 20 -raft_base_thickness = 0.3 -raft_interface_line_spacing = 0.5 -raft_interface_line_width = 0.5 -raft_interface_speed = 20 -raft_interface_thickness = 0.2 -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_speed = 25 -raft_surface_layers = 1 -retraction_amount = 2 -retraction_count_max = 10 -retraction_extrusion_window = =retraction_amount -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 5 -retraction_prime_speed = 15 -skin_overlap = 10 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 35 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 20 / 35) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 35) -speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall -support_angle = 45 -support_bottom_height = =layer_height * 2 -support_bottom_stair_step_height = =layer_height -support_infill_rate = 30 -support_interface_enable = True -support_join_distance = 3 -support_line_width = =round(line_width * 0.4 / 0.35, 2) -support_offset = 3 -support_pattern = triangles -support_use_towers = False -support_xy_distance = =wall_line_width_0 * 3 -support_xy_distance_overhang = =wall_line_width_0 / 2 -support_z_distance = 0 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 8 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 - -support_top_distance = =support_z_distance -support_bottom_distance = =support_z_distance / 2 -raft_surface_thickness = =resolveOrValue('layer_height') -cool_fan_speed_max = =cool_fan_speed - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -material_bed_temperature = 60 -ooze_shield_dist = 2 -retraction_speed = 25 -switch_extruder_retraction_speeds = 20 diff --git a/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg index 9a8e3b4d9a..0a00e9e09b 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg @@ -11,116 +11,3 @@ weight = 0 supported = false [values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = 230 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 55 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 55) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 55) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg index 5ea6e1edeb..17c10b7a72 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg @@ -11,116 +11,3 @@ weight = 0 supported = false [values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 70 -material_print_temperature = 240 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 55 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 55) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 55) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 diff --git a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg index 1d7f49caf2..c562e16a8e 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg @@ -11,116 +11,3 @@ weight = 0 supported = false [values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 40 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 20 -cool_min_speed = 12 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_overlap_mm = 0.05 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 60 -material_print_temperature = 245 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_layer_0 -raft_airgap = =round(layer_height_0 * 0.85, 2) -raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) -retraction_amount = 8 -retraction_count_max = 25 -retraction_extra_prime_amount = 0 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_speed = 25 -skin_overlap = 50 -speed_infill = =speed_print -speed_layer_0 = 10 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 70) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 30 -switch_extruder_retraction_amount = 30 -switch_extruder_retraction_speeds = 40 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_thickness = 1.3 -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_surface_layers = 2 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') - -brim_width = 7 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -support_bottom_stair_step_height = 0.3 -wall_line_width_x = =wall_line_width diff --git a/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg index af8135af19..b9a64bca38 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg @@ -11,117 +11,3 @@ weight = 0 supported = false [values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_min_layer_time = 5 -cool_min_speed = 7 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_bed_temperature = 60 -material_print_temperature = 200 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 15 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_wipe_enabled = True -raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 -raft_speed = =speed_print / 60 * 30 -raft_interface_speed = =raft_speed * 0.75 -raft_base_speed = =0.75 * raft_speed -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 10 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 70 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 70) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 70) -speed_wall_0 = =math.ceil(speed_wall * 20 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 - -support_line_width = =line_width -support_pattern = zigzag -support_infill_rate = 15 -support_join_distance = 2 -support_offset = 0.2 -support_interface_enable = False -support_use_towers = True -raft_margin = 15 -raft_airgap = 0.3 -raft_surface_layers = 2 -raft_surface_thickness = =resolveOrValue('layer_height') -raft_interface_thickness = =resolveOrValue('layer_height') * 1.5 -raft_interface_line_width = =line_width * 2 -raft_interface_line_spacing = =raft_interface_line_width + 0.2 -cool_fan_speed_max = =cool_fan_speed -support_bottom_height = =extruderValue(support_interface_extruder_nr, 'support_interface_height') -retraction_amount = 6.5 - -cool_fan_speed = 100 -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_min_travel = =line_width * 2 -retraction_prime_speed = =retraction_speed -retraction_speed = 25 -support_bottom_stair_step_height = 0.3 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds -switch_extruder_retraction_amount = =machine_heat_zone_length -switch_extruder_retraction_speeds = 20 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index 86c97c9df3..7b6997c18b 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -1,126 +1,16 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -weight = -2 -material = generic_pva_ultimaker3_BB_0.4 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 3 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = 225 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = 0 -raft_base_speed = 20 -raft_base_thickness = 0.3 -raft_interface_line_spacing = 0.5 -raft_interface_line_width = 0.5 -raft_interface_speed = 20 -raft_interface_thickness = 0.2 -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_speed = 25 -raft_surface_layers = 1 -retraction_amount = 2 -retraction_count_max = 10 -retraction_extrusion_window = =retraction_amount -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 5 -retraction_prime_speed = 15 -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 35 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 20 / 35) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 35) -speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall -support_angle = 45 -support_bottom_height = =layer_height * 2 -support_bottom_stair_step_height = =layer_height -support_infill_rate = 25 -support_interface_enable = True -support_join_distance = 3 -support_line_width = =round(line_width * 0.4 / 0.35, 2) -support_offset = 3 -support_pattern = triangles -support_use_towers = False -support_xy_distance = =wall_line_width_0 * 3 -support_xy_distance_overhang = =wall_line_width_0 / 2 -support_z_distance = 0 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 8 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 - -support_top_distance = =support_z_distance -support_bottom_distance = =support_z_distance / 2 -raft_surface_thickness = =resolveOrValue('layer_height') -cool_fan_speed_max = =cool_fan_speed - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -material_bed_temperature = 60 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_speed = 25 -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +weight = -2 +material = generic_pva_ultimaker3_BB_0.4 + +[values] +material_print_temperature = 225 +material_standby_temperature = 100 +skin_overlap = 20 + diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 72d008e834..10b06cc61b 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -1,125 +1,16 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -weight = -1 -type = quality -quality_type = fast -material = generic_pva_ultimaker3_BB_0.4 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 3 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = 220 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = 0 -raft_base_speed = 20 -raft_base_thickness = 0.3 -raft_interface_line_spacing = 0.5 -raft_interface_line_width = 0.5 -raft_interface_speed = 20 -raft_interface_thickness = 0.2 -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_speed = 25 -raft_surface_layers = 1 -retraction_amount = 2 -retraction_count_max = 10 -retraction_extrusion_window = =retraction_amount -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 5 -retraction_prime_speed = 15 -skin_overlap = 15 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 35 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 20 / 35) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 35) -speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall -support_angle = 45 -support_bottom_height = =layer_height * 2 -support_bottom_stair_step_height = =layer_height -support_infill_rate = 25 -support_interface_enable = True -support_join_distance = 3 -support_line_width = =round(line_width * 0.4 / 0.35, 2) -support_offset = 3 -support_pattern = triangles -support_use_towers = False -support_xy_distance = =wall_line_width_0 * 3 -support_xy_distance_overhang = =wall_line_width_0 / 2 -support_z_distance = 0 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 8 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 -support_top_distance = =support_z_distance -support_bottom_distance = =support_z_distance / 2 -raft_surface_thickness = =resolveOrValue('layer_height') -cool_fan_speed_max = =cool_fan_speed - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -material_bed_temperature = 60 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_speed = 25 -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +weight = -1 +type = quality +quality_type = fast +material = generic_pva_ultimaker3_BB_0.4 + +[values] +material_print_temperature = 220 +material_standby_temperature = 100 +skin_overlap = 15 + diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index 0762badf14..a6fb178a22 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -1,126 +1,15 @@ -[general] -version = 2 -name = High Quality -definition = ultimaker3 - -[metadata] -weight = 0 -type = quality -quality_type = high -material = generic_pva_ultimaker3_BB_0.4 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 3 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.06 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = 215 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = 0 -raft_base_speed = 20 -raft_base_thickness = 0.3 -raft_interface_line_spacing = 0.5 -raft_interface_line_width = 0.5 -raft_interface_speed = 20 -raft_interface_thickness = 0.2 -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_speed = 25 -raft_surface_layers = 1 -retraction_amount = 2 -retraction_count_max = 10 -retraction_extrusion_window = =retraction_amount -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 5 -retraction_prime_speed = 15 -skin_overlap = 10 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 35 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 20 / 35) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 35) -speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall -support_angle = 45 -support_bottom_height = =layer_height * 2 -support_bottom_stair_step_height = =layer_height -support_infill_rate = 35 -support_interface_enable = True -support_join_distance = 3 -support_line_width = =round(line_width * 0.4 / 0.35, 2) -support_offset = 3 -support_pattern = triangles -support_use_towers = False -support_xy_distance = =wall_line_width_0 * 3 -support_xy_distance_overhang = =wall_line_width_0 / 2 -support_z_distance = 0 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 8 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 - -support_top_distance = =support_z_distance -support_bottom_distance = =support_z_distance / 2 -raft_surface_thickness = =resolveOrValue('layer_height') -cool_fan_speed_max = =cool_fan_speed - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -material_bed_temperature = 60 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_speed = 25 -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +weight = 0 +type = quality +quality_type = high +material = generic_pva_ultimaker3_BB_0.4 + +[values] +support_infill_rate = 35 +material_standby_temperature = 100 + diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 92f829080c..dd4157c695 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -1,126 +1,15 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -weight = 0 -type = quality -quality_type = normal -material = generic_pva_ultimaker3_BB_0.4 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 3 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 50 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.5 / 0.35, 2) -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = 215 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 60 -ooze_shield_enabled = False -prime_tower_enable = True -prime_tower_size = 15 -prime_tower_wipe_enabled = True -raft_acceleration = =acceleration_layer_0 -raft_airgap = 0 -raft_base_speed = 20 -raft_base_thickness = 0.3 -raft_interface_line_spacing = 0.5 -raft_interface_line_width = 0.5 -raft_interface_speed = 20 -raft_interface_thickness = 0.2 -raft_jerk = =jerk_layer_0 -raft_margin = 10 -raft_speed = 25 -raft_surface_layers = 1 -retraction_amount = 2 -retraction_count_max = 10 -retraction_extrusion_window = =retraction_amount -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 5 -retraction_prime_speed = 15 -skin_overlap = 10 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 35 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 20 / 35) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 30 / 35) -speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall -support_angle = 45 -support_bottom_height = =layer_height * 2 -support_bottom_stair_step_height = =layer_height -support_infill_rate = 30 -support_interface_enable = True -support_join_distance = 3 -support_line_width = =round(line_width * 0.4 / 0.35, 2) -support_offset = 3 -support_pattern = triangles -support_use_towers = False -support_xy_distance = =wall_line_width_0 * 3 -support_xy_distance_overhang = =wall_line_width_0 / 2 -support_z_distance = 0 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 8 -top_bottom_thickness = 1 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 - -support_top_distance = =support_z_distance -support_bottom_distance = =support_z_distance / 2 -raft_surface_thickness = =resolveOrValue('layer_height') -cool_fan_speed_max = =cool_fan_speed - -cool_min_layer_time_fan_speed_max = 10 -infill_overlap_mm = =infill_line_width * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 -material_bed_temperature = 60 -ooze_shield_dist = 2 -retraction_extra_prime_amount = 0 -retraction_speed = 25 -switch_extruder_retraction_speeds = 20 +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +weight = 0 +type = quality +quality_type = normal +material = generic_pva_ultimaker3_BB_0.4 + +[values] +support_infill_rate = 30 +material_standby_temperature = 100 + diff --git a/resources/variants/ultimaker3_aa04.inst.cfg b/resources/variants/ultimaker3_aa04.inst.cfg index ece408e998..c8d5b8aceb 100644 --- a/resources/variants/ultimaker3_aa04.inst.cfg +++ b/resources/variants/ultimaker3_aa04.inst.cfg @@ -8,4 +8,36 @@ author = ultimaker type = variant [values] -machine_nozzle_size = 0.4 +brim_width = 7 +machine_nozzle_cool_down_speed = 0.9 +raft_acceleration = =acceleration_print +raft_airgap = 0.3 +raft_base_speed = =0.75 * raft_speed +raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 +raft_interface_line_spacing = =raft_interface_line_width + 0.2 +raft_interface_line_width = =line_width * 2 +raft_interface_speed = =raft_speed * 0.75 +raft_interface_thickness = =layer_height * 1.5 +raft_jerk = =jerk_print +raft_margin = 15 +raft_speed = =speed_print / 60 * 30 +raft_surface_layers = 2 +retraction_amount = 6.5 +retraction_count_max = 25 +retraction_min_travel = =line_width * 2 +retraction_prime_speed = =retraction_speed +skin_overlap = 15 +speed_print = 70 +speed_topbottom = =math.ceil(speed_print * 30 / 70) +speed_wall = =math.ceil(speed_print * 30 / 70) +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag +support_top_distance = =support_z_distance +support_use_towers = True +support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = =switch_extruder_retraction_speeds +switch_extruder_retraction_amount = =machine_heat_zone_length +top_bottom_thickness = 1.2 +wall_thickness = 1.3 + diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index ebfce22ba4..80e6b309a4 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -8,4 +8,18 @@ author = ultimaker type = variant [values] -machine_nozzle_size = 0.4 +cool_fan_speed_max = =cool_fan_speed +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = 215 +retraction_extrusion_window = =retraction_amount +speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +support_bottom_height = =layer_height * 2 +support_bottom_stair_step_height = =layer_height +support_infill_rate = 25 +support_interface_enable = True +support_join_distance = 3 +support_line_width = =round(line_width * 0.4 / 0.35, 2) +support_offset = 3 +support_xy_distance = =wall_line_width_0 * 3 +support_xy_distance_overhang = =wall_line_width_0 / 2 + diff --git a/resources/variants/ultimaker3_extended_aa04.inst.cfg b/resources/variants/ultimaker3_extended_aa04.inst.cfg index ddf34fd6e0..24cbf04a26 100644 --- a/resources/variants/ultimaker3_extended_aa04.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa04.inst.cfg @@ -8,4 +8,35 @@ author = ultimaker type = variant [values] +brim_width = 7 +machine_nozzle_cool_down_speed = 0.9 machine_nozzle_size = 0.4 +raft_airgap = 0.3 +raft_base_speed = 15 +raft_base_thickness = 0.3 +raft_interface_line_spacing = 0.9 +raft_interface_line_width = 0.7 +raft_interface_speed = 15 +raft_interface_thickness = 0.15 +raft_margin = 15 +raft_speed = 20 +raft_surface_layers = 2 +retraction_amount = 6.5 +retraction_count_max = 25 +retraction_min_travel = 1.5 +retraction_prime_speed = 25 +skin_overlap = 15 +speed_print = 70 +speed_topbottom = =math.ceil(speed_print * 30 / 70) +speed_wall = =math.ceil(speed_print * 30 / 70) +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_infill_rate = 15 +support_join_distance = 2.0 +support_offset = 0.2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = 20 +switch_extruder_retraction_amount = 20 +top_bottom_thickness = 1.2 +wall_thickness = 1.3 diff --git a/resources/variants/ultimaker3_extended_bb04.inst.cfg b/resources/variants/ultimaker3_extended_bb04.inst.cfg index a6e0dfe5d2..a7c43ea376 100644 --- a/resources/variants/ultimaker3_extended_bb04.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb04.inst.cfg @@ -8,4 +8,20 @@ author = ultimaker type = variant [values] +cool_fan_speed_max = 100 +machine_nozzle_heat_up_speed = 1.5 machine_nozzle_size = 0.4 +material_bed_temperature = 60 +material_print_temperature = 215 +raft_acceleration = =acceleration_layer_0 +raft_jerk = =jerk_layer_0 +retraction_extrusion_window = =retraction_amount +speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +support_bottom_height = =layer_height * 2 +support_bottom_stair_step_height = =layer_height +support_interface_enable = True +support_line_width = =round(line_width * 0.4 / 0.35, 2) +support_pattern = triangles +support_use_towers = False +support_xy_distance = =wall_line_width_0 * 3 +support_xy_distance_overhang = =wall_line_width_0 / 2 From b4339bda0e89b6d8656229538303e4a5760c5717 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 25 Oct 2016 16:26:52 +0200 Subject: [PATCH 050/114] Fixed logger isuse with importing profile CURA-2785 --- cura/Settings/CuraContainerRegistry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 41772fb912..98c37da617 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -165,7 +165,7 @@ class CuraContainerRegistry(ContainerRegistry): profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader. except Exception as e: # Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None. - Logger.log("e", "Failed to import profile from %s: %s while using profile reader", file_name, str(e), profile_reader.getPluginId()) + Logger.log("e", "Failed to import profile from %s: %s while using profile reader. Got exception %s", file_name,profile_reader.getPluginId(), str(e)) return { "status": "error", "message": catalog.i18nc("@info:status", "Failed to import profile from {0}: {1}", file_name, str(e))} if profile_or_list: # Success! name_seed = os.path.splitext(os.path.basename(file_name))[0] From 7e5ffe79b6adae6a7f786a54ac7e07ca611b70d8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:16:41 +0200 Subject: [PATCH 051/114] Cache global container stack We'll need it multiple times. Could be a bit faster. Contributes to issue CURA-2785. --- plugins/LegacyProfileReader/LegacyProfileReader.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 5105bf71da..96a9d96902 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -66,8 +66,9 @@ class LegacyProfileReader(ProfileReader): def read(self, file_name): if file_name.split(".")[-1] != "ini": return None + global_container_stack = Application.getInstance().getGlobalContainerStack() - multi_extrusion = Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1 + multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1 if multi_extrusion: Logger.log("e", "Unable to import legacy profile %s. Multi extrusion is not supported", file_name) raise Exception("Unable to import legacy profile. Multi extrusion is not supported") @@ -117,7 +118,7 @@ class LegacyProfileReader(ProfileReader): if "translation" not in dict_of_doom: Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?") return None - current_printer_definition = Application.getInstance().getGlobalContainerStack().getBottom() + current_printer_definition = global_container_stack.getBottom() profile.setDefinition(current_printer_definition) for new_setting in dict_of_doom["translation"]: #Evaluate all new settings that would get a value from the translations. old_setting_expression = dict_of_doom["translation"][new_setting] From 623f9cb4fc9496e14f5def61f60a3a3a6cfb1d19 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:20:02 +0200 Subject: [PATCH 052/114] Abort importing profile if we have no global container stack You shouldn't be able to trigger it anyway, but if you do, it'll give a proper error that the import failed. Contributes to issue CURA-2785. --- plugins/LegacyProfileReader/LegacyProfileReader.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 96a9d96902..8d4afdae7a 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -67,6 +67,8 @@ class LegacyProfileReader(ProfileReader): if file_name.split(".")[-1] != "ini": return None global_container_stack = Application.getInstance().getGlobalContainerStack() + if not global_container_stack: + return None multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1 if multi_extrusion: From f72e6be10e50709a73ae9e42863e9218e019abe0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:24:56 +0200 Subject: [PATCH 053/114] Fix setting the quality_type of imported profile The metadata entry was renamed a while ago. Contributes to issue CURA-2785. --- plugins/LegacyProfileReader/LegacyProfileReader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 8d4afdae7a..70a19f02ee 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -140,5 +140,5 @@ class LegacyProfileReader(ProfileReader): Logger.log("i", "A legacy profile was imported but everything evaluates to the defaults, creating an empty profile.") profile.setDirty(True) profile.addMetaDataEntry("type", "quality_changes") - profile.addMetaDataEntry("quality", "normal") + profile.addMetaDataEntry("quality_type", "normal") return profile \ No newline at end of file From fef15c706fcbab1e6d2f6386e1a2bbec87414dac Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 25 Oct 2016 22:51:44 +0200 Subject: [PATCH 054/114] Render an indication of the origin of the machine --- cura/BuildVolume.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index ce9967a5a2..865ab059e6 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -33,6 +33,9 @@ PRIME_CLEARANCE = 1.5 ## Build volume is a special kind of node that is responsible for rendering the printable area & disallowed areas. class BuildVolume(SceneNode): VolumeOutlineColor = Color(12, 169, 227, 255) + XAxisColor = Color(255, 0, 0, 255) + YAxisColor = Color(0, 0, 255, 255) + ZAxisColor = Color(0, 255, 0, 255) raftThicknessChanged = Signal() @@ -45,6 +48,8 @@ class BuildVolume(SceneNode): self._shader = None + self._origin_mesh = None + self._grid_mesh = None self._grid_shader = None @@ -128,6 +133,7 @@ class BuildVolume(SceneNode): self._grid_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "grid.shader")) renderer.queueNode(self, mode = RenderBatch.RenderMode.Lines) + renderer.queueNode(self, mesh = self._origin_mesh) renderer.queueNode(self, mesh = self._grid_mesh, shader = self._grid_shader, backface_cull = True) if self._disallowed_area_mesh: renderer.queueNode(self, mesh = self._disallowed_area_mesh, shader = self._shader, transparent = True, backface_cull = True, sort = -9) @@ -170,6 +176,38 @@ class BuildVolume(SceneNode): self.setMeshData(mb.build()) + mb = MeshBuilder() + + if self._global_container_stack.getProperty("machine_center_is_zero", "value"): + origin = (Vector(min_w, min_h, min_d) + Vector(max_w, min_h, max_d)) / 2 + else: + origin = Vector(min_w, min_h, max_d) + + axes_length = 10 + axes_width = 0.5 + mb.addCube( + width = axes_length, + height = axes_width, + depth = axes_width, + center = origin + Vector(axes_length / 2, 0, 0), + color = self.XAxisColor + ) + mb.addCube( + width = axes_width, + height = axes_length, + depth = axes_width, + center = origin + Vector(0, axes_length / 2, 0), + color = self.YAxisColor + ) + mb.addCube( + width = axes_width, + height = axes_width, + depth = axes_length, + center = origin - Vector(0, 0, axes_length / 2), + color = self.ZAxisColor + ) + self._origin_mesh = mb.build() + mb = MeshBuilder() mb.addQuad( Vector(min_w, min_h - 0.2, min_d), From 55191b722a6a9e2123d47ae9f4c9c4b7a4dd89ff Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 25 Oct 2016 23:06:23 +0200 Subject: [PATCH 055/114] Codestyle & documentation --- cura/BuildVolume.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 865ab059e6..c87f3a8cbd 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -49,6 +49,8 @@ class BuildVolume(SceneNode): self._shader = None self._origin_mesh = None + self._origin_line_length = 20 + self._origin_line_width = 0.5 self._grid_mesh = None self._grid_shader = None @@ -178,32 +180,31 @@ class BuildVolume(SceneNode): mb = MeshBuilder() + # Indication of the machine origin if self._global_container_stack.getProperty("machine_center_is_zero", "value"): origin = (Vector(min_w, min_h, min_d) + Vector(max_w, min_h, max_d)) / 2 else: origin = Vector(min_w, min_h, max_d) - axes_length = 10 - axes_width = 0.5 mb.addCube( - width = axes_length, - height = axes_width, - depth = axes_width, - center = origin + Vector(axes_length / 2, 0, 0), + width = self._origin_line_length, + height = self._origin_line_width, + depth = self._origin_line_width, + center = origin + Vector(self._origin_line_length / 2, 0, 0), color = self.XAxisColor ) mb.addCube( - width = axes_width, - height = axes_length, - depth = axes_width, - center = origin + Vector(0, axes_length / 2, 0), + width = self._origin_line_width, + height = self._origin_line_length, + depth = self._origin_line_width, + center = origin + Vector(0, self._origin_line_length / 2, 0), color = self.YAxisColor ) mb.addCube( - width = axes_width, - height = axes_width, - depth = axes_length, - center = origin - Vector(0, 0, axes_length / 2), + width = self._origin_line_width, + height = self._origin_line_width, + depth = self._origin_line_length, + center = origin - Vector(0, 0, self._origin_line_length / 2), color = self.ZAxisColor ) self._origin_mesh = mb.build() From 861837ef41242c988f72ad0ea982ec3c7b90b8f8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Oct 2016 13:06:30 +0200 Subject: [PATCH 056/114] Make generic quality profiles global This way they will also be put in the global profile. Contributes to issue CURA-2723. --- resources/quality/high.inst.cfg | 1 + resources/quality/low.inst.cfg | 1 + resources/quality/normal.inst.cfg | 1 + 3 files changed, 3 insertions(+) diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 9e3e9f1f67..921dae9ae0 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -6,6 +6,7 @@ definition = fdmprinter [metadata] type = quality quality_type = high +global_quality = True weight = 1 [values] diff --git a/resources/quality/low.inst.cfg b/resources/quality/low.inst.cfg index 787325c27c..82d4e0d327 100644 --- a/resources/quality/low.inst.cfg +++ b/resources/quality/low.inst.cfg @@ -6,6 +6,7 @@ definition = fdmprinter [metadata] type = quality quality_type = low +global_quality = True weight = -1 [values] diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index e940bbda35..26da3b48da 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -6,6 +6,7 @@ definition = fdmprinter [metadata] type = quality quality_type = normal +global_quality = True weight = 0 [values] From 6c3b4b7f29995bb5778f8f59ec3f49e9d14bd133 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 09:50:42 +0200 Subject: [PATCH 057/114] Prevent race condition before global container stack is made Just properly check if there is a global container stack. --- cura/Settings/MachineManager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index d3ee76adac..5b57d7ec4a 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -769,6 +769,8 @@ class MachineManager(QObject): result = [] empty_quality_changes = self._empty_quality_changes_container global_container_stack = self._global_container_stack + if not global_container_stack: + return [] global_machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.getBottom()) extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() From cc33b3be22c483d19a21df631f78de85e35cd34d Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Wed, 26 Oct 2016 10:40:20 +0200 Subject: [PATCH 058/114] Change for the "Advanced" tab to "Custom". CURA-2751 Change settings label "Simple" to "Recommended" --- resources/i18n/de/cura.po | 4 ++-- resources/i18n/en/cura.po | 4 ++-- resources/i18n/es/cura.po | 4 ++-- resources/i18n/fi/cura.po | 4 ++-- resources/i18n/fr/cura.po | 4 ++-- resources/i18n/it/cura.po | 4 ++-- resources/i18n/nl/cura.po | 4 ++-- resources/i18n/tr/cura.po | 4 ++-- resources/qml/Sidebar.qml | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/resources/i18n/de/cura.po b/resources/i18n/de/cura.po index 18b92a5e64..b015b2e43b 100644 --- a/resources/i18n/de/cura.po +++ b/resources/i18n/de/cura.po @@ -1836,8 +1836,8 @@ msgstr "Empfohlen" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Erweitert" +msgid "Custom" +msgstr "Benutzerdefiniert" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/i18n/en/cura.po b/resources/i18n/en/cura.po index 521e622588..2e74ea3219 100644 --- a/resources/i18n/en/cura.po +++ b/resources/i18n/en/cura.po @@ -1916,8 +1916,8 @@ msgstr "Recommended" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Advanced" +msgid "Custom" +msgstr "Custom" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/i18n/es/cura.po b/resources/i18n/es/cura.po index 926d190830..a6dae41496 100644 --- a/resources/i18n/es/cura.po +++ b/resources/i18n/es/cura.po @@ -1836,8 +1836,8 @@ msgstr "Recomendado" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Avanzado" +msgid "Custom" +msgstr "Personalizado" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/i18n/fi/cura.po b/resources/i18n/fi/cura.po index b481d39b39..174d261b9e 100644 --- a/resources/i18n/fi/cura.po +++ b/resources/i18n/fi/cura.po @@ -1836,8 +1836,8 @@ msgstr "Suositeltu" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Laajennettu" +msgid "Custom" +msgstr "Mukautettu" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/i18n/fr/cura.po b/resources/i18n/fr/cura.po index 16cfcd8cc4..17f0fd2a0b 100644 --- a/resources/i18n/fr/cura.po +++ b/resources/i18n/fr/cura.po @@ -1836,8 +1836,8 @@ msgstr "Recommandé" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Avancée" +msgid "Custom" +msgstr "Personnalisé" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/i18n/it/cura.po b/resources/i18n/it/cura.po index 7d212ed598..bd8b392323 100644 --- a/resources/i18n/it/cura.po +++ b/resources/i18n/it/cura.po @@ -1836,8 +1836,8 @@ msgstr "Consigliata" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Avanzata" +msgid "Custom" +msgstr "Personalizzata" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/i18n/nl/cura.po b/resources/i18n/nl/cura.po index c0fb2b7b9b..fb442212bd 100644 --- a/resources/i18n/nl/cura.po +++ b/resources/i18n/nl/cura.po @@ -1836,8 +1836,8 @@ msgstr "Aanbevolen" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Geavanceerd" +msgid "Custom" +msgstr "Aangepaste" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/i18n/tr/cura.po b/resources/i18n/tr/cura.po index a05507c30a..1a05f2b98a 100644 --- a/resources/i18n/tr/cura.po +++ b/resources/i18n/tr/cura.po @@ -1836,8 +1836,8 @@ msgstr "Önerilen Ayarlar" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" -msgstr "Gelişmiş" +msgid "Custom" +msgstr "Özel" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 2d17d5210c..1c1eb5e5a0 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -380,7 +380,7 @@ Rectangle Component.onCompleted: { modesListModel.append({ text: catalog.i18nc("@title:tab", "Recommended"), item: sidebarSimple }) - modesListModel.append({ text: catalog.i18nc("@title:tab", "Advanced"), item: sidebarAdvanced }) + modesListModel.append({ text: catalog.i18nc("@title:tab", "Custom"), item: sidebarAdvanced }) sidebarContents.push({ "item": modesListModel.get(base.currentModeIndex).item, "immediate": true }); } From 53a4e5e6c0cd7ada6636b52b8d72a3800dbbc480 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 11:15:14 +0200 Subject: [PATCH 059/114] Remove infill_overlap_mm from Nylon profiles This is the result of this week's profile updates from our material tests. --- .../quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg | 1 - 4 files changed, 4 deletions(-) diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 6685c7d79e..9774c9b621 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -14,7 +14,6 @@ adhesion_type = raft cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_line_width = =round(line_width * 0.5 / 0.4, 2) -infill_overlap_mm = 0.05 line_width = =machine_nozzle_size material_print_temperature = 255 material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index fb9425eeff..be788b4dd0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -14,7 +14,6 @@ adhesion_type = raft cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_line_width = =round(line_width * 0.5 / 0.4, 2) -infill_overlap_mm = 0.05 line_width = =machine_nozzle_size material_print_temperature = 250 material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index 80dfcd8035..95e3368f3f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -14,7 +14,6 @@ adhesion_type = raft cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 15 infill_line_width = =round(line_width * 0.5 / 0.4, 2) -infill_overlap_mm = 0.05 line_width = =machine_nozzle_size material_standby_temperature = 100 ooze_shield_angle = 40 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index 428d5b2a3a..09013f3fd9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -14,7 +14,6 @@ adhesion_type = raft cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 12 infill_line_width = =round(line_width * 0.5 / 0.4, 2) -infill_overlap_mm = 0.05 line_width = =machine_nozzle_size material_standby_temperature = 100 ooze_shield_angle = 40 From 07e7521792d116e02d45be39158349acad583498 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 13:41:23 +0200 Subject: [PATCH 060/114] Fix spelling mistake This is not a bijvoeglijk naamwoord, so it must not get an E at the end. Contributes to issue CURA-2751. --- resources/i18n/nl/cura.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/i18n/nl/cura.po b/resources/i18n/nl/cura.po index fb442212bd..2c8c83df7a 100644 --- a/resources/i18n/nl/cura.po +++ b/resources/i18n/nl/cura.po @@ -1837,7 +1837,7 @@ msgstr "Aanbevolen" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" msgid "Custom" -msgstr "Aangepaste" +msgstr "Aangepast" #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 From a8486f88d7213a014a4b42979e9834d2623b9b5e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 26 Oct 2016 15:43:26 +0200 Subject: [PATCH 061/114] Inheritance icon is correctly shown for single extrusion printers if setting has limit_to_extruder property CURA-2752 --- cura/Settings/SettingInheritanceManager.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 68891c7f4f..9a2db55dc7 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -5,6 +5,7 @@ from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal import UM.Settings from UM.Application import Application import cura.Settings +from UM.Logger import Logger ## The settingInheritance manager is responsible for checking each setting in order to see if one of the "deeper" @@ -39,9 +40,13 @@ class SettingInheritanceManager(QObject): return result @pyqtSlot(str, str, result = "QStringList") - def getOverridesForExtruder(self, key, extruder): - extruder = cura.Settings.ExtruderManager.getInstance().getExtruderStack(extruder) + def getOverridesForExtruder(self, key, extruder_index): + multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1 + if not multi_extrusion: + return self._settings_with_inheritance_warning + extruder = cura.Settings.ExtruderManager.getInstance().getExtruderStack(extruder_index) if not extruder: + Logger.log("w", "Unable to find extruder for current machine with index %s", extruder_index) return [] definitions = self._global_container_stack.getBottom().findDefinitions(key=key) From 49603e2f1885efe98425b646dddcd9f40f889209 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 15:28:50 +0200 Subject: [PATCH 062/114] Fix spelling Thesearetwowordssotheymusthaveaspacebetweenthem. Contributes to issue CURA-2755. --- plugins/ChangeLogPlugin/ChangeLog.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 9504ccf04f..8e026ef68c 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -9,9 +9,8 @@ Fixed inheritance taking from the wrong extruder. Moved z-hop and extruder selection settings to a better category. [2.3.0] - *Speed improvements -The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layerview is significantly faster and slicing speed is slightly improved. +The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layer view is significantly faster and slicing speed is slightly improved. *Multi Extrusion Support Machines with multiple extruders are now supported. If you’ve got the Ultimaker Original with the dual extrusion upgrade kit, we’ve got you covered. From dfb557eb4161952890735d9051d46e116987ebca Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 15:56:58 +0200 Subject: [PATCH 063/114] Correct change log of version 2.3.0 This is now updated with all that's on the website. In many cases, the wording of the Ultimaker website is also chosen, unless that wording was only to make it fit better within the style of that website. Contributes to issue CURA-2755. --- plugins/ChangeLogPlugin/ChangeLog.txt | 75 +++++++++++++++------------ 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 8e026ef68c..0f53063bf3 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -13,7 +13,16 @@ Moved z-hop and extruder selection settings to a better category. The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layer view is significantly faster and slicing speed is slightly improved. *Multi Extrusion Support -Machines with multiple extruders are now supported. If you’ve got the Ultimaker Original with the dual extrusion upgrade kit, we’ve got you covered. +Machines with multiple extruders are now supported. Ultimaker 3 printers and Ultimaker Original printers with dual extrusion upgrade kit are currently supported. + +*Network Printing for Ultimaker 3 +Sending a print to an Ultimaker 3 remotely via the network is now possible. Requires Wi-Fi or LAN to connect to the printer. + +*Print Monitoring for Ultimaker 3 +You can monitor your print on an Ultimaker 3 with a live camera feed. Requires Wi-Fi or LAN to connect to the printer. + +*Material and Print Core Synchronization +Connecting to an Ultimaker 3 now gives you the option to synchronize the materials in Cura with what is loaded in the printer. *Custom Machine Support It’s now much easier to use Cura with custom machines. You can edit the machine settings when you load a new custom machine. @@ -29,7 +38,7 @@ Select an individual item in a group or merged object and edit as usual. Just Ct Profile management is improved. You can now easily see and track changes made to your profiles. *Improved Setting Visibility -Make multiple settings visible at once. The Visibility Overview setting indicates why a setting is not shown in the sidebar even if it is enabled. +Make multiple settings visible at the same time with a checkbox. The Visibility Overview setting indicates why a setting is not shown in the sidebar even if it is enabled. *Improved time estimation Time estimations are more accurate. Based on our test time estimations should be within 5% accuracy for Ultimaker printers. @@ -45,10 +54,10 @@ Configurations from older installations of Cura 2.1 are automatically imported i *Slicing features *Infill Types -We've introduced two new infill types: Tetrahedral and Cubic. They change along with the Z-axis for more uniform strength in all directions. There are now 7 infill types to choose from. +Two new infill types are now introduced: Tetrahedral and Cubic. They change along with the Z-axis for more uniform strength in all directions. There are now seven infill types to choose from. *Gradual Infill -Now you can change the density of the infill based on the distance from the top layers. Your objects print faster, use less material, while top surfaces have the same quality. +Gradual infill lets users adjust infill density, based on the distance from the top layers. This offers faster printing and reduced material requirements, whilst maintaining surface quality. *Set Acceleration and Jerk by Feature You can now set Jerk and Acceleration by feature-type (infill, walls, top/bottom, etc), for more precision. @@ -65,7 +74,7 @@ Can’t avoid previously printed parts by horizontal moves? The Z Hop Only Over *Skin and Wall Overlap The Skin Overlap setting allows you to overlap the skin lines with the walls for better adhesion. -*Control Initial Layer Travel Speed +*Adjust Initial Layer Travel Speed Set the travel speed of the initial layer(s) to reduce risk of extruder pulling the print from the bed. *Support Interface @@ -75,39 +84,39 @@ It is now possible to print a support bottom as well as a support roof. Support Deleting grouped objects Duplicating groups Bridging -Drag and drop on the first run on Windows +Drag and drop (first Windows run) Unretraction speeds Bottom layer in Spiralize mode Overlap Compensation -Retractions on Raft -Retractions now occur after each object printed in one-at-a-time mode. -Rafts are no longer printed outside of build area. -Spiralize no longer only spiralizes the first printed segment only. -Line distance is now the actual line distance. -Enabling raft doesn’t influence at which height the model is sliced any more. -Brim is now always printed just once. -Support roofs now only occur just below overhang. +Raft retractions +Retractions now occur after each object printed in one-at-a-time mode +Rafts are no longer printed outside of build area +Spiralize no longer limited to the first printed segment only +Line distance is now the actual line distance +Enabling raft doesn’t influence at which height the model is sliced any more +Brim is now always printed just once +Support roofs now only occur just below overhang *Minor changes -Messages are now displayed 30 seconds instead of 10, making it less likely that certain messages are missed. -You are now notified if you try to save to a locked SD card. -Engine log is now included in the application log. -Undo and Redo now work correctly with multiple operations. -The last used folder is now remembered (instead of defaulting to home folder). -Import X3D files. -Made it possible to add multiple Per Model Settings at once. -Bed Level and Checkup procedures for UMO+ can now be done without re-adding machine. -Combing is applied in more cases and results in better paths. -Infill thickness now supports Grid infill also for even multiples of the layer height. -Support is no longer removed by unprintable thin parts of the model. -Support is now generated on each layer it’s supposed to. -Support doesn't go outside overhang areas any more. -Support doesn't remove brim around the object any more. -Brim is now also generated under the support. -Draft shield and Ooze shield get their own brim or raft. -Settings shared between skirt and brim now also activate when brim is selected. -Compensate overlapping wall parts now also works for inner walls. -You can now adjust the speed at which the bed is lowered each layer. +Message display time increased to 30 seconds +Notification if you try to save to a locked SD card +Engine log now included in the application log +Undo and Redo now function with multiple operations +The last used folder is now remembered rather than defaulting to home folder +Import X3D files +Made it possible to add multiple Per Model Settings at once +Bed Level and Checkup procedures for UMO+ can be performed without re-adding machine +Combing applied in more cases and results in better paths +Infill thickness now supports Grid infill also for even multiples of the layer height +Support is no longer removed by unprintable thin parts of the model +Support generated on each appropriate layer +Support no longer goes outside overhang areas +Support no longer removes brim around the object +Brim is now also generated under the support +Draft and Ooze shield get their own brim or raft +Settings shared between skirt and brim now also activate when brim is selected +Compensate overlapping wall parts now also works for inner walls +Bed lowering speed can be adjusted for each layer [2.1.3] From a61ff7b2df7804184ae869d760f4df064eac4ac5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 15:59:59 +0200 Subject: [PATCH 064/114] Reorder items in change log of 2.3.0 This order is closer to what's on the website of Ultimaker, and more closely reflects the relative importance of these features. No 1:1 matching is possible with the website though. Contributes to issue CURA-2755. --- plugins/ChangeLogPlugin/ChangeLog.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 0f53063bf3..86145f2997 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -9,9 +9,6 @@ Fixed inheritance taking from the wrong extruder. Moved z-hop and extruder selection settings to a better category. [2.3.0] -*Speed improvements -The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layer view is significantly faster and slicing speed is slightly improved. - *Multi Extrusion Support Machines with multiple extruders are now supported. Ultimaker 3 printers and Ultimaker Original printers with dual extrusion upgrade kit are currently supported. @@ -24,12 +21,15 @@ You can monitor your print on an Ultimaker 3 with a live camera feed. Requires W *Material and Print Core Synchronization Connecting to an Ultimaker 3 now gives you the option to synchronize the materials in Cura with what is loaded in the printer. -*Custom Machine Support -It’s now much easier to use Cura with custom machines. You can edit the machine settings when you load a new custom machine. +*Speed improvements +The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layer view is significantly faster and slicing speed is slightly improved. *Improved Position Tool Place objects precisely where you want them by manually entering the values for the position. +*Custom Machine Support +It’s now much easier to use Cura with custom machines. You can edit the machine settings when you load a new custom machine. + *Improved Grouping It's now possible to transform objects that are already grouped. Select an individual item in a group or merged object and edit as usual. Just Ctrl + Click and edit away. From 58df52ffedf577650bb6c33cdb1680375a827751 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 16:02:18 +0200 Subject: [PATCH 065/114] Remove unimportant bugfix This tweak is so small that it isn't worth even mentioning in the change log. Contributes to issue CURA-2755. --- plugins/ChangeLogPlugin/ChangeLog.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 86145f2997..eeddaf3789 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -6,7 +6,6 @@ The layer height of each profile is now shown in the profile selection menu. Upgrading from version 2.1 on OSX works again. You can import g-code from related machines as profile. Fixed inheritance taking from the wrong extruder. -Moved z-hop and extruder selection settings to a better category. [2.3.0] *Multi Extrusion Support From 51263da2e41292afc37d8a272b588a231b54baf2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 26 Oct 2016 16:06:43 +0200 Subject: [PATCH 066/114] Added new fixes for version 2.3.1 These are the latest fixes that will be included in 2.3.1. Not all of these are entirely complete yet as of this writing. These are only the fixes that are worth mentioning in a change log. Contributes to issue CURA-2755. --- plugins/ChangeLogPlugin/ChangeLog.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index eeddaf3789..496efd1615 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -3,9 +3,12 @@ The layer height of each profile is now shown in the profile selection menu. *Bug fixes -Upgrading from version 2.1 on OSX works again. -You can import g-code from related machines as profile. -Fixed inheritance taking from the wrong extruder. +Editing material settings has actual effect on the prints again +Upgrading from version 2.1 on OSX works again +You can import g-code from related machines as profile +Fixed inheritance taking from the wrong extruder +The i-symbol is updated properly +Fixed a freeze that could sometimes occur while printing via Wi-Fi [2.3.0] *Multi Extrusion Support From 3cdf65d36dd484ca54c8346b1f008e6154b03e7a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 26 Oct 2016 22:58:59 +0200 Subject: [PATCH 067/114] Fix errors when switching from UM3 to UM2. --- cura/QualityManager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index 7354bfbb4f..52c052ad28 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -161,7 +161,8 @@ class QualityManager: # \return \type{List[InstanceContainer]} a list of the basic materials or an empty list if one could not be found. def _getBasicMaterials(self, material_container): base_material = material_container.getMetaDataEntry("material") - if material_container.getDefinition().getMetaDataEntry("has_machine_quality"): + material_container_definition = material_container.getDefinition() + if material_container_definition and material_container_definition.getMetaDataEntry("has_machine_quality"): definition_id = material_container.getDefinition().getMetaDataEntry("quality_definition", material_container.getDefinition().getId()) else: definition_id = "fdmprinter" From e27be7fc4b1a7c1b7516b23b2400c09510791dc9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Oct 2016 09:58:05 +0200 Subject: [PATCH 068/114] Travel_avoid_distance and support_offset are only taken into account if respecive feature is active We used to always add them, but now we check if support_enable and travel_avoid_other_parts are enabled CURA-2823 --- cura/BuildVolume.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index ce9967a5a2..e0153b4905 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -553,7 +553,7 @@ class BuildVolume(SceneNode): raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") support_expansion = 0 - if self._getSettingFromSupportInfillExtruder("support_offset"): + if self._getSettingFromSupportInfillExtruder("support_offset") and self._global_container_stack.getProperty("support_enable", "value"): support_expansion += self._getSettingFromSupportInfillExtruder("support_offset") farthest_shield_distance = 0 @@ -565,7 +565,7 @@ class BuildVolume(SceneNode): move_from_wall_radius = 0 # Moves that start from outer wall. if self._getSettingFromAdhesionExtruder("infill_wipe_dist"): move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist")) - if self._getSettingFromAdhesionExtruder("travel_avoid_distance"): + if self._getSettingFromAdhesionExtruder("travel_avoid_distance") and self._getSettingFromAdhesionExtruder("travel_avoid_other_parts"): move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance")) #Now combine our different pieces of data to get the final border size. @@ -582,4 +582,4 @@ class BuildVolume(SceneNode): _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"] _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] - _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset"] + _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts"] From 4759bccdb8261948ae8d745b0838c6e244e88855 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 27 Oct 2016 11:31:07 +0200 Subject: [PATCH 069/114] Update translation templates after merging secret plug-ins The UM3 Network Printing plug-in was secret because the UM3 wasn't released yet. This update contains all texts to be translated as of this writing. --- resources/i18n/cura.pot | 956 +++++++++++++++++------- resources/i18n/fdmextruder.def.json.pot | 2 +- resources/i18n/fdmprinter.def.json.pot | 250 ++++--- 3 files changed, 816 insertions(+), 392 deletions(-) diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 1a3082dff3..a1fca49999 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-09-13 17:49+0200\n" +"POT-Creation-Date: 2016-10-27 11:28+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,6 +49,21 @@ msgctxt "@item:inlistbox" msgid "X-Ray" msgstr "" +#: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:11 +msgctxt "@label" +msgid "X3D Reader" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:14 +msgctxt "@info:whatsthis" +msgid "Provides support for reading X3D files." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:20 +msgctxt "@item:inlistbox" +msgid "X3D File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/GCodeWriter/__init__.py:12 msgctxt "@label" msgid "GCode Writer" @@ -64,6 +79,41 @@ msgctxt "@item:inlistbox" msgid "GCode File" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/__init__.py:13 +msgctxt "@label" +msgid "Doodle3D" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/__init__.py:17 +msgctxt "@info:whatsthis" +msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/PrinterConnection.py:36 +msgctxt "@item:inmenu" +msgid "Doodle3D printing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/PrinterConnection.py:37 +msgctxt "@action:button" +msgid "Print with Doodle3D" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/PrinterConnection.py:38 +msgctxt "@info:tooltip" +msgid "Print with " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D.py:49 +msgctxt "@title:menu" +msgid "Doodle3D" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D.py:50 +msgctxt "@item:inlistbox" +msgid "Enable Scan devices..." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/__init__.py:12 #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:18 msgctxt "@label" @@ -127,53 +177,75 @@ msgctxt "@info" msgid "Could not find firmware required for the printer at %s." msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:20 +#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 +msgctxt "X3G Writer Plugin Description" +msgid "Writes X3G to a file" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:22 +msgctxt "X3G Writer File Description" +msgid "X3G File" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button" msgid "Save to Removable Drive" msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:21 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:24 #, python-brace-format msgctxt "@item:inlistbox" msgid "Save to Removable Drive {0}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:80 #, python-brace-format msgctxt "@info:progress" msgid "Saving to Removable Drive {0}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:84 -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:90 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:93 #, python-brace-format msgctxt "@info:status" msgid "Could not save to {0}: {1}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:129 #, python-brace-format msgctxt "@info:status" msgid "Saved to Removable Drive {0} as {1}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:103 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:130 msgctxt "@action:button" msgid "Eject" msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:103 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:130 #, python-brace-format msgctxt "@action" msgid "Eject removable device {0}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:135 #, python-brace-format msgctxt "@info:status" msgid "Could not save to removable drive {0}: {1}" msgstr "" +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:145 +#, python-brace-format +msgctxt "@info:status" +msgid "Ejected {0}. You can now safely remove the drive." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:147 +#, python-brace-format +msgctxt "@info:status" +msgid "Failed to eject {0}. Another program may be using the drive." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/__init__.py:12 msgctxt "@label" msgid "Removable Drive Output Device Plugin" @@ -184,23 +256,247 @@ msgctxt "@info:whatsthis" msgid "Provides removable drive hotplugging and writing support." msgstr "" -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDrivePlugin.py:49 -#, python-brace-format -msgctxt "@info:status" -msgid "Ejected {0}. You can now safely remove the drive." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDrivePlugin.py:52 -#, python-brace-format -msgctxt "@info:status" -msgid "Failed to eject {0}. Another program may be using the drive." -msgstr "" - #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/WindowsRemovableDrivePlugin.py:69 msgctxt "@item:intext" msgid "Removable Drive" msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/__init__.py:13 +msgctxt "@info:whatsthis" +msgid "Manages network connections to Ultimaker 3 printers" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:103 +msgctxt "@action:button" +msgid "Print over network" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:104 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:146 +msgctxt "@info:status" +msgid "" +"Access to the printer requested. Please approve the request on the printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:147 +msgctxt "@info:status" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148 +msgctxt "@action:button" +msgid "Retry" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148 +msgctxt "@info:tooltip" +msgid "Re-send the access request" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:150 +msgctxt "@info:status" +msgid "Access to the printer accepted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:151 +msgctxt "@info:status" +msgid "No access to print with this printer. Unable to send print job." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:152 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +msgctxt "@action:button" +msgid "Request Access" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:152 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71 +msgctxt "@info:tooltip" +msgid "Send access request to the printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:244 +#, python-brace-format +msgctxt "@info:status" +msgid "" +"Connected over the network to {0}. Please approve the access request on the " +"printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:251 +#, python-brace-format +msgctxt "@info:status" +msgid "Connected over the network to {0}." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:264 +#, python-brace-format +msgctxt "@info:status" +msgid "Connected over the network to {0}. No access to control the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:269 +msgctxt "@info:status" +msgid "Access request was denied on the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:272 +msgctxt "@info:status" +msgid "Access request failed due to a timeout." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:337 +msgctxt "@info:status" +msgid "The connection with the network was lost." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:368 +msgctxt "@info:status" +msgid "" +"The connection with the printer was lost. Check your printer to see if it is " +"connected." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:489 +msgctxt "@info:status" +msgid "" +"Unable to start a new print job because the printer is busy. Please check " +"the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:494 +#, python-format +msgctxt "@info:status" +msgid "" +"Unable to start a new print job, printer is busy. Current printer status is " +"%s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:514 +#, python-brace-format +msgctxt "@info:status" +msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:521 +#, python-brace-format +msgctxt "@info:status" +msgid "Unable to start a new print job. No material loaded in slot {0}" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:532 +#, python-brace-format +msgctxt "@label" +msgid "Not enough material for spool {0}." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:542 +#, python-brace-format +msgctxt "@label" +msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:556 +#, python-brace-format +msgctxt "@label" +msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:564 +#, python-brace-format +msgctxt "@label" +msgid "" +"PrintCore {0} is not properly calibrated. XY calibration needs to be " +"performed on the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:567 +msgctxt "@label" +msgid "Are you sure you wish to print with the selected configuration?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:568 +msgctxt "@label" +msgid "" +"There is a mismatch between the configuration or calibration of the printer " +"and Cura. For the best result, always slice for the PrintCores and materials " +"that are inserted in your printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:574 +msgctxt "@window:title" +msgid "Mismatched configuration" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:669 +msgctxt "@info:status" +msgid "Sending data to printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:670 +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/SettingsWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/ControlWindow.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:350 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:191 +msgctxt "@action:button" +msgid "Cancel" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:716 +msgctxt "@info:status" +msgid "Unable to send data to printer. Is another job still active?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:835 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:191 +msgctxt "@label:MonitorStatus" +msgid "Aborting print..." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:841 +msgctxt "@label:MonitorStatus" +msgid "Print aborted. Please check the printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:847 +msgctxt "@label:MonitorStatus" +msgid "Pausing print..." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:849 +msgctxt "@label:MonitorStatus" +msgid "Resuming print..." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:960 +msgctxt "@window:title" +msgid "Changes on the Printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:962 +msgctxt "@label" +msgid "Would you like to update your current printer configuration into Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:964 +msgctxt "@label" +msgid "" +"The PrintCores and/or materials on your printer were changed. For the best " +"result, always slice for the PrintCores and materials that are inserted in " +"your printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19 +msgctxt "@action" +msgid "Connect via Network" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:24 msgid "Modify G-Code" msgstr "" @@ -235,14 +531,14 @@ msgctxt "@info:whatsthis" msgid "Submits anonymous slice info. Can be disabled through preferences." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:73 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:74 msgctxt "@info" msgid "" "Cura collects anonymised slicing statistics. You can disable this in " "preferences" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:74 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:75 msgctxt "@action:button" msgid "Dismiss" msgstr "" @@ -302,7 +598,7 @@ msgctxt "@item:inlistbox" msgid "Layers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:58 +#: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:70 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "" @@ -352,14 +648,22 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:232 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:233 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:77 +msgctxt "@info:status" +msgid "" +"The selected material is incompatible with the selected machine or " +"configuration." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:242 msgctxt "@info:status" msgid "" "Unable to slice with the current settings. Please check your settings for " "errors." msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:241 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:251 msgctxt "@info:status" msgid "" "Nothing to slice because none of the models fit the build volume. Please " @@ -376,8 +680,8 @@ msgctxt "@info:whatsthis" msgid "Provides the link to the CuraEngine slicing backend." msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:45 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:180 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:47 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:188 msgctxt "@info:status" msgid "Processing Layers" msgstr "" @@ -490,24 +794,24 @@ msgctxt "@info:whatsthis" msgid "Provides support for importing Cura profiles." msgstr "" -#: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:286 +#: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:298 msgctxt "@item:material" msgid "No material loaded" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:293 +#: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:305 msgctxt "@item:material" msgid "Unknown material" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:342 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:79 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:343 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:82 msgctxt "@title:window" msgid "File Already Exists" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:343 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:80 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:344 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:83 #, python-brace-format msgctxt "@label" msgid "" @@ -515,54 +819,47 @@ msgid "" "overwrite it?" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:548 -msgctxt "@info:status" -msgid "" -"The selected material is imcompatible with the selected machine or " -"configuration." -msgstr "" - -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:666 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@label" msgid "You made changes to the following setting(s):" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:671 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:883 msgctxt "@window:title" msgid "Switched profiles" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:671 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:885 msgctxt "@label" msgid "Do you want to transfer your changed settings to this profile?" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:672 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:887 msgctxt "@label" msgid "" "If you transfer your settings they will override settings in the profile." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:765 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:977 msgctxt "@label" msgid "Nozzle" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:966 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1177 msgctxt "@info:status" msgid "" "Unable to find a quality profile for this combination. Default settings will " "be used instead." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:95 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:113 #, python-brace-format msgctxt "@info:status" msgid "" "Failed to export profile to {0}: {1}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:100 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:118 #, python-brace-format msgctxt "@info:status" msgid "" @@ -570,14 +867,14 @@ msgid "" "failure." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:103 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 #, python-brace-format msgctxt "@info:status" msgid "Exported profile to {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:128 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:169 #, python-brace-format msgctxt "@info:status" msgid "" @@ -585,31 +882,25 @@ msgid "" "message>" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:145 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:176 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:210 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:158 -#, python-brace-format -msgctxt "@info:status" -msgid "Successfully imported profiles {0}" -msgstr "" - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:161 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:213 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:166 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:219 msgctxt "@label" msgid "Custom profile" msgstr "" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:240 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:87 msgctxt "@info:status" msgid "" "The build volume height has been reduced due to the value of the \"Print " @@ -635,22 +926,22 @@ msgctxt "@action:button" msgid "Open Web Page" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:167 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:212 msgctxt "@info:progress" msgid "Loading machines..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:390 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:449 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:424 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:483 msgctxt "@info:progress" msgid "Loading interface..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:536 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:603 #, python-format msgctxt "@info" msgid "%(width).1f x %(depth).1f x %(height).1f mm" @@ -679,12 +970,12 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:85 #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:101 #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:117 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:206 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:258 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:278 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:198 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:230 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:246 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:266 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:286 msgctxt "@label" msgid "mm" msgstr "" @@ -714,54 +1005,96 @@ msgctxt "@label" msgid "GCode Flavor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:176 msgctxt "@label" msgid "Printhead Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:179 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:187 msgctxt "@label" msgid "X min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:195 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:219 msgctxt "@label" msgid "X max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:227 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 msgctxt "@label" msgid "Y max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:247 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 msgctxt "@label" msgid "Gantry height" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:267 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:275 msgctxt "@label" msgid "Nozzle size" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:296 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:304 msgctxt "@label" msgid "Start Gcode" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:318 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:326 msgctxt "@label" msgid "End Gcode" msgstr "" -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:39 +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/SettingsWindow.qml:20 +msgctxt "@title:window" +msgid "Doodle3D Settings" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/SettingsWindow.qml:53 +msgctxt "@action:button" +msgid "Save" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/ControlWindow.qml:23 +msgctxt "@title:window" +msgid "Print to: %1" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/ControlWindow.qml:40 +msgctxt "@label" +msgid "Extruder Temperature: %1/%2°C" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/ControlWindow.qml:45 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/ControlWindow.qml:46 +msgctxt "@label" +msgid "Bed Temperature: %1/%2°C" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/ControlWindow.qml:64 +msgctxt "@label" +msgid "%1" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/ControlWindow.qml:82 +msgctxt "@action:button" +msgid "Print" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:105 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:423 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:55 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:433 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:77 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -814,24 +1147,149 @@ msgctxt "@label" msgid "Unknown error code: %1" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:17 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +msgctxt "@title:window" +msgid "Connect to Networked Printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:67 +msgctxt "@label" +msgid "" +"To print directly to your printer over the network, please make sure your " +"printer is connected to the network using a network cable or by connecting " +"your printer to your WIFI network. If you don't connect Cura with your " +"printer, you can still use a USB drive to transfer g-code files to your " +"printer.\n" +"\n" +"Select your printer from the list below:" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:44 +msgctxt "@action:button" +msgid "Add" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:189 +msgctxt "@action:button" +msgid "Edit" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:50 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:152 +msgctxt "@action:button" +msgid "Remove" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +msgctxt "@action:button" +msgid "Refresh" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:198 +msgctxt "@label" +msgid "" +"If your printer is not listed, read the network-printing " +"troubleshooting guide" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:225 +msgctxt "@label" +msgid "Type" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:237 +msgctxt "@label" +msgid "Ultimaker 3" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:240 +msgctxt "@label" +msgid "Ultimaker 3 Extended" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:243 +msgctxt "@label" +msgid "Unknown" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:256 +msgctxt "@label" +msgid "Firmware version" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:268 +msgctxt "@label" +msgid "Address" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +msgctxt "@label" +msgid "The printer at this address has not yet responded." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:287 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +msgctxt "@action:button" +msgid "Connect" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:301 +msgctxt "@title:window" +msgid "Printer Address" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:331 +msgctxt "@alabel" +msgid "Enter the IP address or hostname of your printer on the network." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:358 +msgctxt "@action:button" +msgid "Ok" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37 +msgctxt "@info:tooltip" +msgid "Connect to a printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +msgctxt "@action:button" +msgid "Activate Configuration" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" msgid "Post Processing Plugin" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:48 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49 msgctxt "@label" -msgid "Scripts" +msgid "Post Processing Scripts" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:146 -msgctxt "@label" -msgid "Active Scripts" +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:218 +msgctxt "@action" +msgid "Add a script" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:434 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:264 msgctxt "@label" -msgid "Done" +msgid "Settings" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:456 +msgctxt "@info:tooltip" +msgid "Change active post-processing scripts" msgstr "" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:21 @@ -913,33 +1371,28 @@ msgctxt "@action:button" msgid "OK" msgstr "" -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:191 -msgctxt "@action:button" -msgid "Cancel" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:34 -msgctxt "@label" +msgctxt "@label Followed by extruder selection drop-down." msgid "Print model with" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:274 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:284 msgctxt "@action:button" msgid "Select settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:314 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:324 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:338 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:348 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:91 msgctxt "@label:textbox" msgid "Filter..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:362 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:372 msgctxt "@label:checkbox" msgid "Show all" msgstr "" @@ -1120,71 +1573,71 @@ msgctxt "@label" msgid "Everything is in order! You're done with your CheckUp." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:90 msgctxt "@label:MonitorStatus" msgid "Not connected to a printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:86 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:92 msgctxt "@label:MonitorStatus" msgid "Printer does not accept commands" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:98 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:189 msgctxt "@label:MonitorStatus" msgid "In maintenance. Please check the printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:103 msgctxt "@label:MonitorStatus" msgid "Lost connection with the printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:105 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:179 msgctxt "@label:MonitorStatus" msgid "Printing..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:108 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:181 msgctxt "@label:MonitorStatus" msgid "Paused" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:111 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:183 msgctxt "@label:MonitorStatus" msgid "Preparing..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:113 msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:239 msgctxt "@label:" msgid "Resume" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:243 msgctxt "@label:" msgid "Pause" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:272 msgctxt "@label:" msgid "Abort Print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:282 msgctxt "@window:title" msgid "Abort print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:254 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 msgctxt "@label" msgid "Are you sure you want to abort the print?" msgstr "" @@ -1274,28 +1727,28 @@ msgctxt "@label:textbox" msgid "Check all" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:53 msgctxt "@title:column" msgid "Setting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:60 msgctxt "@title:column" msgid "Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:67 msgctxt "@title:column" msgid "Current" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:45 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75 msgctxt "@title:column" msgid "Unit" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:14 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:430 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:440 msgctxt "@title:tab" msgid "General" msgstr "" @@ -1310,174 +1763,139 @@ msgctxt "@label" msgid "Language:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:93 -msgctxt "@item:inlistbox" -msgid "English" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:94 -msgctxt "@item:inlistbox" -msgid "Finnish" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:95 -msgctxt "@item:inlistbox" -msgid "French" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:96 -msgctxt "@item:inlistbox" -msgid "German" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:97 -msgctxt "@item:inlistbox" -msgid "Italian" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:98 -msgctxt "@item:inlistbox" -msgid "Dutch" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:99 -msgctxt "@item:inlistbox" -msgid "Spanish" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:138 msgctxt "@label" msgid "" "You will need to restart the application for language changes to have effect." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Viewport behavior" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:161 msgctxt "@info:tooltip" msgid "" "Highlight unsupported areas of the model in red. Without support these areas " "will not print properly." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:170 msgctxt "@option:check" msgid "Display overhang" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:177 msgctxt "@info:tooltip" msgid "" "Moves the camera so the model is in the center of the view when an model is " "selected" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:181 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:182 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:191 msgctxt "@info:tooltip" msgid "" "Should models on the platform be moved so that they no longer intersect?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:196 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:209 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:218 msgctxt "@info:tooltip" msgid "" "Display 5 top layers in layer view or only the top-most layer. Rendering 5 " "layers takes longer, but may show more information." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223 msgctxt "@action:button" msgid "Display five top layers in layer view" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:241 msgctxt "@info:tooltip" msgid "Should only the top layers be displayed in layerview?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:245 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:246 msgctxt "@option:check" msgid "Only display top layer(s) in layer view" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:262 msgctxt "@label" msgid "Opening files" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:267 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:268 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:272 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 msgctxt "@option:check" msgid "Scale large models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:282 msgctxt "@info:tooltip" msgid "" "An model may appear extremely small if its unit is for example in meters " "rather than millimeters. Should these models be scaled up?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:287 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296 msgctxt "@info:tooltip" msgid "" "Should a prefix based on the printer name be added to the print job name " "automatically?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:300 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:301 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318 msgctxt "@label" msgid "Privacy" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:325 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:330 msgctxt "@option:check" msgid "Check for updates on start" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:340 msgctxt "@info:tooltip" msgid "" "Should anonymous data about your print be sent to Ultimaker? Note, no " @@ -1485,38 +1903,26 @@ msgid "" "stored." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:344 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:345 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:445 msgctxt "@title:tab" msgid "Printers" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:37 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:71 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:51 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:127 msgctxt "@action:button" msgid "Activate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:44 -msgctxt "@action:button" -msgid "Add" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:50 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:111 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:152 -msgctxt "@action:button" -msgid "Remove" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:57 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 msgctxt "@action:button" msgid "Rename" msgstr "" @@ -1532,7 +1938,7 @@ msgid "Connection:" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:21 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:32 msgctxt "@info:status" msgid "The printer is not connected." msgstr "" @@ -1547,118 +1953,113 @@ msgctxt "@label:MonitorStatus" msgid "Waiting for someone to clear the build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:191 -msgctxt "@label:MonitorStatus" -msgid "Aborting print..." -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:194 msgctxt "@label:MonitorStatus" msgid "Waiting for a printjob" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:439 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:449 msgctxt "@title:tab" msgid "Profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:29 msgctxt "@label" msgid "Protected profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:29 msgctxt "@label" msgid "Custom profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:64 msgctxt "@label" msgid "Create" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:96 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:80 msgctxt "@label" msgid "Duplicate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:113 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:159 msgctxt "@action:button" msgid "Import" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:119 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:166 msgctxt "@action:button" msgid "Export" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:126 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:165 msgctxt "@action:button" msgid "Update profile with current settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:173 msgctxt "@action:button" msgid "Discard current settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:190 msgctxt "@action:label" msgid "" "This profile uses the defaults specified by the printer, so it has no " "settings in the list below." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:197 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:215 msgctxt "@title:tab" msgid "Global Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:271 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:258 msgctxt "@title:window" msgid "Rename Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:271 msgctxt "@title:window" msgid "Create Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:285 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:299 msgctxt "@window:title" msgid "Import Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:307 msgctxt "@title:window" msgid "Import Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:335 msgctxt "@title:window" msgid "Export Profile" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:437 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:447 msgctxt "@title:tab" msgid "Materials" msgstr "" @@ -1680,47 +2081,42 @@ msgctxt "@action:button" msgid "Duplicate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:189 -msgctxt "@action:button" -msgid "Edit" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:256 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:272 msgctxt "@title:window" msgid "Import Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:265 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:273 msgctxt "@info:status" msgid "" "Could not import material %1: %2" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:277 msgctxt "@info:status" msgid "Successfully imported material %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:287 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:310 msgctxt "@title:window" msgid "Export Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:306 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:314 msgctxt "@info:status" msgid "" "Failed to export material to %1: %2" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status" msgid "Successfully exported material to %1" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:701 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:718 msgctxt "@title:window" msgid "Add Printer" msgstr "" @@ -1756,22 +2152,22 @@ msgid "" "Cura has been developed by Ultimaker B.V. in cooperation with the community." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:201 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:215 msgctxt "@action:menu" msgid "Hide this setting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:221 msgctxt "@action:menu" msgid "Configure setting visiblity..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:93 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated " @@ -1781,12 +2177,12 @@ msgid "" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:59 -msgctxt "@label" +msgctxt "@label Header for list of settings." msgid "Affects" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:64 -msgctxt "@label" +msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "" @@ -1810,7 +2206,7 @@ msgid "" "Click to restore the value of the profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:268 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value " @@ -1819,7 +2215,7 @@ msgid "" "Click to restore the calculated value." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:189 msgctxt "@label:listbox" msgid "Print Setup" msgstr "" @@ -1836,11 +2232,11 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383 msgctxt "@title:tab" -msgid "Advanced" +msgid "Custom" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18 +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:26 msgctxt "@title:menuitem %1 is the value from the printer" msgid "Automatic: %1" msgstr "" @@ -1855,37 +2251,37 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:31 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:43 msgctxt "@label" msgid "Temperatures" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:51 msgctxt "@label" msgid "Hotend" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:61 msgctxt "@label" msgid "Build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:57 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:69 msgctxt "@label" msgid "Active print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:62 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:74 msgctxt "@label" msgid "Job Name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:80 msgctxt "@label" msgid "Printing Time" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:74 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:86 msgctxt "@label" msgid "Estimated time left" msgstr "" @@ -2080,89 +2476,89 @@ msgctxt "@title:window" msgid "Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:68 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:80 msgctxt "@action:inmenu menubar:file" msgid "&Save Selection to File" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:88 msgctxt "@title:menu menubar:file" msgid "Save &All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:115 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:131 msgctxt "@title:menu" msgid "&View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:136 msgctxt "@title:menu" msgid "&Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:138 msgctxt "@title:menu menubar:toplevel" msgid "&Printer" msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:160 +msgctxt "@title:menu" +msgid "&Material" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:149 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:161 msgctxt "@title:menu" -msgid "&Material" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:150 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 -msgctxt "@title:menu" msgid "&Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:171 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:212 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:290 msgctxt "@action:button" msgid "Open File" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:363 msgctxt "@action:button" msgid "View Mode" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:443 msgctxt "@title:tab" msgid "Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:642 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:652 msgctxt "@title:window" msgid "Open file" msgstr "" @@ -2271,23 +2667,23 @@ msgctxt "@title:window" msgid "Engine Log" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:40 msgctxt "@label:listbox" msgid "Printer:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:189 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:197 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:196 msgctxt "@label" msgid "Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:279 msgctxt "@label" msgid "Profile:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:313 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:325 msgctxt "@tooltip" msgid "" "Some setting values are different from the values stored in the profile.\n" diff --git a/resources/i18n/fdmextruder.def.json.pot b/resources/i18n/fdmextruder.def.json.pot index 1513667105..6384b433d1 100644 --- a/resources/i18n/fdmextruder.def.json.pot +++ b/resources/i18n/fdmextruder.def.json.pot @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Uranium json setting files\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" -"POT-Creation-Date: 2016-09-20 14:48+0000\n" +"POT-Creation-Date: 2016-10-27 11:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE\n" diff --git a/resources/i18n/fdmprinter.def.json.pot b/resources/i18n/fdmprinter.def.json.pot index e338ae2882..d65b1a10de 100644 --- a/resources/i18n/fdmprinter.def.json.pot +++ b/resources/i18n/fdmprinter.def.json.pot @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Uranium json setting files\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" -"POT-Creation-Date: 2016-09-20 14:48+0000\n" +"POT-Creation-Date: 2016-10-27 11:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE\n" @@ -815,6 +815,20 @@ msgid "" "outside of the model." msgstr "" +#: fdmprinter.def.json +msgctxt "outer_inset_first label" +msgid "Outer Before Inner Walls" +msgstr "" + +#: fdmprinter.def.json +msgctxt "outer_inset_first description" +msgid "" +"Prints walls in order of outside to inside when enabled. This can help " +"improve dimensional accuracy in X and Y when using a high viscosity plastic " +"like ABS; however it can decrease outer surface print quality, especially on " +"overhangs." +msgstr "" + #: fdmprinter.def.json msgctxt "alternate_extra_perimeter label" msgid "Alternate Extra Wall" @@ -1310,42 +1324,6 @@ msgid "" "material is limited." msgstr "" -#: fdmprinter.def.json -msgctxt "retraction_hop_enabled label" -msgid "Z Hop when Retracted" -msgstr "" - -#: fdmprinter.def.json -msgctxt "retraction_hop_enabled description" -msgid "" -"Whenever a retraction is done, the build plate is lowered to create " -"clearance between the nozzle and the print. It prevents the nozzle from " -"hitting the print during travel moves, reducing the chance to knock the " -"print from the build plate." -msgstr "" - -#: fdmprinter.def.json -msgctxt "retraction_hop_only_when_collides label" -msgid "Z Hop Only Over Printed Parts" -msgstr "" - -#: fdmprinter.def.json -msgctxt "retraction_hop_only_when_collides description" -msgid "" -"Only perform a Z Hop when moving over printed parts which cannot be avoided " -"by horizontal motion by Avoid Printed Parts when Traveling." -msgstr "" - -#: fdmprinter.def.json -msgctxt "retraction_hop label" -msgid "Z Hop Height" -msgstr "" - -#: fdmprinter.def.json -msgctxt "retraction_hop description" -msgid "The height difference when performing a Z Hop." -msgstr "" - #: fdmprinter.def.json msgctxt "material_standby_temperature label" msgid "Standby Temperature" @@ -1405,19 +1383,6 @@ msgid "" "retraction." msgstr "" -#: fdmprinter.def.json -msgctxt "retraction_hop_after_extruder_switch label" -msgid "Z Hop After Extruder Switch" -msgstr "" - -#: fdmprinter.def.json -msgctxt "retraction_hop_after_extruder_switch description" -msgid "" -"After the machine switched from one extruder to the other, the build plate " -"is lowered to create clearance between the nozzle and the print. This " -"prevents the nozzle from leaving oozed material on the outside of a print." -msgstr "" - #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2070,6 +2035,55 @@ msgid "" "during travel moves." msgstr "" +#: fdmprinter.def.json +msgctxt "retraction_hop_enabled label" +msgid "Z Hop when Retracted" +msgstr "" + +#: fdmprinter.def.json +msgctxt "retraction_hop_enabled description" +msgid "" +"Whenever a retraction is done, the build plate is lowered to create " +"clearance between the nozzle and the print. It prevents the nozzle from " +"hitting the print during travel moves, reducing the chance to knock the " +"print from the build plate." +msgstr "" + +#: fdmprinter.def.json +msgctxt "retraction_hop_only_when_collides label" +msgid "Z Hop Only Over Printed Parts" +msgstr "" + +#: fdmprinter.def.json +msgctxt "retraction_hop_only_when_collides description" +msgid "" +"Only perform a Z Hop when moving over printed parts which cannot be avoided " +"by horizontal motion by Avoid Printed Parts when Traveling." +msgstr "" + +#: fdmprinter.def.json +msgctxt "retraction_hop label" +msgid "Z Hop Height" +msgstr "" + +#: fdmprinter.def.json +msgctxt "retraction_hop description" +msgid "The height difference when performing a Z Hop." +msgstr "" + +#: fdmprinter.def.json +msgctxt "retraction_hop_after_extruder_switch label" +msgid "Z Hop After Extruder Switch" +msgstr "" + +#: fdmprinter.def.json +msgctxt "retraction_hop_after_extruder_switch description" +msgid "" +"After the machine switched from one extruder to the other, the build plate " +"is lowered to create clearance between the nozzle and the print. This " +"prevents the nozzle from leaving oozed material on the outside of a print." +msgstr "" + #: fdmprinter.def.json msgctxt "cooling label" msgid "Cooling" @@ -2176,7 +2190,9 @@ msgctxt "cool_min_layer_time description" msgid "" "The minimum time spent in a layer. This forces the printer to slow down, to " "at least spend the time set here in one layer. This allows the printed " -"material to cool down properly before printing the next layer." +"material to cool down properly before printing the next layer. Layers may " +"still take shorter than the minimal layer time if Lift Head is disabled and " +"if the Minimum Speed would otherwise be violated." msgstr "" #: fdmprinter.def.json @@ -2227,6 +2243,54 @@ msgid "" "severe overhangs." msgstr "" +#: fdmprinter.def.json +msgctxt "support_extruder_nr label" +msgid "Support Extruder" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr description" +msgid "" +"The extruder train to use for printing the support. This is used in multi-" +"extrusion." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_extruder_nr label" +msgid "Support Infill Extruder" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_extruder_nr description" +msgid "" +"The extruder train to use for printing the infill of the support. This is " +"used in multi-extrusion." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr_layer_0 label" +msgid "First Layer Support Extruder" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr_layer_0 description" +msgid "" +"The extruder train to use for printing the first layer of support infill. " +"This is used in multi-extrusion." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_interface_extruder_nr label" +msgid "Support Interface Extruder" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_interface_extruder_nr description" +msgid "" +"The extruder train to use for printing the roofs and bottoms of the support. " +"This is used in multi-extrusion." +msgstr "" + #: fdmprinter.def.json msgctxt "support_type label" msgid "Support Placement" @@ -2687,6 +2751,18 @@ msgctxt "adhesion_type option raft" msgid "Raft" msgstr "" +#: fdmprinter.def.json +msgctxt "adhesion_extruder_nr label" +msgid "Build Plate Adhesion Extruder" +msgstr "" + +#: fdmprinter.def.json +msgctxt "adhesion_extruder_nr description" +msgid "" +"The extruder train to use for printing the skirt/brim/raft. This is used in " +"multi-extrusion." +msgstr "" + #: fdmprinter.def.json msgctxt "skirt_line_count label" msgid "Skirt Line Count" @@ -3100,66 +3176,6 @@ msgctxt "dual description" msgid "Settings used for printing with multiple extruders." msgstr "" -#: fdmprinter.def.json -msgctxt "adhesion_extruder_nr label" -msgid "Build Plate Adhesion Extruder" -msgstr "" - -#: fdmprinter.def.json -msgctxt "adhesion_extruder_nr description" -msgid "" -"The extruder train to use for printing the skirt/brim/raft. This is used in " -"multi-extrusion." -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_extruder_nr label" -msgid "Support Extruder" -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_extruder_nr description" -msgid "" -"The extruder train to use for printing the support. This is used in multi-" -"extrusion." -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_infill_extruder_nr label" -msgid "Support Infill Extruder" -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_infill_extruder_nr description" -msgid "" -"The extruder train to use for printing the infill of the support. This is " -"used in multi-extrusion." -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_extruder_nr_layer_0 label" -msgid "First Layer Support Extruder" -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_extruder_nr_layer_0 description" -msgid "" -"The extruder train to use for printing the first layer of support infill. " -"This is used in multi-extrusion." -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_interface_extruder_nr label" -msgid "Support Interface Extruder" -msgstr "" - -#: fdmprinter.def.json -msgctxt "support_interface_extruder_nr description" -msgid "" -"The extruder train to use for printing the roofs and bottoms of the support. " -"This is used in multi-extrusion." -msgstr "" - #: fdmprinter.def.json msgctxt "prime_tower_enable label" msgid "Enable Prime Tower" @@ -3336,6 +3352,18 @@ msgid "" "everything else fails to produce proper GCode." msgstr "" +#: fdmprinter.def.json +msgctxt "carve_multiple_volumes label" +msgid "Remove Mesh Intersection" +msgstr "" + +#: fdmprinter.def.json +msgctxt "carve_multiple_volumes description" +msgid "" +"Remove areas where multiple objecs are overlapping with each other. This is " +"may be used if merged dual material objects overlap with each other." +msgstr "" + #: fdmprinter.def.json msgctxt "blackmagic label" msgid "Special Modes" From 740ce1fa0b06fe2cc7d342eb4ea1deb70785f5de Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 26 Oct 2016 22:58:59 +0200 Subject: [PATCH 070/114] Fix errors when switching from UM3 to UM2. --- cura/QualityManager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index 7354bfbb4f..52c052ad28 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -161,7 +161,8 @@ class QualityManager: # \return \type{List[InstanceContainer]} a list of the basic materials or an empty list if one could not be found. def _getBasicMaterials(self, material_container): base_material = material_container.getMetaDataEntry("material") - if material_container.getDefinition().getMetaDataEntry("has_machine_quality"): + material_container_definition = material_container.getDefinition() + if material_container_definition and material_container_definition.getMetaDataEntry("has_machine_quality"): definition_id = material_container.getDefinition().getMetaDataEntry("quality_definition", material_container.getDefinition().getId()) else: definition_id = "fdmprinter" From b381186331a2930c1c3537ccd5b3f1a800657077 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Oct 2016 13:02:38 +0200 Subject: [PATCH 071/114] Set um2+ height to same as um2 --- resources/definitions/ultimaker2_plus.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json index 87c158782c..5b1c7909ba 100644 --- a/resources/definitions/ultimaker2_plus.def.json +++ b/resources/definitions/ultimaker2_plus.def.json @@ -40,7 +40,7 @@ "value": "speed_wall_0" }, "machine_height": { - "default_value": 203 + "default_value": 205 }, "machine_show_variants": { "default_value": true From 4a5d7cbc739132f654c5710634af02690dbbae93 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Oct 2016 13:08:10 +0200 Subject: [PATCH 072/114] Bindings of inheritance icon now correctly update when switching between machines CURA-2752 --- resources/qml/Settings/SettingItem.qml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 881cea39d2..7fa2856e27 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -208,12 +208,14 @@ Item { // But this will cause the binding to be re-evaluated when the enabled property changes. return false; } - + if(Cura.SettingInheritanceManager.settingsWithInheritanceWarning.length == 0) + { + return false; + } if(globalPropertyProvider.properties.limit_to_extruder == null || globalPropertyProvider.properties.limit_to_extruder == -1) { return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; } - return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, globalPropertyProvider.properties.limit_to_extruder).indexOf(definition.key) >= 0; } From b6464b12a1758299a8d92d24d5c30908994a22d1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 27 Oct 2016 13:14:13 +0200 Subject: [PATCH 073/114] Ignore externally loaded plug-ins We include these plug-ins with the build system, but for development it's easy to have them linked or copied into the plug-ins folder. But don't commit them! So here we ignore these plug-ins. --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 0a7523ff37..fd01d5ce76 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,10 @@ LC_MESSAGES # Debian packaging debian* + +#Externally located plug-ins. +plugins/Doodle3D-cura-plugin +plugins/GodMode +plugins/PostProcessingPlugin +plugins/UM3NetworkPrinting +plugins/X3GWriter \ No newline at end of file From 1aa71d6171304223be3f361508271b1493af5f09 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Oct 2016 14:26:43 +0200 Subject: [PATCH 074/114] Profiles model is now a singleton, to prevent the agressive garbage collecting to break stuff CURA-2826 --- cura/CuraApplication.py | 2 +- cura/Settings/ProfilesModel.py | 15 +++++++++++++++ resources/qml/Menus/ProfileMenu.qml | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index ec52c7aea1..3a67b9b95c 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -549,7 +549,7 @@ class CuraApplication(QtApplication): qmlRegisterType(cura.Settings.ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") qmlRegisterType(cura.Settings.ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel") - qmlRegisterType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel") + qmlRegisterSingletonType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel", cura.Settings.ProfilesModel.createProfilesModel) qmlRegisterType(cura.Settings.QualityAndUserProfilesModel, "Cura", 1, 0, "QualityAndUserProfilesModel") qmlRegisterType(cura.Settings.UserProfilesModel, "Cura", 1, 0, "UserProfilesModel") qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler") diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 2ad9813e37..c03e074053 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -25,6 +25,21 @@ class ProfilesModel(InstanceContainersModel): Application.getInstance().getMachineManager().activeStackChanged.connect(self._update) Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._update) + # Factory function, used by QML + @staticmethod + def createProfilesModel(engine, js_engine): + return ProfilesModel.getInstance() + + ## Get the singleton instance for this class. + @classmethod + def getInstance(cls): + # Note: Explicit use of class name to prevent issues with inheritance. + if ProfilesModel.__instance is None: + ProfilesModel.__instance = cls() + return ProfilesModel.__instance + + __instance = None + ## Fetch the list of containers to display. # # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers(). diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml index 4fa7a0d3c5..9dea8420bb 100644 --- a/resources/qml/Menus/ProfileMenu.qml +++ b/resources/qml/Menus/ProfileMenu.qml @@ -13,7 +13,7 @@ Menu Instantiator { - model: Cura.ProfilesModel { } + model: Cura.ProfilesModel MenuItem { From e0b926878f732608ee3b471f8141dba975dd62fd Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 27 Oct 2016 15:38:17 +0200 Subject: [PATCH 075/114] Remove code that sets incompatible materials to invalid type Instead use the "compatible" metadata entry like we do for nozzles. Setting the type differently caused all code that looks for materials to fail because "incompatible_material" is not "material". Since this is the base file, this meant a lot of materials failed to duplicate properly which caused crashes. Contributes to CURA-2821 --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index baf986067a..d6f16b08e9 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -411,6 +411,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): else: Logger.log("d", "Unsupported material setting %s", key) + self.addMetaDataEntry("compatible", global_compatibility) + self._dirty = False machines = data.iterfind("./um:settings/um:machine", self.__namespaces) @@ -447,6 +449,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_material.setName(self.getName()) new_material.setMetaData(copy.deepcopy(self.getMetaData())) new_material.setDefinition(definition) + new_material.setMetaDataEntry("compatible", machine_compatibility) for key, value in global_setting_values.items(): new_material.setProperty(key, "value", value, definition) @@ -492,7 +495,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData())) new_hotend_material.setDefinition(definition) new_hotend_material.addMetaDataEntry("variant", variant_containers[0].id) - new_hotend_material.addMetaDataEntry("compatible", hotend_compatibility) + new_hotend_material.setMetaDataEntry("compatible", hotend_compatibility) for key, value in global_setting_values.items(): new_hotend_material.setProperty(key, "value", value, definition) @@ -506,14 +509,6 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_hotend_material._dirty = False UM.Settings.ContainerRegistry.getInstance().addContainer(new_hotend_material) - if not global_compatibility: - # Change the type of this container so it is not shown as an option in menus. - # This uses InstanceContainer.setMetaDataEntry because otherwise all containers that - # share this basefile are also updated. - dirty = self.isDirty() - super().setMetaDataEntry("type", "incompatible_material") - super().setDirty(dirty) # reset dirty flag after setMetaDataEntry - def _addSettingElement(self, builder, instance): try: key = UM.Dictionary.findKey(self.__material_property_setting_map, instance.definition.key) From a7f8adb80a250026b5adce4be44bc438fc570539 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Oct 2016 20:14:39 +0200 Subject: [PATCH 076/114] Handles now correctly hide selection aura when in x-ray mode USL-33 --- plugins/XRayView/xray_composite.shader | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/plugins/XRayView/xray_composite.shader b/plugins/XRayView/xray_composite.shader index cdd3509e32..f6e67c1d0f 100644 --- a/plugins/XRayView/xray_composite.shader +++ b/plugins/XRayView/xray_composite.shader @@ -23,6 +23,10 @@ fragment = uniform vec4 u_outline_color; uniform vec4 u_error_color; + const vec3 x_axis = vec3(1.0, 0.0, 0.0); + const vec3 y_axis = vec3(0.0, 1.0, 0.0); + const vec3 z_axis = vec3(0.0, 0.0, 1.0); + varying vec2 v_uvs; float kernel[9]; @@ -51,7 +55,15 @@ fragment = sum += color * (kernel[i] / u_outline_strength); } - gl_FragColor = mix(result, vec4(abs(sum.a)) * u_outline_color, abs(sum.a)); + vec4 layer1 = texture2D(u_layer1, v_uvs); + if((layer1.rgb == x_axis || layer1.rgb == y_axis || layer1.rgb == z_axis)) + { + gl_FragColor = result; + } + else + { + gl_FragColor = mix(result, vec4(abs(sum.a)) * u_outline_color, abs(sum.a)); + } } [defaults] From 37d1c0be365c6fb5b46f8ae494f7ea2c918b999e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 27 Oct 2016 17:18:49 +0200 Subject: [PATCH 077/114] Add validator for machine names Currently this validator can't be used in QML due to a PyQt bug. I plan to call the validator manually upon receiving a signal that the text changed in a text box. Contributes to issue CURA-2692. --- cura/CuraApplication.py | 1 + cura/Settings/MachineNameValidator.py | 33 +++++++++++++++++++++++++++ cura/Settings/__init__.py | 1 + 3 files changed, 35 insertions(+) create mode 100644 cura/Settings/MachineNameValidator.py diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 3a67b9b95c..bd54209e36 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -554,6 +554,7 @@ class CuraApplication(QtApplication): qmlRegisterType(cura.Settings.UserProfilesModel, "Cura", 1, 0, "UserProfilesModel") qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler") qmlRegisterType(cura.Settings.QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel") + qmlRegisterType(cura.Settings.MachineNameValidator, "Cura", 1, 0, "MachineNameValidator") qmlRegisterSingletonType(cura.Settings.ContainerManager, "Cura", 1, 0, "ContainerManager", cura.Settings.ContainerManager.createContainerManager) diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py new file mode 100644 index 0000000000..c4f3d87582 --- /dev/null +++ b/cura/Settings/MachineNameValidator.py @@ -0,0 +1,33 @@ +# Copyright (c) 2016 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +import UM.Resources +import UM.Settings.ContainerRegistry +import UM.Settings.InstanceContainer + +from PyQt5.QtGui import QValidator +import os #For statvfs. +import urllib #To escape machine names for how they're saved to file. + +## Are machine names valid? +# +# Performs checks based on the length of the name. +class MachineNameValidator(QValidator): + ## Check if a specified machine name is allowed. + # + # \param name The machine name to check. + # \param position The current position of the cursor in the text box. + # \return ``QValidator.Invalid`` if it's disallowed, or + # ``QValidator.Acceptable`` if it's allowed. + def validate(self, name, position): + #Check for file name length of the current settings container (which is the longest file we're saving with the name). + try: + filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()) + except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. + filename_max_length = 255 #Assume it's Windows on NTFS. + escaped_name = urllib.parse.quote_plus(name) + current_settings_filename = escaped_name + "_current_settings." + UM.Settings.ContainerRegistry.getMimeTypeForContainer(UM.Settings.InstanceContainer).preferredSuffix + if current_settings_filename > filename_max_length: + return QValidator.Invalid + + return QValidator.Acceptable #All checks succeeded. \ No newline at end of file diff --git a/cura/Settings/__init__.py b/cura/Settings/__init__.py index a28073fa7f..0298ac886d 100644 --- a/cura/Settings/__init__.py +++ b/cura/Settings/__init__.py @@ -8,6 +8,7 @@ from .CuraContainerRegistry import CuraContainerRegistry from .ExtruderManager import ExtruderManager from .ExtrudersModel import ExtrudersModel from .MachineManager import MachineManager +from .MachineNameValidator import MachineNameValidator from .MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler from .SettingOverrideDecorator import SettingOverrideDecorator from .QualitySettingsModel import QualitySettingsModel From 717248bd78317ed0e9132d0fbf730cfac455b8fc Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 27 Oct 2016 21:55:48 +0200 Subject: [PATCH 078/114] Limit number of special characters There is also a more advanced attempt that allows more, but I've commented it out because it doesn't quite work yet. Special characters now always count for 12. Contributes to issue CURA-2652. --- cura/Settings/MachineNameValidator.py | 60 +++++++++++++++++++++++---- resources/qml/AddMachineDialog.qml | 8 ++++ 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index c4f3d87582..1ab063600a 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -1,18 +1,45 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. +from PyQt5.QtCore import pyqtSlot, pyqtProperty, QObject, pyqtSignal, QRegExp +from PyQt5.QtGui import QValidator +import os #For statvfs. +import urllib #To escape machine names for how they're saved to file. + import UM.Resources import UM.Settings.ContainerRegistry import UM.Settings.InstanceContainer -from PyQt5.QtGui import QValidator -import os #For statvfs. -import urllib #To escape machine names for how they're saved to file. - ## Are machine names valid? # # Performs checks based on the length of the name. -class MachineNameValidator(QValidator): +class MachineNameValidator(QObject): + def __init__(self, parent = None): + super().__init__(parent) + + #Compute the validation regex for printer names. This is limited by the maximum file name length. + try: + filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax + except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. + filename_max_length = 255 #Assume it's Windows on NTFS. + machine_name_max_length = filename_max_length - len("_current_settings.") - len(UM.Settings.ContainerRegistry.getMimeTypeForContainer(UM.Settings.InstanceContainer).preferredSuffix) + # Characters that urllib.parse.quote_plus escapes count for 3! So now we + # must devise a regex that allows only 3 normal characters or 1 special + # character, and that up to [machine_name_max_length / 3] times. + maximum_special_characters = int(machine_name_max_length / 12) + unescaped = r"[a-zA-Z0-9_\-\.\/]" + #single_length = r"[\u0000-\u007F]" + #double_length = r"[\u0080-\u07FF]" + #triple_length = r"[\u0800-\uFFFF]" + #quadruple_length = r"[\u10000-\u10FFFF]" + #self.machine_name_regex = r"((((" + unescaped + r"{0,3}|" + single_length + r"){0,2}" \ + # + r"|" + double_length + r"){0,2}" \ + # + r"|" + triple_length + r"){0,2}" \ + # + r"|" + quadruple_length + r"){0," + str(maximum_special_characters) + r"}" + self.machine_name_regex = r"((" + unescaped + "){0,12}|.){0," + str(maximum_special_characters) + r"}" + + validationChanged = pyqtSignal() + ## Check if a specified machine name is allowed. # # \param name The machine name to check. @@ -22,12 +49,29 @@ class MachineNameValidator(QValidator): def validate(self, name, position): #Check for file name length of the current settings container (which is the longest file we're saving with the name). try: - filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()) + filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. filename_max_length = 255 #Assume it's Windows on NTFS. escaped_name = urllib.parse.quote_plus(name) current_settings_filename = escaped_name + "_current_settings." + UM.Settings.ContainerRegistry.getMimeTypeForContainer(UM.Settings.InstanceContainer).preferredSuffix - if current_settings_filename > filename_max_length: + if len(current_settings_filename) > filename_max_length: return QValidator.Invalid - return QValidator.Acceptable #All checks succeeded. \ No newline at end of file + return QValidator.Acceptable #All checks succeeded. + + ## Updates the validation state of a machine name text field. + @pyqtSlot(str) + def updateValidation(self, new_name): + is_valid = self.validate(new_name, 0) + if is_valid == QValidator.Acceptable: + print("VALID") + self.validation_regex = "^.*$" #Matches anything. + else: + print("BROKEN!") + self.validation_regex = "a^" #Never matches (unless you manage to get "a" before the start of the string... good luck). + self.validationChanged.emit() + + @pyqtProperty("QRegExp", notify=validationChanged) + def machineNameRegex(self): + print(self.machine_name_regex) + return QRegExp(self.machine_name_regex) \ No newline at end of file diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/AddMachineDialog.qml index e37629306b..80ac1213a8 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/AddMachineDialog.qml @@ -175,6 +175,14 @@ UM.Dialog text: getMachineName() implicitWidth: UM.Theme.getSize("standard_list_input").width maximumLength: 40 + //validator: Cura.MachineNameValidator { } //TODO: Gives a segfault in PyQt5.6. For now, we must use a signal on text changed. + validator: RegExpValidator + { + regExp: { + machineName.machine_name_validator.machineNameRegex + } + } + property var machine_name_validator: Cura.MachineNameValidator { } anchors.bottom:parent.bottom } From 6e683dffc5059134f463609eb680562a5e557340 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 27 Oct 2016 23:35:29 +0200 Subject: [PATCH 079/114] Fix printrbot simple mesh alignment to buildplate grid --- resources/definitions/printrbot_simple.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/printrbot_simple.def.json b/resources/definitions/printrbot_simple.def.json index 3d082af89d..80801363c4 100644 --- a/resources/definitions/printrbot_simple.def.json +++ b/resources/definitions/printrbot_simple.def.json @@ -9,6 +9,7 @@ "manufacturer": "PrintrBot", "category": "Other", "platform": "printrbot_simple_metal_platform.stl", + "platform_offset": [0, -3.45, 0], "file_formats": "text/x-gcode" }, From 36fa4afc6c7e015700cc124829219200c989ad81 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 28 Oct 2016 09:55:19 +0200 Subject: [PATCH 080/114] Remove misguided attempt at representing UTF-8 encode length It was commented out anyway. I also updated the documentation there. Contributes to issue CURA-2692. --- cura/Settings/MachineNameValidator.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index 1ab063600a..d859e85343 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -23,19 +23,11 @@ class MachineNameValidator(QObject): except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. filename_max_length = 255 #Assume it's Windows on NTFS. machine_name_max_length = filename_max_length - len("_current_settings.") - len(UM.Settings.ContainerRegistry.getMimeTypeForContainer(UM.Settings.InstanceContainer).preferredSuffix) - # Characters that urllib.parse.quote_plus escapes count for 3! So now we - # must devise a regex that allows only 3 normal characters or 1 special - # character, and that up to [machine_name_max_length / 3] times. + # Characters that urllib.parse.quote_plus escapes count for 12! So now + # we must devise a regex that allows only 12 normal characters or 1 + # special character, and that up to [machine_name_max_length / 12] times. maximum_special_characters = int(machine_name_max_length / 12) unescaped = r"[a-zA-Z0-9_\-\.\/]" - #single_length = r"[\u0000-\u007F]" - #double_length = r"[\u0080-\u07FF]" - #triple_length = r"[\u0800-\uFFFF]" - #quadruple_length = r"[\u10000-\u10FFFF]" - #self.machine_name_regex = r"((((" + unescaped + r"{0,3}|" + single_length + r"){0,2}" \ - # + r"|" + double_length + r"){0,2}" \ - # + r"|" + triple_length + r"){0,2}" \ - # + r"|" + quadruple_length + r"){0," + str(maximum_special_characters) + r"}" self.machine_name_regex = r"((" + unescaped + "){0,12}|.){0," + str(maximum_special_characters) + r"}" validationChanged = pyqtSignal() From 74d8148e0ca0cc3161d62db8f77f5f81f4c883f2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 10:44:57 +0200 Subject: [PATCH 081/114] The right stack is now used for limit to extruder setting property provider for single extrusion machine This was mostly an issue when switching between printers, where some ids were set to undefined. CURA-2835 --- resources/qml/Settings/SettingView.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 76b136db57..16b5dada72 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -99,9 +99,9 @@ ScrollView when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0); value: { - if(!model.settable_per_extruder) + if(!model.settable_per_extruder || machineExtruderCount.properties.value == 1) { - //Not settable per extruder, so we must pick global. + //Not settable per extruder or there only is global, so we must pick global. return Cura.MachineManager.activeMachineId; } if(inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0) From db0fb0c652f829233512b0f38d4bf8c90c74b6f9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 11:37:09 +0200 Subject: [PATCH 082/114] Compatible metadata entry is now correctly set for each variant & machine CURA-2821 --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index d6f16b08e9..07acc5c37c 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -449,7 +449,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_material.setName(self.getName()) new_material.setMetaData(copy.deepcopy(self.getMetaData())) new_material.setDefinition(definition) - new_material.setMetaDataEntry("compatible", machine_compatibility) + # Don't use setMetadata, as that overrides it for all materials with same base file + new_material.getMetaData()["compatible"] = machine_compatibility for key, value in global_setting_values.items(): new_material.setProperty(key, "value", value, definition) @@ -495,7 +496,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData())) new_hotend_material.setDefinition(definition) new_hotend_material.addMetaDataEntry("variant", variant_containers[0].id) - new_hotend_material.setMetaDataEntry("compatible", hotend_compatibility) + # Don't use setMetadata, as that overrides it for all materials with same base file + new_hotend_material.getMetaData()["compatible"] = hotend_compatibility for key, value in global_setting_values.items(): new_hotend_material.setProperty(key, "value", value, definition) From e1ebd3e225c40d3a2cb77cff36d89014c1df4634 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 13:01:21 +0200 Subject: [PATCH 083/114] 3mf files are now placed in their own worldspace CURA-382 --- plugins/3MFReader/ThreeMFReader.py | 36 +++++++++--------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index c833e1195a..deb46422df 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -54,10 +54,6 @@ class ThreeMFReader(MeshReader): vertex_list.append([vertex.get("x"), vertex.get("y"), vertex.get("z")]) Job.yieldThread() - # If this object has no vertices and just one child, just return the child. - if len(vertex_list) == 0 and len(node.getChildren()) == 1: - return node.getChildren()[0] - if len(node.getChildren()) > 0: group_decorator = GroupDecorator() node.addDecorator(group_decorator) @@ -76,20 +72,10 @@ class ThreeMFReader(MeshReader): Job.yieldThread() - # Rotate the model; We use a different coordinate frame. - rotation = Matrix() - rotation.setByRotationAxis(-0.5 * math.pi, Vector(1, 0, 0)) - flip_matrix = Matrix() - - flip_matrix._data[1, 1] = 0 - flip_matrix._data[1, 2] = 1 - flip_matrix._data[2, 1] = 1 - flip_matrix._data[2, 2] = 0 - # TODO: We currently do not check for normals and simply recalculate them. mesh_builder.calculateNormals() mesh_builder.setFileName(name) - mesh_data = mesh_builder.build().getTransformed(flip_matrix) + mesh_data = mesh_builder.build() if len(mesh_data.getVertices()): node.setMeshData(mesh_data) @@ -122,13 +108,6 @@ class ThreeMFReader(MeshReader): temp_mat._data[1, 3] = splitted_transformation[10] temp_mat._data[2, 3] = splitted_transformation[11] - flip_matrix = Matrix() - flip_matrix._data[1, 1] = 0 - flip_matrix._data[1, 2] = 1 - flip_matrix._data[2, 1] = 1 - flip_matrix._data[2, 2] = 0 - temp_mat.multiply(flip_matrix) - return temp_mat def read(self, file_name): @@ -158,9 +137,14 @@ class ThreeMFReader(MeshReader): return None global_container_stack = UM.Application.getInstance().getGlobalContainerStack() - + flip_matrix = Matrix() + flip_matrix._data[1, 1] = 0 + flip_matrix._data[1, 2] = 1 + flip_matrix._data[2, 1] = 1 + flip_matrix._data[2, 2] = 0 + result.setTransformation(flip_matrix) if global_container_stack: - translation = Vector(x=-global_container_stack.getProperty("machine_width", "value") / 2, y=0, - z=global_container_stack.getProperty("machine_depth", "value") / 2) - result.translate(translation, SceneNode.TransformSpace.World) + translation = Vector(x=-global_container_stack.getProperty("machine_width", "value") / 2, z=0, + y=global_container_stack.getProperty("machine_depth", "value") / 2) + result.translate(translation) return result From 0d9fd3b41060de23356d3e0c1ecb92f3d68044b4 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 13:18:29 +0200 Subject: [PATCH 084/114] 3mf reader now sets names of nodes This makes debugging a whole lot easier. CURA-382 --- plugins/3MFReader/ThreeMFReader.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index deb46422df..519b7a86b7 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -11,9 +11,8 @@ from UM.Scene.GroupDecorator import GroupDecorator import UM.Application from UM.Job import Job -from UM.Math.Quaternion import Quaternion -import math +import os.path import zipfile try: @@ -31,9 +30,11 @@ class ThreeMFReader(MeshReader): "3mf": "http://schemas.microsoft.com/3dmanufacturing/core/2015/02", "cura": "http://software.ultimaker.com/xml/cura/3mf/2015/10" } + self._base_name = "" def _createNodeFromObject(self, object, name = ""): node = SceneNode() + node.setName(name) mesh_builder = MeshBuilder() vertex_list = [] @@ -42,8 +43,7 @@ class ThreeMFReader(MeshReader): for component in components: id = component.get("objectid") new_object = self._root.find("./3mf:resources/3mf:object[@id='{0}']".format(id), self._namespaces) - - new_node = self._createNodeFromObject(new_object) + new_node = self._createNodeFromObject(new_object, self._base_name + "_" + str(id)) node.addChild(new_node) transform = component.get("transform") if transform is not None: @@ -114,6 +114,7 @@ class ThreeMFReader(MeshReader): result = SceneNode() # The base object of 3mf is a zipped archive. archive = zipfile.ZipFile(file_name, "r") + self._base_name = os.path.basename(file_name) try: self._root = ET.parse(archive.open("3D/3dmodel.model")) @@ -122,7 +123,7 @@ class ThreeMFReader(MeshReader): for build_item in build_items: id = build_item.get("objectid") object = self._root.find("./3mf:resources/3mf:object[@id='{0}']".format(id), self._namespaces) - build_item_node = self._createNodeFromObject(object) + build_item_node = self._createNodeFromObject(object, self._base_name + "_" + str(id)) transform = build_item.get("transform") if transform is not None: build_item_node.setTransformation(self._createMatrixFromTransformationString(transform)) From 4ef2caddf5198cc10c04926c8289cd445d10c426 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 28 Oct 2016 13:24:57 +0200 Subject: [PATCH 085/114] Remove debug prints Oops. Contributes to issue CURA-2692. --- cura/Settings/MachineNameValidator.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index d859e85343..c4cab243c3 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -56,14 +56,11 @@ class MachineNameValidator(QObject): def updateValidation(self, new_name): is_valid = self.validate(new_name, 0) if is_valid == QValidator.Acceptable: - print("VALID") self.validation_regex = "^.*$" #Matches anything. else: - print("BROKEN!") self.validation_regex = "a^" #Never matches (unless you manage to get "a" before the start of the string... good luck). self.validationChanged.emit() @pyqtProperty("QRegExp", notify=validationChanged) def machineNameRegex(self): - print(self.machine_name_regex) return QRegExp(self.machine_name_regex) \ No newline at end of file From d33f6d2e44da83a4a3e655b847b835edf4e55964 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 28 Oct 2016 13:32:49 +0200 Subject: [PATCH 086/114] Make regex match exactly on entire string The carot indicates start of string, the dollar the end of string. So it must match on the entire string, not a piece of it. Contributes to issue CURA-2692. --- cura/Settings/MachineNameValidator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index c4cab243c3..34b6351144 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -28,7 +28,7 @@ class MachineNameValidator(QObject): # special character, and that up to [machine_name_max_length / 12] times. maximum_special_characters = int(machine_name_max_length / 12) unescaped = r"[a-zA-Z0-9_\-\.\/]" - self.machine_name_regex = r"((" + unescaped + "){0,12}|.){0," + str(maximum_special_characters) + r"}" + self.machine_name_regex = r"^((" + unescaped + "){0,12}|.){0," + str(maximum_special_characters) + r"}$" validationChanged = pyqtSignal() From 9f43a740a6a3146d32ef1684a69fa34a3c5a0f87 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 28 Oct 2016 13:33:26 +0200 Subject: [PATCH 087/114] Also validate machine name in rename dialogue Otherwise you could still circumvent the length limitation. Contributes to issue CURA-2692. --- resources/qml/Preferences/MachinesPage.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 78553bb37f..e6ddef7979 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -251,6 +251,8 @@ UM.ManagementPage { id: renameDialog; object: base.currentItem && base.currentItem.name ? base.currentItem.name : ""; + property var machine_name_validator: Cura.MachineNameValidator { } + validName: renameDialog.newName.match(renameDialog.machine_name_validator.machineNameRegex) != null; onAccepted: { Cura.MachineManager.renameMachine(base.currentItem.id, newName.trim()); From 70a33d9dc5b532ae3d95668e7683f7d7c2f150e1 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 13:44:52 +0200 Subject: [PATCH 088/114] Fixed drop to buildplate issue with 3mf CURA-382 --- cura/PlatformPhysics.py | 2 +- plugins/3MFReader/ThreeMFReader.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index 4325703a37..0bd7009ac8 100644 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -82,7 +82,7 @@ class PlatformPhysics: # Move it downwards if bottom is above platform move_vector = Vector() - if Preferences.getInstance().getValue("physics/automatic_drop_down") and not (node.getParent() and node.getParent().callDecoration("isGroup")): #If an object is grouped, don't move it down + if Preferences.getInstance().getValue("physics/automatic_drop_down") and not (node.getParent() and node.getParent().callDecoration("isGroup")) and node.isEnabled(): #If an object is grouped, don't move it down z_offset = node.callDecoration("getZOffset") if node.getDecorator(ZOffsetDecorator.ZOffsetDecorator) else 0 move_vector = move_vector.set(y=-bbox.bottom + z_offset) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 519b7a86b7..1dde3828b5 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -148,4 +148,5 @@ class ThreeMFReader(MeshReader): translation = Vector(x=-global_container_stack.getProperty("machine_width", "value") / 2, z=0, y=global_container_stack.getProperty("machine_depth", "value") / 2) result.translate(translation) + result.setEnabled(False) # The result should not be moved in any way, so disable it. return result From 75be8080ece325262bb83ac98ba9ebd7071c422d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 13:53:24 +0200 Subject: [PATCH 089/114] Platform physics now set the absolute position, instead of transforming in local space This fixes issues with 3MF, which don't share the same local coordinate space. CURA-382 --- cura/PlatformPhysicsOperation.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cura/PlatformPhysicsOperation.py b/cura/PlatformPhysicsOperation.py index fa58e45d9c..04f7e1616c 100644 --- a/cura/PlatformPhysicsOperation.py +++ b/cura/PlatformPhysicsOperation.py @@ -3,21 +3,22 @@ from UM.Operations.Operation import Operation from UM.Operations.GroupedOperation import GroupedOperation +from UM.Scene.SceneNode import SceneNode ## A specialised operation designed specifically to modify the previous operation. class PlatformPhysicsOperation(Operation): def __init__(self, node, translation): super().__init__() self._node = node - self._old_position = node.getPosition() - self._new_position = node.getPosition() + translation + self._old_transformation = node.getLocalTransformation() + self._translation = translation self._always_merge = True def undo(self): - self._node.setPosition(self._old_position) + self._node.setTransformation(self._old_transformation) def redo(self): - self._node.setPosition(self._new_position) + self._node.translate(self._translation, SceneNode.TransformSpace.World) def mergeWith(self, other): group = GroupedOperation() @@ -28,4 +29,4 @@ class PlatformPhysicsOperation(Operation): return group def __repr__(self): - return "PlatformPhysicsOperation(new_position = {0})".format(self._new_position) + return "PlatformPhysicsOperation(translation = {0})".format(self._translation) From af10438277cf412563b41c536f999c3c05a20f20 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 14:49:42 +0200 Subject: [PATCH 090/114] Fixed blurSetting CURA-2835 --- cura/Settings/MachineManager.py | 1 - resources/qml/Cura.qml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 5b57d7ec4a..0ce25c1438 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -248,7 +248,6 @@ class MachineManager(QObject): def _onActiveExtruderStackChanged(self): self.blurSettings.emit() # Ensure no-one has focus. - old_active_container_stack = self._active_container_stack if self._active_container_stack and self._active_container_stack != self._global_container_stack: diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 59e4848851..5c56abcc12 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -539,7 +539,7 @@ UM.MainWindow target: Cura.MachineManager onBlurSettings: { - contentItem.focus = true + forceActiveFocus() } } From 83315f13b32e325839836959a7558ebcc14eaa80 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 15:07:35 +0200 Subject: [PATCH 091/114] SetParent now correctly uses transformations This is different from the old way of setting scale / rotation & position in sequence. The assumption in that case only held if all spaces had the same axis orientations (which is not the case for 3MF) Contributes to CURA-382 --- cura/SetParentOperation.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cura/SetParentOperation.py b/cura/SetParentOperation.py index c40ce54909..064ab5304c 100644 --- a/cura/SetParentOperation.py +++ b/cura/SetParentOperation.py @@ -32,14 +32,20 @@ class SetParentOperation(Operation.Operation): # \param new_parent The new parent. Note: this argument can be None, which would hide the node from the scene. def _set_parent(self, new_parent): if new_parent: - self._node.setPosition(self._node.getWorldPosition() - new_parent.getWorldPosition()) current_parent = self._node.getParent() if current_parent: - self._node.scale(current_parent.getScale() / new_parent.getScale()) - self._node.rotate(current_parent.getOrientation()) - else: - self._node.scale(Vector(1, 1, 1) / new_parent.getScale()) - self._node.rotate(new_parent.getOrientation().getInverse()) + # Based on the depth difference, we need to do something different. + depth_difference = current_parent.getDepth() - new_parent.getDepth() + child_transformation = self._node.getLocalTransformation() + if depth_difference > 0: + parent_transformation = current_parent.getLocalTransformation() + # A node in the chain was removed, so we need to squash the parent info into all the nodes, so positions remain the same. + self._node.setTransformation(parent_transformation.multiply(child_transformation)) + else: + # A node is inserted into the chain, so use the inverse of the parent to set the transformation of it's children. + parent_transformation = new_parent.getLocalTransformation() + result = parent_transformation.getInverse().multiply(child_transformation, copy = True) + self._node.setTransformation(result) self._node.setParent(new_parent) From d5ba89a026178fb87a38a59d2d0023c0ddb2b393 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 28 Oct 2016 15:18:10 +0200 Subject: [PATCH 092/114] Add function to get other properties than values from all extruders I've made sure that the behaviour of getAllExtruderValues remains the same, so that this function may still be used by other pieces of code. It is now just a special case of getAllExtruderSettings. Please suggest a better naming scheme, if you like. Contributes to issue CURA-2823. --- cura/Settings/ExtruderManager.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 0236f158aa..b127f6575d 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -268,18 +268,22 @@ class ExtruderManager(QObject): container_registry.addContainer(container_stack) def getAllExtruderValues(self, setting_key): + return self.getAllExtruderSettings(setting_key, "value") + + ## Gets a + def getAllExtruderSettings(self, setting_key, property): global_container_stack = UM.Application.getInstance().getGlobalContainerStack() - multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1 - if not multi_extrusion: - return [global_container_stack.getProperty(setting_key, "value")] + if global_container_stack.getProperty("machine_extruder_count", "value") <= 1: + return [global_container_stack.getProperty(setting_key, property)] result = [] for index in self.extruderIds: extruder_stack_id = self.extruderIds[str(index)] - stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id=extruder_stack_id)[0] - result.append(stack.getProperty(setting_key, "value")) + stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] + result.append(stack.getProperty(setting_key, property)) return result + ## Removes the container stack and user profile for the extruders for a specific machine. # # \param machine_id The machine to remove the extruders for. From 2760055e89b28d46f123855675d28cced9d55747 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 28 Oct 2016 15:19:54 +0200 Subject: [PATCH 093/114] Use settings from all extruders for radius of moves from walls It computes the maximum move distance from the outer walls for all extruders, not just the platform adhesion extruder. Contributes to issue CURA-2823. --- cura/BuildVolume.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index e0153b4905..26f8a282a2 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -481,6 +481,15 @@ class BuildVolume(SceneNode): def _getSettingFromAdhesionExtruder(self, setting_key, property = "value"): return self._getSettingFromExtruder(setting_key, "adhesion_extruder_nr", property) + ## Private convenience function to get a setting from every extruder. + # + # For single extrusion machines, this gets the setting from the global + # stack. + # + # \return A sequence of setting values, one for each extruder. + def _getSettingFromAllExtruders(self, setting_key, property = "value"): + return ExtruderManager.getInstance().getAllExtruderSettings(setting_key, property) + ## Private convenience function to get a setting from the support infill # extruder. # @@ -563,10 +572,12 @@ class BuildVolume(SceneNode): farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value")) move_from_wall_radius = 0 # Moves that start from outer wall. - if self._getSettingFromAdhesionExtruder("infill_wipe_dist"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist")) - if self._getSettingFromAdhesionExtruder("travel_avoid_distance") and self._getSettingFromAdhesionExtruder("travel_avoid_other_parts"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance")) + move_from_wall_radius = max(move_from_wall_radius, max(self._getSettingFromAllExtruders("infill_wipe_dist"))) + avoid_enabled_per_extruder = self._getSettingFromAllExtruders(("travel_avoid_other_parts")) + avoid_distance_per_extruder = self._getSettingFromAllExtruders("travel_avoid_distance") + for index, avoid_other_parts_enabled in enumerate(avoid_enabled_per_extruder): #For each extruder (or just global). + if avoid_other_parts_enabled: + move_from_wall_radius = max(move_from_wall_radius, avoid_distance_per_extruder[index]) #Index of the same extruder. #Now combine our different pieces of data to get the final border size. #Support expansion is added to the bed adhesion, since the bed adhesion goes around support. From fe014efdfb8254cf82a7120b650434ba741627a6 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 15:44:20 +0200 Subject: [PATCH 094/114] SetParentOperation now also takes removed group nodes into account CURA-382 --- cura/SetParentOperation.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cura/SetParentOperation.py b/cura/SetParentOperation.py index 064ab5304c..e2fb18feff 100644 --- a/cura/SetParentOperation.py +++ b/cura/SetParentOperation.py @@ -34,6 +34,13 @@ class SetParentOperation(Operation.Operation): if new_parent: current_parent = self._node.getParent() if current_parent: + # Special casing for groups that have been removed. + # In that case we want to put them back where they belong before checking the depth difference. + # If we don't, we always get 0. + old_parent = new_parent.callDecoration("getOldParent") + if old_parent: + new_parent.callDecoration("getNode").setParent(old_parent) + # Based on the depth difference, we need to do something different. depth_difference = current_parent.getDepth() - new_parent.getDepth() child_transformation = self._node.getLocalTransformation() From c240f42b643566cb42834f8720b636fd087b6d88 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 16:19:53 +0200 Subject: [PATCH 095/114] 3MF files are now correctly loaded inside the build platform CURA-382 --- plugins/3MFReader/ThreeMFReader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 1dde3828b5..c296f14a52 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -141,12 +141,12 @@ class ThreeMFReader(MeshReader): flip_matrix = Matrix() flip_matrix._data[1, 1] = 0 flip_matrix._data[1, 2] = 1 - flip_matrix._data[2, 1] = 1 + flip_matrix._data[2, 1] = -1 flip_matrix._data[2, 2] = 0 result.setTransformation(flip_matrix) if global_container_stack: translation = Vector(x=-global_container_stack.getProperty("machine_width", "value") / 2, z=0, - y=global_container_stack.getProperty("machine_depth", "value") / 2) + y=-global_container_stack.getProperty("machine_depth", "value") / 2) result.translate(translation) result.setEnabled(False) # The result should not be moved in any way, so disable it. return result From 273b996cc1dfaa3051cdc928c721fdb304875efc Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 28 Oct 2016 16:42:07 +0200 Subject: [PATCH 096/114] 3MF reader now correctly supports unit CURA-382 --- plugins/3MFReader/ThreeMFReader.py | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index c296f14a52..0d6b9f3095 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -31,6 +31,7 @@ class ThreeMFReader(MeshReader): "cura": "http://software.ultimaker.com/xml/cura/3mf/2015/10" } self._base_name = "" + self._unit = None def _createNodeFromObject(self, object, name = ""): node = SceneNode() @@ -117,6 +118,7 @@ class ThreeMFReader(MeshReader): self._base_name = os.path.basename(file_name) try: self._root = ET.parse(archive.open("3D/3dmodel.model")) + self._unit = self._root.getroot().get("unit") build_items = self._root.findall("./3mf:build/3mf:item", self._namespaces) @@ -148,5 +150,35 @@ class ThreeMFReader(MeshReader): translation = Vector(x=-global_container_stack.getProperty("machine_width", "value") / 2, z=0, y=-global_container_stack.getProperty("machine_depth", "value") / 2) result.translate(translation) + result.scale(self._getScaleFromUnit(self._unit)) result.setEnabled(False) # The result should not be moved in any way, so disable it. return result + + ## Create a scale vector based on a unit string. + # The core spec defines the following: + # * micron + # * millimeter (default) + # * centimeter + # * inch + # * foot + # * meter + def _getScaleFromUnit(self, unit): + if unit is None: + unit = "millimeter" + if unit == "micron": + scale = 0.001 + elif unit == "millimeter": + scale = 1 + elif unit == "centimeter": + scale = 10 + elif unit == "inch": + scale = 25.4 + elif unit == "foot": + scale = 304.8 + elif unit == "meter": + scale = 1000 + else: + Logger.log("w", "Unrecognised unit %s used. Assuming mm instead", unit) + scale = 1 + + return Vector(scale, scale, scale) \ No newline at end of file From aa92428c04925c7a1f8541cfd6de0debc4c0d471 Mon Sep 17 00:00:00 2001 From: Thomas Karl Pietrowski Date: Sun, 30 Oct 2016 16:45:45 +0100 Subject: [PATCH 097/114] Cleanup: Remove debug print --- cura/Settings/ContainerManager.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index f94f628686..0002b2bf6e 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -791,7 +791,6 @@ class ContainerManager(QObject): # Create a new quality_changes container for the quality. quality_changes = UM.Settings.InstanceContainer(self._createUniqueId(base_id, new_name)) - print(quality_changes.getId()) quality_changes.setName(new_name) quality_changes.addMetaDataEntry("type", "quality_changes") quality_changes.addMetaDataEntry("quality_type", quality_container.getMetaDataEntry("quality_type")) From 00890abe303a07cae15686860983d2d58a446407 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 31 Oct 2016 10:55:08 +0100 Subject: [PATCH 098/114] Set horizontal expansion to -0.14mm The material team observed that the size of prints was slightly too big. They decided that this adjustment was the best solution. Contributes to issue CURA-2845. --- resources/definitions/ultimaker3.def.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 8be8751d68..ff3c7eb943 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -154,6 +154,7 @@ "travel_avoid_distance": { "value": "3" }, "wall_0_inset": { "value": "0" }, "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, - "wall_thickness": { "value": "1" } + "wall_thickness": { "value": "1" }, + "xy_offset": { "value": "-0.14" } } } From 8c25a91e029af914148fcbe3936c522e5486a395 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Mon, 31 Oct 2016 11:45:59 +0100 Subject: [PATCH 099/114] Added a comment to help provide some kind of explaination for this magic value. CURA-2845 Prints are slightly oversized --- resources/definitions/ultimaker3.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index ff3c7eb943..26b3a8495a 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -155,6 +155,6 @@ "wall_0_inset": { "value": "0" }, "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, "wall_thickness": { "value": "1" }, - "xy_offset": { "value": "-0.14" } + "xy_offset": { "value": "-0.14", "comment": "This is a hack to compensate for oversized prints. CURA-2845" } } } From 9a8a5db06ef4f79a9335ed960831bb7770f04a73 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 31 Oct 2016 12:41:29 +0100 Subject: [PATCH 100/114] Fix documentation for getAllExtruderSettings Didn't complete it previously. Oops. Contributes to issue CURA-2823. --- cura/Settings/ExtruderManager.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index b127f6575d..0ade958f86 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -270,7 +270,10 @@ class ExtruderManager(QObject): def getAllExtruderValues(self, setting_key): return self.getAllExtruderSettings(setting_key, "value") - ## Gets a + ## Gets a property of a setting for all extruders. + # + # \param setting_key The setting to get the property of. + # \param property The property to get. def getAllExtruderSettings(self, setting_key, property): global_container_stack = UM.Application.getInstance().getGlobalContainerStack() if global_container_stack.getProperty("machine_extruder_count", "value") <= 1: From e74953c8bccee32210427bed3327e7faedc2388c Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Mon, 31 Oct 2016 13:27:22 +0100 Subject: [PATCH 101/114] Internal docs. CURA-2823 Maximum build volume not met despite disabled settings --- cura/Settings/ExtruderManager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 0ade958f86..d3005a78fe 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -272,8 +272,9 @@ class ExtruderManager(QObject): ## Gets a property of a setting for all extruders. # - # \param setting_key The setting to get the property of. - # \param property The property to get. + # \param setting_key \type{str} The setting to get the property of. + # \param property \type{str} The property to get. + # \return \type{List} the list of results def getAllExtruderSettings(self, setting_key, property): global_container_stack = UM.Application.getInstance().getGlobalContainerStack() if global_container_stack.getProperty("machine_extruder_count", "value") <= 1: From 41ed9661f602d001f48e4a330c12e2a44c03e977 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 31 Oct 2016 15:43:53 +0100 Subject: [PATCH 102/114] FindQUalityByName now also uses fallback generic materials if no result was found CURA-2852 --- cura/QualityManager.py | 9 ++++++++- cura/Settings/ContainerManager.py | 9 ++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index 52c052ad28..8918b818f1 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -30,7 +30,14 @@ class QualityManager: # \return the matching quality containers \type{List[ContainerInstance]} def findQualityByName(self, quality_name, machine_definition=None, material_containers=None): criteria = {"type": "quality", "name": quality_name} - return self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) + result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) + + # Fall back to using generic materials and qualities if nothing could be found. + if not result and material_containers and len(material_containers) == 1: + basic_materials = self._getBasicMaterials(material_containers[0]) + result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) + + return result[0] if result else None ## Find a quality changes container by name. # diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index f94f628686..54ef997ce2 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -611,13 +611,12 @@ class ContainerManager(QObject): if base_name is None: base_name = quality_name - # Try to find a Quality with the name. - containers = QualityManager.getInstance().findQualityByName(quality_name, machine_definition, material_instances) - if containers: - container = containers[0] + container = QualityManager.getInstance().findQualityByName(quality_name, machine_definition, material_instances) + if container: + UM.Logger.log("d", "We found a quality to duplicate.") return self._duplicateQualityForMachineType(container, base_name, machine_definition) - + UM.Logger.log("d", "We found a quality_changes to duplicate.") # Assume it is a quality changes. return self._duplicateQualityChangesForMachineType(quality_name, base_name, machine_definition) From 21f1b12ee89e2924d2005892ee7d76b08e1e8114 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Mon, 31 Oct 2016 16:03:40 +0100 Subject: [PATCH 103/114] Internal docs. CURA-2852 Activating customised material will not duplicate UM2+ profiles --- cura/QualityManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index 8918b818f1..0b4353442e 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -27,7 +27,7 @@ class QualityManager: # specified then the currently selected machine definition is used. # \param material_containers (Optional) \type{List[ContainerInstance]} If nothing is specified then # the current set of selected materials is used. - # \return the matching quality containers \type{List[ContainerInstance]} + # \return the matching quality container \type{ContainerInstance} def findQualityByName(self, quality_name, machine_definition=None, material_containers=None): criteria = {"type": "quality", "name": quality_name} result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) From 48b57de6dfc43552ec11dd71ccd7e477ef91527d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 31 Oct 2016 17:26:27 +0100 Subject: [PATCH 104/114] Filter materials on compatibility for non-machine-specific materials This only listens to whether the 'base' XML profile is marked as compatible in its metadata, but since the machine doesn't have its own materials, the base is the only one that exists. This needs to be changed when we change the filtering on fdmprinter, hence the comment in the code. Contributes to issue CURA-2837. --- resources/qml/Menus/MaterialMenu.qml | 1 + resources/qml/Preferences/MaterialsPage.qml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 534be456ed..573dff89dd 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -153,6 +153,7 @@ Menu else { result.definition = "fdmprinter"; + result.compatible = true; //NB: Only checks for compatibility in global version of material, but we don't have machine-specific materials anyway. } return result; } diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 8ba26b6ac3..83f980bf86 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -29,7 +29,8 @@ UM.ManagementPage } else { - result.definition = "fdmprinter" + result.definition = "fdmprinter"; + result.compatible = true; //NB: Only checks for compatibility in global version of material, but we don't have machine-specific materials anyway. } return result } From 0db7cf2453b574f422f5281da3fa65bd71f2adac Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 1 Nov 2016 10:28:09 +0100 Subject: [PATCH 105/114] Revert 'Added a comment' and 'Set horizontal expansion' This horizontal expansion messes prints with very thin parts. It was probably the wrong solution for the problem. We'll revert the change until we hear more from tests at the materials team. Contributes to issue CURA-2845. --- resources/definitions/ultimaker3.def.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 26b3a8495a..8be8751d68 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -154,7 +154,6 @@ "travel_avoid_distance": { "value": "3" }, "wall_0_inset": { "value": "0" }, "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, - "wall_thickness": { "value": "1" }, - "xy_offset": { "value": "-0.14", "comment": "This is a hack to compensate for oversized prints. CURA-2845" } + "wall_thickness": { "value": "1" } } } From fc3d16e8c8dde19b9b1944f88147753e43fc8c9a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 1 Nov 2016 11:16:43 +0100 Subject: [PATCH 106/114] Removed the need of a _3mf root node This significantly decreases the issues that we had with saving files, as we no longer need to take special cases into account CURA-382 --- plugins/3MFReader/ThreeMFReader.py | 43 +++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 0d6b9f3095..d688de93e9 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -113,6 +113,8 @@ class ThreeMFReader(MeshReader): def read(self, file_name): result = SceneNode() + group_decorator = GroupDecorator() + result.addDecorator(group_decorator) # The base object of 3mf is a zipped archive. archive = zipfile.ZipFile(file_name, "r") self._base_name = os.path.basename(file_name) @@ -129,6 +131,34 @@ class ThreeMFReader(MeshReader): transform = build_item.get("transform") if transform is not None: build_item_node.setTransformation(self._createMatrixFromTransformationString(transform)) + global_container_stack = UM.Application.getInstance().getGlobalContainerStack() + + # Create a transformation Matrix to convert from 3mf worldspace into ours. + # First step: flip the y and z axis. + transformation_matrix = Matrix() + transformation_matrix._data[1, 1] = 0 + transformation_matrix._data[1, 2] = 1 + transformation_matrix._data[2, 1] = -1 + transformation_matrix._data[2, 2] = 0 + + # Second step: 3MF defines the left corner of the machine as center, whereas cura uses the center of the + # build volume. + if global_container_stack: + translation_vector = Vector(x = -global_container_stack.getProperty("machine_width", "value") / 2, + y = -global_container_stack.getProperty("machine_depth", "value") / 2, + z = 0) + translation_matrix = Matrix() + translation_matrix.setByTranslation(translation_vector) + transformation_matrix.multiply(translation_matrix) + + # Third step: 3MF also defines a unit, wheras Cura always assumes mm. + scale_matrix = Matrix() + scale_matrix.setByScaleVector(self._getScaleFromUnit(self._unit)) + transformation_matrix.multiply(scale_matrix) + + # Pre multiply the transformation with the loaded transformation, so the data is handled correctly. + build_item_node.setTransformation(build_item_node.getLocalTransformation().preMultiply(transformation_matrix)) + result.addChild(build_item_node) except Exception as e: @@ -139,18 +169,7 @@ class ThreeMFReader(MeshReader): except: return None - global_container_stack = UM.Application.getInstance().getGlobalContainerStack() - flip_matrix = Matrix() - flip_matrix._data[1, 1] = 0 - flip_matrix._data[1, 2] = 1 - flip_matrix._data[2, 1] = -1 - flip_matrix._data[2, 2] = 0 - result.setTransformation(flip_matrix) - if global_container_stack: - translation = Vector(x=-global_container_stack.getProperty("machine_width", "value") / 2, z=0, - y=-global_container_stack.getProperty("machine_depth", "value") / 2) - result.translate(translation) - result.scale(self._getScaleFromUnit(self._unit)) + result.setEnabled(False) # The result should not be moved in any way, so disable it. return result From d889c8370fe38e5008700a62d4b2f295b0ca0f5c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 1 Nov 2016 12:49:41 +0100 Subject: [PATCH 107/114] Improve Italian translations These improvements have been suggested by Nina, who checked this together with a native Italian speaker. --- resources/i18n/it/cura.po | 6 +++--- resources/i18n/it/fdmprinter.def.json.po | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/i18n/it/cura.po b/resources/i18n/it/cura.po index bd8b392323..e69f09a9c9 100644 --- a/resources/i18n/it/cura.po +++ b/resources/i18n/it/cura.po @@ -160,13 +160,13 @@ msgstr "Salvato su unità rimovibile {0} come {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:103 msgctxt "@action:button" msgid "Eject" -msgstr "Espelli" +msgstr "Rimuovi" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:103 #, python-brace-format msgctxt "@action" msgid "Eject removable device {0}" -msgstr "Espelli il dispositivo rimovibile {0}" +msgstr "Rimuovi il dispositivo rimovibile {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:108 #, python-brace-format @@ -2008,7 +2008,7 @@ msgstr "Sel&eziona tutti i modelli" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:248 msgctxt "@action:inmenu menubar:edit" msgid "&Clear Build Plate" -msgstr "&Cancella piano di stampa" +msgstr "&Cancellare piano di stampa" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/it/fdmprinter.def.json.po b/resources/i18n/it/fdmprinter.def.json.po index 311d2292de..dc83a99030 100644 --- a/resources/i18n/it/fdmprinter.def.json.po +++ b/resources/i18n/it/fdmprinter.def.json.po @@ -2257,12 +2257,12 @@ msgstr "Regola il posizionamento delle strutture di supporto. Il posizionamento #: fdmprinter.def.json msgctxt "support_type option buildplate" msgid "Touching Buildplate" -msgstr "Sostegno solo delle pareti esterne" +msgstr "Contatto con il Piano di Stampa" #: fdmprinter.def.json msgctxt "support_type option everywhere" msgid "Everywhere" -msgstr "In tutti i possibili punti" +msgstr "In Tutti i Possibili Punti" #: fdmprinter.def.json msgctxt "support_angle label" From 073c2192334ee359669d841936dabacf6cde6b67 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 1 Nov 2016 12:50:06 +0100 Subject: [PATCH 108/114] Use spaces instead of tabs As per our code standards. --- resources/definitions/ultimaker3_extended.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json index 13ce93b05a..31bf2417e4 100644 --- a/resources/definitions/ultimaker3_extended.def.json +++ b/resources/definitions/ultimaker3_extended.def.json @@ -14,7 +14,7 @@ "platform_texture": "Ultimaker3Extendedbackplate.png", "platform_offset": [0, 0, 0], "has_machine_quality": true, - "has_machine_materials": true, + "has_machine_materials": true, "has_variant_materials": true, "has_materials": true, "has_variants": true, From bb32fcf0e9701c8fcc0445e6305b1b137abc3312 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 1 Nov 2016 13:39:06 +0100 Subject: [PATCH 109/114] Add context to 'ready to' buttons This should make translating easier. --- .../RemovableDriveOutputDevice/RemovableDriveOutputDevice.py | 2 +- plugins/USBPrinting/USBPrinterOutputDevice.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py index 61f3bdb3be..3fdd6b3e3e 100644 --- a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py +++ b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py @@ -20,7 +20,7 @@ class RemovableDriveOutputDevice(OutputDevice): super().__init__(device_id) self.setName(device_name) - self.setShortDescription(catalog.i18nc("@action:button", "Save to Removable Drive")) + self.setShortDescription(catalog.i18nc("@action:button Preceded by 'Ready to'.", "Save to Removable Drive")) self.setDescription(catalog.i18nc("@item:inlistbox", "Save to Removable Drive {0}").format(device_name)) self.setIconName("save_sd") self.setPriority(1) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index d98f631a2e..6147bfb53f 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -25,7 +25,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): def __init__(self, serial_port): super().__init__(serial_port) self.setName(catalog.i18nc("@item:inmenu", "USB printing")) - self.setShortDescription(catalog.i18nc("@action:button", "Print via USB")) + self.setShortDescription(catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print via USB")) self.setDescription(catalog.i18nc("@info:tooltip", "Print via USB")) self.setIconName("print") self.setConnectionText(catalog.i18nc("@info:status", "Connected via USB")) From f9e9e247abf6adaee574afcc7076c343197d4cbd Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Tue, 1 Nov 2016 15:01:34 +0100 Subject: [PATCH 110/114] Documentation explaining how the different settings containers are structured with respect to each other. --- docs/Cura_Data_Model.odg | Bin 0 -> 21385 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/Cura_Data_Model.odg diff --git a/docs/Cura_Data_Model.odg b/docs/Cura_Data_Model.odg new file mode 100644 index 0000000000000000000000000000000000000000..b4a6dd548b862011e4972d6693f7bf62393049bf GIT binary patch literal 21385 zcmbSy1CS=o((cTTZ5uoGj&0kX9qoADv2EM7ZQHhO+r0aoi}?SDb5F#*8Btl;+5J>? zWmi;ZS7ysgfq6z|hgk*xG^4#7^JF)XdOc{=YT&w~hZp*ncGBmZ504gi4Ve@6Yg z(b+rbJ2?J-^!CRRpzmP(|2jH-LqlUrK~rm@ktHn#jNJZMu9~~W8A7waAjS6LRBSI;*#DGG8(sJqLMSpsIl5P$XASZ~YN*Zw;x2KX0 z(D`fe3rBbbgj+;0CnU6+qrcYj}eU-Q-8C^0sB&#-YWhrre zurfNbo+`Dp@2om;b)g<}`S%zmrEMOC*Xd3t(G}{MI4fDW4v+GRN!6n*!@7V*t*d*} zdb;WU7o8%XI$d&C9_tS=I6aMUY1_eAxnE)FDqc3|FG+00aS@3Kt~#+{oO()(*x1CQ zTct^Usy#o>@^qrKMl$DXtJfVG95;(V7{qXhMb}deuF}T1@c~r#E1Bsityt{aFyGK2 zXVK+)TJ6ZME1faTAS$Hl9GWtdms7_XYzgo_(t2%WTiGM`TiG3 zqj})AS#R~}P;dEud%c-Bm{p*-2!ys8 zsg;0;$cg&h7+>Y_v@rH7V=&tz-T(v}-Rq>;OXqo6R(4CsaXcaU+{awXu+hj)2y)P0 z1g_Z6VDqLZf#T`PNjGgFj~u2zr#cc~Ldc^F4JsyJ&kampU{Yxx#}zXY&=G%F6`83X z>H1rf)$pl%1YBC}{y68Us!SSh-+I1Gilqf(AsKY74!1%E%r~>1ljAaZ2@;0uek8S}+kC@T94Uf)Fe zDBff|j5$hyDqT4SnAR9ENwOMwAn%@q3?2YaXl5Z1t2`$bye^M83=;QJXN`<@k4`7R zjWzZ^lh*0XC(Mry>wyQ>!O9U&Lev3+oWvFqd0bw7$#ehOZ!2+q2fqj3Xd57hggo2U z?CFN-m67fbct-GY=E#)!6K}(sI{m;dd{quK#6;iIE5rUCfm1F*MfpO$5~qygyhyN{ zI>fenaYWY90&ENDJA~sEtWmUNEFX*5aHo4epznEE4mD;3OUQ|Bh;OO*0l9ybpFB%E zSblI}i7whI1l^vo3q)Q{N?9}Ws~^Gi35A-1Do^BU5nO`|?=7|rbbNXHIGoqNJ zghU!5I5j)G;5m17g3H*d<@#csPYspSX9D`T_m#!0Y~qp%^HK6brw}o!4`H6*ZY>mr z*yG}{OQeBBnkBxFS4N6GvECh9TFd_DzbH9xYm9pWY5jG#b}XD~8m4ii7_~I|+MnNX z3?5@<+qYJVSS>N#nk`Fkn%d2T-VQ$-c#@+KRzPg=1pC9`QBjcOqMcF55qmhf4J(D% zdUtJV>~XEe4bVIp9=H#@Ic5F-$lJ1^Os|zJ=8B>}5f_4Z*Y8gb$f#4>Gw;DEb?)iVX^PmIlm6v?&N*I^VM-iT-jI*aGTJ{h zb@<@@{VBH(GesQ5Rl>nR-4RjYJBPVMoyq!6k{4;bbXm2#PCpq zfMDhZ3cstilY^YvTm*%&;CFL}n3fHj%fJ2_E@Wye7(k~>DtJsTM8U1qAs(Qc37h*G zK5+badgGdF`?hBUNvms`p__%6n~YWLzdB0D`E3Yh9&8yV;ax(;y>jl;ncE<#ps%Bq za@PwBT?}q6=6E@WXEBEUtAZ1~=>zId{qa(tC2Mo{AXiBvssl-BQpMx~ecLP$l7-!mHVT1N5^}w^W|JRJ8Lg%ASyL-nn z5*I7BcFI>2etnvwZDZn5)(}fZ_Y58_21@(J5@w{%G&@tG{G)qz357C3Me{FXcb@mn zFP=lV<7CIr%ZpsE=ECL|IEOms7&-;l)?6nfn;wpynM(^ty}^sp`5U}%#iC3uNWp$a zSfPFo5oA0^qk#8{`sm((09J1H$}R{^506i-$b%$_ z5%o7mQ9$uDYig)z*VElo8ig1Oi2ItmN$)FvFret`{B(x}pb!7>rAu)2X$FCB`8ny> z$Ad0|=YWqQi?V2~F_<91Ckb*1!yL>VusJ@g@JX~j^Qm@7nJ@BPjEvVlMZx=}WAlNs z+}ABo=7jh;c{bzeT$r4?gB|ZDXY&MFwAZ~U5q+Y;$?w4kkE!&9saWOe@tqNe-?fuk zK1wZ4DrOP*`5rLa%SIf^b zp^j@jQlfZ+%L&)zkbbKCG+<`mfpHo>va$~u%@=huYj10>m6qwOr?06UM;ewi4mgJ$ zVsG6tZr-;+hkd}s7My;4YQhu6fBPsgs>>zyx}qMYIDtzGw}G5uz>J=?jnZdyOOk)| zAaukbYwE8(((vGRh(=ZI(l|lq=_DiT9nG&6VJ(OYCU zu@K?}eQ5hVw{UDYO~FkD-m!m6$-sAWsjJ83Dvw4YzHV~qRl2op#PgBcM*SSht9&hZ ze(gbJfq&ai^1&!|py3xtRfwN3(UFuH|FXPjxz=yrQx3s&GgUKnDFCo;&M&+NR$akr z0KiQpzbzKW$}#u^f}BlG&)%@H`!Os(;L--c-B8gz-$lRb=LEwrr?mLHcXg7@7Ax-n zq$4mYT0?I8ZhuE!BH$+z9TdcktzWMr-*8ihb4^;UH_iTUIW=YOdPDFTaj?KuC3elQ#gq z5#*&HAoVPbQ)Zxmfc&_Cfd0EHKhvm=^@I)t^iTQ6wN^HDv@)>PH?y>-clh5TosG3g zsJyHg95nVnt|FX-xUk~iS`!Ee7zh&NuLO!3i}v^6R9;$HgjrmdTgj4F&6ZEy4xj{N zuL|U;3nU~YBqJjuuAr)SN}etnFK3?UUf>AMP3$X&02?5gzXrp7}ed z$}p_KF+9&Ds>nQ{*DiZH+zcqz3MkDUDBlgJ#0#jx7pT-9u{IE>DFmoJ0;oO=u^|$x zC61sXlA$(|uqBSLHCw5(K&`FVx;GYRG#O|-1!yu0elQtvI2~ssi*Pm%ZLSb+q>y`| zgk-6ldb&bryhd-Z{P$#oiLbA3czC!^bV@)%W=L#Oe0+R*dU|kDj!%3^SXzEmR!MYD zX?%V~W`0pxL0Lj!O;Sl+Msa;wd1HEIOIA&L{$DDsEH5w5uWTr+YpZH#E^BD5|4XeM zU0q#yjXi~}110UlWu2q-?E{s)lhp$=HG{K_V@pjFD=kxN?X#Pm^E(sm!DF4tn?pXc zgW2Q#r4yswOQZQGGhw#}-TnRjeZyk|V-w@!;{y|m%L`-k^YhDV8|&-qJxlw2t4D(y zrz6{!qdQkqM-N9k(^p5+#|Ik^r^AmI)6Z9nuXo$~`}^nT=O3@vcXxO9uODAuUw@zY z_xE=~mP{KE5bB78uz<45+NCyJy!NmPTCM@|_#d{31WTAW;wG>a_E;Lr!k3aANsriH_8u;&+UtI`a4$`J$vvt-L<&AY)DF>^u zsvunv3SF?6vlx9N2L;|xVeO4!dH^3!w7Rgqy~fi05N;rGGxmxsg0EHz$^_wn7!i>4X0SO9Dn^0-EZ$5-~(=*dez3`RQmE)@~ZudGSN z1FVx_y2xDm7c!M%o$l^NooBw~>a(&ekFS@|YUqYC*>bN=mDS7Pca_FVlbmV2HkZ>r z3kxd+IxD0%B}cf-FD~eDIht#jo9KXU04~~hu_y5{?A)muE%3ji6k=^ z)7gCAD;Cv2Zx%u)>1fkXTrmYP(68YR3E9QA$S$UfuPx97FIA z4+P%N$$H;I0MGq&z3<-WVKQ1a&Or}LMYwTY^f@w*%;?j-#Ti>ho3)y;0TDX7bo83m z5spDaw3@^jS7T`hzbr=+>2vd-*BRevG!&hj=HiMeBDP5hf#_Vxd6uOlei&SH*B)mw z*9V)vrPCVdTr!!eBXz6=QM6-$af12NtgA=4^vbXO##5D_&WM$bETYR(Wo=Emx5OtL z!M9#zT?hmlHE!qD@ESmuQt=~J5CkoNOed9?tzM1&SBHnqoX_CDiyIf$v6E945BV^> zm*+3<04+osh`QPK)n^fzY#!be->yhWZ*S-0NQiepHckeYGeY-Oqdo>yPg17PJ)s{h z#3>~9+jh8Tk7AcSV{W(8%Ky)*~AEYFbDeHlM}{4&yoS*>R9 zesBN&cy^G@2`)4}E~Q+waHsY%nMvKiRypmxbEr>7+co)EX0}xb2-*=;_Q@57Y+Y5Y zNMT7|yB?eb)ZKWOg`l`&17}-E>m0^0bs-lAhOVGyF*#wMeJ12c=E~?zyt;`@JBfsY z5DthB(A^nMcnuFo=_bEl}%RUrc1(+v9BHR|&UlgTlz%X7g@ygJ1Uj%8NTA%l=pUN&i|F$!?PwJ7#X7LuI4A#aujnu;ZCl zKK`$~Cm-cV5)4!fMCUO=itD}@<#xeoI9^+EvKL=mFbj$Lj95b#JU~5^gZmbE9n6~M zIQSiY@rjJSXpC^Ok`0cad+CYY z`iOdKJ#Or^QKsP;u17c?GKDW|uCS$#DaF>2y5L?%tq|$0zwOu=H1Y6J5p}9Ft<(UDRoIBV+#7j{N4UUH+9 zH*{6+D|Q9(hxV@n`BBkG0z1+ukOvo_O+ftl!2^e6{6vU5LG)s+N`GZML$$QtWoJ~m zJc?+hBVDsFN;F;>wMM*@;3sBKnRn{nWw^YKnH&ywQULiVa7rjUhK&@L#7UaFjRD`g z91A=UNn%v@v(ZWlJ9nz3eR22{hbfes2u}$|qtgsHTq>DWEEU z47;XcjBLap`+OK7o20>pWM0!)3yObwR2DOzA@!QG*10LUr9CxPM$OHy?2tU9acS^G zl`^Ov2>gMOZ}SM5V;g$_r8;n#^H&vwc}ze6z=2P9va~c(`_H&|STMX;qYnuQ-;@A^ z4-cDybuZg$7l9uhZmP51pQh^dTI%0l*}7~F$xcpd01ic}ia5qz0W(B7+74FgU>Dt-;*lM37i_64p>T=bg>J&tVJwg!)d+A7@BxNqH7@Gn=afc_>T2Oi}AKH zAz3-pNF0sTz!d`Cp7pv`mPbR5v8`MLDT3=XOz}@pv6q55D~;5qUJj3e<@8-41P}-> zwmhTQVW8U4<~{+t#Gom5p^>SWEsm0k|M{K&B>s>7@ z8gs@)70wquY1i32@2SOEZg-*N*&O!+^KzLS_D8Ap-Ai5Un49xfBFplLFO%k_CnxM} znmn`L#gy&na<-~om#-I#n=g)s z7ISsC%}4Vbm{!@HqnH!oeX~pqsj?Fm#{~^#$~TGZ@fnJ&qxksvI1IoAV+4@ktm})G zUI`l{H*nj8Qzzv`BiloEp^{~CFICGa(OM#n@O^~tezm%CpOCe&-a_s%)`36d9?=iO zBr44Z{8rRADQHYF2r<;pPK#^5X(Y0+)H}~{^&`5VKai=^9kCc5c~|9MMR;Ys4oR^>CI)6F!p0 z%@A-c)$Y!<{QOiEoseUZj6aq@X(B%EgO7=)XT!_18@-uh->&_zHf7)4U~gh_e2-YG zCy3Coxx{$v4>L}6REj1#{ua%a+t3ZN$m4RZbqO7_Pz03A7YS=C_=P$1SSN|^C&ttC znu9tVBS!MP0NkcYQEqHL857ayhf+Za>2)p^F84_`GyeFoHj@xN^msALQ&pTpkj-wA zh8K%XP)qUaVA@;mVGCyc%~z z7d*gQTaU{lhQflM+saXI!6|s%X!`AD<^4Pr867;6*igO2t|&TA7CiQD<+75*aw3uA z?ZIv-obQTo11M)SMoeBmd;%r2&DwXH311r=i4Dr1_N@<3z1J+@1mjsHIh%Eyc@RHe zNPFK0+deA%&G`av_)?G)-0OUNbhXv_36T%UfpwyP!-Lu3b=aHuKJ3pb=4cL}dLbLm zT5=4jX}^^{RWE17e3SA6$ehre3!c}?EFzmWH{>Og%=A%Kj1WQO!Tz8Pw5G2O8!{J? ztgT2CAA97mPIgt5LJAX5)s~D>s8UV%fhzJR^#P6=k9gTEvI6V?bS*Yf-3`kDoU7YC>Zfch(ntALsPHq z7L^L8h`83bKw@RL2HAyX`LRkWDg4gvMjPB^4a|7l&$Ki5qKYR?R`9kjn>>~#UEw?g z>y38SzdrEI*VU#I$+YTunlM-#f+YR;iG5rn<~$0`d~GvX=E}^1@%5XI{#gwsG>?ia9lW#UNXo!a&p0{;gLC?E-9Y10%Y^8 ztwG9YT?cfrmSvmURJh2$VKGUKe_sA^EGF9$HFBdu@l(Xnw>^R+JQHD-}fa3_{J zLse5}WF(Gr1igEWh)2)<%Kt4vZMJ;Xkz*b{RCLJAk+eIl+FxuqvWO(GFKc}klCP1* ze2i!oM}sbmm8vCCm88{(Np1r#m<#uiKDt?q!VAQj^0Bks=P9`L8QdY=?)) z6Pd+1s7UR2yZ&qA< z^l^MZ){lB}a~4ps4!6fw`tFxL7<%2oX!`D(j)}-u|EirEoBbkXSt$%t>yry9J&(7A zzpL$QYrR|sr~MO#_t$B%E+_5yv4B|Dk6j8O)9?3%<${io`~J~16@S~?*ZSaL`h9{Z zy;~*%Qj%c&&(`1t!Dw^`j#OVcdMRfQU(G32qbPw8Ui?*CckYvGzbdqR4q}kLB};K5 zAxd(?M{*WqZWd+6eqvXY6PA6>2Ma@x$Bw17)3U}U^w`pbCdqP?fGKN zYlw-aDwD#^iVP2R7ivx!zw0QfQ2g*O3&rdC5AtETI72W6?=4C{2p%0{o6=EYE7E_QtG}@4 z5fHC34d@G%M-s*ORmd5_54lWF`qvA1Eu%4fH@p2Jq{AEtqm^e3ZVgUyu*gVBcDjaHX1 z72R>WO%e%squ^3&h3c!U^AEtKzhMc-#bCrg+}DIQPW6q;1SS0RnR z9}{p(6-{$n4Nut_0-G7(v2qulit{Ln4kgF%&^(j}EBPa+JFXtAGUGLp&TF>WJWD~W z(~3W*UD&qdt3eVb_`spAbrDBJLPE4JP^r(8_CAYlMpdg6uR7!i)zJfCd|Hi%YoNl{ zw#K>G)Ujk?>uN!;~XBU-GSbZ-P&(gW74lzblnKaKEXXT8cY2JKINJ z4|#Z?qBwq26=GhP6JJI}Y}cf}a~z#DPQ4a(33U1bCruwF5e&ywP<_Le9>9|6fL-zB z{%y)cHT5Z8Q@3`n1TR2Qj#;P|&jUK}(x^DXh()$gLZitQy|H|E3(*2qV9OPg8Y1oz zgnAY?7G7a}&+4ZJN1`1ccMxT13WHVP5$O{L8L+g3J6kQjP?Lm!2a|}-Q~EYVYJ}>c`f3G(Ee|T7 zD^WKqSRM<`)GuAv4~10`dv|wACCfNy#HuJa!W{zS6td3nfeVa0BuWHnH;rhbAcz!) zP7Vr8J(~)>l^jmvMIVkwEEHlopJNd~cSClkB`uCgxI3}W8_pkVrL_bai4*lqA2Z6D zL+uFjhkdODJe^WO_Oc9Nv2yA~$cQhjPwhgpNGmcLP+eA&2@k@9%tK z6be#oaASxLp%{HtClSzO!m0rEP0pFN=13+LlNOhBfAhllbsz9#KD)Qv*v&`b#vY#-%|7k$V-Qu$FUW&{lzxD`;#9v1H`><=~Cz zCT$kIIpFVC)2P?Sf7dy|{iF)BgjDvDQp-!BS+jtvV`(JmqzgVV>M1Bc{KR<`X|!g0%>3d)P@Q2dJx zYA8fEiw$c>Cz{etEq7xS-c?*mmHlbwQ-A8`S6548P@3&rT~CLc)r5qgpmRf_z)VOs zGU_GHp?HhpD=5Ne)9(WjEoT4p8R*yEn74k+>U?x#SN<5QvrDc0DF;eqj$fN?DZ&m{ z*OyYuRjymIR{d#L>Dj7*L#OD7P3^7TDzI;EmNA%(yoiWNz@eebihT~RxTH%lv9z^M zI{EH8#a0#poQ6EYA24-Rlojj}Z+FQoxi}_rIJODqhT?)T#EJCzk*7Hs`Nj44$PD#W zp^tQS8o7dRp-#fa>+JDb6(pb=_H4ys<*5?i~)GlzNCdvqy#x(C6rSLUW6j-pLw) zIxJ&HzHgV}C{V=hm5$Eu?wPj=#egw6h4Kgr(~yo9Ig7H%_BF4=N+r14(l)AXv?fh` zxRo$GT{pZ2ZjJy?K!M}wJ*r)8a}i*J(@|6}%Saw?DqlUMG6+w4pZ#es?XmtM+&ego z9u{L?y!+?tRk?Y7t{<{=v|B_*&1HIrAZZUj$PG~@a@SjV0Gv0(qIaNb;A83wl`#hF z2nVIS+W>n@HbIH#cDB~T`mKi{&lk`W4ZWdIOT7Wp4W#6-5E(KvvK-+y4dSxc%qt_) z=W1%;cTTyB;({FR-*;>F7V(zjMwmT7_6E03 z@un{RN<0L`%&PmZaG2PL`E9K<=1B&l``jO{Ld+aqTb2ruFnE}Hn7ockZxGj8`>U$n zHj4@3HbQ;!ydQ2$ZqK}e`UFV>RdX(9#B+Qq21do;<)9KZ331EB43Q%9=r}nE`Kl_m zmu@zLX4Ll=;((Ae{LQhhLUhdd5VM5&<4J1JYN7BC!nT?ihR zzh2W#bt)9{1Bks^1$wOT=$JkzOZvNvD}_maa#_{?G!FtXfFVmrPl{vdqkVp!;zM+R z*`%HdTPY8|`gW*>CmRv^&?CL2^uyx;m%VU0h%&u?0d_UlO7a97O^5a@z_67Qb4M6` zP0KIZUPRu*!cbxt2zQwlaX@9|c+#tBGu64P8&X!n${ZdRoUU?>x=b|};p{#i_t2i99-|yl#I4c49Z|lpr z))2+82ym2oyzJPE5IsPjPN?C|W%k?gZ zhBO;l(AK(i9VmVf?-A`pL@$tE%;l*5=`3I4{_d4W_Fj=^@4^f4Ke5Qv@LnS_Fd!h1 zpZ_}+`R~@(f8{qCJLvzDkrt^e6P?b0+VQMLxJHeMLk|qIq9s?USz7wk!qhbC2E$sH z`SbG`3`KD+vaAQHJC*I8SNhfEtbIoYle)1?5R+V=5OrR=ObG33!#nEkruIwztSM0% zv1+vzV@#yehB>8VEbgarpjduLk*a2%DLsvC#EC#jqF|HhUSLwZ68T~^m4~f0AyC9V zX0%zwBydk2g->*q{1jcwt|@2q9&Cv01T=aNrXLy?SI6=~#HJ>8M2%7c=XS!ooh8S* zw&r>GX=)R5kCvE(U+-OKo)vw&JDQ2*fCHa&nvCao{mYZH6yfCEfv zxio(^9d&>B#vJZT&&sy+sRKNHP)NVidX+n>?LkOi)CDk0N@1SRL*pkAP{$JhO5%5q zsh{yu49bQnmE{LVwfYjI@Z%XV9yH!zZt`yN8Cq)snr_qK zo!E=HE9UJTKfn5BnB%kkue1O8C$okn;Jat~80N(;^0K3PNdo=Fescm$j>}QG3Yy?I z6 zg+MEW61fS_yFcB?cE5%EAczHosn`Ay|WW*jxvysPa8JRRRD$$;LLm?oTp{#ym zSyvR@(XC1)e;{C=i{J7jAg#lNJQjhmEIKO;x!*TDtF@E=#wWNvU*7YbjL!>vdj`mM z|6@f`x;=l8zgD#S8-xG9dnz!0t!N0acK9a^_^<6Qb=H&CS(7}ot9wd#G(rs(K(8wX zRH*k!H?t1MCY|KmbUP@Z<1m#91Qi`eFAj(`X$6-h?`p%(oOaOtrX=(%3ORlG;_ZlNH$lFBsgJt+3q6Tp$z^<#efYhBgxo zMqYzmXCoX*)N$iPR#jIQTBtzhuR^Xj@fhT`_E_TsTEjfhE%u^9Ya2Zv41-q%Pwe4s~^;r zmBe3_<;jMbVaPH8O!X`rpnNZ;56c^MMZ&9$XIp-jY>a3*Rgp#OND~C<(^1LvaB-oi z#Tr`;cw-po0V2KdT%kgtXE!Tnb%veo2l_?uOc4>H35Q~|6%wbpkidwo#d9KDZ16d< znE!m(Q zDa5hOG`tf66;g1B-W%<*DPh7*=1t{|7O+x<6Y+Mc4wL$VH77B(-HVIrfWTe;Ja2StrnzLcroUrw;*B zpAQLwJB>l`*VI(hFUyCWs&|Duu60T1PU-vj!|tffl!3S$J>7klREfP;T#a3MDjsx&^NL6GEH{B_nYV8_f?2DA|SAnJUP00^4|X9(H+#-coh4N$m7A ziA*eJK~g5FCFU%rG-afjB2#u(t*hsSC<^6qpO|;T4xG%kd835mY%)yRed_#q10;-j zKloi0Uht7Y_4(NoKHw%oJ`gQq_(m_ffungIJ@~@YyGQb6SG_@);il1b88T1+tiin^ zNz$7-4BRk|8>;$;`cxZ*POc&6YfkurVgeNNSX2EY@3aL%7c;k=SP=o;6?+5eTh^i- zdB$z$rZ5O(x>)AQfS`Jcjw!}8PA_Sy5q$|279Toy?@O5y+I;c0hCK)j!AOLA3g$)o)JaXk$2VR?G zkiqWenT8DN2wR*l6cU#{NdPm|4nu@oIt|gt`9^xq;opP!rF&&@Ui^)oriLv>Co&l> zycAv7b8OQP+it+F#Us~UL3&1YTEAR_hidNlhi*#EY%d221tOnWS*e_Ba^EfPkf;h7 z1XC5w#n{tT1CYknzzGg5HIbZ51=j^Qx>g&AyL_x2xeQYzmptK4VeWx1M}wI)Q6-im z-t+BY34TTU5KQ3DcY4nBBP6EcGY9nhOz9T`p)x{nc#@}7W?&id{~&9@sq!QBI{@fC zQ*q&?WYmASj zI4^77q5W*H`l2m`NIuteYOa`Z*xKvoMiAaK$9y*Zq9N=vn(~-YaWFh@UsHt@ud?jfS zoxVr4HPjx-%`hGo=Q*OK^JOP?xkVbkxlot0vE=EnzE-xTNnf(JZ^WPVc#Gefz zZHODjRh1c6+UfgXOaq{>J?Z)$q;1Yrzitf&ua%EZhr_l@C-$Pzx|LG*38=k_^?`Az z-HHteaR15%JpbZae>u6K>jhR%nGTaVcPa}UW^nxa2ZT=iK3M%d{pudB8zQw{QU4|8 z8_r(`4{(o%a6z-|fMApn6Oy@;7UU^YG&NS7t^4AZ4Y{Ri|68o>XdPX0o$|!o9et0h z`2imCgpp71>n8rNh)8B7>~9Y?Fb|m*g@Xsg zQ=71(T^7kBpKi8HPWcCM%IS5)hTl!u5x6+sp!Q*@2lUyz2l(zC~3;P6bjkj_Z zDG3;k-5VR4^HKGP4VK%5r9F)nqU8+VN9$>J|-!7p< zZRj6$&)bZ4Wfc5knexu1D1}{mieddF1A_|z;uuOGU(u^5M|`er;iW@*#(bB|C~ICo zqQc0|Q+IhdC1F%bkv3XU@=KJOZkj2IbL7q}Q%U)Bf;r&P!ZG~IcOK@-VSj$C#UGa4 zkY{|_GpgLz*@5LL=vj&Wv7MuE4O4UN`BQ|*NMdt$9+n-YhnZXS3f{(`S>bW~x)T~v zV$NFJlTI0D^ZGj2K$}{Z8ex5X5hJ@P%?6LM#9B%H^SyOkhsCShtx){$~% zT3{(>q>4g$VqbQ>KCcnkvy+tI)F@o8BCS1(s);ya)_f`@qK}zD8%lN7XOUd&2hVz| zWPLE*Lr^>HtgN^wD97YGzw?rYKP^XA*x7HUegMh<+>Y1hv7}XjKJ$*#mx+TvHA-E4 z1AV&bzuqWny}X)9ZGx}dn{HH+WbIkBI#oJp?p5JXy6H{v%>@viOo0cg=L@`dvaiUxGo!uM2qr!oq;mv z+O<#@4Wd4K*0{M|r!`ZtUkMH8 zY=l`kpS-siL(}X4L(J7=nuF_gC(0>n+N>MNI(B73nPiiWP+3u4vbak8V_ae3Q)6lK z9nH-R0)PF7deH_&XE~!Adq&OBrzAPB(mJNK15W?q9A=dhW>1Yg7e!*S0>fz@&ErBjS53pD0J5SsLi-eKpP22fw4;hJiC($lH2e4D5i4i=b8vTZD~ek&nBAyYoIHr(3wP#0~}I6 zPq26BC$tOqunTwZu)+5405SdzmfHY%b4VN}E!{neM`=oWpmQ)IW<=8EfU{$%eWI83jbDDG7!E? z1Gaj-+gur&nw{Uhy}`#j43Iex!3uc5>ye-vHJr^o@DKP)2~xNBzC@|#qcnf!w|}fs zO+%c^zv$oE2P%f1P}WEv?3KEHJiZ|+I%!F2zK?Rc-5N92O~8P>(8DPu$Aa&@2uTyD zNHIdF6a_L!_g8p;j@(W$ZqOHD^6U7khnH!HE;1*OX)kW>ge|uifD}miHm;I1U10wv zlJ;lNvW94SHL_|&Qpsmmp-4Bwt7vEbC zkJ|9urKE*#Bn^!1@h2|Wc=f3HbkMZ&hpg4Us4kQ*v|$po%3geX)acBFVUhGv5Bjb` zrD%x)M*>|D>-R-tSCMGEQ5CQMoNA0Y`y^y(6D;#nR>MxR5JUgX_v#Xq2wjjwilap| z>HKR+(EP!F;R3o8Oi`y)MzajRK8Y%B++Che23kyEgYf^ac0kHwS{6t_Bw z%0Z;ZNxZ(Xt}#aQ@7Z?2GJj#n$;!%bME_9z8?dl%5cfu6w+S83*%Y}PXm$aO0}ayEbDu(E%bgM?w_ zpSK=Q#iAfJ*!U&xzc+_~LWPciMgmq3ybfEUEIE3bBCxFz`2636p+r$c+nA%Hl zr>NCp0yHmmKky?Z>}14!P8wMu5NXJ4VO6~&I&!#*-gZ7l5%@g6FUQrkBTOwK-WrB{ zcl8SBCS4@70cWl57!W<~SU>;>I#(p{P>??1xw|HWfN4Y=LpnM-PUvngTLL|+$wtmf z=TmuSns=qVst@plHUmXxTIYo-4|41_evtFq#+^F6KIz3Iqg5t-(>bGc(KdbaI6q^w z^Q2O23z9rLy|9UmmNILlTU244VWv9EcohjoWsYak`c)jdjd`JYBUv5)S09bGhBcbY zwPPvI9&S&h3}ks4=FR}{{WK5trwe@amweShbt%Z*i!^i|nQS$vt=e;I>8z;lYdYs< zSo`NqbONKFcvlHkdp=J^*?tq~Zs1^i@md?pXb2CSETYq}HK1BdB`tXx;9+Z(FJWSC znb={&ZDkFI^0qSfxUjlj!O+Uw3+J%>pheWQ9LgDs+z{#EGlj@#!;hT7QB2A_D>N`F zyMhj5d3nC)G@PuWkA9e0flESRZjnYB4)fyL)p2FBojf+3x@Dz`4P@17l8a{*2`#$R zD&_e=j#Lui_>G1Ode0 z?F-rbkzR7?dw48=_`F^q@@x%NGt>CVr#6s$#5K<=XpBd-+h1 zUDaZKV+V!{DZAB!DN3}a|4gmk>ws^_f_&p^+py^(B%UM<8(9cN2@}Sg)dP+R-S59P zG3}6)MNb zJIL8^U3zIpm0#Mcn102#Fzyx3sYyk*%lo|AweI(W0ctF}wg_G5uXfJ|WxL{fkVPX* z@UJZ%2>GXBgzjfs)Q=ud{)NQ&x7x3dr$ZvmZ!{y6e4DTg>f!rLMw^~!<7mwZWfu2W zVn+i76{r5e6b`l2@>sWZ_2D008t)`TJ(0BKpi3!LiRcfn&k?Be#Z%@Lj|Td#&ldo!U|>45T6|Dq3o&IAnHd zd8No713^_IOKz8~H#AVwasQRE6k}u+!fgbaNVp^gn4C6nOHBrMT)Ls8`2F;}-YVRD zwPIpZ=5~{WGdJVZ=+Ls{5qcHSLFUuz8k4n=wen=vm{n1{VG`9vM)4lYfIV;IA0Nqg z-!^y%tylMo#S>h!LEQ3h125~_US*46=_PT5-%&0rs<{aa zq^I%F--UtEQ-A5}qbEcCM@f(vn0?x3P2-_aXVq@GZ&+x0Xc0%Z-?{$!ydfRC+Ls^y zC7ZP*n9?UyF&bo~kybiZRF%Rx$1)znq>Bb#^Y;%jU>exp`am!s>XD@01~d573n3;cv=mqbLTS}ZMY#~3a@+>1bAJEn+M2BG zdVvrzlI#{HC(;5X@a1$}@R}y26}_~WU-oF9t}EQW@(yLY!ZR=JA&PqV;H>t{SK5g- zT_|V$%&;o`J+}7XBHQ19s=ok}uZ#KESArqx>52YN)yZ%cs6Zd#roX^Pmd|SuhMkX} zT;)A#-f>&My7xc&I1ivEwmpm^y@N^zY0_H=Vnn&Xg@A&gh!9GocO=rJO7kMUD7_j; zE;V#PdKCmDfCva^5JHtEAXS?9!n^Mdpz^+*`Oi5gIp6M_*-5gSZ-2>!)$x`UW?wD4 zBvSVET(tM4Zmo|C=!2F@fmQdTM2lbxBrj5-f!$0@jYe)VPdTbT7r>sUyJ_U=3iMC~ z(WsbEsXzfft!8lRKFa7+`9jr^8vC#v+<`3ht9|4I20QM^Bd|^65Zvwl~H2+mQr+J zDdMAs|7FI}I_wBj7p78nokM?6u=3i_c-1E>pZcb*B#$UZl7Vq`^p^kZ>_!L~a_;j| zx9}&DM;+FWI*K=qY7q{DJcS9Kmnv~`l@9vwJ{?V0X0GOy!u>_WWtalgt*qlEQ>e_R zn*g&eB!m1QkDf00F8rgOdV5(}u(VDUU!gscSzc%I3gb~3iwpjmN|}j1SvV8>+(wtD zYj*e61hUd^*>;4~N0d-9$1ocsYi2m1nC)t%(oV-Zk3TZs>8@Tf#l3{pcydg)jz)j@ z*glPa06I{(yIfYcpi&x(lvOQf-u3FwDF?wc1EzL+nwU+`zE$foUkB8Au zvb^#sB@iR`4D39b5P)eQM)4HgT#9ATeP5t#esQpshb#(+;V@dhT6iFW_kr zBJ3cxw0D#IP$;k?!f|fUb@C&92F));NPyvJ)Jr;pCdbNta|^y>=2LQsy~=7)r7xsF zwE)f3$ezRUz7cg>FY5_dxDik%RvuIS1T5Yl-jOsyOFR1h)rC8M7Kj#U6Ba#^q9-=E z)WCv&blQOgnv8UeE-R2TAF69D02){u7luNIw=6@3K2X|MB;A*rd|%&6K@{toBfT>k zGtfKYAt@uSR%*AfN7Al4$X9$G+9+6XQ(sq{zMD)`r}}=qg8D9ZHspuXhQ-SExQ|#O zQ-6}aJ=#Zs9n13E)W`@KV9Si!fJ_cT(tQ_E*@v}Mn^5QUo<_5z@#K}|??qNIu9M2E zUBtZy&R=$z$%Ev_t`yW!{qSP8vZw43mP~p8X-j(=>xe-fB%v`Whm41i$!3P%mTsMI zrd6rf`bHc(1k0pzFENTJ6{|@oARQ6bhvm=kfk+EB;8}o2Y zSx5RHm4h#l=l=%ttfN=AHLbE5{A}CUuF*ORuaC;eny0GoTx}_`R%+sz!<++)S9=uN zUgMf#SXf;MK|!gfG#3&(-o36hdp{nT$%Fs?+#J?w2;Rt04y6aK+n7x3%wr*+?KGbg zM|UYJC2Kl&2P?-*?(9siQbg!?TeI+og;-tF;=%c7eQ+5IZSnLwfNb3^%9DHRD*TAj z&?DXf%X^d#+J)`FzHsH z4667MIdtDafOG6SsnpotYvPoxIDevoXN@@WQEt^Xi>Zs(CShtzTXWR_Z`|JsP16)f zqPWbU5ybTc)aC|x0x~Q4DrsCTt@f8V0yf?t85&oA8YBE| zLAM~WF7on}5F>-B)(gx@HD#}Z`6a|$%)_Z54Jmhy1{L@rzHEvMl>%P5#8>fUrdL3w z1UnJIm%Ngt69JOJVJjq@IL6^Gs9YkA?P%Yc#`B>B&D^R;ieK&0?J{o46)%IlZb56f6&O%4w<@}?x-{(C=(X&Ht&40_cEVy#ktXVWw%MXUb%Zg z+HdTXxP4y@!xS~8zsjK^Q|%)GW7eWez9!t2L0_t=NO1IfTZFLiFOHbW;=$lY4Ig>O@;%MgE& z^F8~mnh5y$RhDQ?-n_oWz7p=$G(EkRdC!|NZ84$%*IIz|6HJf+1q-sa8vwM9?GCrbIFEL*IH*$xdd z^pG(CT*}VUiL47H05Q%SvO%*Tti+Pu7+V-gBQ}N6nRb&!G?!o_erP9=nfkgU8~&ap zvphy}rz0pg&w9<a22Ui25TQQEM8zm6>o47H2`ry#u@sr%`KkukYP@)LR%q>`K^mj0 zQL@-YP=F(^Scfzf3x-317Oi986KIpG5HkEXZ38bZjnxr`mLqgAG44f=+&z+)w_FT35^UazDar#UtW?aAbDHut3A-ADvf8kWA+CG&ko_pq^uqeUO2gB=1G`*Q!3%|A#_f`KDt zUv)@3t#0MfB5rs0;cqX0S(-vCB8%3@>|iMYI{ODJnn^wHcSvDfiW}vbz-~nOtjP76 z#zh}0fOm4xx8ccRQax|i9**&guJQFDQV*JJ^s$M$0S_W2t3e+$00b>%4awKWsJfX} zU)A@-^P;qxsV=&9kfo`qS~PirDD=^lMlVMXcPqedmpxZ@M`?fn^Mc%-IE}O8>?y? z2cl5s4&@j^;-n}g?87cxd=(=o(Vg^VcHbzZKn!5E029?Sgtnv=T#CV15FY({#E1|I zEea=1HpfOhFkY_r0EmvP)JQxoT!X!IZz|MIq3A1r84qc*zg@1HBfUNPcwm4!w9Z3iw8ldPm=g`r2RX(kv8|GnLrO=TjDS>5?2bnL^U20ZpUbo34hm`H(PRvWEh5w1U;a6Yq@so#McIe&mO8KLU=@G0zLL z?Pqxj2(tRm;nOka2pI^@Ch6fLGAHyeSMTRpC*DGE#9BL+Hop1);CZL_emw6V=EiY9 z{5L+wFuk)~j&OR%YQ{HzIhs>&y|bN;7$C>m#W#O;I)?3??Q(i`0Qij3&n_q7duRKc zJ{sHK_#DId&UQJyI*8x6oQCtA?R13aJJ!f=oPL4zoo#k{kr)VnU8IxnzJGlFjY^&b zx*RcCj-`(GIfnWDdgQ?JC=ypseIfW2np%Yi}d(S6dzAi I)jI0^2M7ztH~;_u literal 0 HcmV?d00001 From 32653c2df4329f3257762f1ab28cf35e10a279b2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 1 Nov 2016 16:06:56 +0100 Subject: [PATCH 111/114] Blur settings upon discarding current settings Otherwise the currently selected setting doesn't get discarded. Contributes to issue CURA-2866. --- resources/qml/Actions.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 3ee8630183..d7a0a87dbe 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -131,7 +131,11 @@ Item id: resetProfileAction; enabled: Cura.MachineManager.hasUserSettings text: catalog.i18nc("@action:inmenu menubar:profile","&Discard current settings"); - onTriggered: Cura.ContainerManager.clearUserContainers(); + onTriggered: + { + forceActiveFocus(); + Cura.ContainerManager.clearUserContainers(); + } } Action From 612ef1c0c68e2b5e1d6ec69fb60960d643c0f67e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 2 Nov 2016 14:54:19 +0100 Subject: [PATCH 112/114] Fix spelling and grammar of Remove Mesh Intersection 'objecs' to 'objects'. Removed superfluous 'is'. Contributes to issue CURA-2712. --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index abe6a3e378..e3b75d3813 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3635,7 +3635,7 @@ "carve_multiple_volumes": { "label": "Remove Mesh Intersection", - "description": "Remove areas where multiple objecs are overlapping with each other. This is may be used if merged dual material objects overlap with each other.", + "description": "Remove areas where multiple objects are overlapping with each other. This may be used if merged dual material objects overlap with each other.", "type": "bool", "default_value": true, "value": "machine_extruder_count > 1", From d8e4e11b86c6d5260bc85ec4028d584c2bfd5d6e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 2 Nov 2016 17:27:22 +0100 Subject: [PATCH 113/114] 3MF reader now handles object types CURA-382 --- plugins/3MFReader/ThreeMFReader.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index d688de93e9..0eff4fa78c 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -127,6 +127,21 @@ class ThreeMFReader(MeshReader): for build_item in build_items: id = build_item.get("objectid") object = self._root.find("./3mf:resources/3mf:object[@id='{0}']".format(id), self._namespaces) + if "type" in object.attrib: + if object.attrib["type"] == "support" or object.attrib["type"] == "other": + # Ignore support objects, as cura does not support these. + # We can't guarantee that they wont be made solid. + # We also ignore "other", as I have no idea what to do with them. + Logger.log("w", "3MF file contained an object of type %s which is not supported by Cura", object.attrib["type"]) + continue + elif object.attrib["type"] == "solidsupport" or object.attrib["type"] == "model": + pass # Load these as normal + else: + # We should technically fail at this point because it's an invalid 3MF, but try to continue anyway. + Logger.log("e", "3MF file contained an object of type %s which is not supported by the 3mf spec", + object.attrib["type"]) + continue + build_item_node = self._createNodeFromObject(object, self._base_name + "_" + str(id)) transform = build_item.get("transform") if transform is not None: From c43098053660bae17daca46c1cd43afeb86820d8 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Fri, 21 Oct 2016 17:01:55 +0200 Subject: [PATCH 114/114] JSON feat: wall_0_wipe_dist (CURA-1698) --- resources/definitions/fdmprinter.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index e3b75d3813..a065e426bb 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -756,6 +756,18 @@ } } }, + "wall_0_wipe_dist": + { + "label": "Outer Wall Wipe Distance", + "description": "Distance of a travel move inserted after the outer wall, to hide the Z seam better.", + "unit": "mm", + "type": "float", + "default_value": 0.2, + "value": "machine_nozzle_size / 2", + "minimum_value": "0", + "maximum_value_warning": "machine_nozzle_size", + "settable_per_mesh": true + }, "top_bottom_thickness": { "label": "Top/Bottom Thickness",