From aaabc7df67d4a4cece9ff99f915af3793df083bc Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 27 Jun 2018 13:54:52 +0200 Subject: [PATCH 01/29] Beautification of gui options (imo) --- xs/src/libslic3r/PrintConfig.cpp | 56 +++++++++++++------------ xs/src/libslic3r/PrintObject.cpp | 2 +- xs/src/slic3r/GUI/Tab.cpp | 70 ++++++++++++++++++++------------ 3 files changed, 74 insertions(+), 54 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 01f1a97bf..66de606b2 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -65,7 +65,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("bottom_solid_layers", coInt); - def->label = L("Bottom"); + def->label = L(" Bottom"); def->category = L("Layers and Perimeters"); def->tooltip = L("Number of solid layers to generate on bottom surfaces."); def->cli = "bottom-solid-layers=i"; @@ -83,7 +83,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(0); def = this->add("bridge_angle", coFloat); - def->label = L("Bridging angle"); + def->label = L("Bridging"); def->category = L("Infill"); def->tooltip = L("Bridging angle override. If left to zero, the bridging angle will be calculated " "automatically. Otherwise the provided angle will be used for all bridges. " @@ -112,7 +112,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionInts{ 100 }; def = this->add("bridge_flow_ratio", coFloat); - def->label = L("Bridge flow ratio"); + def->label = L("Bridge"); def->category = L("Advanced"); def->tooltip = L("This factor affects the amount of plastic for bridging. " "You can decrease it slightly to pull the extrudates and prevent sagging, " @@ -124,15 +124,16 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(1); def = this->add("over_bridge_flow_ratio", coFloat); - def->label = L("Over-bridge flow ratio"); + def->label = L("Above the bridges"); def->category = L("Advanced"); def->tooltip = L("This factor affects the amount of plastic to overextrude " "when we are filling on top of a bridge surface." - "With a number >1, we can retreive the correct z-height " - "even if the bridged layer has fallen a bit."); + "With a number >1, we can retrieve a correct z-height " + "even if the bridged layer has fallen a bit. " + "It's useful if you want to have a nice flat top layer."); def->cli = "over-bridge-flow-ratio=f"; def->min = 0; - def->default_value = new ConfigOptionFloat(1); + def->default_value = new ConfigOptionFloat(1.15); def = this->add("bridge_speed", coFloat); def->label = L("Bridges"); @@ -253,10 +254,10 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(6); def = this->add("elefant_foot_compensation", coFloat); - def->label = L("Elephant foot compensation"); + def->label = L("First layer"); def->category = L("Advanced"); def->tooltip = L("The first layer will be shrunk in the XY plane by the configured value " - "to compensate for the 1st layer squish aka an Elephant Foot effect."); + "to compensate for the 1st layer squish aka an Elephant Foot effect. (must be negative = inwards)"); def->sidetext = L("mm"); def->cli = "elefant-foot-compensation=f"; def->min = 0; @@ -292,7 +293,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionBool(false); def = this->add("top_fill_pattern", coEnum); - def->label = L("Top fill pattern"); + def->label = L(" Top"); def->category = L("Infill"); def->tooltip = L("Fill pattern for top infill. This only affects the top external visible layer, and not its adjacent solid shells."); def->cli = "top-fill-pattern|solid-fill-pattern=s"; @@ -318,7 +319,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionEnum(ipRectilinear); def = this->add("bottom_fill_pattern", coEnum); - def->label = L("bottom fill pattern"); + def->label = L("Bottom"); def->category = L("Infill"); def->tooltip = L("Fill pattern for bottom infill. This only affects the bottom external visible layer, and not its adjacent solid shells."); def->cli = "bottom-fill-pattern|solid-fill-pattern=s"; @@ -336,9 +337,10 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionEnum(ipRectilinear); def = this->add("enforce_full_fill_volume", coBool); - def->label = L("Enforce full fill volume"); + def->label = L("Enforce 100% fill volume"); def->category = L("Infill"); - def->tooltip = L("Experimental option wich modify (top/bottom) fill flow to have the exact amount of plastic inside the volume to fill."); + def->tooltip = L("Experimental option wich modify (top/bottom) fill flow to have the exact amount of plastic inside the volume to fill " + "(it generally changes the flow from -7% to +4%, depending on the size of the surface to fill and the overlap parameters)."); def->cli = "enforce-full-fill-volume!"; def->default_value = new ConfigOptionBool(true); @@ -362,7 +364,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("external_perimeter_speed", coFloatOrPercent); - def->label = L("External perimeters"); + def->label = L("External"); def->category = L("Speed"); def->tooltip = L("This separate setting will affect the speed of external perimeters (the visible ones). " "If expressed as percentage (for example: 80%) it will be calculated " @@ -614,7 +616,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionStrings { "" }; def = this->add("fill_angle", coFloat); - def->label = L("Fill angle"); + def->label = L("Fill"); def->category = L("Infill"); def->tooltip = L("Default base angle for infill orientation. Cross-hatching will be applied to this. " "Bridges will be infilled using the best direction Slic3r can detect, so this setting " @@ -628,7 +630,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("fill_density", coPercent); def->gui_type = "f_enum_open"; def->gui_flags = "show_value"; - def->label = L("Fill density"); + def->label = L("Density"); def->category = L("Infill"); def->tooltip = L("Density of internal infill, expressed in the range 0% - 100%."); def->sidetext = L("%"); @@ -666,7 +668,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionPercent(20); def = this->add("fill_pattern", coEnum); - def->label = L("Fill pattern"); + def->label = L("Inside"); def->category = L("Infill"); def->tooltip = L("Fill pattern for general low-density infill."); def->cli = "fill-pattern=s"; @@ -873,7 +875,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(25, true); def = this->add("infill_speed", coFloat); - def->label = L("Infill"); + def->label = L(" Sparse\t"); def->category = L("Speed"); def->tooltip = L("Speed for printing the internal fill. Set to zero for auto."); def->sidetext = L("mm/s"); @@ -1135,7 +1137,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("perimeter_speed", coFloat); - def->label = L("Perimeters"); + def->label = L("Default"); def->category = L("Speed"); def->tooltip = L("Speed for perimeters (contours, aka vertical shells). Set to zero for auto."); def->sidetext = L("mm/s"); @@ -1422,7 +1424,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionInts { 5 }; def = this->add("small_perimeter_speed", coFloatOrPercent); - def->label = L("Small perimeters"); + def->label = L("Small"); def->category = L("Speed"); def->tooltip = L("This separate setting will affect the speed of perimeters having radius <= 6.5mm " "(usually holes). If expressed as percentage (for example: 80%) it will be calculated " @@ -1473,7 +1475,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("solid_infill_speed", coFloatOrPercent); - def->label = L("Solid infill"); + def->label = L("Solid"); def->category = L("Speed"); def->tooltip = L("Speed for printing solid regions (top/bottom/internal horizontal shells). " "This can be expressed as a percentage (for example: 80%) over the default " @@ -1669,7 +1671,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(0); def = this->add("support_material_interface_speed", coFloatOrPercent); - def->label = L("Support material interface"); + def->label = L("Interface"); def->category = L("Support material"); def->tooltip = L("Speed for printing support material interface layers. If expressed as percentage " "(for example 50%) it will be calculated over support material speed."); @@ -1703,7 +1705,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(2.5); def = this->add("support_material_speed", coFloat); - def->label = L("Support material"); + def->label = L("Default"); def->category = L("Support material"); def->tooltip = L("Speed for printing support material."); def->sidetext = L("mm/s"); @@ -1794,7 +1796,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("top_solid_infill_speed", coFloatOrPercent); - def->label = L("Top solid infill"); + def->label = L("Top solid"); def->category = L("Speed"); def->tooltip = L("Speed for printing top solid layers (it only applies to the uppermost " "external layers and not to their internal solid layers). You may want " @@ -1891,14 +1893,14 @@ PrintConfigDef::PrintConfigDef() 140.f, 140.f, 140.f, 140.f, 0.f }; def = this->add("wipe_tower_x", coFloat); - def->label = L("Position X"); + def->label = L("X"); def->tooltip = L("X coordinate of the left front corner of a wipe tower"); def->sidetext = L("mm"); def->cli = "wipe-tower-x=f"; def->default_value = new ConfigOptionFloat(180.); def = this->add("wipe_tower_y", coFloat); - def->label = L("Position Y"); + def->label = L("Y"); def->tooltip = L("Y coordinate of the left front corner of a wipe tower"); def->sidetext = L("mm"); def->cli = "wipe-tower-y=f"; @@ -1926,7 +1928,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(10.); def = this->add("xy_size_compensation", coFloat); - def->label = L("XY Size Compensation"); + def->label = L("All layers"); def->category = L("Advanced"); def->tooltip = L("The object will be grown/shrunk in the XY plane by the configured value " "(negative = inwards, positive = outwards). This might be useful " diff --git a/xs/src/libslic3r/PrintObject.cpp b/xs/src/libslic3r/PrintObject.cpp index 938fff712..00cedb37e 100644 --- a/xs/src/libslic3r/PrintObject.cpp +++ b/xs/src/libslic3r/PrintObject.cpp @@ -1465,7 +1465,7 @@ end: // Apply size compensation and perform clipping of multi-part objects. float delta = float(scale_(this->config.xy_size_compensation.value)); if (layer_id == 0) - delta -= float(scale_(this->config.elefant_foot_compensation.value)); + delta += float(scale_(this->config.elefant_foot_compensation.value)); bool scale = delta != 0.f; bool clip = this->config.clip_multipart_objects.value || delta > 0.f; if (layer->regions.size() == 1) { diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 0d9301e76..493534c20 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -831,7 +831,8 @@ void TabPrint::build() line = { _(L("Solid layers")), "" }; line.append_option(optgroup->get_option("top_solid_layers")); line.append_option(optgroup->get_option("bottom_solid_layers")); - optgroup->append_line(line); + optgroup->append_line(line); + optgroup->append_single_option_line("enforce_full_fill_volume"); optgroup = page->new_optgroup(_(L("Quality (slower slicing)"))); optgroup->append_single_option_line("extra_perimeters"); @@ -847,11 +848,14 @@ void TabPrint::build() page = add_options_page(_(L("Infill")), "infill.png"); optgroup = page->new_optgroup(_(L("Infill"))); - optgroup->append_single_option_line("fill_density"); - optgroup->append_single_option_line("fill_pattern"); - optgroup->append_single_option_line("top_fill_pattern"); - optgroup->append_single_option_line("bottom_fill_pattern"); - optgroup->append_single_option_line("enforce_full_fill_volume"); + line = { _(L("Fill inside pattern")), "" }; + line.append_option(optgroup->get_option("fill_density")); + line.append_option(optgroup->get_option("fill_pattern")); + optgroup->append_line(line); + line = { _(L("Fill external pattern")), "" }; + line.append_option(optgroup->get_option("top_fill_pattern")); + line.append_option(optgroup->get_option("bottom_fill_pattern")); + optgroup->append_line(line); optgroup = page->new_optgroup(_(L("Reducing printing time"))); optgroup->append_single_option_line("infill_every_layers"); @@ -859,10 +863,12 @@ void TabPrint::build() optgroup = page->new_optgroup(_(L("Advanced"))); optgroup->append_single_option_line("solid_infill_every_layers"); - optgroup->append_single_option_line("fill_angle"); optgroup->append_single_option_line("solid_infill_below_area"); + line = { _(L("Angle")), "" }; + line.append_option(optgroup->get_option("fill_angle")); + line.append_option(optgroup->get_option("bridge_angle")); + optgroup->append_line(line); optgroup->append_single_option_line("external_infill_margin"); - optgroup->append_single_option_line("bridge_angle"); optgroup->append_single_option_line("only_retract_when_crossing_perimeters"); optgroup->append_single_option_line("infill_first"); @@ -901,15 +907,21 @@ void TabPrint::build() optgroup->append_single_option_line("support_material_synchronize_layers"); page = add_options_page(_(L("Speed")), "time.png"); - optgroup = page->new_optgroup(_(L("Speed for print moves"))); - optgroup->append_single_option_line("perimeter_speed"); - optgroup->append_single_option_line("small_perimeter_speed"); - optgroup->append_single_option_line("external_perimeter_speed"); - optgroup->append_single_option_line("infill_speed"); - optgroup->append_single_option_line("solid_infill_speed"); - optgroup->append_single_option_line("top_solid_infill_speed"); - optgroup->append_single_option_line("support_material_speed"); - optgroup->append_single_option_line("support_material_interface_speed"); + optgroup = page->new_optgroup(_(L("Speed for print moves"))); + line = { _(L("Perimeter speed")), "" }; + line.append_option(optgroup->get_option("perimeter_speed")); + line.append_option(optgroup->get_option("external_perimeter_speed")); + line.append_option(optgroup->get_option("small_perimeter_speed")); + optgroup->append_line(line); + line = { _(L("Infill speed")), "" }; + line.append_option(optgroup->get_option("infill_speed")); + line.append_option(optgroup->get_option("solid_infill_speed")); + line.append_option(optgroup->get_option("top_solid_infill_speed")); + optgroup->append_line(line); + line = { _(L("Support speed")), "" }; + line.append_option(optgroup->get_option("support_material_speed")); + line.append_option(optgroup->get_option("support_material_interface_speed")); + optgroup->append_line(line); optgroup->append_single_option_line("bridge_speed"); optgroup->append_single_option_line("gap_fill_speed"); @@ -945,9 +957,11 @@ void TabPrint::build() optgroup->append_single_option_line("standby_temperature_delta"); optgroup = page->new_optgroup(_(L("Wipe tower"))); - optgroup->append_single_option_line("wipe_tower"); - optgroup->append_single_option_line("wipe_tower_x"); - optgroup->append_single_option_line("wipe_tower_y"); + optgroup->append_single_option_line("wipe_tower"); + line = { _(L("Wipe tower position")), "" }; + line.append_option(optgroup->get_option("wipe_tower_x")); + line.append_option(optgroup->get_option("wipe_tower_y")); + optgroup->append_line(line); optgroup->append_single_option_line("wipe_tower_width"); optgroup->append_single_option_line("wipe_tower_rotation_angle"); optgroup->append_single_option_line("wipe_tower_bridging"); @@ -969,14 +983,18 @@ void TabPrint::build() optgroup = page->new_optgroup(_(L("Overlap"))); optgroup->append_single_option_line("infill_overlap"); - optgroup = page->new_optgroup(_(L("Flow"))); - optgroup->append_single_option_line("bridge_flow_ratio"); - optgroup->append_single_option_line("over_bridge_flow_ratio"); + optgroup = page->new_optgroup(_(L("Flow"))); + line = { _(L("Bridge flow ratio")), "" }; + line.append_option(optgroup->get_option("bridge_flow_ratio")); + line.append_option(optgroup->get_option("over_bridge_flow_ratio")); + optgroup->append_line(line); optgroup = page->new_optgroup(_(L("Other"))); - optgroup->append_single_option_line("clip_multipart_objects"); - optgroup->append_single_option_line("elefant_foot_compensation"); - optgroup->append_single_option_line("xy_size_compensation"); + optgroup->append_single_option_line("clip_multipart_objects"); + line = { _(L("XY compensation")), "" }; + line.append_option(optgroup->get_option("xy_size_compensation")); + line.append_option(optgroup->get_option("elefant_foot_compensation")); + optgroup->append_line(line); // # optgroup->append_single_option_line("threads"); optgroup->append_single_option_line("resolution"); From 0be468e893d9150cc22ae43bc4eedb5ea424bec4 Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 27 Jun 2018 15:37:53 +0200 Subject: [PATCH 02/29] WipeTower brim with first layer from first layer width parameter. --- xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp | 12 +++++++----- xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp | 8 +++++--- xs/src/libslic3r/Print.cpp | 3 ++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp index fbde83754..c16aaae0c 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp @@ -646,7 +646,9 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::toolchange_Brim(bool sideOnly, flo m_wipe_tower_width, m_wipe_tower_depth); - PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width); + //use first layer width parameter + + PrusaMultiMaterial::Writer writer(m_layer_height, m_brim_width); writer.set_extrusion_flow(m_extrusion_flow * 1.1f) .set_z(m_z_pos) // Let the writer know the current Z position as a base for Z-hop. .set_initial_tool(m_current_tool) @@ -654,21 +656,21 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::toolchange_Brim(bool sideOnly, flo .append(";-------------------------------------\n" "; CP WIPE TOWER FIRST LAYER BRIM START\n"); - xy initial_position = wipeTower_box.lu - xy(m_perimeter_width * 6.f, 0); + xy initial_position = wipeTower_box.lu - xy(m_brim_width * 6.f, 0); writer.set_initial_position(initial_position); - writer.extrude_explicit(wipeTower_box.ld - xy(m_perimeter_width * 6.f, 0), // Prime the extruder left of the wipe tower. + writer.extrude_explicit(wipeTower_box.ld - xy(m_brim_width * 6.f, 0), // Prime the extruder left of the wipe tower. 1.5f * m_extrusion_flow * (wipeTower_box.lu.y - wipeTower_box.ld.y), 2400); // The tool is supposed to be active and primed at the time when the wipe tower brim is extruded. // Extrude 4 rounds of a brim around the future wipe tower. box_coordinates box(wipeTower_box); - box.expand(m_perimeter_width); + box.expand(m_brim_width); for (size_t i = 0; i < 4; ++ i) { writer.travel (box.ld, 7000) .extrude(box.lu, 2100).extrude(box.ru) .extrude(box.rd ).extrude(box.ld); - box.expand(m_perimeter_width); + box.expand(m_brim_width); } writer.travel(wipeTower_box.ld, 7000); // Move to the front left corner. diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp index b7c721128..39eb2c968 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp @@ -44,7 +44,7 @@ public: // wipe_area -- space available for one toolchange in mm WipeTowerPrusaMM(float x, float y, float width, float rotation_angle, float cooling_tube_retraction, float cooling_tube_length, float parking_pos_retraction, float bridging, const std::vector& wiping_matrix, - unsigned int initial_tool) : + unsigned int initial_tool, float first_layer_width) : m_wipe_tower_pos(x, y), m_wipe_tower_width(width), m_wipe_tower_rotation_angle(rotation_angle), @@ -55,7 +55,8 @@ public: m_cooling_tube_length(cooling_tube_length), m_parking_pos_retraction(parking_pos_retraction), m_bridging(bridging), - m_current_tool(initial_tool) + m_current_tool(initial_tool), + m_brim_width(first_layer_width) { unsigned int number_of_extruders = (unsigned int)(sqrt(wiping_matrix.size())+WT_EPSILON); for (unsigned int i = 0; iconfig.wipe_tower_width.value), float(this->config.wipe_tower_rotation_angle.value), float(this->config.cooling_tube_retraction.value), float(this->config.cooling_tube_length.value), float(this->config.parking_pos_retraction.value), - float(this->config.wipe_tower_bridging), wiping_volumes, m_tool_ordering.first_extruder()); + float(this->config.wipe_tower_bridging), wiping_volumes, m_tool_ordering.first_extruder(), + float(this->config.first_layer_extrusion_width)); //wipe_tower.set_retract(); //wipe_tower.set_zhop(); From 6d73d36a2187e1c162a755f5f8a0a93f51806503 Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 27 Jun 2018 16:01:05 +0200 Subject: [PATCH 03/29] Change the infill % & more adjusts --- xs/src/libslic3r/PrintConfig.cpp | 34 +++++++++++++++++++++++++++++--- xs/src/slic3r/GUI/Tab.cpp | 6 ++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 66de606b2..832feecd1 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -630,13 +630,14 @@ PrintConfigDef::PrintConfigDef() def = this->add("fill_density", coPercent); def->gui_type = "f_enum_open"; def->gui_flags = "show_value"; - def->label = L("Density"); + def->label = L("Fill density"); def->category = L("Infill"); def->tooltip = L("Density of internal infill, expressed in the range 0% - 100%."); def->sidetext = L("%"); def->cli = "fill-density=s"; def->min = 0; def->max = 100; + /* def->enum_values.push_back("0"); def->enum_values.push_back("5"); def->enum_values.push_back("10"); @@ -665,11 +666,38 @@ PrintConfigDef::PrintConfigDef() def->enum_labels.push_back("80%"); def->enum_labels.push_back("90%"); def->enum_labels.push_back("100%"); + */ + def->enum_values.push_back("0"); + def->enum_values.push_back("4"); + def->enum_values.push_back("5.5"); + def->enum_values.push_back("7.5"); + def->enum_values.push_back("10"); + def->enum_values.push_back("13"); + def->enum_values.push_back("18"); + def->enum_values.push_back("23"); + def->enum_values.push_back("31"); + def->enum_values.push_back("42"); + def->enum_values.push_back("55"); + def->enum_values.push_back("75"); + def->enum_values.push_back("100"); + def->enum_labels.push_back("0"); + def->enum_labels.push_back("4"); + def->enum_labels.push_back("5.5"); + def->enum_labels.push_back("7.5"); + def->enum_labels.push_back("10"); + def->enum_labels.push_back("13"); + def->enum_labels.push_back("18"); + def->enum_labels.push_back("23"); + def->enum_labels.push_back("31"); + def->enum_labels.push_back("42"); + def->enum_labels.push_back("55"); + def->enum_labels.push_back("75"); + def->enum_labels.push_back("100"); def->default_value = new ConfigOptionPercent(20); def = this->add("fill_pattern", coEnum); def->label = L("Inside"); - def->category = L("Infill"); + def->category = L("Sparse fill pattern"); def->tooltip = L("Fill pattern for general low-density infill."); def->cli = "fill-pattern=s"; def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); @@ -875,7 +903,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(25, true); def = this->add("infill_speed", coFloat); - def->label = L(" Sparse\t"); + def->label = L("Sparse"); def->category = L("Speed"); def->tooltip = L("Speed for printing the internal fill. Set to zero for auto."); def->sidetext = L("mm/s"); diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 493534c20..a89582176 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -848,10 +848,8 @@ void TabPrint::build() page = add_options_page(_(L("Infill")), "infill.png"); optgroup = page->new_optgroup(_(L("Infill"))); - line = { _(L("Fill inside pattern")), "" }; - line.append_option(optgroup->get_option("fill_density")); - line.append_option(optgroup->get_option("fill_pattern")); - optgroup->append_line(line); + optgroup->append_single_option_line("fill_density"); + optgroup->append_single_option_line("fill_pattern"); line = { _(L("Fill external pattern")), "" }; line.append_option(optgroup->get_option("top_fill_pattern")); line.append_option(optgroup->get_option("bottom_fill_pattern")); From b78928e13db3221d49773f76eefbf4e86d3dd87f Mon Sep 17 00:00:00 2001 From: supermerill Date: Sun, 1 Jul 2018 13:54:09 +0200 Subject: [PATCH 04/29] update readme --- README.md | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 40c22b98a..e1a0d2ce4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -_Q: Oh cool, a new RepRap slicer?_ +_Q: Oh cool, a new fork of slic3r?_ A: Yes. @@ -18,9 +18,8 @@ See the [project homepage](http://slic3r.org/) at slic3r.org and the ### What language is it written in? -The core geometric algorithms and data structures are written in C++, -and Perl is used for high-level flow abstraction, GUI and testing. -If you're wondering why Perl, see https://xkcd.com/224/ +Almost everything are written in C++, +Perl is used a bit but the prusa fork is getting rid of it (uless for scripting, maybe). The C++ API is public and its use in other projects is encouraged. The goal is to make Slic3r fully modular so that any part of its logic @@ -41,12 +40,12 @@ Key features are: Other major features are: -* combine infill every 'n' perimeters layer to speed up printing +* combine infill every 'n' perimeters layer & varying density to speed up printing * **3D preview** (including multi-material files) * **multiple layer heights** in a single print * **spiral vase** mode for bumpless vases * fine-grained configuration of speed, acceleration, extrusion width -* several infill patterns including honeycomb, spirals, Hilbert curves +* several infill patterns including honeycomb, spirals, Hilbert curves, gyroid * support material, raft, brim, skirt * **standby temperature** and automatic wiping for multi-extruder printing * customizable **G-code macros** and output filename with variable placeholders @@ -55,24 +54,18 @@ Other major features are: ### How to install? -You can download a precompiled package from [slic3r.org](http://slic3r.org/); +You can download a precompiled package from the release page. it will run without the need for any dependency. If you want to compile the source yourself follow the instructions on one of these wiki pages: -* [Linux](https://github.com/alexrj/Slic3r/wiki/Running-Slic3r-from-git-on-GNU-Linux) -* [Windows](https://github.com/prusa3d/Slic3r/wiki/How-to-compile-Slic3r-Prusa-Edition-on-MS-Windows) -* [Mac OSX](https://github.com/alexrj/Slic3r/wiki/Running-Slic3r-from-git-on-OS-X) +* [Linux](https://github.com/supermerill/Slic3r/tree/supermerill-experiment/doc/How to build - UNIX.md) +* [Windows](https://github.com/supermerill/Slic3r/tree/supermerill-experiment/doc/How to build - Windows.md) +* [Mac OSX](https://github.com/supermerill/Slic3r/tree/supermerill-experiment/doc/How_to_build_Slic3r.txt) ### Can I help? Sure! You can do the following to find things that are available to help with: -* [Pull Request Milestone](https://github.com/alexrj/Slic3r/milestone/31) - * Please comment in the related github issue that you are working on it so that other people know. -* Items in the [TODO](https://github.com/alexrj/Slic3r/wiki/TODO) wiki page. - * Please comment in the related github issue that you are working on it so that other people know. -* Drop me a line at aar@cpan.org. -* You can also find me (rarely) in #reprap and in #slic3r on [FreeNode](https://webchat.freenode.net) with the nickname _Sound_. Another contributor, _LoH_, is also in both channels. -* Add an [issue](https://github.com/alexrj/Slic3r/issues) to the github tracker if it isn't already present. +* Add an issue to the github tracker if it isn't already present. Before sending patches and pull requests contact me (preferably through opening a github issue or commenting on an existing, related, issue) to discuss your proposed changes: this way we'll ensure nobody wastes their time and no conflicts arise @@ -87,7 +80,7 @@ The [Silk icon set](http://www.famfamfam.com/lab/icons/silk/) used in Slic3r is licensed under the _Creative Commons Attribution 3.0 License_. The author of the Silk icon set is Mark James. -### How can I invoke slic3r.pl using the command line? +### How can I invoke slic3r.pl using the command line? (not up-to-date yet) Usage: slic3r.pl [ OPTIONS ] [ file.stl ] [ file2.stl ] ... @@ -296,6 +289,7 @@ The author of the Silk icon set is Mark James. --min-fan-speed Minimum fan speed (default: 35%) --max-fan-speed Maximum fan speed (default: 100%) --bridge-fan-speed Fan speed to use when bridging (default: 100%) + --top-fan-speed Fan speed to use when printing top layer (default: 100%) --fan-below-layer-time Enable fan if layer print time is below this approximate number of seconds (default: 60) --slowdown-below-layer-time Slow down if layer print time is below this approximate number @@ -358,6 +352,7 @@ The author of the Silk icon set is Mark James. Set a different extrusion width for support material --infill-overlap Overlap between infill and perimeters (default: 15%) --bridge-flow-ratio Multiplier for extrusion when bridging (> 0, default: 1) + --over-bridge-flow-ratio Multiplier for extrusion when printing the layer above a bride (> 0, default: 1.15) Multiple extruder options: --extruder-offset Offset of each extruder, if firmware doesn't handle the displacement From a1ba36b1165349e35dd399ca4f65a74250aa371d Mon Sep 17 00:00:00 2001 From: supermerill Date: Mon, 2 Jul 2018 15:00:34 +0200 Subject: [PATCH 05/29] Readme update, & remove prusa as default vendor (none instead) --- README.md | 9 +++++++-- xs/src/slic3r/GUI/ConfigWizard.cpp | 14 ++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e1a0d2ce4..a5a58aae6 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A: Yes. Slic3r ====== -Prebuilt Windows, OSX and Linux binaries are available through the [git releases page](https://github.com/prusa3d/Slic3r/releases). +Prebuilt Windows 32b is available through the [git releases page](https://github.com/supermerill/Slic3r/releases). @@ -19,12 +19,17 @@ See the [project homepage](http://slic3r.org/) at slic3r.org and the ### What language is it written in? Almost everything are written in C++, -Perl is used a bit but the prusa fork is getting rid of it (uless for scripting, maybe). +Perl is used a bit but the prusa fork is getting rid of it (unless for scripting, maybe). The C++ API is public and its use in other projects is encouraged. The goal is to make Slic3r fully modular so that any part of its logic can be used separately. +### What are this fork main features/differences? + +* **Ironing** top surface & many new settings to fine-tune the top surface quality. +* A denser infill option for 1-X layers before the top solid layers to better support them. + ### What are Slic3r's main features? Key features are: diff --git a/xs/src/slic3r/GUI/ConfigWizard.cpp b/xs/src/slic3r/GUI/ConfigWizard.cpp index ce06da853..556a1c334 100644 --- a/xs/src/slic3r/GUI/ConfigWizard.cpp +++ b/xs/src/slic3r/GUI/ConfigWizard.cpp @@ -23,6 +23,7 @@ namespace Slic3r { namespace GUI { +#define MAIN_VENDOR "None" // Printer model picker GUI control @@ -88,7 +89,7 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, cons auto *cbox = new Checkbox(panel, label, model_id, variant.name); const size_t idx = cboxes.size(); cboxes.push_back(cbox); - bool enabled = appconfig_vendors.get_variant("PrusaResearch", model_id, variant.name); + bool enabled = appconfig_vendors.get_variant(MAIN_VENDOR, model_id, variant.name); variants_checked += enabled; cbox->SetValue(enabled); col_sizer->Add(cbox, 0, wxBOTTOM, 3); @@ -226,7 +227,8 @@ PageWelcome::PageWelcome(ConfigWizard *parent) : } const auto &vendors = wizard_p()->vendors; - const auto vendor_prusa = vendors.find("PrusaResearch"); + printf("vendors count : %d", vendors.size()); + const auto vendor_prusa = vendors.find(MAIN_VENDOR); if (vendor_prusa != vendors.cend()) { AppConfig &appconfig_vendors = this->wizard_p()->appconfig_vendors; @@ -311,7 +313,7 @@ PageVendors::PageVendors(ConfigWizard *parent) : for (const auto vendor_pair : wizard_p()->vendors) { const auto &vendor = vendor_pair.second; - if (vendor.id == "PrusaResearch") { continue; } + if (vendor.id == MAIN_VENDOR) { continue; } auto *picker = new PrinterPicker(this, vendor, appconfig_vendors); picker->Hide(); @@ -614,8 +616,8 @@ static const std::unordered_map void ConfigWizard::priv::load_vendors() { - const auto vendor_dir = fs::path(Slic3r::data_dir()) / "vendor"; - const auto rsrc_vendor_dir = fs::path(resources_dir()) / "profiles"; + const fs::path vendor_dir = fs::path(Slic3r::data_dir()) / "vendor"; + const fs::path rsrc_vendor_dir = fs::path(resources_dir()) / "profiles"; // Load vendors from the "vendors" directory in datadir for (fs::directory_iterator it(vendor_dir); it != fs::directory_iterator(); ++it) { @@ -661,7 +663,7 @@ void ConfigWizard::priv::load_vendors() const auto &model = needle->second.first; const auto &variant = needle->second.second; - appconfig_vendors.set_variant("PrusaResearch", model, variant, true); + appconfig_vendors.set_variant(MAIN_VENDOR, model, variant, true); } } } From 4c03b73f1b5bf056d623cc090d11f885a4abdb7b Mon Sep 17 00:00:00 2001 From: supermerill Date: Thu, 5 Jul 2018 15:29:06 +0200 Subject: [PATCH 06/29] Change name to Slic3r++ to avoid prusa being flood with issue from my fork. --- lib/Slic3r.pm | 2 +- lib/Slic3r/GUI.pm | 2 +- lib/Slic3r/GUI/MainFrame.pm | 4 ++-- lib/Slic3r/GUI/SystemInfo.pm | 2 +- xs/src/libslic3r/libslic3r.h | 2 +- xs/src/slic3r/GUI/AboutDialog.cpp | 2 +- xs/src/slic3r/GUI/ConfigWizard.cpp | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/Slic3r.pm b/lib/Slic3r.pm index 0c6c81bb5..72164859e 100644 --- a/lib/Slic3r.pm +++ b/lib/Slic3r.pm @@ -28,7 +28,7 @@ BEGIN { use Config; use Moo; my $have_threads = $Config{useithreads} && eval "use threads; use threads::shared; use Thread::Queue; 1"; - die "Slic3r Prusa Edition requires working Perl threads.\n" if ! $have_threads; + die "Slic3r++ requires working Perl threads.\n" if ! $have_threads; die "threads.pm >= 1.96 is required, please update\n" if $threads::VERSION < 1.96; die "Perl threading is broken with this Moo version: " . $Moo::VERSION . "\n" if $Moo::VERSION == 1.003000; $debug = 1 if (defined($ENV{'SLIC3R_DEBUGOUT'}) && $ENV{'SLIC3R_DEBUGOUT'} == 1); diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm index 80130fefe..a9c0fd523 100644 --- a/lib/Slic3r/GUI.pm +++ b/lib/Slic3r/GUI.pm @@ -74,7 +74,7 @@ sub OnInit { my ($self) = @_; $self->SetAppName('Slic3rPE'); - $self->SetAppDisplayName('Slic3r Prusa Edition'); + $self->SetAppDisplayName('Slic3r++'); Slic3r::debugf "wxWidgets version %s, Wx version %s\n", &Wx::wxVERSION_STRING, $Wx::VERSION; # Set the Slic3r data directory at the Slic3r XS module. diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 910b86dd8..7acdcc3a4 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -339,8 +339,8 @@ sub _init_menubar { $self->_append_menu_item($helpMenu, L("Show &Configuration Folder"), L('Show user configuration folder (datadir)'), sub { Slic3r::GUI::desktop_open_datadir_folder(); }); - $self->_append_menu_item($helpMenu, L("Report an Issue"), L('Report an issue on the Slic3r Prusa Edition'), sub { - Wx::LaunchDefaultBrowser('http://github.com/prusa3d/slic3r/issues/new'); + $self->_append_menu_item($helpMenu, L("Report an Issue"), L('Report an issue on the Slic3r++ github'), sub { + Wx::LaunchDefaultBrowser('http://github.com/supermerill/slic3r/issues/new'); }); $self->_append_menu_item($helpMenu, L("&About Slic3r"), L('Show about dialog'), sub { Slic3r::GUI::about; diff --git a/lib/Slic3r/GUI/SystemInfo.pm b/lib/Slic3r/GUI/SystemInfo.pm index 717ff12e5..e26248e2d 100644 --- a/lib/Slic3r/GUI/SystemInfo.pm +++ b/lib/Slic3r/GUI/SystemInfo.pm @@ -10,7 +10,7 @@ use base 'Wx::Dialog'; sub new { my ($class, %params) = @_; - my $self = $class->SUPER::new($params{parent}, -1, 'Slic3r Prusa Edition - System Information', wxDefaultPosition, [600, 340], + my $self = $class->SUPER::new($params{parent}, -1, 'Slic3r++ - System Information', wxDefaultPosition, [600, 340], wxDEFAULT_DIALOG_STYLE | wxMAXIMIZE_BOX | wxRESIZE_BORDER); $self->{text_info} = $params{text_info}; diff --git a/xs/src/libslic3r/libslic3r.h b/xs/src/libslic3r/libslic3r.h index fd6b56e3a..b15f9ae03 100644 --- a/xs/src/libslic3r/libslic3r.h +++ b/xs/src/libslic3r/libslic3r.h @@ -13,7 +13,7 @@ #include #include -#define SLIC3R_FORK_NAME "Slic3r Prusa Edition" +#define SLIC3R_FORK_NAME "Slic3r++" #define SLIC3R_VERSION "1.40.0" #define SLIC3R_BUILD "UNKNOWN" diff --git a/xs/src/slic3r/GUI/AboutDialog.cpp b/xs/src/slic3r/GUI/AboutDialog.cpp index 0fed8d175..e6e061990 100644 --- a/xs/src/slic3r/GUI/AboutDialog.cpp +++ b/xs/src/slic3r/GUI/AboutDialog.cpp @@ -53,7 +53,7 @@ AboutDialog::AboutDialog() // title { - wxStaticText* title = new wxStaticText(this, wxID_ANY, "Slic3r Prusa Edition", wxDefaultPosition, wxDefaultSize); + wxStaticText* title = new wxStaticText(this, wxID_ANY, "Slic3r++", wxDefaultPosition, wxDefaultSize); wxFont title_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); title_font.SetWeight(wxFONTWEIGHT_BOLD); title_font.SetFamily(wxFONTFAMILY_ROMAN); diff --git a/xs/src/slic3r/GUI/ConfigWizard.cpp b/xs/src/slic3r/GUI/ConfigWizard.cpp index 556a1c334..22ea4d784 100644 --- a/xs/src/slic3r/GUI/ConfigWizard.cpp +++ b/xs/src/slic3r/GUI/ConfigWizard.cpp @@ -218,7 +218,7 @@ PageWelcome::PageWelcome(ConfigWizard *parent) : if (wizard_p()->run_reason == ConfigWizard::RR_DATA_EMPTY) { wxString::Format(_(L("Run %s")), ConfigWizard::name()); append_text(wxString::Format( - _(L("Hello, welcome to Slic3r Prusa Edition! This %s helps you with the initial configuration; just a few settings and you will be ready to print.")), + _(L("Hello, welcome to Slic3r++ (fork of Slic3r Prusa Edition)! This %s helps you with the initial configuration; just a few settings and you will be ready to print.")), ConfigWizard::name()) ); } else { From 1b1ebcf4c30a9f824b67b81feb746243e1053163 Mon Sep 17 00:00:00 2001 From: supermerill Date: Mon, 9 Jul 2018 18:39:00 +0200 Subject: [PATCH 07/29] change icons --- resources/icons/Slic3r-console.ico | Bin 17542 -> 17542 bytes resources/icons/Slic3r.ico | Bin 102134 -> 102134 bytes resources/icons/Slic3r.png | Bin 16469 -> 14688 bytes resources/icons/Slic3r_128px.png | Bin 13016 -> 11866 bytes resources/icons/Slic3r_192px.png | Bin 21962 -> 19642 bytes resources/icons/Slic3r_192px_transparent.png | Bin 21125 -> 18588 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/icons/Slic3r-console.ico b/resources/icons/Slic3r-console.ico index 64e8183404e8d1111af208173d80ab671644ef24..7d168c87428beb3c26db60e8e7ee45d371b4071d 100644 GIT binary patch literal 17542 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 Tl(=aLyt_&8J!-81Df9j>DN1cu literal 17542 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

2w+SDb^n($n&_auPQZjNjxBaY=4oswiEEqJ?ur+ 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 M?~>Xnr9Aup1Gkbz4FCWD literal 102134 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 iv=gC2Ra%q&wf`UbQz;waz0SA*0000L- literal 16469 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 dodd)g>iPdy_!AZS-wy-;in1y)TLi3 diff --git a/resources/icons/Slic3r_128px.png b/resources/icons/Slic3r_128px.png index e8b2e3e3eb6e3c2b7a3f4c7db043c0170eec59bd..006e95f517b49a21787d4f42e70abee45bd298e3 100644 GIT binary patch literal 11866 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 literal 13016 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 Yg#WLC3Q~>hMFF6qsG-m(ZyEW209FDDdH?_b diff --git a/resources/icons/Slic3r_192px.png b/resources/icons/Slic3r_192px.png index 9af2bfc74e70305185011d9830ed903da1497f23..2e08916fcc8edd18828b6aef35e68c01b813dcdd 100644 GIT binary patch literal 19642 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

Q%y_S-5z_4HeXD#ExZnFlVG`ftr2 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 diff --git a/resources/icons/Slic3r_192px_transparent.png b/resources/icons/Slic3r_192px_transparent.png index f85c835b3c1ac273fa6a5beeee0930e12ad02500..8b7165a60b65b2413eba36da92c8f5471b20e851 100644 GIT binary patch literal 18588 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 Date: Wed, 11 Jul 2018 19:14:01 +0200 Subject: [PATCH 08/29] remove gyroid "bridge flow" --- xs/src/libslic3r/Fill/FillGyroid.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xs/src/libslic3r/Fill/FillGyroid.hpp b/xs/src/libslic3r/Fill/FillGyroid.hpp index 17924b5ab..9c3cef940 100644 --- a/xs/src/libslic3r/Fill/FillGyroid.hpp +++ b/xs/src/libslic3r/Fill/FillGyroid.hpp @@ -14,7 +14,7 @@ public: virtual Fill* clone() const { return new FillGyroid(*this); } // require bridge flow since most of this pattern hangs in air - virtual bool use_bridge_flow() const { return true; } + virtual bool use_bridge_flow() const { return false; } protected: virtual void _fill_surface_single( From fdf2c45ff0b470bacf9f56b7da651fed23a96ce4 Mon Sep 17 00:00:00 2001 From: supermerill Date: Tue, 24 Jul 2018 00:33:25 +0200 Subject: [PATCH 09/29] try a little change to bridge detection: if max is equal, try to find the direction with the most number of small lines. --- xs/src/libslic3r/BridgeDetector.cpp | 9 +++++++-- xs/src/libslic3r/BridgeDetector.hpp | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/xs/src/libslic3r/BridgeDetector.cpp b/xs/src/libslic3r/BridgeDetector.cpp index a5272683f..b7b73cc1f 100644 --- a/xs/src/libslic3r/BridgeDetector.cpp +++ b/xs/src/libslic3r/BridgeDetector.cpp @@ -115,6 +115,7 @@ bool BridgeDetector::detect_angle(double bridge_direction_override) } double total_length = 0; + uint32_t nbLines = 0; double max_length = 0; { Lines clipped_lines = intersection_ln(lines, clip_area); @@ -125,10 +126,11 @@ bool BridgeDetector::detect_angle(double bridge_direction_override) double len = line.length(); total_length += len; max_length = std::max(max_length, len); + nbLines++; } } } - if (total_length == 0.) + if (total_length == 0. || nbLines == 0) continue; have_coverage = true; @@ -139,6 +141,7 @@ bool BridgeDetector::detect_angle(double bridge_direction_override) // $directions_coverage{$angle} = sum(map $_->area, @{$self->coverage($angle)}) // 0; // max length of bridged lines candidates[i_angle].max_length = max_length; + candidates[i_angle].mean_length = total_length / nbLines; } // if no direction produced coverage, then there's no bridge direction @@ -149,10 +152,12 @@ bool BridgeDetector::detect_angle(double bridge_direction_override) std::sort(candidates.begin(), candidates.end()); // if any other direction is within extrusion width of coverage, prefer it if shorter + // shorter = shorter max length, or if in espilon (10) range, the shorter mean length. // TODO: There are two options here - within width of the angle with most coverage, or within width of the currently perferred? size_t i_best = 0; for (size_t i = 1; i < candidates.size() && candidates[i_best].coverage - candidates[i].coverage < this->spacing; ++ i) - if (candidates[i].max_length < candidates[i_best].max_length) + if (candidates[i].max_length < candidates[i_best].max_length || + (candidates[i].max_length < candidates[i_best].max_length - 10 && candidates[i].mean_length < candidates[i_best].mean_length)) i_best = i; this->angle = candidates[i_best].angle; diff --git a/xs/src/libslic3r/BridgeDetector.hpp b/xs/src/libslic3r/BridgeDetector.hpp index 5c55276be..c38e6eb3e 100644 --- a/xs/src/libslic3r/BridgeDetector.hpp +++ b/xs/src/libslic3r/BridgeDetector.hpp @@ -53,6 +53,7 @@ private: double angle; double coverage; double max_length; + double mean_length; }; // Get possible briging direction candidates. From 9d93bd6a0c5109ba10dce4a16fbecf6c93a7d795 Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 25 Jul 2018 16:17:52 +0200 Subject: [PATCH 10/29] update readme --- README.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index a5a58aae6..238c0a8b5 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ can be used separately. * **Ironing** top surface & many new settings to fine-tune the top surface quality. * A denser infill option for 1-X layers before the top solid layers to better support them. +* Better overhangs (add perimeters if needed, slice them in opposite direction each layer). +* Better Thin walls (anchored inside the print, no more random bits at the ends). ### What are Slic3r's main features? @@ -63,9 +65,9 @@ You can download a precompiled package from the release page. it will run without the need for any dependency. If you want to compile the source yourself follow the instructions on one of these wiki pages: -* [Linux](https://github.com/supermerill/Slic3r/tree/supermerill-experiment/doc/How to build - UNIX.md) -* [Windows](https://github.com/supermerill/Slic3r/tree/supermerill-experiment/doc/How to build - Windows.md) -* [Mac OSX](https://github.com/supermerill/Slic3r/tree/supermerill-experiment/doc/How_to_build_Slic3r.txt) +* [Linux](https://github.com/supermerill/Slic3r/tree/master/doc/How%20to%20build%20-%20UNIX.md) +* [Windows](https://github.com/supermerill/Slic3r/tree/master/doc/How%20to%20build%20-%20Windows.md) +* [Mac OSX](https://github.com/supermerill/Slic3r/tree/master/doc/How_to_build_Slic3r.txt) ### Can I help? @@ -73,19 +75,20 @@ Sure! You can do the following to find things that are available to help with: * Add an issue to the github tracker if it isn't already present. Before sending patches and pull requests contact me (preferably through opening a github issue or commenting on an existing, related, issue) to discuss your proposed -changes: this way we'll ensure nobody wastes their time and no conflicts arise -in development. +changes: this way we'll ensure nobody wastes their time and no conflicts arise in development. ### What's Slic3r license? Slic3r is licensed under the _GNU Affero General Public License, version 3_. -The author is Alessandro Ranellucci. +The first author is Alessandro Ranellucci, and many contributors +Then the he Prusa team +Then Durand remi for this fork -The [Silk icon set](http://www.famfamfam.com/lab/icons/silk/) used in Slic3r is +The [Silk icon set](http://www.famfamfam.com/lab/icons/silk/) used (and modified) in Slic3r is licensed under the _Creative Commons Attribution 3.0 License_. The author of the Silk icon set is Mark James. -### How can I invoke slic3r.pl using the command line? (not up-to-date yet) +### How can I invoke slic3r.pl using the command line? (not up-to-date yet, use the --help command instead) Usage: slic3r.pl [ OPTIONS ] [ file.stl ] [ file2.stl ] ... From ee9ce181908125e408e5ada2a4429bfaf8f2ad0a Mon Sep 17 00:00:00 2001 From: supermerill Date: Thu, 26 Jul 2018 14:02:24 +0200 Subject: [PATCH 11/29] Debug gui parameters (from merge & first layer XY bug) --- xs/src/libslic3r/PrintConfig.cpp | 10 +++++----- xs/src/slic3r/GUI/Tab.cpp | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index d38239013..df69fbe38 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -268,7 +268,7 @@ PrintConfigDef::PrintConfigDef() "to compensate for the 1st layer squish aka an Elephant Foot effect. (must be negative = inwards)"); def->sidetext = L("mm"); def->cli = "elefant-foot-compensation=f"; - def->min = 0; + def->max = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("end_gcode", coString); @@ -910,10 +910,10 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionInt(0); def = this->add("infill_dense_angle", coFloat); - def->label = L("angle"); + def->label = L("Angle"); def->category = L("Infill"); def->tooltip = L("Set the Angle of dense infill."); - def->sidetext = L("layers"); + def->sidetext = L("°"); def->cli = "infill-dense-angle=i"; def->min = 0; def->default_value = new ConfigOptionFloat(0); @@ -921,7 +921,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("infill_dense_density", coPercent); def->gui_type = "f_enum_open"; def->gui_flags = "show_value"; - def->label = L("Dense fill density"); + def->label = L("Density"); def->category = L("Infill"); def->tooltip = L("Density of the dense internal infill, expressed in the range 0% - 100%."); def->sidetext = L("%"); @@ -957,7 +957,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionPercent(42); def = this->add("infill_dense_pattern", coEnum); - def->label = L("pattern"); + def->label = L("Pattern"); def->category = L("Sparse fill pattern"); def->tooltip = L("Fill pattern for denser-density sparse infill."); def->cli = "dense-fill-pattern=s"; diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index d0b56a25e..7ab0262de 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -849,7 +849,8 @@ void TabPrint::build() line.append_option(optgroup->get_option("fill_angle")); line.append_option(optgroup->get_option("bridge_angle")); optgroup->append_line(line); - optgroup->append_single_option_line("external_infill_margin"); + line = { _(L("Anchor solid infill by X mm")), "" }; + line.append_option(optgroup->get_option("external_infill_margin")); line.append_option(optgroup->get_option("bridged_infill_margin")); optgroup->append_line(line); optgroup->append_single_option_line("only_retract_when_crossing_perimeters"); From 40951a3e8590d3c4e62e090ee367efea8487a412 Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 1 Aug 2018 18:46:47 +0200 Subject: [PATCH 12/29] Change some pointers from prusa github to my github. I think now I removed most of the label that say "it's a prusa product". Now, this fork may be released without creating discredit to prusa if something goes wrong. --- lib/Slic3r.pm | 3 ++- lib/Slic3r/GUI/MainFrame.pm | 12 ++++++------ resources/localization/cs_CZ/Slic3rPE.mo | Bin 132201 -> 132184 bytes resources/localization/cs_CZ/Slic3rPE_cs.po | 14 +++++++------- resources/localization/de_DE/Slic3rPE.mo | Bin 138055 -> 138023 bytes resources/localization/de_DE/Slic3rPE_de.po | 20 ++++++++++---------- resources/localization/en_US/Slic3rPE.mo | Bin 99550 -> 99528 bytes resources/localization/en_US/Slic3rPE_en.po | 16 ++++++++-------- resources/localization/es/Slic3rPE.mo | Bin 136255 -> 136233 bytes resources/localization/es/Slic3rPE_es.po | 16 ++++++++-------- resources/localization/fr_FR/Slic3rPE.mo | Bin 139734 -> 139702 bytes resources/localization/fr_FR/Slic3rPE_fr.po | 20 ++++++++++---------- resources/localization/it/Slic3rPE.mo | Bin 134349 -> 134317 bytes resources/localization/it/Slic3rPE_it.po | 20 ++++++++++---------- resources/localization/pl/Slic3rPE.mo | Bin 133591 -> 133559 bytes resources/localization/pl/Slic3rPE_pl.po | 20 ++++++++++---------- resources/localization/uk/Slic3rPE.mo | Bin 140068 -> 140046 bytes resources/localization/uk/Slic3rPE_.mo | Bin 140066 -> 140044 bytes resources/localization/uk/Slic3rPE_uk.po | 16 ++++++++-------- resources/localization/zh_CN/Slic3rPE_zh.po | 8 ++++---- xs/src/slic3r/GUI/AboutDialog.cpp | 3 ++- xs/src/slic3r/GUI/ConfigWizard.cpp | 2 +- 22 files changed, 86 insertions(+), 84 deletions(-) diff --git a/lib/Slic3r.pm b/lib/Slic3r.pm index 72164859e..0056b6d91 100644 --- a/lib/Slic3r.pm +++ b/lib/Slic3r.pm @@ -246,12 +246,13 @@ sub copyright_info my (%params) = @_; my %tag = Slic3r::tags($params{format}); my $out = + 'Copyright © 2018 Durand Rémi.
' . 'Copyright © 2016 Vojtech Bubnik, Prusa Research.
' . 'Copyright © 2011-2016 Alessandro Ranellucci.
' . '
Slic3r is licensed under the ' . 'GNU Affero General Public License, version 3.' . '


' . - 'Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Y. Sapir, Mike Sheldrake and numerous others. ' . + 'Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Y. Sapir, Mike Sheldrake, Durand Rémi and numerous others. ' . 'Manual by Gary Hodgson. Inspired by the RepRap community.
' . 'Slic3r logo designed by Corey Daniels, Silk Icon Set designed by Mark James. '; return $out; diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 23e7b6bf5..92170dad3 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -63,7 +63,7 @@ sub new { # initialize status bar $self->{statusbar} = Slic3r::GUI::ProgressStatusBar->new($self, Wx::NewId); - $self->{statusbar}->SetStatusText(L("Version ").$Slic3r::VERSION.L(" - Remember to check for updates at http://github.com/prusa3d/slic3r/releases")); + $self->{statusbar}->SetStatusText(L("Version ").$Slic3r::VERSION.L(" - Remember to check for updates at http://github.com/supermerill/slic3r/releases")); $self->SetStatusBar($self->{statusbar}); # Make the global status bar and its progress indicator available in C++ @@ -335,11 +335,11 @@ sub _init_menubar { # Help menu my $helpMenu = Wx::Menu->new; { - $self->_append_menu_item($helpMenu, L("Prusa 3D Drivers"), L('Open the Prusa3D drivers download page in your browser'), sub { - Wx::LaunchDefaultBrowser('http://www.prusa3d.com/drivers/'); - }); - $self->_append_menu_item($helpMenu, L("Prusa Edition Releases"), L('Open the Prusa Edition releases page in your browser'), sub { - Wx::LaunchDefaultBrowser('http://github.com/prusa3d/slic3r/releases'); + + + + $self->_append_menu_item($helpMenu, L("Slic3r++ Releases"), L('Open the Slic3r++ releases page in your browser'), sub { + Wx::LaunchDefaultBrowser('http://github.com/supermerill/slic3r/releases'); }); # my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", 'Check for new Slic3r versions', sub { # wxTheApp->check_version(1); diff --git a/resources/localization/cs_CZ/Slic3rPE.mo b/resources/localization/cs_CZ/Slic3rPE.mo index d3a1d8e84ecb1c3c13aaee32f3dda50c6e718458..d9ca0bcc9fbd364c2c7fe6655f0e39fc77c43dd4 100644 GIT binary patch delta 115 zcmaFa!EvL5V}pGNcX4S!YEf=#QD#ogX19=71CHRF%w*#tZSBn)T1;dRypIcxvLbkg dmvtiXBG=TEARDy(jsjzdIb8L2+XzOTH2@CED?R`K delta 132 zcmcc7!SS+#V}pGNdqGiYaiVd`X0MP~1Kt1-N5M5Evm`S=Z}a*V6B#t2*9(raq6zI- d)`>3Uxu&KBX7Kh43XCDjt%}H>;*-o#fio#o1;Qv4R`}U90k{u%#zIfyv_StOk~i6elIx6iY9bo zStq(s}L<7ULOFnFHiXZ diff --git a/resources/localization/de_DE/Slic3rPE_de.po b/resources/localization/de_DE/Slic3rPE_de.po index 8360b622e..e41934bc9 100644 --- a/resources/localization/de_DE/Slic3rPE_de.po +++ b/resources/localization/de_DE/Slic3rPE_de.po @@ -86,8 +86,8 @@ msgstr "" "Kein numerischer Wert." #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:66 -msgid " - Remember to check for updates at http://github.com/prusa3d/slic3r/releases" -msgstr " - Denken Sie an die ĂśberprĂĽfung von Updates auf http://github.com/prusa3d/slic3r/releases" +msgid " - Remember to check for updates at http://github.com/supermerill/slic3r/releases" +msgstr " - Denken Sie an die ĂśberprĂĽfung von Updates auf http://github.com/supermerill/slic3r/releases" # Used in this context: _("Save ") + title + _(" as:") #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1751 @@ -1598,8 +1598,8 @@ msgstr "Höhe der SchĂĽrze in Schichten. Eine hohe SchĂĽrze kann gegen Zugluft #: xs/src/slic3r/GUI/ConfigWizard.cpp:213 #, c-format -msgid "Hello, welcome to Slic3r Prusa Edition! This %s helps you with the initial configuration; just a few settings and you will be ready to print." -msgstr "Hallo, willkommen bei Slic3r Prusa Edition! Dieses %s hilft Ihnen bei der Erstkonfiguration; nur ein paar Einstellungen und Sie sind bereit zum Drucken." +msgid "Hello, welcome to Slic3r Slic3r++! This %s helps you with the initial configuration; just a few settings and you will be ready to print." +msgstr "Hallo, willkommen bei Slic3r Slic3r++! Dieses %s hilft Ihnen bei der Erstkonfiguration; nur ein paar Einstellungen und Sie sind bereit zum Drucken." #: xs/src/slic3r/GUI/WipeTowerDialog.cpp:218 msgid "Here you can adjust required purging volume (mmÂł) for any given pair of tools." @@ -2342,8 +2342,8 @@ msgid "Open the object editor dialog" msgstr "Objekteditor-Dialog öffnen" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Open the Prusa Edition releases page in your browser" -msgstr "Seite mit den Prusa Edition-Releases in Ihrem Browser öffnen" +msgid "Open the Slic3r++ releases page in your browser" +msgstr "Seite mit den Slic3r++-Releases in Ihrem Browser öffnen" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:385 msgid "Open the Prusa3D drivers download page in your browser" @@ -2589,8 +2589,8 @@ msgid "Prusa 3D Drivers" msgstr "Prusa 3D Treiber" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Prusa Edition Releases" -msgstr "Prusa Edition Release" +msgid "Slic3r++ Releases" +msgstr "Slic3r++ Release" #: xs/src/slic3r/GUI/GUI.cpp:908 msgid "Purging volumes" @@ -2748,8 +2748,8 @@ msgid "Report an Issue" msgstr "Einen Fehler melden" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:405 -msgid "Report an issue on the Slic3r Prusa Edition" -msgstr "Einen Fehler in der Slic3r Prusa Edition melden" +msgid "Report an issue on the Slic3r Slic3r++" +msgstr "Einen Fehler in der Slic3r Slic3r++ melden" #: xs/src/slic3r/Utils/PresetUpdater.cpp:514 #, c-format diff --git a/resources/localization/en_US/Slic3rPE.mo b/resources/localization/en_US/Slic3rPE.mo index 122d36cfb6873a1462f404b15b1fa23deb679c1b..8ec5485c8d194dcc79b17a4daa975c47d7d91411 100644 GIT binary patch delta 138 zcmccD$#$ZXZ3DX#cX4S!YEf=#QD#ogWkb*g= diff --git a/resources/localization/en_US/Slic3rPE_en.po b/resources/localization/en_US/Slic3rPE_en.po index 7d4ee05d4..e519e481d 100644 --- a/resources/localization/en_US/Slic3rPE_en.po +++ b/resources/localization/en_US/Slic3rPE_en.po @@ -3353,9 +3353,9 @@ msgstr "Version " #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:66 msgid "" -" - Remember to check for updates at http://github.com/prusa3d/slic3r/releases" +" - Remember to check for updates at http://github.com/supermerill/slic3r/releases" msgstr "" -" - Remember to check for updates at http://github.com/prusa3d/slic3r/releases" +" - Remember to check for updates at http://github.com/supermerill/slic3r/releases" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:118 msgid "Plater" @@ -3626,12 +3626,12 @@ msgid "Open the Prusa3D drivers download page in your browser" msgstr "Open the Prusa3D drivers download page in your browser" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Prusa Edition Releases" -msgstr "Prusa Edition Releases" +msgid "Slic3r++ Releases" +msgstr "Slic3r++ Releases" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Open the Prusa Edition releases page in your browser" -msgstr "Open the Prusa Edition releases page in your browser" +msgid "Open the Slic3r++ releases page in your browser" +msgstr "Open the Slic3r++ releases page in your browser" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:395 msgid "Slic3r &Website" @@ -3662,8 +3662,8 @@ msgid "Report an Issue" msgstr "Report an Issue" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:405 -msgid "Report an issue on the Slic3r Prusa Edition" -msgstr "Report an issue on the Slic3r Prusa Edition" +msgid "Report an issue on the Slic3r Slic3r++" +msgstr "Report an issue on the Slic3r Slic3r++" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:408 msgid "&About Slic3r" diff --git a/resources/localization/es/Slic3rPE.mo b/resources/localization/es/Slic3rPE.mo index abeb4f4e8b6f1514aaa6258fbefc662381b752c6..40b134b073210b8705af7f59fe762bb2fb45f7ab 100644 GIT binary patch delta 135 zcmdnLf@9?hjt%}H+{L8@sYSV|MVUD{o5Mn44LE{xGLwyqw6!-MXfcsN@E8{!Wkv8V rFY83&Wv=NfK{janKLy5vR&dqZ&qOn_E5W(b8|xUww|}o?^q2+!k6AKP delta 157 zcmZ3vf@A**jt%}H>;*-o#fio#o1;Qv4R`}U90k{u%#zIfyv_StOk~i6elIx6iY9bo rStq(svjt$}=+{L8@sYSV|MVUD{o8>}+4LE{xGLwyqw6!;*-o#fio#o0UR>4R`}U90k{u%#zIfyv?;OdNOE2n-?5qMH6aR z)`>18xMouc%;4?k6d2uXQT1$>iDOh%Mira>tC3N0dsZW(9y_YU_5~e`BIsg!`Wb&s F1ONl|N}m7# diff --git a/resources/localization/fr_FR/Slic3rPE_fr.po b/resources/localization/fr_FR/Slic3rPE_fr.po index 81b5b2bb2..b53d3cb9e 100644 --- a/resources/localization/fr_FR/Slic3rPE_fr.po +++ b/resources/localization/fr_FR/Slic3rPE_fr.po @@ -86,8 +86,8 @@ msgstr "" "Valeur non-numĂ©rique." #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:66 -msgid " - Remember to check for updates at http://github.com/prusa3d/slic3r/releases" -msgstr " - Pensez Ă  vĂ©rifier les mises Ă  jours sur http://github.com/prusa3d/slic3r/releases" +msgid " - Remember to check for updates at http://github.com/supermerill/slic3r/releases" +msgstr " - Pensez Ă  vĂ©rifier les mises Ă  jours sur http://github.com/supermerill/slic3r/releases" # Used in this context: _("Save ") + title + _(" as:") #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1751 @@ -1600,8 +1600,8 @@ msgstr "Hauteur de la jupe exprimĂ©e en couches. Mettez une valeur Ă©levĂ©e pour #: xs/src/slic3r/GUI/ConfigWizard.cpp:213 #, c-format -msgid "Hello, welcome to Slic3r Prusa Edition! This %s helps you with the initial configuration; just a few settings and you will be ready to print." -msgstr "Bonjour, bienvenu dans Slic3r Prusa Edition ! Ce %s vous aide Ă  la configuration initiale ; juste quelques paramètres et vous serez prĂŞt Ă  imprimer." +msgid "Hello, welcome to Slic3r Slic3r++! This %s helps you with the initial configuration; just a few settings and you will be ready to print." +msgstr "Bonjour, bienvenu dans Slic3r Slic3r++ ! Ce %s vous aide Ă  la configuration initiale ; juste quelques paramètres et vous serez prĂŞt Ă  imprimer." #: xs/src/slic3r/GUI/WipeTowerDialog.cpp:218 msgid "Here you can adjust required purging volume (mmÂł) for any given pair of tools." @@ -2340,8 +2340,8 @@ msgid "Open the object editor dialog" msgstr "Ouvrir la boĂ®te de dialogue d'Ă©dition d'objet" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Open the Prusa Edition releases page in your browser" -msgstr "Ouvrir la page des publications de la Prusa Edition dans votre navigateur" +msgid "Open the Slic3r++ releases page in your browser" +msgstr "Ouvrir la page des publications de la Slic3r++ dans votre navigateur" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:385 msgid "Open the Prusa3D drivers download page in your browser" @@ -2587,8 +2587,8 @@ msgid "Prusa 3D Drivers" msgstr "Drivers Prusa 3D" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Prusa Edition Releases" -msgstr "Publication de la Prusa Edition" +msgid "Slic3r++ Releases" +msgstr "Publication de la Slic3r++" #: xs/src/slic3r/GUI/GUI.cpp:908 msgid "Purging volumes" @@ -2746,8 +2746,8 @@ msgid "Report an Issue" msgstr "Signaler un problème" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:405 -msgid "Report an issue on the Slic3r Prusa Edition" -msgstr "Signaler un problème sur la Prusa Edition de Slic3r" +msgid "Report an issue on the Slic3r Slic3r++" +msgstr "Signaler un problème sur la Slic3r++ de Slic3r" #: xs/src/slic3r/Utils/PresetUpdater.cpp:514 #, c-format diff --git a/resources/localization/it/Slic3rPE.mo b/resources/localization/it/Slic3rPE.mo index 229dcbab2a529fed274770255c2ebd5c6fdf4259..37b1e7fff04b4ef4a4c520de0dcdd007c7ae631b 100644 GIT binary patch delta 170 zcmX>*lVj~njt%}H+{L8@sYSV|MVUD{o5Mn44LE{xGLwyqw6!-MXfcsN@E8{!Wkv8V zFY83&Wv-cBf^5)sZbimIbGYj5oe_+w3UKc9o=Qf^={1#%T-)U;8B^Kd65A)#Gu9z- KrP~-cwE+OFp*w5< delta 197 zcmZ2GljH16jt%}H>;*-o#fio#o1;Qv4R`}U90k{u%#zIfyv_StOk~i6elIx6iY9bo zStq(s;*-o#fio#n~g$Z4R`}U90k{u%#zIfyv@^FOk~i6E-yIBiYByR zStpv%V#771Fmt!tC^E{KqiWfn6v0?1k0y4zoY9O8Rcv}e9izl{!#c(eG>Pp8TNuB! F004w2Nv;3@ diff --git a/resources/localization/pl/Slic3rPE_pl.po b/resources/localization/pl/Slic3rPE_pl.po index 9ab5f61b7..f6748d66d 100644 --- a/resources/localization/pl/Slic3rPE_pl.po +++ b/resources/localization/pl/Slic3rPE_pl.po @@ -86,8 +86,8 @@ msgstr "" "Wartość nie jest liczbÄ…." #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:66 -msgid " - Remember to check for updates at http://github.com/prusa3d/slic3r/releases" -msgstr " - PamiÄ™taj aby sprawdzać aktualizacja na http://github.com/prusa3d/slic3r/releases" +msgid " - Remember to check for updates at http://github.com/supermerill/slic3r/releases" +msgstr " - PamiÄ™taj aby sprawdzać aktualizacja na http://github.com/supermerill/slic3r/releases" # Used in this context: _("Save ") + title + _(" as:") #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1751 @@ -1605,8 +1605,8 @@ msgstr "Wysokość skirtu wyraĹĽona w warstwach. Ustawienie wysokiej wartoĹ›ci s #: xs/src/slic3r/GUI/ConfigWizard.cpp:213 #, c-format -msgid "Hello, welcome to Slic3r Prusa Edition! This %s helps you with the initial configuration; just a few settings and you will be ready to print." -msgstr "Witaj w Slic3r Prusa Edition! Ten %s pomoĹĽe we wstÄ™pnej konfiguracji - tylko kilka ustawieĹ„ dzieli CiÄ™ od gotowoĹ›ci do drukowania." +msgid "Hello, welcome to Slic3r Slic3r++! This %s helps you with the initial configuration; just a few settings and you will be ready to print." +msgstr "Witaj w Slic3r Slic3r++! Ten %s pomoĹĽe we wstÄ™pnej konfiguracji - tylko kilka ustawieĹ„ dzieli CiÄ™ od gotowoĹ›ci do drukowania." #: xs/src/slic3r/GUI/WipeTowerDialog.cpp:218 msgid "Here you can adjust required purging volume (mmÂł) for any given pair of tools." @@ -2348,8 +2348,8 @@ msgid "Open the object editor dialog" msgstr "OtwĂłrz menu edytora modelu" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Open the Prusa Edition releases page in your browser" -msgstr "OtwĂłrz stronÄ™ z wydaniami Prusa Edition w przeglÄ…darce" +msgid "Open the Slic3r++ releases page in your browser" +msgstr "OtwĂłrz stronÄ™ z wydaniami Slic3r++ w przeglÄ…darce" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:385 msgid "Open the Prusa3D drivers download page in your browser" @@ -2595,8 +2595,8 @@ msgid "Prusa 3D Drivers" msgstr "Sterowniki Prusa3D" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 -msgid "Prusa Edition Releases" -msgstr "Wydania Prusa Edition" +msgid "Slic3r++ Releases" +msgstr "Wydania Slic3r++" #: xs/src/slic3r/GUI/GUI.cpp:908 msgid "Purging volumes" @@ -2754,8 +2754,8 @@ msgid "Report an Issue" msgstr "ZgĹ‚oĹ› problem" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:405 -msgid "Report an issue on the Slic3r Prusa Edition" -msgstr "ZgĹ‚oĹ› problem z Slic3r Prusa Edition" +msgid "Report an issue on the Slic3r Slic3r++" +msgstr "ZgĹ‚oĹ› problem z Slic3r Slic3r++" #: xs/src/slic3r/Utils/PresetUpdater.cpp:514 #, c-format diff --git a/resources/localization/uk/Slic3rPE.mo b/resources/localization/uk/Slic3rPE.mo index 7ced15dc8c91acee358022d27d2d1abdf88c2313..3a3155c7a9e670984e22f79acde44c002dc80810 100644 GIT binary patch delta 148 zcmZ2-jHB-u$A)@G?&8vd)S}$fqRgC}&25gZmK?!3naRdQ+S;3MREe-6ct7i%nGihB zrsQN4t(%|DD}+l=Z;W6xo}LxKD7bx5IO7yfZkU-27gkJ{NoADXo}9>N%K}%weQhdZ G`Cb4*xi$U( delta 164 zcmeA>#%2>V^0I8Bd A5dZ)H diff --git a/resources/localization/uk/Slic3rPE_.mo b/resources/localization/uk/Slic3rPE_.mo index c980ae64db8cc2f277ea38c8f12587076ef3626a..4af1be30a94c7b3e9b30015b9d75eaf58d0f1905 100644 GIT binary patch delta 135 zcmZ2" "" "" + "Copyright © 2018 Durand Rémi.
" "Copyright © 2016-2018 Prusa Research.
" "Copyright © 2011-2017 Alessandro Ranellucci.
" "Slic3r is licensed under the " "GNU Affero General Public License, version 3." "

" - "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and numerous others. " + "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik, Durand Rémi and numerous others. " "Manual by Gary Hodgson. Inspired by the RepRap community.
" "Slic3r logo designed by Corey Daniels, Silk Icon Set designed by Mark James. " "
" diff --git a/xs/src/slic3r/GUI/ConfigWizard.cpp b/xs/src/slic3r/GUI/ConfigWizard.cpp index e5fe7c0a2..43faf941a 100644 --- a/xs/src/slic3r/GUI/ConfigWizard.cpp +++ b/xs/src/slic3r/GUI/ConfigWizard.cpp @@ -233,7 +233,7 @@ PageWelcome::PageWelcome(ConfigWizard *parent, bool check_first_variant) : if (wizard_p()->run_reason == ConfigWizard::RR_DATA_EMPTY) { wxString::Format(_(L("Run %s")), ConfigWizard::name()); append_text(wxString::Format( - _(L("Hello, welcome to Slic3r++ (fork of Slic3r Prusa Edition)! This %s helps you with the initial configuration; just a few settings and you will be ready to print.")), + _(L("Hello, welcome to Slic3r++ (fork of Slic3r Slic3r++)! This %s helps you with the initial configuration; just a few settings and you will be ready to print.")), ConfigWizard::name()) ); } else { From 7d1b6bd6808656f30702d1fee63dfbcdb8005ca0 Mon Sep 17 00:00:00 2001 From: supermerill Date: Fri, 7 Sep 2018 11:44:12 +0200 Subject: [PATCH 13/29] update default config --- xs/src/libslic3r/PrintConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 5127478b7..bfb8859ab 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -1336,9 +1336,9 @@ PrintConfigDef::PrintConfigDef() def = this->add("no_perimeter_unsupported", coBool); def->label = L(""); def->category = L("Layers and Perimeters"); - def->tooltip = L("Experimental option to remove perimeters where there are nothing under and a bridged infill should be better."); + def->tooltip = L("Experimental option to remove perimeters where there are nothing under and where a bridged infill should be better. Computationaly intensive!"); def->cli = "no-perimeter-unsupported!"; - def->default_value = new ConfigOptionBool(true); + def->default_value = new ConfigOptionBool(false); def = this->add("min_perimeter_unsupported", coInt); def->label = L("Minimum perimeters"); From e482c84e981b97de4b66743f4e0b4f80ebcff3ac Mon Sep 17 00:00:00 2001 From: supermerill Date: Mon, 10 Sep 2018 13:42:27 +0200 Subject: [PATCH 14/29] bugfix: dense_infill too small region make export gcode crash --- xs/src/libslic3r/Fill/FillRectilinear2.cpp | 79 +++++++++++++--------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/xs/src/libslic3r/Fill/FillRectilinear2.cpp b/xs/src/libslic3r/Fill/FillRectilinear2.cpp index 3d4186aac..3c0f0a7cc 100644 --- a/xs/src/libslic3r/Fill/FillRectilinear2.cpp +++ b/xs/src/libslic3r/Fill/FillRectilinear2.cpp @@ -1481,10 +1481,10 @@ void FillRectilinear2Peri::fill_surface_extrusion(const Surface *surface, const //you don't want to sort the extrusions: big infill first, small second eecroot->no_sort = true; + // === extrude perimeter === Polylines polylines_1; //generate perimeter: - //TODO: better optimize start/end point? - ExPolygons path_perimeter = offset_ex(surface->expolygon, scale_(-this->spacing/2)); + ExPolygons path_perimeter = offset2_ex(surface->expolygon, scale_(-this->spacing), scale_(this->spacing / 2)); for (ExPolygon &expolygon : path_perimeter) { expolygon.contour.make_counter_clockwise(); polylines_1.push_back(expolygon.contour.split_at_index(0)); @@ -1494,48 +1494,61 @@ void FillRectilinear2Peri::fill_surface_extrusion(const Surface *surface, const } } - // Save into layer. - auto *eec = new ExtrusionEntityCollection(); - /// pass the no_sort attribute to the extrusion path - eec->no_sort = this->no_sort(); - /// add it into the collection - eecroot->entities.push_back(eec); - /// push the path - extrusion_entities_append_paths( - eec->entities, STDMOVE(polylines_1), - flow.bridge ? - erBridgeInfill : - (surface->is_solid() ? - ((surface->is_top()) ? erTopSolidInfill : erSolidInfill) : - erInternalInfill), - flow.mm3_per_mm() * params.flow_mult, flow.width * params.flow_mult, flow.height); + if (!polylines_1.empty()) { + // Save into layer. + ExtrusionEntityCollection *eec = new ExtrusionEntityCollection(); + /// pass the no_sort attribute to the extrusion path + eec->no_sort = this->no_sort(); + /// add it into the collection + eecroot->entities.push_back(eec); + /// push the path + extrusion_entities_append_paths( + eec->entities, (polylines_1), + flow.bridge ? + erBridgeInfill : + (surface->is_solid() ? + ((surface->is_top()) ? erTopSolidInfill : erSolidInfill) : + erInternalInfill), + flow.mm3_per_mm() * params.flow_mult, flow.width * params.flow_mult, flow.height); + } + // === extrude dense infill === Polylines polylines_2; + bool canFill = true; //50% overlap with the new perimeter ExPolygons path_inner = offset2_ex(surface->expolygon, scale_(-this->spacing * 1.5), scale_(this->spacing)); for (ExPolygon &expolygon : path_inner) { Surface surfInner(*surface, expolygon); if (!fill_surface_by_lines(&surfInner, params, 0.f, 0.f, polylines_2)) { printf("FillRectilinear2::fill_surface() failed to fill a region.\n"); + canFill = false; } } - // Save into layer. - eec = new ExtrusionEntityCollection(); - /// pass the no_sort attribute to the extrusion path - eec->no_sort = this->no_sort(); - /// add it into the collection - eecroot->entities.push_back(eec); - /// push the path - extrusion_entities_append_paths( - eec->entities, STDMOVE(polylines_2), - flow.bridge ? - erBridgeInfill : - (surface->is_solid() ? - ((surface->is_top()) ? erTopSolidInfill : erSolidInfill) : - erInternalInfill), - flow.mm3_per_mm() * params.flow_mult, flow.width * params.flow_mult, flow.height); + if (canFill && !polylines_2.empty()) { + // Save into layer. + ExtrusionEntityCollection *eec = new ExtrusionEntityCollection(); + /// pass the no_sort attribute to the extrusion path + eec->no_sort = this->no_sort(); + /// add it into the collection + eecroot->entities.push_back(eec); + /// push the path + extrusion_entities_append_paths( + eec->entities, (polylines_2), + flow.bridge ? + erBridgeInfill : + (surface->is_solid() ? + ((surface->is_top()) ? erTopSolidInfill : erSolidInfill) : + erInternalInfill), + flow.mm3_per_mm() * params.flow_mult, flow.width * params.flow_mult, flow.height); + } + + // === end === + if (!eecroot->empty()) { + out.entities.push_back(eecroot); + } else { + delete eecroot; + } - out.entities.push_back(eecroot); } } // namespace Slic3r From 86323a6b73f2c376df04a443921c2ab1a955ab57 Mon Sep 17 00:00:00 2001 From: supermerill Date: Tue, 25 Sep 2018 16:13:59 +0200 Subject: [PATCH 15/29] Add kill switch parameter for "exact last layer height" --- xs/src/libslic3r/PrintConfig.cpp | 15 +++++++++++++-- xs/src/libslic3r/PrintConfig.hpp | 2 ++ xs/src/libslic3r/PrintObject.cpp | 1 + xs/src/libslic3r/Slicing.cpp | 3 ++- xs/src/libslic3r/Slicing.hpp | 1 + xs/src/slic3r/GUI/Preset.cpp | 2 +- xs/src/slic3r/GUI/Tab.cpp | 19 ++++++++++++++----- 7 files changed, 34 insertions(+), 9 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index bfb8859ab..37df24e55 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -1046,6 +1046,13 @@ PrintConfigDef::PrintConfigDef() def->min = 0; def->default_value = new ConfigOptionFloat(0.3); + def = this->add("exact_last_layer_height", coBool); + def->label = L("Exact last layer height"); + def->category = L("Layers and Perimeters"); + def->tooltip = L("This setting controls the height of last object layers to put the last layer at the exact highest height possible. Experimental."); + def->cli = "exact_last-layer-height=f"; + def->default_value = new ConfigOptionBool(false); + def = this->add("remaining_times", coBool); def->label = L("Supports remaining times"); def->tooltip = L("Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute" @@ -2364,9 +2371,13 @@ void DynamicPrintConfig::normalize() opt->values.assign(opt->values.size(), false); // set all values to false } { - this->opt("perimeters", true)->value = 1; + this->opt("perimeters", true)->value = 1; this->opt("top_solid_layers", true)->value = 0; - this->opt("fill_density", true)->value = 0; + this->opt("fill_density", true)->value = 0; + this->opt("support_material", true)->value = false; + this->opt("support_material_enforce_layers")->value = 0; + this->opt("exact_last_layer_height", true)->value = false; + this->opt("ensure_vertical_shell_thickness", true)->value = false; } } } diff --git a/xs/src/libslic3r/PrintConfig.hpp b/xs/src/libslic3r/PrintConfig.hpp index 837c4f682..31d8c6c6c 100644 --- a/xs/src/libslic3r/PrintConfig.hpp +++ b/xs/src/libslic3r/PrintConfig.hpp @@ -330,6 +330,7 @@ public: ConfigOptionBool infill_only_where_needed; ConfigOptionBool interface_shells; ConfigOptionFloat layer_height; + ConfigOptionBool exact_last_layer_height; ConfigOptionInt raft_layers; ConfigOptionEnum seam_position; // ConfigOptionFloat seam_preferred_direction; @@ -368,6 +369,7 @@ protected: OPT_PTR(infill_only_where_needed); OPT_PTR(interface_shells); OPT_PTR(layer_height); + OPT_PTR(exact_last_layer_height); OPT_PTR(raft_layers); OPT_PTR(seam_position); // OPT_PTR(seam_preferred_direction); diff --git a/xs/src/libslic3r/PrintObject.cpp b/xs/src/libslic3r/PrintObject.cpp index 1884590ae..2fb68c301 100644 --- a/xs/src/libslic3r/PrintObject.cpp +++ b/xs/src/libslic3r/PrintObject.cpp @@ -163,6 +163,7 @@ bool PrintObject::invalidate_state_by_config_options(const std::vectorreset_layer_height_profile(); diff --git a/xs/src/libslic3r/Slicing.cpp b/xs/src/libslic3r/Slicing.cpp index ca3b4f931..24043c824 100644 --- a/xs/src/libslic3r/Slicing.cpp +++ b/xs/src/libslic3r/Slicing.cpp @@ -71,6 +71,7 @@ SlicingParameters SlicingParameters::create_from_config( // Miniumum/maximum of the minimum layer height over all extruders. params.min_layer_height = MIN_LAYER_HEIGHT; params.max_layer_height = std::numeric_limits::max(); + params.exact_last_layer_height = object_config.exact_last_layer_height.value; if (object_config.support_material.value || params.base_raft_layers > 0) { // Has some form of support. Add the support layers to the minimum / maximum layer height limits. params.min_layer_height = std::max( @@ -553,7 +554,7 @@ std::vector generate_object_layers( } // Adjust the last layer to align with the top object layer exactly - if (out.size() > 0 && slicing_params.object_print_z_height() != out[out.size()-1]){ + if (out.size() > 0 && slicing_params.object_print_z_height() != out[out.size() - 1] && slicing_params.exact_last_layer_height) { float neededPrintZ = slicing_params.object_print_z_height(); int idx_layer = out.size() / 2 - 1; float diffZ = neededPrintZ - out[idx_layer * 2 + 1]; diff --git a/xs/src/libslic3r/Slicing.hpp b/xs/src/libslic3r/Slicing.hpp index b4a074bb5..249ae0063 100644 --- a/xs/src/libslic3r/Slicing.hpp +++ b/xs/src/libslic3r/Slicing.hpp @@ -57,6 +57,7 @@ struct SlicingParameters coordf_t min_layer_height; coordf_t max_layer_height; coordf_t max_suport_layer_height; + bool exact_last_layer_height; // First layer height of the print, this may be used for the first layer of the raft // or for the first layer of the print. diff --git a/xs/src/slic3r/GUI/Preset.cpp b/xs/src/slic3r/GUI/Preset.cpp index b68223b38..cbddff959 100644 --- a/xs/src/slic3r/GUI/Preset.cpp +++ b/xs/src/slic3r/GUI/Preset.cpp @@ -306,7 +306,7 @@ const std::vector& Preset::print_options() "elefant_foot_compensation", "xy_size_compensation", "hole_size_compensation", "threads", "resolution", "wipe_tower", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_bridging", "only_one_perimeter_top", "single_extruder_multi_material_priming", "compatible_printers", "compatible_printers_condition", "inherits", - "infill_dense", "no_perimeter_unsupported", "min_perimeter_unsupported", "noperi_bridge_only" + "infill_dense", "no_perimeter_unsupported", "min_perimeter_unsupported", "noperi_bridge_only", "exact_last_layer_height" }; return s_opts; } diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 0150ca3b6..ab3efb7bc 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -786,7 +786,8 @@ void TabPrint::build() auto page = add_options_page(_(L("Layers and perimeters")), "layers.png"); auto optgroup = page->new_optgroup(_(L("Layer height"))); optgroup->append_single_option_line("layer_height"); - optgroup->append_single_option_line("first_layer_height"); + optgroup->append_single_option_line("first_layer_height"); + optgroup->append_single_option_line("exact_last_layer_height"); optgroup = page->new_optgroup(_(L("Vertical shells"))); optgroup->append_single_option_line("perimeters"); @@ -1042,15 +1043,22 @@ void TabPrint::update() double fill_density = m_config->option("fill_density")->value; - if (m_config->opt_bool("spiral_vase") && - !(m_config->opt_int("perimeters") == 1 && m_config->opt_int("top_solid_layers") == 0 && - fill_density == 0)) { + if (m_config->opt_bool("spiral_vase") && !( + m_config->opt_int("perimeters") == 1 + && m_config->opt_int("top_solid_layers") == 0 + && fill_density == 0 + && m_config->opt_bool("support_material") == false + && m_config->opt_int("support_material_enforce_layers") == 0 + && m_config->opt_bool("exact_last_layer_height") == false + && m_config->opt_bool("ensure_vertical_shell_thickness") == false + )) { wxString msg_text = _(L("The Spiral Vase mode requires:\n" "- one perimeter\n" "- no top solid layers\n" "- 0% fill density\n" "- no support material\n" "- no ensure_vertical_shell_thickness\n" + "- unchecked 'exact last layer height'\n" "\nShall I adjust those settings in order to enable Spiral Vase?")); auto dialog = new wxMessageDialog(parent(), msg_text, _(L("Spiral Vase")), wxICON_WARNING | wxYES | wxNO); DynamicPrintConfig new_conf = *m_config; @@ -1059,7 +1067,8 @@ void TabPrint::update() new_conf.set_key_value("top_solid_layers", new ConfigOptionInt(0)); new_conf.set_key_value("fill_density", new ConfigOptionPercent(0)); new_conf.set_key_value("support_material", new ConfigOptionBool(false)); - new_conf.set_key_value("support_material_enforce_layers", new ConfigOptionInt(0)); + new_conf.set_key_value("support_material_enforce_layers", new ConfigOptionInt(0)); + new_conf.set_key_value("exact_last_layer_height", new ConfigOptionBool(false)); new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(false)); fill_density = 0; } From 8b9fb5b654646c6fad20f4617a81d0ffbf0dc4b7 Mon Sep 17 00:00:00 2001 From: supermerill Date: Tue, 25 Sep 2018 16:46:53 +0200 Subject: [PATCH 16/29] gap fill option (instead of 0% infill) --- xs/src/libslic3r/PerimeterGenerator.cpp | 2 +- xs/src/libslic3r/PrintConfig.cpp | 14 +++++++++++--- xs/src/libslic3r/PrintConfig.hpp | 2 ++ xs/src/libslic3r/PrintObject.cpp | 1 + xs/src/slic3r/GUI/Preset.cpp | 2 +- xs/src/slic3r/GUI/Tab.cpp | 5 +++-- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/xs/src/libslic3r/PerimeterGenerator.cpp b/xs/src/libslic3r/PerimeterGenerator.cpp index e5fee9dfc..7218e028f 100644 --- a/xs/src/libslic3r/PerimeterGenerator.cpp +++ b/xs/src/libslic3r/PerimeterGenerator.cpp @@ -293,7 +293,7 @@ void PerimeterGenerator::process() next_onion = offset_ex(last, -(float)(distance)); } // look for gaps - if (this->config->gap_fill_speed.value > 0 && this->config->fill_density.value > 0) + if (this->config->gap_fill_speed.value > 0 && this->config->gap_fill) // not using safety offset here would "detect" very narrow gaps // (but still long enough to escape the area threshold) that gap fill // won't be able to fill but we'd still remove from infill area diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 37df24e55..ca516a4a4 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -871,13 +871,21 @@ PrintConfigDef::PrintConfigDef() def->cli = "first-layer-temperature=i@"; def->min = 0; def->max = max_temp; - def->default_value = new ConfigOptionInts { 200 }; - + def->default_value = new ConfigOptionInts{ 200 }; + + def = this->add("gap_fill", coBool); + def->label = L("Gap fill"); + def->category = L("Advanced"); + def->tooltip = L("Enable gap fill algorithm. It will extrude small lines between perimeter " + "when there are not enough space for an other perimeter or an infill."); + def->cli = "gap-fill!"; + def->default_value = new ConfigOptionBool(true); + def = this->add("gap_fill_speed", coFloat); def->label = L("Gap fill"); def->category = L("Speed"); def->tooltip = L("Speed for filling small gaps using short zigzag moves. Keep this reasonably low " - "to avoid too much shaking and resonance issues. Set zero to disable gaps filling."); + "to avoid too much shaking and resonance issues. Set zero to disable gaps filling."); def->sidetext = L("mm/s"); def->cli = "gap-fill-speed=f"; def->min = 0; diff --git a/xs/src/libslic3r/PrintConfig.hpp b/xs/src/libslic3r/PrintConfig.hpp index 31d8c6c6c..007528077 100644 --- a/xs/src/libslic3r/PrintConfig.hpp +++ b/xs/src/libslic3r/PrintConfig.hpp @@ -423,6 +423,7 @@ public: ConfigOptionFloat fill_angle; ConfigOptionPercent fill_density; ConfigOptionEnum fill_pattern; + ConfigOptionBool gap_fill; ConfigOptionFloat gap_fill_speed; ConfigOptionInt infill_extruder; ConfigOptionFloatOrPercent infill_extrusion_width; @@ -473,6 +474,7 @@ protected: OPT_PTR(fill_angle); OPT_PTR(fill_density); OPT_PTR(fill_pattern); + OPT_PTR(gap_fill); OPT_PTR(gap_fill_speed); OPT_PTR(infill_extruder); OPT_PTR(infill_extrusion_width); diff --git a/xs/src/libslic3r/PrintObject.cpp b/xs/src/libslic3r/PrintObject.cpp index 2fb68c301..c6bf07c40 100644 --- a/xs/src/libslic3r/PrintObject.cpp +++ b/xs/src/libslic3r/PrintObject.cpp @@ -149,6 +149,7 @@ bool PrintObject::invalidate_state_by_config_options(const std::vector& Preset::print_options() "max_volumetric_speed", "max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative", "perimeter_speed", "small_perimeter_speed", "external_perimeter_speed", "infill_speed", "solid_infill_speed", "top_solid_infill_speed", "support_material_speed", "support_material_xy_spacing", "support_material_interface_speed", - "bridge_speed", "gap_fill_speed", "travel_speed", "first_layer_speed", "perimeter_acceleration", "infill_acceleration", + "bridge_speed", "gap_fill", "gap_fill_speed", "travel_speed", "first_layer_speed", "perimeter_acceleration", "infill_acceleration", "bridge_acceleration", "first_layer_acceleration", "default_acceleration", "skirts", "skirt_distance", "skirt_height", "min_skirt_length", "brim_width", "support_material", "support_material_threshold", "support_material_enforce_layers", "raft_layers", "support_material_pattern", "support_material_with_sheath", "support_material_spacing", diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index ab3efb7bc..fa28ff680 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -850,7 +850,8 @@ void TabPrint::build() line.append_option(optgroup->get_option("bridged_infill_margin")); optgroup->append_line(line); optgroup->append_single_option_line("only_retract_when_crossing_perimeters"); - optgroup->append_single_option_line("infill_first"); + optgroup->append_single_option_line("infill_first"); + optgroup->append_single_option_line("gap_fill"); page = add_options_page(_(L("Skirt and brim")), "box.png"); optgroup = page->new_optgroup(_(L("Skirt"))); @@ -1212,7 +1213,7 @@ void TabPrint::update() "infill_speed", "bridge_speed" }) get_field(el)->toggle(have_infill || have_solid_infill); - get_field("gap_fill_speed")->toggle(have_perimeters && have_infill); + get_field("gap_fill_speed")->toggle(have_perimeters && m_config->option("gap_fill")); bool have_top_solid_infill = m_config->opt_int("top_solid_layers") > 0; for (auto el : { "top_infill_extrusion_width", "top_solid_infill_speed" }) From 17e330bc00e7d3048e5fb4d7889726e3853a8a72 Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 26 Sep 2018 17:32:04 +0200 Subject: [PATCH 17/29] more conventional defaults. --- xs/src/libslic3r/PrintConfig.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index bd6dda0c7..9ab70a261 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -264,11 +264,10 @@ PrintConfigDef::PrintConfigDef() def = this->add("elefant_foot_compensation", coFloat); def->label = L("First layer"); def->category = L("Advanced"); - def->tooltip = L("The first layer will be shrunk in the XY plane by the configured value " - "to compensate for the 1st layer squish aka an Elephant Foot effect. (must be negative = inwards)"); + def->tooltip = L("The first layer will be grown / shrunk in the XY plane by the configured value " + "to compensate for the 1st layer squish aka an Elephant Foot effect. (should be negative = inwards)"); def->sidetext = L("mm"); def->cli = "elefant-foot-compensation=f"; - def->max = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("end_gcode", coString); @@ -320,8 +319,8 @@ PrintConfigDef::PrintConfigDef() def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Octagram Spiral")); def->enum_labels.push_back("Ironing"); - def->enum_labels.push_back("Ironing (triple)"); - def->enum_labels.push_back("Ironing (hilbert)"); + //def->enum_labels.push_back("Ironing (triple)"); + //def->enum_labels.push_back("Ironing (hilbert)"); // solid_fill_pattern is an obsolete equivalent to top_fill_pattern/bottom_fill_pattern. def->aliases.push_back("solid_fill_pattern"); def->default_value = new ConfigOptionEnum(ipRectilinear); @@ -776,7 +775,7 @@ PrintConfigDef::PrintConfigDef() def->enum_labels.push_back("55"); def->enum_labels.push_back("75"); def->enum_labels.push_back("100"); - def->default_value = new ConfigOptionPercent(20); + def->default_value = new ConfigOptionPercent(18); def = this->add("fill_pattern", coEnum); def->label = L("Inside"); @@ -953,7 +952,7 @@ PrintConfigDef::PrintConfigDef() def->category = L("Infill"); def->tooltip = L("Enable the creation of a support layer under the first solid layer. Allow to use lower infill ratio without compromizing the top quality"); def->cli = "infill-dense!"; - def->default_value = new ConfigOptionBool(1); + def->default_value = new ConfigOptionBool(false); def = this->add("infill_extruder", coInt); def->label = L("Infill extruder"); @@ -2253,7 +2252,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("hole_size_compensation", coFloat); def->label = L("Holes"); def->category = L("Advanced"); - def->tooltip = L("The convex holes will be grown in the XY plane by the configured value" + def->tooltip = L("The convex holes will be grown / shrunk in the XY plane by the configured value" " (negative = inwards, positive = outwards, should be positive as the holes are always a bit smaller)." " This might be useful for fine-tuning hole sizes."); def->sidetext = L("mm"); From 4bd6ef61f46032ddc63096581a6d40226d47c690 Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 14 Nov 2018 20:04:35 +0100 Subject: [PATCH 18/29] Debug gap fill option (now it activate the gap fill speed option) --- xs/src/slic3r/GUI/Tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index d37bc5289..c94ba67b1 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -1227,7 +1227,7 @@ void TabPrint::update() "infill_speed", "bridge_speed" }) get_field(el)->toggle(have_infill || have_solid_infill); - get_field("gap_fill_speed")->toggle(have_perimeters && m_config->option("gap_fill")); + get_field("gap_fill_speed")->toggle(have_perimeters && m_config->opt_bool("gap_fill")); bool have_top_solid_infill = m_config->opt_int("top_solid_layers") > 0; for (auto el : { "top_infill_extrusion_width", "top_solid_infill_speed" }) From 9eae1df1cdf55318467b214ffbac5ba8032225a9 Mon Sep 17 00:00:00 2001 From: supermerill Date: Tue, 4 Dec 2018 10:53:24 +0100 Subject: [PATCH 19/29] text change --- xs/src/libslic3r/PrintConfig.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 5fd932cc7..a3c4bf3a9 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -346,7 +346,9 @@ PrintConfigDef::PrintConfigDef() def->label = L("Enforce 100% fill volume"); def->category = L("Infill"); def->tooltip = L("Experimental option wich modify (top/bottom) fill flow to have the exact amount of plastic inside the volume to fill " - "(it generally changes the flow from -7% to +4%, depending on the size of the surface to fill and the overlap parameters)."); + "(it generally changes the flow from -7% to +4%, depending on the size of the surface to fill and the overlap parameters, " + "but it can go as high as +50% for infill in very small area where rectilinear doesn't have a good coverage). It has the advantage " + "to remove the over-extrusion seen in thin infill area, from the overlap ratio"); def->cli = "enforce-full-fill-volume!"; def->default_value = new ConfigOptionBool(true); From 4e51008923b6c2f3f76a0e58fb45b175336f240d Mon Sep 17 00:00:00 2001 From: supermerill Date: Thu, 6 Dec 2018 18:08:07 +0100 Subject: [PATCH 20/29] localization changes & typo --- resources/localization/en_US/Slic3rPE_en.po | 6 +++--- xs/src/libslic3r/libslic3r.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/localization/en_US/Slic3rPE_en.po b/resources/localization/en_US/Slic3rPE_en.po index e519e481d..ef6263d56 100644 --- a/resources/localization/en_US/Slic3rPE_en.po +++ b/resources/localization/en_US/Slic3rPE_en.po @@ -862,7 +862,7 @@ msgstr "Filament Settings" #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:228 msgid "Printer Settings" -msgstr "Printer Settings" +msgstr "Hardware Settings" #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:248 msgid "Save preset" @@ -1071,7 +1071,7 @@ msgid "" "Suppress \" - default - \" presets in the Print / Filament / Printer " "selections once there are any other valid presets available." msgstr "" -"Suppress \" - default - \" presets in the Print / Filament / Printer " +"Suppress \" - default - \" presets in the Print / Filament / Hardware " "selections once there are any other valid presets available." #: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:67 @@ -2358,7 +2358,7 @@ msgstr "(minimum)" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1014 msgid "Printer notes" -msgstr "Printer notes" +msgstr "Hardware notes" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1015 msgid "You can put your notes regarding the printer here." diff --git a/xs/src/libslic3r/libslic3r.h b/xs/src/libslic3r/libslic3r.h index dba7152b6..ccd42441e 100644 --- a/xs/src/libslic3r/libslic3r.h +++ b/xs/src/libslic3r/libslic3r.h @@ -14,7 +14,7 @@ #include #define SLIC3R_FORK_NAME "Slic3r++" -#define SLIC3R_VERSION "1.41.2 +#define SLIC3R_VERSION "1.41.2" #define SLIC3R_BUILD "UNKNOWN" typedef int32_t coord_t; From 9396b6366dc8c4856565293fa3e745192e6311ec Mon Sep 17 00:00:00 2001 From: supermerill Date: Fri, 7 Dec 2018 11:06:53 +0100 Subject: [PATCH 21/29] text & trad fr --- resources/localization/fr_FR/Slic3rPE_fr.po | 439 ++++++++++++++++++-- xs/src/libslic3r/PrintConfig.cpp | 18 +- xs/src/slic3r/GUI/Preset.cpp | 2 +- xs/src/slic3r/GUI/Tab.cpp | 2 +- 4 files changed, 413 insertions(+), 48 deletions(-) diff --git a/resources/localization/fr_FR/Slic3rPE_fr.po b/resources/localization/fr_FR/Slic3rPE_fr.po index b53d3cb9e..c6a97db69 100644 --- a/resources/localization/fr_FR/Slic3rPE_fr.po +++ b/resources/localization/fr_FR/Slic3rPE_fr.po @@ -329,7 +329,7 @@ msgstr "Ajouter plus de pĂ©rimètres si nĂ©cessaire pour Ă©viter des trous dans #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:240 msgid "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)." -msgstr "Ajouter un remplissage plein Ă  proximitĂ© des surfaces inclinĂ©es pour garantir une Ă©paisseur de coque verticale (couches solides supĂ©rieures+infĂ©rieures)." +msgstr "Ajouter un remplissage plein Ă  proximitĂ© des surfaces inclinĂ©es pour garantir une Ă©paisseur de coque verticale (couches pleines supĂ©rieures+infĂ©rieures)." #: xs/src/slic3r/GUI/Tab.cpp:754 msgid "Additional information:" @@ -572,7 +572,7 @@ msgstr "Dessous" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:72 msgid "Bottom solid layers" -msgstr "Couches solides infĂ©rieures" +msgstr "Couches pleines infĂ©rieures" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:370 msgid "Bottom View" @@ -580,11 +580,7 @@ msgstr "Vue du Dessous" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:77 msgid "Bridge" -msgstr "Pont" - -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:106 -msgid "Bridge flow ratio" -msgstr "Ratio de flux pour les ponts" +msgstr "Ponts" #: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:144 #: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:86 @@ -600,12 +596,12 @@ msgid "Bridges fan speed" msgstr "Vitesse du ventilateur pour les ponts" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:86 -msgid "Bridging angle" -msgstr "Angle du pont" +msgid "Bridging" +msgstr "Pont" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:88 msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for all bridges. Use 180° for zero angle." -msgstr "Contournement de l'angle du pont. Si laissĂ© Ă  zĂ©ro, l'angle du pont sera calculĂ© automatiquement. Sinon, l'angle fourni sera utilisĂ© pour tous les ponts. Utilisez 180° pour un angle nul." +msgstr "Ecraser l'angle des ponts. Si laissĂ© Ă  zĂ©ro, l'angle des ponts sera calculĂ© automatiquement. Sinon, l'angle fourni sera utilisĂ© pour tous les ponts. Utilisez 180° pour un angle nul." #: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:214 msgid "Bridging volumetric" @@ -1429,7 +1425,7 @@ msgstr "Motif pour les remplissages de faible densitĂ©." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:248 msgid "Fill pattern for top/bottom infill. This only affects the external visible layer, and not its adjacent solid shells." -msgstr "Motif pour les remplissages supĂ©rieurs/infĂ©rieurs. Ceci affecte seulement la couche externe visible, et non les coques solides adjacentes." +msgstr "Motif pour les surfaces supĂ©rieurs/infĂ©rieurs. Ceci affecte seulement la couche externe visible, et non les replissages plein adjacents." #: xs/src/slic3r/GUI/BonjourDialog.cpp:194 msgid "Finished" @@ -1520,11 +1516,11 @@ msgstr "" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1264 msgid "Force solid infill for regions having a smaller area than the specified threshold." -msgstr "Forcer un remplissage solide pour les zones ayant une surface plus petite que la valeur indiquĂ©e." +msgstr "Forcer un remplissage plein pour les zones ayant une surface plus petite que la valeur indiquĂ©e." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:758 msgid "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material." -msgstr "Force la gĂ©nĂ©ration de coques solides entre des volumes/matĂ©riaux adjacents. Utile pour des impressions multi-extrudeurs avec des matĂ©riaux translucides ou avec un support manuel soluble." +msgstr "Force la gĂ©nĂ©ration de coques pleines entre des volumes/matĂ©riaux adjacents. Utile pour des impressions multi-extrudeurs avec des matĂ©riaux translucides ou avec un support manuel soluble." #: xs/src/slic3r/GUI/WipeTowerDialog.cpp:260 msgid "From" @@ -2265,15 +2261,15 @@ msgstr "Nombre de boucles pour la jupe. Si la Longueur Minimale d'Extrusion est #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:70 msgid "Number of solid layers to generate on bottom surfaces." -msgstr "Nombre de couches solides Ă  gĂ©nĂ©rer sur les surfaces infĂ©rieures." +msgstr "Nombre de couches pleines Ă  gĂ©nĂ©rer sur les surfaces infĂ©rieures." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1315 msgid "Number of solid layers to generate on top and bottom surfaces." -msgstr "Nombre de couches solides Ă  gĂ©nĂ©rer sur les surfaces supĂ©rieures et infĂ©rieures." +msgstr "Nombre de couches pleines Ă  gĂ©nĂ©rer sur les surfaces supĂ©rieures et infĂ©rieures." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1640 msgid "Number of solid layers to generate on top surfaces." -msgstr "Nombre de couches solides Ă  gĂ©nĂ©rer sur les surfaces supĂ©rieures." +msgstr "Nombre de couches pleines Ă  gĂ©nĂ©rer sur les surfaces supĂ©rieures." #: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:745 msgid "Object too large?" @@ -3050,11 +3046,11 @@ msgstr "RĂ©glez ce paramètre sur une valeur non-nulle pour dĂ©finir manuellemen #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1293 msgid "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height." -msgstr "RĂ©glez ce paramètre sur une valeur non-nulle pour dĂ©finir manuellement la largeur d’extrusion pour le remplissage ou les surfaces solides. Si la valeur reste sur zĂ©ro, la largeur d’extrusion par dĂ©faut sera utilisĂ©e si dĂ©finie, sinon la valeur 1.125 x diamètre de la buse sera utilisĂ©e. Si la valeur est exprimĂ©e en pourcentage (par exemple : 90%), elle sera calculĂ©e par rapport Ă  la hauteur de couche." +msgstr "RĂ©glez ce paramètre sur une valeur non-nulle pour dĂ©finir manuellement la largeur d’extrusion pour le remplissage ou pour les surfaces pleines. Si la valeur reste sur zĂ©ro, la largeur d’extrusion par dĂ©faut sera utilisĂ©e si dĂ©finie, sinon la valeur 1.125 x diamètre de la buse sera utilisĂ©e. Si la valeur est exprimĂ©e en pourcentage (par exemple : 90%), elle sera calculĂ©e par rapport Ă  la hauteur de couche." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1615 msgid "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height." -msgstr "RĂ©glez ce paramètre sur une valeur non-nulle pour dĂ©finir manuellement la largeur d’extrusion pour le remplissage ou les surfaces supĂ©rieures. Vous voudrez peut-ĂŞtre utiliser des extrudats plus fins pour remplir les zones les plus Ă©troites et obtenir des finitions plus lisses. Si la valeur reste sur zĂ©ro, la largeur d’extrusion par dĂ©faut sera utilisĂ©e si dĂ©finie, sinon le diamètre de la buse sera utilisĂ©. Si la valeur est exprimĂ©e en pourcentage (par exemple : 90%), elle sera calculĂ©e par rapport Ă  la hauteur de couche." +msgstr "RĂ©glez ce paramètre sur une valeur non-nulle pour dĂ©finir manuellement la largeur d’extrusion pour le remplissage ou pour les surfaces supĂ©rieures. Vous voudrez peut-ĂŞtre utiliser des extrudats plus fins pour remplir les zones les plus Ă©troites et obtenir des finitions plus lisses. Si la valeur reste sur zĂ©ro, la largeur d’extrusion par dĂ©faut sera utilisĂ©e si dĂ©finie, sinon le diamètre de la buse sera utilisĂ©. Si la valeur est exprimĂ©e en pourcentage (par exemple : 90%), elle sera calculĂ©e par rapport Ă  la hauteur de couche." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:711 msgid "Set this to a non-zero value to set a manual extrusion width for infill. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height." @@ -3297,7 +3293,7 @@ msgstr "Ralentir si le temps d'impression de la couche est infĂ©rieur Ă " #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1250 msgid "Small perimeters" -msgstr "PĂ©rimètres courts" +msgstr "PĂ©rimètres fins" #: xs/src/slic3r/GUI/GUI.cpp:417 msgid "Snapshot name" @@ -3305,31 +3301,31 @@ msgstr "Nom du snapshot" #: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:179 msgid "solid infill" -msgstr "remplissage solide" +msgstr "remplissage plein" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1291 #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1301 #: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:142 #: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:84 msgid "Solid infill" -msgstr "Remplissage solide" +msgstr "Remplissage plein" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1279 msgid "Solid infill every" -msgstr "Remplissage solide toutes les" +msgstr "Remplissage plein toutes les" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1271 msgid "Solid infill extruder" -msgstr "Extrudeur pour le remplissage solide" +msgstr "Extrudeur pour le remplissage plein" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1262 msgid "Solid infill threshold area" -msgstr "Surface de seuil pour le remplissage solide" +msgstr "Surface de seuil pour le remplissage plein" #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:330 #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1314 msgid "Solid layers" -msgstr "Couches solides" +msgstr "Couches pleines" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:470 msgid "Soluble material" @@ -3349,7 +3345,7 @@ msgstr "Certaines imprimantes ou certains rĂ©glages d'imprimante peuvent rencont #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1490 msgid "Spacing between interface lines. Set zero to get a solid interface." -msgstr "Espacement entre les lignes d'interface. Mettez Ă  zĂ©ro pour obtenir une interface solide." +msgstr "Espacement entre les lignes d'interface. Mettez Ă  zĂ©ro pour obtenir une interface pleine." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1526 msgid "Spacing between support material lines." @@ -3399,7 +3395,7 @@ msgstr "Vitesse d'impression des ponts." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1303 msgid "Speed for printing solid regions (top/bottom/internal horizontal shells). This can be expressed as a percentage (for example: 80%) over the default infill speed above. Set to zero for auto." -msgstr "Vitesse pour imprimer des zones solides (supĂ©rieures/infĂ©rieures/parois horizontales internes). Peut ĂŞtre exprimĂ©e en pourcentage (par exemple: 80%) de la vitesse de remplissage par dĂ©faut susmentionnĂ©e. RĂ©glez sur zĂ©ro pour un ajustement automatique." +msgstr "Vitesse pour imprimer des zones pleines (supĂ©rieures/infĂ©rieures/parois horizontales internes). Peut ĂŞtre exprimĂ©e en pourcentage (par exemple: 80%) de la vitesse de remplissage par dĂ©faut susmentionnĂ©e. RĂ©glez sur zĂ©ro pour un ajustement automatique." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1499 msgid "Speed for printing support material interface layers. If expressed as percentage (for example 50%) it will be calculated over support material speed." @@ -3415,7 +3411,7 @@ msgstr "Vitesse pour imprimer le remplissage interne. RĂ©glez sur zĂ©ro pour un #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1626 msgid "Speed for printing top solid layers (it only applies to the uppermost external layers and not to their internal solid layers). You may want to slow down this to get a nicer surface finish. This can be expressed as a percentage (for example: 80%) over the solid infill speed above. Set to zero for auto." -msgstr "Vitesse pour imprimer les couches solides supĂ©rieures (ne s'applique qu'aux couches externes les plus hautes et pas aux couches internes solides). Vous voudrez peut-ĂŞtre abaisser cette vitesse afin d'avoir une finition de surface plus nette. Peut ĂŞtre exprimĂ© en pourcentage (par exemple: 80%) de la vitesse de remplissage solide susmentionnĂ©e. RĂ©glez sur zĂ©ro pour un ajustement automatique." +msgstr "Vitesse pour imprimer les couches pleines du dessus (ne s'applique qu'aux couches externes les plus hautes et pas aux couches pleines internes). Vous voudrez peut-ĂŞtre abaisser cette vitesse afin d'avoir une finition de surface plus nette. Peut ĂŞtre exprimĂ© en pourcentage (par exemple: 80%) de la vitesse de remplissage pleine susmentionnĂ©e. RĂ©glez sur zĂ©ro pour un ajustement automatique." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1648 msgid "Speed for travel moves (jumps between distant extrusion points)." @@ -3642,7 +3638,7 @@ msgstr "L'extrudeur Ă  utiliser pour imprimer les pĂ©rimètres et la bordure. Le #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1273 msgid "The extruder to use when printing solid infill." -msgstr "L'extrudeur Ă  utiliser pour imprimer les remplissages solides." +msgstr "L'extrudeur Ă  utiliser pour imprimer les remplissages plein." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1472 msgid "The extruder to use when printing support material interface (1+, 0 to use the current extruder to minimize tool changes). This affects raft too." @@ -3706,7 +3702,7 @@ msgid "" msgstr "" "Le mode Vase Spiral requiert :\n" "-Un pĂ©rimètre\n" -"-Pas de couches solides supĂ©rieures\n" +"-Pas de couches pleines sur le dessus\n" "-Une densitĂ© de remplissage de 0%\n" "-Pas de supports\n" "-Pas de ensure_vertical_shell_thickness\n" @@ -3812,11 +3808,11 @@ msgstr "Cette fonction permet de combiner le remplissage afin d'accĂ©lĂ©rer l'im #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1281 msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height." -msgstr "Cette fonction permet de forcer l'impression d'une couche solide après le nombre de couches indiquĂ©. RĂ©glez sur zĂ©ro pour la dĂ©sactiver. Vous pouvez indiquer n'importe quelle valeur (par exemple 9999); Slic3r choisira automatiquement le nombre maximum de couches a combiner en fonction du diamètre de la buse et de l'Ă©paisseur des couches." +msgstr "Cette fonction permet de forcer l'impression d'une couche pleine après le nombre de couches indiquĂ©. RĂ©glez sur zĂ©ro pour la dĂ©sactiver. Vous pouvez indiquer n'importe quelle valeur (par exemple 9999); Slic3r choisira automatiquement le nombre maximum de couches a combiner en fonction du diamètre de la buse et de l'Ă©paisseur des couches." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1323 msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object." -msgstr "Cette fonction Ă©lèvera le Z graduellement en cas d'impression d'un objet Ă  paroi unique, afin de rendre invisibles les jointures. Cette option nĂ©cessite de n'avoir qu'un seul pĂ©rimètre, de ne pas avoir de remplissage, ni de surface solide supĂ©rieure, ni de support. Vous pouvez toujours choisir le nombre de surface solides infĂ©rieures de mĂŞme que les boucles des jupes et des bordures. Cela ne fonctionnera pas si vous imprimez plus d'un objet." +msgstr "Cette fonction Ă©lèvera le Z graduellement en cas d'impression d'un objet Ă  paroi unique, afin de rendre invisibles les jointures. Cette option nĂ©cessite de n'avoir qu'un seul pĂ©rimètre, de ne pas avoir de remplissage, ni de surface pleine supĂ©rieure, ni de support. Vous pouvez toujours choisir le nombre de surface pleines infĂ©rieures de mĂŞme que les boucles des jupes et des bordures. Cela ne fonctionnera pas si vous imprimez plus d'un objet." #: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:663 msgid "" @@ -4010,18 +4006,18 @@ msgstr "Haut" #: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:187 msgid "top solid infill" -msgstr "remplissage solide supĂ©rieur" +msgstr "remplissage plein du dessus" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1613 #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1624 #: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:143 #: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:85 msgid "Top solid infill" -msgstr "Remplissage solide supĂ©rieur" +msgstr "Remplissage plein du dessus" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1642 msgid "Top solid layers" -msgstr "Couches supĂ©rieures solides" +msgstr "Couches pleines du dessus" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:369 msgid "Top View" @@ -4029,7 +4025,7 @@ msgstr "Vue du Dessus" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:246 msgid "Top/bottom fill pattern" -msgstr "Motif de remplissage supĂ©rieur/infĂ©rieur" +msgstr "Motif de remplissage dessus/dessous" #: xs/src/slic3r/GUI/WipeTowerDialog.cpp:245 msgid "Total purging volume is calculated by summing two values below, depending on which tools are loaded/unloaded." @@ -4470,3 +4466,374 @@ msgstr "°" #: xs/src/slic3r/GUI/ConfigWizard.cpp:498 msgid "°C" msgstr "°C" + +#: supermerill's add: tab.cpp +msgid "Avoid unsupported perimeters" +msgstr "Eviter les pĂ©rimètres sans support" + +#: supermerill's add: tab.cpp +msgid "Seam" +msgstr "Jointures" + +#: supermerill's add: tab.cpp +msgid "Looping perimeter" +msgstr "PĂ©rimètres en boucle" + +#: supermerill's add: tab.cpp +msgid "Fill internal" +msgstr "Remplissage interne" + +#: supermerill's add: tab.cpp +msgid "Fill external" +msgstr "Remplissage plein externe" + +#: supermerill's add: tab.cpp +msgid "Suporting dense layer" +msgstr "Couche de support pour remplissage plein" + +#: supermerill's add: tab.cpp +msgid "Anchor solid infill by X mm" +msgstr "Ancrage des remplissages plein de X mm " + +#: supermerill's add: tab.cpp +msgid "Perimeter speed" +msgstr "Vitesses pour les pĂ©rimètres" + +#: supermerill's add: tab.cpp +msgid "Infill speed" +msgstr "Vitesses pour les remplissages" + +#: supermerill's add: tab.cpp +msgid "Support speed" +msgstr "Vitesses pour les supports" + +#: supermerill's add: tab.cpp +msgid "First layer speed" +msgstr "Vitesses pour la première couche" + +#: supermerill's add: tab.cpp +msgid "Wipe tower position" +msgstr "Position de la tour de vidage" + +#: supermerill's add: tab.cpp +msgid "Bridge flow ratio" +msgstr "DĂ©bit lors de ponts" + +#: supermerill's add: tab.cpp +msgid "XY compensation" +msgstr "Compensation en XY" + +#: supermerill's add: PrintConfig.cpp +msgid "remove_small_gaps" +msgstr "Retirer les petites imperfections" + +#: supermerill's add: PrintConfig.cpp +msgid "Top fan speed" +msgstr "Vitesse du ventilateur pour le dessus" + +#: supermerill's add: PrintConfig.cpp +msgid "Above the bridges" +msgstr "Au-dessus des ponts" + +#: supermerill's add: PrintConfig.cpp +msgid "First layer" +msgstr "Première couche" + +#: supermerill's add: PrintConfig.cpp +msgid "Top Pattern" +msgstr "Motif du dessus" + +#: supermerill's add: PrintConfig.cpp +msgid "Bottom Pattern" +msgstr "Motif du dessous" + +#: supermerill's add: PrintConfig.cpp +msgid "Enforce 100% fill volume" +msgstr "S'assurer que les remplissages sont exacts en volume" + +#: supermerill's add: PrintConfig.cpp +msgid "Bridged" +msgstr "Ponts" + +#: supermerill's add: PrintConfig.cpp +msgid "External" +msgstr "Externe" + +#: supermerill's add: PrintConfig.cpp +msgid "Seam position" +msgstr "Position des jointures" + +#: supermerill's add: PrintConfig.cpp +msgid "Only one perimeter on Top surfaces" +msgstr "Seulement un pĂ©rimètre autoir des surfaces du dessus" + +#: supermerill's add: PrintConfig.cpp +msgid "Fill" +msgstr "Remplissage" + +#: supermerill's add: PrintConfig.cpp +msgid "Do not connect infill lines to each other" +msgstr "Ne pas connecter les lignes de remplissage entre elles" + +#: supermerill's add: PrintConfig.cpp +msgid "Algorithm" +msgstr "Algorithme" + +#: supermerill's add: PrintConfig.cpp +msgid "Sparse" +msgstr "Epars" + +#: supermerill's add: PrintConfig.cpp +msgid "Exact last layer height" +msgstr "Mettre la dernière tranche Ă  la heuteur exacte" + +#: supermerill's add: PrintConfig.cpp +msgid "Minimum perimeters" +msgstr "Nombre min de pĂ©rimètres" + +#: supermerill's add: PrintConfig.cpp +msgid "Only on briged area" +msgstr "Seulement sur ponts" + +#: supermerill's add: PrintConfig.cpp +msgid "Solid first layer" +msgstr "Première couche pleine" + +#: supermerill's add: PrintConfig.cpp +msgid "Travel move reduced" +msgstr "Moins de dĂ©placements" + +#: supermerill's add: PrintConfig.cpp +msgid "Hidden" +msgstr "CachĂ©e" + +#: supermerill's add: PrintConfig.cpp +msgid "Small" +msgstr "Fins" + +#: supermerill's add: PrintConfig.cpp +msgid "Solid" +msgstr "Plein" + +#: supermerill's add: PrintConfig.cpp +msgid "Interface" +msgstr "Interface" + +#: supermerill's add: PrintConfig.cpp +msgid "Top solid" +msgstr "Plein du dessus" + +#: supermerill's add: PrintConfig.cpp +msgid "All layers" +msgstr "Toutes les couches" + +#: supermerill's add: PrintConfig.cpp +msgid "Holes" +msgstr "Trous" + +#: tooltips + +#: supermerill's add: PrintConfig.cpp +msgid "Remove small gaps" +msgstr "Retire les mini-espaces/imperfections" + +#: supermerill's add: PrintConfig.cpp +msgid "Remove the small gaps in the 3D model when slicing. Disable it if you " + "are very confident on your model, or you want to print an item with a geometry " + "designed for vase mode." +msgstr "Retire touts les petits trous et espaces (imperfections) qui peuvent ĂŞtre prĂ©sent sur le modèle. A ne dĂ©cocher que si le modèle 3D Ă  Ă©tĂ© crĂ©e exprès, pour le mode vase." + +#: supermerill's add: PrintConfig.cpp +msgid "This fan speed is enforced during all top fills." +msgstr "Cette vitesse de ventilation est utilisĂ© pour toutes les surface du dessus." + +#: supermerill's add: PrintConfig.cpp +msgid "This factor affects the amount of plastic to overextrude " + "when we are filling on top of a bridge surface." + "With a number >1, we can retrieve a correct z-height " + "even if the bridged layer has fallen a bit. " + "It's useful if you want to have a nice flat top layer." +msgstr "Ce paramètre affecxte la quantitĂ© de matière dĂ©posĂ©e au-dessus des ponts. Sachant que les ponts s'affaissent un peu, avec un paramètre lĂ©gèrement supĂ©rieur Ă  1, on peut revenir Ă  la bonne hauteur. C'est surtotu utile si on veut obtenir des surfaces supĂ©rieure bien plate et jolie." + +#: supermerill's add: PrintConfig.cpp +msgid "The first layer will be grown / shrunk in the XY plane by the configured value " + "to compensate for the 1st layer squish aka an Elephant Foot effect. (should be negative = inwards)" +msgstr "La première couche est aggrandie / rĂ©trĂ©cie en XY par cette valeur pour compenser la dĂ©formation de la première couche. (negatif = vers l'intĂ©rieur de la pièce, positif = vers l'extĂ©rieur) !!! Devrait ĂŞtre nĂ©gative (<0) afin de rĂ©trĂ©cir la pièce !!!" + +#: supermerill's add: PrintConfig.cpp +msgid "Fill pattern for top infill. This only affects the top external visible layer, and not its adjacent solid shells." +msgstr "Motif pour les surfaces du dessus. Ceci affecte seulement la couche externe visible, et non les coques pleines adjacentes." + +#: supermerill's add: PrintConfig.cpp +msgid "Fill pattern for bottom infill. This only affects the bottom external visible layer, and not its adjacent solid shells." +msgstr "Motif pour les surfaces du dessous. Ceci affecte seulement la couche externe visible, et non les coques pleines adjacentes." + +#: supermerill's add: PrintConfig.cpp +msgid "Experimental option wich modify (in solid infill) fill flow to have the exact amount of plastic inside the volume to fill " + "(it generally changes the flow from -7% to +4%, depending on the size of the surface to fill and the overlap parameters, " + "but it can go as high as +50% for infill in very small area where rectilinear doesn't have a good coverage). It has the advantage " + "to remove the over-extrusion seen in thin infill area, from the overlap ratio" +msgstr "Option expĂ©rimentale qui modifie le dĂ©bit dans les couches pleines pour s'assurer que le volume extrudĂ© est Ă©gal au volume Ă  remplir. En gĂ©nral, le dĂ©bit n'ets modifiĂ© que de 4-7% mais cela peut aller jusqu'a +50% dans les très petites zones oĂą il est difficile de circuler. Le pricipal avantage est de retirer l'effet de sur-extrusion souvent vues dans les zones de remplissage Ă©troites." + +#: supermerill's add: PrintConfig.cpp +msgid "This parameter grow the top/bottom/solid layers by some mm to anchor them into the part. Put 0 to deactivate it." +msgstr "Ce paramètre aggrandie les couches pleines par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." + +#: supermerill's add: PrintConfig.cpp +msgid "This parameter grow the bridged solid infill layers by some mm to anchor them into the part. Put 0 to deactivate it." +msgstr "Ce paramètre aggrandie les couches de pont par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." + +#: supermerill's add: PrintConfig.cpp +msgid "Join the perimeters to create only one continuous extrusion without any z-hop." + " Long inside travel (from external to holes) are not extruded to give some place to the infill." +msgstr "Rabouter les pĂ©rimètres pour en crĂ©er une unique et longue extrusion. Lors d'un passage de pĂ©rimètre extĂ©rieur vers intĂ©rieur, si l'espace est grand, un dĂ©placemnt sera tout de mĂŞme utilisĂ©." + +#: supermerill's add: PrintConfig.cpp +msgid "Position of perimeters starting points." +msgstr "Position des point de dĂ©part des jonctions entre pĂ©rimètres" + +#: supermerill's add: PrintConfig.cpp +msgid "Use only one perimeter on flat top surface, to let more space to the top infill pattern." +msgstr "Utiliser seulement une seule ligne de pĂ©rimètre sur les surfaces du dessus, afin de laisser le plus de place possible au motif de remplissage du dessus." + +#: supermerill's add: PrintConfig.cpp +msgid "If expressed as absolute value in mm/s, this speed will be applied to all the print moves " + "but infill of the first layer, it can be overwrite by the 'default' (default depends of the type of the path) " + "speed if it's lower than that. If expressed as a percentage " + "(for example: 40%) it will scale the 'default' speeds." +msgstr "Si exprimĂ©e avec une valeur absolue en mm/s, cette vitesse sera appliquĂ©e Ă  toutes les impressions de la première couche, sauf les remplissages (et si la vitesse par dĂ©faut est plus petite, elle sera utilisĂ©e Ă  la place). Si exprimĂ©e comme un pourcentage (par exemple 40%), cela modulera la vitesse par dĂ©faut." + +#: supermerill's add: PrintConfig.cpp +msgid "If expressed as absolute value in mm/s, this speed will be applied to infill moves " + "of the first layer, it can be overwrite by the 'default' (solid infill or infill if not bottom) " + "speed if it's lower than that. If expressed as a percentage " + "(for example: 40%) it will scale the 'default' speed." +msgstr "Si exprimĂ©e avec une valeur absolue en mm/s, cette vitesse sera appliquĂ©e aux impressions de remplissage de la première couche (et si la vitesse par dĂ©faut est plus petite, elle sera utilisĂ©e Ă  la place). Si exprimĂ©e comme un pourcentage (par exemple 40%), cela modulera la vitesse par dĂ©faut." + +#: supermerill's add: PrintConfig.cpp +msgid "Enable gap fill algorithm. It will extrude small lines between perimeter " + "when there are not enough space for an other perimeter or an infill." +msgstr "Active les impression de remplissage des petits trous qui peuvent subsister entre les pĂ©rimètres et sui sont trop petits pour faire du remplissage." + +#: supermerill's add: PrintConfig.cpp +msgid "Enable the creation of a support layer under the first solid layer. Allow to use lower infill ratio without compromizing the top quality." + " The dense infill is layed out with a 50% infill density." +msgstr "Active le remplacement du motif de remplissage sous les remplissage plein afin de permettre un meilleur support de ceux-ci. Cela permet de choisir un ratio de remplissage plus petit." + +#: supermerill's add: PrintConfig.cpp +msgid "Choose the way the dense layer is lay out." + " The automatic option let it try to draw the smallest surface with only strait lines inside the sparse infill." + " The anchored just enlarge a bit (by bridged anchor) the surfaces that need a better support." +msgstr "Choisissez la façon dont la couche de support est dessinĂ©e. L'option eutomatique essayera de trouver une surface sans virage au milieu du vide. L'option ancrĂ©e utilisera une surface un peu plus grande que celle supoortĂ©e." + +#: supermerill's add: PrintConfig.cpp +msgid "Automatic" +msgstr "Automatique" + +#: supermerill's add: PrintConfig.cpp +msgid "Anchored" +msgstr "AncrĂ©" + +#: supermerill's add: PrintConfig.cpp +msgid "This setting controls the height of last object layers to put the last layer at the exact highest height possible. Experimental." +msgstr "Ce paramètre fonctionne mal, ne l'utilisez pas. Il aurait dĂ» place la dernière couche exactement Ă  la hauteur de l'objet." + +#: supermerill's add: PrintConfig.cpp +msgid "Experimental option to remove perimeters where there are nothing under and where a bridged infill should be better. Computationaly intensive!" +msgstr "option très expĂ©rimentale pour permettre de ne pas mettre de pĂ©rimètres s'il n'y a pas de couches en support en-dessous." + +#: supermerill's add: PrintConfig.cpp +msgid "Number of perimeters exluded from this option." +msgstr "Nombre de pĂ©rimètre qui ne sont pas retirĂ©s par cette fonction" + +#: supermerill's add: PrintConfig.cpp +msgid "Only remove perimeters over area marked as 'bridge'. Can be useful to let perimeter run over overhangs, but it's not very reliable." +msgstr "Ne retirer les pĂ©rimètres qu'au dessus des endroit oĂą il peut y avoir des ponts. Utile pour garder les surplombs." + +#: supermerill's add: PrintConfig.cpp +msgid "Use a solid layer instead of a raft for the layer that touch the build plate." +msgstr "DĂ©pose une couche peinle sur le plateur Ă  la place d'un quadriallage." + +#: supermerill's add: PrintConfig.cpp +msgid "Add a big cost to travel paths when possible (when going into a loop), so it will prefer a less optimal seam posistion if it's nearer." +msgstr "Ajoute un fort coĂ»t aux dĂ©placement pour les minimiser davantage." + +#: supermerill's add: PrintConfig.cpp +msgid "The convex holes will be grown / shrunk in the XY plane by the configured value" + " (negative = inwards, positive = outwards, should be positive as the holes are always a bit smaller)." + " This might be useful for fine-tuning hole sizes." +msgstr "Les trous convexes vont ĂŞtre agrandis/rĂ©tĂ©cis en XY par cette valeur pour compenser la rĂ©tractation du palstique. (negatif = vers l'intĂ©rieur de la pièce, positif = vers l'extĂ©rieur) !!! Devrait ĂŞtre nĂ©gative (<0) afin d'agrandir le trou!!!" + +#: supermerill's add: PrintConfig.cpp +msgid "Invalid value for --over-bridge-flow-ratio" +msgstr "Valeur invalide pour --over-bridge-flow-ratio" + + +#: supermerill's add: others +msgid "Hardware settings" +msgstr "Paramètres du matĂ©riel" + +#:supemerill's : infill type +msgid "Rectilinear" +msgstr "RectilinĂ©aire" + +#:supemerill's : infill type +msgid "Grid" +msgstr "Grille" + +#:supemerill's : infill type +msgid "Stars" +msgstr "Etoiles" + +#:supemerill's : infill type +msgid "Cubic" +msgstr "Tri-Cubique" + +#:supemerill's : infill type +msgid "Line" +msgstr "Lignes" + +#:supemerill's : infill type +msgid "Concentric" +msgstr "Concentrique" + +#:supemerill's : infill type +msgid "Honeycomb" +msgstr "Hexagones" + +#:supemerill's : infill type +msgid "3D Honeycomb" +msgstr "Hexagonal 3D" + +#:supemerill's : infill type +msgid "Gyroid" +msgstr "Gyroide" + +#:supemerill's : infill type +msgid "Hilbert Curve" +msgstr "Hilbert (Fractal)" + +#:supemerill's : infill type +msgid "Ironing" +msgstr "LisĂ©e" + +#:supemerill's : infill type +msgid "Concentric" +msgstr "Concentrique" + + +#:supemerill's : seam type +msgid "Nearest" +msgstr "Au plus près" + +#:supemerill's : seam type +msgid "Random" +msgstr "AlĂ©atoire" + +#:supemerill's : seam type +msgid "Aligned" +msgstr "AlignĂ©" + +#:supemerill's : seam type +msgid "Concentric" +msgstr "Concentrique" diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 263a601a6..ae1da6e29 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -77,7 +77,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("bottom_solid_layers", coInt); - def->label = L(" Bottom"); + def->label = L("Bottom"); def->category = L("Layers and Perimeters"); def->tooltip = L("Number of solid layers to generate on bottom surfaces."); def->cli = "bottom-solid-layers=i"; @@ -273,7 +273,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("elefant_foot_compensation", coFloat); def->label = L("First layer"); def->category = L("Advanced"); - def->tooltip = L("The first layer will be grown / shrunk in the XY plane by the configured value " + def->tooltip = L("The first layer will be grown / shrunk in the XY plane by the configured value " "to compensate for the 1st layer squish aka an Elephant Foot effect. (should be negative = inwards)"); def->sidetext = L("mm"); def->cli = "elefant-foot-compensation=f"; @@ -353,7 +353,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("enforce_full_fill_volume", coBool); def->label = L("Enforce 100% fill volume"); def->category = L("Infill"); - def->tooltip = L("Experimental option wich modify (top/bottom) fill flow to have the exact amount of plastic inside the volume to fill " + def->tooltip = L("Experimental option wich modify (in solid infill) fill flow to have the exact amount of plastic inside the volume to fill " "(it generally changes the flow from -7% to +4%, depending on the size of the surface to fill and the overlap parameters, " "but it can go as high as +50% for infill in very small area where rectilinear doesn't have a good coverage). It has the advantage " "to remove the over-extrusion seen in thin infill area, from the overlap ratio"); @@ -883,12 +883,11 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(0.35, false); def = this->add("first_layer_speed", coFloatOrPercent); - def->label = L("default"); + def->label = L("Default"); def->tooltip = L("If expressed as absolute value in mm/s, this speed will be applied to all the print moves " "but infill of the first layer, it can be overwrite by the 'default' (default depends of the type of the path) " "speed if it's lower than that. If expressed as a percentage " - "(for example: 40%) it will scale the 'default' speeds . " - "If expressed as absolute value, it can be overwrite by the 'default' speed if it's lower than that."); + "(for example: 40%) it will scale the 'default' speeds."); def->sidetext = L("mm/s or %"); def->cli = "first-layer-speed=s"; def->min = 0; @@ -899,8 +898,7 @@ PrintConfigDef::PrintConfigDef() def->tooltip = L("If expressed as absolute value in mm/s, this speed will be applied to infill moves " "of the first layer, it can be overwrite by the 'default' (solid infill or infill if not bottom) " "speed if it's lower than that. If expressed as a percentage " - "(for example: 40%) it will scale the 'default' speed. " - "If expressed as absolute value, it can be overwrite by the 'default' speed if it's lower than that."); + "(for example: 40%) it will scale the 'default' speed."); def->sidetext = L("mm/s or %"); def->cli = "first-layer-infill-speed=s"; def->min = 0; @@ -999,7 +997,7 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionBool(false); def = this->add("infill_not_connected", coBool); - def->label = ("Do not connect infill lines to each other."); + def->label = ("Do not connect infill lines to each other"); def->category = L("Infill"); def->tooltip = L("If checked, the infill algorithm will try to not connect the lines near the infill. Can be useful for art or with high infill/perimeter overlap."); def->cli = "infill-not-connected!"; @@ -1420,7 +1418,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("min_perimeter_unsupported", coInt); def->label = L("Minimum perimeters"); def->category = L("Layers and Perimeters"); - def->tooltip = L("Number of permieter exluded from this option."); + def->tooltip = L("Number of perimeters exluded from this option."); def->cli = "min-perimeter-unsupported=i"; def->min = 0; def->default_value = new ConfigOptionInt(0); diff --git a/xs/src/slic3r/GUI/Preset.cpp b/xs/src/slic3r/GUI/Preset.cpp index 60ee2f495..ea70bfdfe 100644 --- a/xs/src/slic3r/GUI/Preset.cpp +++ b/xs/src/slic3r/GUI/Preset.cpp @@ -309,7 +309,7 @@ const std::vector& Preset::print_options() "infill_dense", "infill_dense_algo", "no_perimeter_unsupported", "min_perimeter_unsupported", "noperi_bridge_only", "support_material_solid_first_layer" , "exact_last_layer_height" - , "perimeter_loop", + , "perimeter_loop" , "perimeter_loop_seam" , "seam_travel" , "remove_small_gaps" diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index d5b32c281..c62daa2ca 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -822,7 +822,7 @@ void TabPrint::build() optgroup = page->new_optgroup(_(L("Advanced"))); optgroup->append_single_option_line("remove_small_gaps"); - line = { _(L("Avoid unsupported perimeters")), "" }; + line = { _(L("Seam")), "" }; line.append_option(optgroup->get_option("seam_position")); line.append_option(optgroup->get_option("seam_travel")); optgroup->append_line(line); From 577b8444a441b3b10b5946908d3caa8c03979274 Mon Sep 17 00:00:00 2001 From: supermerill Date: Fri, 7 Dec 2018 17:02:42 +0100 Subject: [PATCH 22/29] label_printed_objects for Octoprint-Cancelobject --- xs/src/libslic3r/GCode.cpp | 4 ++-- xs/src/libslic3r/Print.cpp | 1 + xs/src/libslic3r/PrintConfig.cpp | 10 ++++++++-- xs/src/libslic3r/PrintConfig.hpp | 2 ++ xs/src/slic3r/GUI/Preset.cpp | 3 ++- xs/src/slic3r/GUI/Tab.cpp | 5 +++-- 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/xs/src/libslic3r/GCode.cpp b/xs/src/libslic3r/GCode.cpp index 3b346bf2d..6c431f99a 100644 --- a/xs/src/libslic3r/GCode.cpp +++ b/xs/src/libslic3r/GCode.cpp @@ -1557,7 +1557,7 @@ void GCode::process_layer( unsigned int copy_id = 0; for (const Point © : copies) { - if (this->config().gcode_comments){ + if (this->config().label_printed_objects) { gcode += ((std::ostringstream&)(std::ostringstream() << "; printing object " << print_object->model_object()->name << " id:" << layer_id << " copy " << copy_id << "\n")).str(); } // When starting a new object, use the external motion planner for the first travel move. @@ -1580,7 +1580,7 @@ void GCode::process_layer( gcode += this->extrude_perimeters(print, by_region_specific, lower_layer_edge_grids[layer_id]); gcode += this->extrude_infill(print, by_region_specific, false); } - if (this->config().gcode_comments) { + if (this->config().label_printed_objects) { gcode += ((std::ostringstream&)(std::ostringstream() << "; stop printing object " << print_object->model_object()->name << " id:" << layer_id << " copy " << copy_id << "\n")).str(); } ++copy_id; diff --git a/xs/src/libslic3r/Print.cpp b/xs/src/libslic3r/Print.cpp index ca4db7d65..c16041eea 100644 --- a/xs/src/libslic3r/Print.cpp +++ b/xs/src/libslic3r/Print.cpp @@ -128,6 +128,7 @@ bool Print::invalidate_state_by_config_options(const std::vectoradd("gcode_comments", coBool); def->label = L("Verbose G-code"); def->tooltip = L("Enable this to get a commented G-code file, with each line explained by a descriptive text. " - "If you print from SD card, the additional weight of the file could make your firmware " - "slow down."); + "If you print from SD card, the additional weight of the file could make your firmware " + "slow down."); def->cli = "gcode-comments!"; def->default_value = new ConfigOptionBool(0); + def = this->add("label_printed_objects", coBool); + def->label = "Label Prints with Object ID"; + def->tooltip = "Enable this to add comments in the G-Code that label print moves with what object they belong. Can be used with Octoprint CancelObject plugin."; + def->cli = "label-printed-objects!"; + def->default_value = new ConfigOptionBool(0); + def = this->add("gcode_flavor", coEnum); def->label = L("G-code flavor"); def->tooltip = L("Some G/M-code commands, including temperature control and others, are not universal. " diff --git a/xs/src/libslic3r/PrintConfig.hpp b/xs/src/libslic3r/PrintConfig.hpp index f73cad18a..4dc2d95c8 100644 --- a/xs/src/libslic3r/PrintConfig.hpp +++ b/xs/src/libslic3r/PrintConfig.hpp @@ -630,6 +630,7 @@ public: ConfigOptionFloats filament_cooling_final_speed; ConfigOptionStrings filament_ramming_parameters; ConfigOptionBool gcode_comments; + ConfigOptionBool label_printed_objects; ConfigOptionEnum gcode_flavor; ConfigOptionString layer_gcode; ConfigOptionFloat max_print_speed; @@ -698,6 +699,7 @@ protected: OPT_PTR(filament_cooling_final_speed); OPT_PTR(filament_ramming_parameters); OPT_PTR(gcode_comments); + OPT_PTR(label_printed_objects); OPT_PTR(gcode_flavor); OPT_PTR(layer_gcode); OPT_PTR(max_print_speed); diff --git a/xs/src/slic3r/GUI/Preset.cpp b/xs/src/slic3r/GUI/Preset.cpp index ea70bfdfe..cc432d3cd 100644 --- a/xs/src/slic3r/GUI/Preset.cpp +++ b/xs/src/slic3r/GUI/Preset.cpp @@ -314,7 +314,8 @@ const std::vector& Preset::print_options() , "seam_travel" , "remove_small_gaps" , "infill_not_connected" - ,"first_layer_infill_speed" + , "first_layer_infill_speed" + , "label_printed_objects" }; return s_opts; } diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index c62daa2ca..d3d74f6c2 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -1011,8 +1011,9 @@ void TabPrint::build() line.append_option(option); optgroup->append_line(line); - optgroup = page->new_optgroup(_(L("Output file"))); - optgroup->append_single_option_line("gcode_comments"); + optgroup = page->new_optgroup(_(L("Output file"))); + optgroup->append_single_option_line("gcode_comments"); + optgroup->append_single_option_line("label_printed_objects"); option = optgroup->get_option("output_filename_format"); option.opt.full_width = true; optgroup->append_single_option_line(option); From 26f281d763d8ffb560046ce87517dd7fad0178b5 Mon Sep 17 00:00:00 2001 From: supermerill Date: Fri, 7 Dec 2018 17:25:21 +0100 Subject: [PATCH 23/29] French translation modifications --- resources/localization/fr_FR/Slic3rPE_fr.po | 106 +++++++++----------- 1 file changed, 49 insertions(+), 57 deletions(-) diff --git a/resources/localization/fr_FR/Slic3rPE_fr.po b/resources/localization/fr_FR/Slic3rPE_fr.po index c6a97db69..394b774d6 100644 --- a/resources/localization/fr_FR/Slic3rPE_fr.po +++ b/resources/localization/fr_FR/Slic3rPE_fr.po @@ -609,11 +609,11 @@ msgstr "VolumĂ©trie des ponts" #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:371 msgid "Brim" -msgstr "Bordure" +msgstr "Jupe" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:127 msgid "Brim width" -msgstr "Largeur de la bordure" +msgstr "Largeur de la jupe" #: xs/src/slic3r/GUI/ButtonsDescription.cpp:13 msgid "Buttons And Text Colors Description" @@ -973,7 +973,7 @@ msgstr "Distance entre les copies" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1213 msgid "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion." -msgstr "Distance entre le ou les objet(s) et la jupe. Mettez zĂ©ro pour attacher la jupe a(ux) objet(s) et obtenir une bordure pour une meilleure adhĂ©sion." +msgstr "Distance entre le ou les objet(s) et la clĂ´ture. Mettez zĂ©ro pour attacher la clĂ´ture a(ux) objet(s) et obtenir une jupe, mais dans ce cas prĂ©fĂ©rez l'utilisation du paramètre de la taille de jupe." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1212 msgid "Distance from object" @@ -1563,7 +1563,7 @@ msgstr "GĂ©nĂ©ral" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:875 msgid "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder." -msgstr "Nombre minimum de contours Ă  gĂ©nĂ©rer afin de consommer la quantitĂ© de filament spĂ©cifiĂ©e sur la couche infĂ©rieure. Pour les machines multi-extrudeurs, ce minimum s'applique Ă  chaque extrudeur." +msgstr "Nombre minimum de clĂ´tures Ă  gĂ©nĂ©rer afin de consommer la quantitĂ© de filament spĂ©cifiĂ©e sur la couche infĂ©rieure. Pour les machines multi-extrudeurs, ce minimum s'applique Ă  chaque extrudeur." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1379 msgid "Generate support material" @@ -1592,7 +1592,7 @@ msgstr "Hauteur (mm)" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1222 msgid "Height of skirt expressed in layers. Set this to a tall value to use skirt as a shield against drafts." -msgstr "Hauteur de la jupe exprimĂ©e en couches. Mettez une valeur Ă©levĂ©e pour utiliser la jupe comme un bouclier contre les flux d'airs." +msgstr "Hauteur de la clĂ´ture exprimĂ©e en couches. Mettez une valeur Ă©levĂ©e pour utiliser la clĂ´ture comme un bouclier contre les flux d'airs." #: xs/src/slic3r/GUI/ConfigWizard.cpp:213 #, c-format @@ -1609,7 +1609,7 @@ msgstr "Coques horizontales" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:128 msgid "Horizontal width of the brim that will be printed around each object on the first layer." -msgstr "Largeur horizontale de la bordure qui sera imprimĂ©e autour de chaque objet sur la première couche." +msgstr "Largeur horizontale de la jupe qui sera imprimĂ©e autour de chaque objet sur la première couche." #: xs/src/slic3r/GUI/BonjourDialog.cpp:67 msgid "Hostname" @@ -2257,7 +2257,7 @@ msgstr "Nombre de couches d'interface Ă  insĂ©rer entre le(s) objet(s) et les su #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1231 msgid "Number of loops for the skirt. If the Minimum Extrusion Length option is set, the number of loops might be greater than the one configured here. Set this to zero to disable skirt completely." -msgstr "Nombre de boucles pour la jupe. Si la Longueur Minimale d'Extrusion est paramĂ©trĂ©e, le nombre de boucles minimal sera plus grand que celui configurĂ© ici. Mettez Ă  zĂ©ro pour dĂ©sactiver complètement la jupe." +msgstr "Nombre de boucles pour la clĂ´ture. Si la Longueur Minimale d'Extrusion est paramĂ©trĂ©e, le nombre de boucles minimale sera plus grand que celui configurĂ© ici. Mettez Ă  zĂ©ro pour dĂ©sactiver complètement la clĂ´ture." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:70 msgid "Number of solid layers to generate on bottom surfaces." @@ -3176,19 +3176,19 @@ msgstr "Taille en X et Y du plateau rectangulaire." #: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:146 #: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:88 msgid "Skirt" -msgstr "Jupe" +msgstr "ClĂ´ture" #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:364 msgid "Skirt and brim" -msgstr "Jupe et bordure" +msgstr "Jupe et ClĂ´ture" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1221 msgid "Skirt height" -msgstr "Hauteur de la jupe" +msgstr "Hauteur de la clĂ´ture" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1230 msgid "Skirt Loops" -msgstr "Boucles de la Jupe" +msgstr "Boucles de la clĂ´ture" #: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:398 msgid "Slic3r &Manual" @@ -3427,11 +3427,11 @@ msgstr "Vitesse utilisĂ©e pour dĂ©charger le filament sur la tour de nettoyage ( #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1322 msgid "Spiral vase" -msgstr "Vase spiral" +msgstr "Mode vase (spirale)" #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:540 msgid "Spiral Vase" -msgstr "Vase Spiral" +msgstr "Mode vase (spirale)" #: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:188 #: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:204 @@ -3526,7 +3526,7 @@ msgstr "Extrudeur pour l'interface des supports/du radeau" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1444 msgid "Support material/raft/skirt extruder" -msgstr "Extrudeur pour support/raft/jupe" +msgstr "Extrudeur pour support/tapis/clĂ´ture" #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1408 msgid "Support on build plate only" @@ -3604,7 +3604,7 @@ msgstr "TempĂ©rature " #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1333 msgid "Temperature difference to be applied when an extruder is not active. Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped." -msgstr "DiffĂ©rence de tempĂ©rature devant ĂŞtre appliquĂ©e quand un extrudeur n'est pas actif. Permet la gĂ©nĂ©ration d'un contour complet \"sacrificiel\" sur lequel les buses sont nettoyĂ©es rĂ©gulièrement." +msgstr "DiffĂ©rence de tempĂ©rature devant ĂŞtre appliquĂ©e quand un extrudeur n'est pas actif. Permet la gĂ©nĂ©ration d'une clĂ´ture complète \"sacrificielle\" sur lequel les buses sont nettoyĂ©es rĂ©gulièrement." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1332 msgid "Temperature variation" @@ -3634,7 +3634,7 @@ msgstr "L'extrudeur Ă  utiliser pour imprimer le remplissage." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:959 msgid "The extruder to use when printing perimeters and brim. First extruder is 1." -msgstr "L'extrudeur Ă  utiliser pour imprimer les pĂ©rimètres et la bordure. Le premier extrudeur a le numĂ©ro 1." +msgstr "L'extrudeur Ă  utiliser pour imprimer les pĂ©rimètres et la jupe. Le premier extrudeur a le numĂ©ro 1." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1273 msgid "The extruder to use when printing solid infill." @@ -3646,14 +3646,16 @@ msgstr "L'extrudeur Ă  utiliser pour imprimer les intercalaires du support (1+,0 #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1446 msgid "The extruder to use when printing support material, raft and skirt (1+, 0 to use the current extruder to minimize tool changes)." -msgstr "L'extrudeur Ă  utiliser pour imprimer des supports, du raft ou des contours (1+,0 pour utiliser l'extrudeur actuel et limiter les changements d'outil)." +msgstr "L'extrudeur Ă  utiliser pour imprimer des supports, du tapis ou des clĂ´tures (1+,0 pour utiliser l'extrudeur actuel et limiter les changements d'outil)." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:209 msgid "The first layer will be shrunk in the XY plane by the configured value to compensate for the 1st layer squish aka an Elephant Foot effect." msgstr "La première couche sera rĂ©duite sur le plan XY selon la valeur configurĂ©e afin de compenser l'Ă©crasement de la première couche Ă©galement connu sous le nom d'effet Pied d'ÉlĂ©phant." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1734 -msgid "The object will be grown/shrunk in the XY plane by the configured value (negative = inwards, positive = outwards). This might be useful for fine-tuning hole sizes." +msgid "The object will be grown/shrunk in the XY plane by the configured value " + "(negative = inwards, positive = outwards). This might be useful " + "for fine-tuning sizes." msgstr "L'objet sera agrandi/rĂ©duit sur les plans XY selon la valeur indiquĂ©e (nĂ©gatif = rĂ©duit, positif = agrandi). Ce rĂ©glage peut ĂŞtre utile pour un rĂ©glage fin des tailles de trous." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1031 @@ -3700,14 +3702,14 @@ msgid "" "\n" "Shall I adjust those settings in order to enable Spiral Vase?" msgstr "" -"Le mode Vase Spiral requiert :\n" -"-Un pĂ©rimètre\n" +"Le mode Vase requiert :\n" +"-Un seul pĂ©rimètre\n" "-Pas de couches pleines sur le dessus\n" "-Une densitĂ© de remplissage de 0%\n" "-Pas de supports\n" -"-Pas de ensure_vertical_shell_thickness\n" +"-'S'assurer de l'Ă©paisseur de la coque verticale' dĂ©cochĂ©e\n" "\n" -"Voulez-vous que je modifie ces rĂ©glages afin d'activer le Vase Spirale?" +"Voulez-vous que je modifie ces rĂ©glages afin d'activer le mode Vase?" #: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1560 msgid "The supplied name is empty. It can't be saved." @@ -3812,7 +3814,7 @@ msgstr "Cette fonction permet de forcer l'impression d'une couche pleine après #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1323 msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object." -msgstr "Cette fonction Ă©lèvera le Z graduellement en cas d'impression d'un objet Ă  paroi unique, afin de rendre invisibles les jointures. Cette option nĂ©cessite de n'avoir qu'un seul pĂ©rimètre, de ne pas avoir de remplissage, ni de surface pleine supĂ©rieure, ni de support. Vous pouvez toujours choisir le nombre de surface pleines infĂ©rieures de mĂŞme que les boucles des jupes et des bordures. Cela ne fonctionnera pas si vous imprimez plus d'un objet." +msgstr "Afin de rendre invisible les jointures, cette fonction Ă©lèvera la tĂŞte d'impresion graduellement (en cas d'impression d'un objet Ă  paroi unique). Cette option nĂ©cessite de n'avoir qu'un seul pĂ©rimètre, de ne pas avoir de remplissage, ni de surface pleine supĂ©rieure, ni de support. Vous pouvez toujours choisir le nombre de surface pleines infĂ©rieures de mĂŞme que les boucles des jupes et des clĂ´tures. Cela ne fonctionnera pas si vous imprimez plus d'un objet." #: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:663 msgid "" @@ -3828,7 +3830,7 @@ msgstr "Cette option active la logique de refroidissement automatique, qui ajust #: xs/src/slic3r/GUI/GUI.cpp:899 msgid "This flag enables the brim that will be printed around each object on the first layer." -msgstr "Cette option permet l'impression de la bordure qui entoure chaque objet lors de la première couche." +msgstr "Cette option permet l'impression de la jupe qui entoure chaque objet lors de la première couche." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1066 msgid "This flag enforces a retraction whenever a Z move is done." @@ -3886,7 +3888,7 @@ msgstr "Cette option dĂ©finit le nombre de pĂ©rimètres Ă  gĂ©nĂ©rer pour chaque #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:923 msgid "This option will drop the temperature of the inactive extruders to prevent oozing. It will enable a tall skirt automatically and move extruders outside such skirt when changing temperatures." -msgstr "Cette option abaissera la tempĂ©rature des extrudeurs inutilisĂ©s pour prĂ©venir le oozing (suintement). Cela active automatiquement la gĂ©nĂ©ration d'une grande jupe et le dĂ©placement des extrudeurs hors de cette jupe lors des changements de tempĂ©rature." +msgstr "Cette option abaissera la tempĂ©rature des extrudeurs inutilisĂ©s pour prĂ©venir le oozing (suintement). Cela active automatiquement la gĂ©nĂ©ration d'une grande clĂ´ture et le dĂ©placement des extrudeurs hors de cette clĂ´ture lors des changements de tempĂ©rature." #: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:728 msgid "This option will limit infill to the areas actually needed for supporting ceilings (it will act as internal support material). If enabled, slows down the G-code generation due to the multiple checks involved." @@ -4070,24 +4072,24 @@ msgid "" "UNLOCKED LOCK icon indicates that some settings were changed and are not equal to the system values for the current option group.\n" "Click to reset all settings for current option group to the system values." msgstr "" -"L'icĂ´ne CADENAS OUVERT indique que certains paramètres ont Ă©tĂ© modifiĂ©s et ne sont pas Ă©gaux aux valeurs du système pour le groupe d'options actuel.\n" -"Cliquez pour rĂ©gler tous les paramètres pour le groupe d'options actuel sur les valeurs du système." +"L'icĂ´ne CADENAS OUVERT indique que certains paramètres ont Ă©tĂ© modifiĂ©s et ne sont pas Ă©gaux aux valeurs par dĂ©faut pour le groupe d'options actuel.\n" +"Cliquez pour rĂ©gler tous les paramètres pour le groupe d'options actuel sur les valeurs par dĂ©faut." #: xs/src/slic3r/GUI/Tab.cpp:2498 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system value.\n" "Click to reset current value to the system value." msgstr "" -"L'icĂ´ne CADENAS OUVERT indique que la valeur a Ă©tĂ© changĂ©e et n'est pas Ă©gale Ă  la valeur du système.\n" -"Cliquez pour rĂ©gler la valeur actuelle sur les valeurs du système." +"L'icĂ´ne CADENAS OUVERT indique que la valeur a Ă©tĂ© changĂ©e et n'est pas Ă©gale Ă  la valeur par dĂ©faut.\n" +"Cliquez pour rĂ©gler la valeur actuelle sur la valeur par dĂ©faut." #: xs/src/slic3r/GUI/Tab.cpp:2445 msgid "" "UNLOCKED LOCK;indicates that some settings were changed and are not equal to the system values for the current option group.\n" "Click the UNLOCKED LOCK icon to reset all settings for current option group to the system values." msgstr "" -"CADENAS OUVERT;indique que certains paramètres ont Ă©tĂ© modifiĂ©s et ne sont pas Ă©gaux aux valeurs du système pour le groupe d'options actuel.\n" -"Cliquez sur l'icĂ´ne CADENAS OUVERT pour rĂ©gler tous les paramètres pour le groupe d'options actuel sur les valeurs du système." +"CADENAS OUVERT;indique que certains paramètres ont Ă©tĂ© modifiĂ©s et ne sont pas Ă©gaux aux valeurs par dĂ©faut pour le groupe d'options actuel.\n" +"Cliquez sur l'icĂ´ne CADENAS OUVERT pour rĂ©gler tous les paramètres pour le groupe d'options actuel sur les valeurs par dĂ©faut." #: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:97 msgid "Unretractions" @@ -4658,7 +4660,7 @@ msgstr "Ce paramètre affecxte la quantitĂ© de matière dĂ©posĂ©e au-dessus des #: supermerill's add: PrintConfig.cpp msgid "The first layer will be grown / shrunk in the XY plane by the configured value " "to compensate for the 1st layer squish aka an Elephant Foot effect. (should be negative = inwards)" -msgstr "La première couche est aggrandie / rĂ©trĂ©cie en XY par cette valeur pour compenser la dĂ©formation de la première couche. (negatif = vers l'intĂ©rieur de la pièce, positif = vers l'extĂ©rieur) !!! Devrait ĂŞtre nĂ©gative (<0) afin de rĂ©trĂ©cir la pièce !!!" +msgstr "La première couche est agrandie / rĂ©trĂ©cie en XY par cette valeur pour compenser la dĂ©formation de la première couche. (negatif = vers l'intĂ©rieur de la pièce, positif = vers l'extĂ©rieur) !!! Devrait ĂŞtre nĂ©gative (<0) afin de rĂ©trĂ©cir la pièce !!!" #: supermerill's add: PrintConfig.cpp msgid "Fill pattern for top infill. This only affects the top external visible layer, and not its adjacent solid shells." @@ -4677,11 +4679,11 @@ msgstr "Option expĂ©rimentale qui modifie le dĂ©bit dans les couches pleines pou #: supermerill's add: PrintConfig.cpp msgid "This parameter grow the top/bottom/solid layers by some mm to anchor them into the part. Put 0 to deactivate it." -msgstr "Ce paramètre aggrandie les couches pleines par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." +msgstr "Ce paramètre agrandi les couches pleines par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." #: supermerill's add: PrintConfig.cpp msgid "This parameter grow the bridged solid infill layers by some mm to anchor them into the part. Put 0 to deactivate it." -msgstr "Ce paramètre aggrandie les couches de pont par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." +msgstr "Ce paramètre agrandi les couches de pont par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." #: supermerill's add: PrintConfig.cpp msgid "Join the perimeters to create only one continuous extrusion without any z-hop." @@ -4720,6 +4722,10 @@ msgid "Enable the creation of a support layer under the first solid layer. Allow " The dense infill is layed out with a 50% infill density." msgstr "Active le remplacement du motif de remplissage sous les remplissage plein afin de permettre un meilleur support de ceux-ci. Cela permet de choisir un ratio de remplissage plus petit." +#: supermerill's add: PrintConfig.cpp +msgid "If checked, the infill algorithm will try to not connect the lines near the infill. Can be useful for art or with high infill/perimeter overlap." +msgstr "Si cochĂ©, l'algorithme de dessin des patrons de remplissage va essayer de ne pas connecter ses lignes entre elles, en bordure des pĂ©rimètres." + #: supermerill's add: PrintConfig.cpp msgid "Choose the way the dense layer is lay out." " The automatic option let it try to draw the smallest surface with only strait lines inside the sparse infill." @@ -4730,13 +4736,17 @@ msgstr "Choisissez la façon dont la couche de support est dessinĂ©e. L'option e msgid "Automatic" msgstr "Automatique" +#: supermerill's add: PrintConfig.cpp +msgid "Automatic, only for small areas" +msgstr "Automatique, sur les zones Ă©troites" + #: supermerill's add: PrintConfig.cpp msgid "Anchored" msgstr "AncrĂ©" #: supermerill's add: PrintConfig.cpp msgid "This setting controls the height of last object layers to put the last layer at the exact highest height possible. Experimental." -msgstr "Ce paramètre fonctionne mal, ne l'utilisez pas. Il aurait dĂ» place la dernière couche exactement Ă  la hauteur de l'objet." +msgstr "Ce paramètre fonctionne mal, ne l'utilisez pas. Il aurait dĂ» placer la dernière couche exactement Ă  la hauteur de l'objet, mais ça marche mal." #: supermerill's add: PrintConfig.cpp msgid "Experimental option to remove perimeters where there are nothing under and where a bridged infill should be better. Computationaly intensive!" @@ -4768,72 +4778,54 @@ msgstr "Les trous convexes vont ĂŞtre agrandis/rĂ©tĂ©cis en XY par cette valeur msgid "Invalid value for --over-bridge-flow-ratio" msgstr "Valeur invalide pour --over-bridge-flow-ratio" - -#: supermerill's add: others -msgid "Hardware settings" +#: supermerill's add: others Tab.hpp +msgid "Hardware Settings" msgstr "Paramètres du matĂ©riel" -#:supemerill's : infill type msgid "Rectilinear" msgstr "RectilinĂ©aire" -#:supemerill's : infill type msgid "Grid" msgstr "Grille" -#:supemerill's : infill type msgid "Stars" msgstr "Etoiles" -#:supemerill's : infill type msgid "Cubic" msgstr "Tri-Cubique" -#:supemerill's : infill type msgid "Line" msgstr "Lignes" -#:supemerill's : infill type msgid "Concentric" msgstr "Concentrique" -#:supemerill's : infill type msgid "Honeycomb" msgstr "Hexagones" -#:supemerill's : infill type msgid "3D Honeycomb" msgstr "Hexagonal 3D" -#:supemerill's : infill type msgid "Gyroid" msgstr "Gyroide" -#:supemerill's : infill type msgid "Hilbert Curve" -msgstr "Hilbert (Fractal)" +msgstr "Hilbert (Fractale)" -#:supemerill's : infill type msgid "Ironing" -msgstr "LisĂ©e" +msgstr "LissĂ©e" -#:supemerill's : infill type msgid "Concentric" msgstr "Concentrique" - -#:supemerill's : seam type msgid "Nearest" msgstr "Au plus près" -#:supemerill's : seam type msgid "Random" msgstr "AlĂ©atoire" -#:supemerill's : seam type msgid "Aligned" msgstr "AlignĂ©" -#:supemerill's : seam type msgid "Concentric" msgstr "Concentrique" From 9a827d1a8b10acb291773299f18d56fda0e4c46d Mon Sep 17 00:00:00 2001 From: supermerill Date: Thu, 13 Dec 2018 19:41:37 +0100 Subject: [PATCH 24/29] medial_axis changes from review --- xs/src/libslic3r/MedialAxis.cpp | 76 +++++++++++-------------- xs/src/libslic3r/MedialAxis.hpp | 5 +- xs/src/libslic3r/PerimeterGenerator.cpp | 2 +- xs/src/libslic3r/Polyline.hpp | 2 +- 4 files changed, 37 insertions(+), 48 deletions(-) diff --git a/xs/src/libslic3r/MedialAxis.cpp b/xs/src/libslic3r/MedialAxis.cpp index 64bd1bdf4..2074a87d6 100644 --- a/xs/src/libslic3r/MedialAxis.cpp +++ b/xs/src/libslic3r/MedialAxis.cpp @@ -606,6 +606,17 @@ MedialAxis::fusion_corners(ThickPolylines &pp) } +void +MedialAxis::extends_line_both_side(ThickPolylines& pp) { + const ExPolygons anchors = offset2_ex(diff_ex(this->bounds, this->expolygon), -SCALED_RESOLUTION, SCALED_RESOLUTION); + for (size_t i = 0; i < pp.size(); ++i) { + ThickPolyline& polyline = pp[i]; + this->extends_line(polyline, anchors, this->min_width); + polyline.reverse(); + this->extends_line(polyline, anchors, this->min_width); + } +} + void MedialAxis::extends_line(ThickPolyline& polyline, const ExPolygons& anchors, const coord_t join_width) { @@ -722,18 +733,19 @@ void MedialAxis::main_fusion(ThickPolylines& pp) { //int idf = 0; - //reoder pp by length (ascending) It's really important to do that to avoid building the line from the width insteand of the length - std::sort(pp.begin(), pp.end(), [](const ThickPolyline & a, const ThickPolyline & b) { - bool ahas0 = a.width.front() == 0 || a.width.back() == 0; - bool bhas0 = b.width.front() == 0 || b.width.back() == 0; - if (ahas0 && !bhas0) return true; - if (!ahas0 && bhas0) return false; - return a.length() < b.length(); - }); bool changes = true; map coeff_angle_cache; while (changes) { + concatThickPolylines(pp); + //reoder pp by length (ascending) It's really important to do that to avoid building the line from the width insteand of the length + std::sort(pp.begin(), pp.end(), [](const ThickPolyline & a, const ThickPolyline & b) { + bool ahas0 = a.width.front() == 0 || a.width.back() == 0; + bool bhas0 = b.width.front() == 0 || b.width.back() == 0; + if (ahas0 && !bhas0) return true; + if (!ahas0 && bhas0) return false; + return a.length() < b.length(); + }); changes = false; for (size_t i = 0; i < pp.size(); ++i) { ThickPolyline& polyline = pp[i]; @@ -962,12 +974,12 @@ MedialAxis::main_fusion(ThickPolylines& pp) //Add last point polyline.points.push_back(best_candidate->points[idx_point]); polyline.width.push_back(best_candidate->width[idx_point]); - //select if an end opccur + //select if an end occur polyline.endpoints.second &= best_candidate->endpoints.second; } } else { - //select if an end opccur + //select if an end occur polyline.endpoints.second &= best_candidate->endpoints.second; } @@ -1018,17 +1030,6 @@ MedialAxis::main_fusion(ThickPolylines& pp) break; } } - if (changes) { - concatThickPolylines(pp); - ///reorder, in case of change - std::sort(pp.begin(), pp.end(), [](const ThickPolyline & a, const ThickPolyline & b) { - bool ahas0 = a.width.front() == 0 || a.width.back() == 0; - bool bhas0 = b.width.front() == 0 || b.width.back() == 0; - if (ahas0 && !bhas0) return true; - if (!ahas0 && bhas0) return false; - return a.length() < b.length(); - }); - } } } @@ -1239,7 +1240,7 @@ MedialAxis::remove_too_short_polylines(ThickPolylines& pp, const coord_t min_siz } } - if (shortest_idx >= 0 && shortest_idx < pp.size()) { + if (shortest_idx < pp.size()) { pp.erase(pp.begin() + shortest_idx); changes = true; } @@ -1255,7 +1256,7 @@ MedialAxis::ensure_not_overextrude(ThickPolylines& pp) double surface = 0; double volume = 0; for (ThickPolyline& polyline : pp) { - for (ThickLine l : polyline.thicklines()) { + for (ThickLine &l : polyline.thicklines()) { surface += l.length() * (l.a_width + l.b_width) / 2; double width_mean = (l.a_width + l.b_width) / 2; volume += height * (width_mean - height * (1. - 0.25 * PI)) * l.length(); @@ -1269,8 +1270,8 @@ MedialAxis::ensure_not_overextrude(ThickPolylines& pp) double perimeterRoundGap = bounds.contour.length() * height * (1 - 0.25*PI) * 0.5; // add holes "perimeter gaps" double holesGaps = 0; - for (auto hole = bounds.holes.begin(); hole != bounds.holes.end(); ++hole) { - holesGaps += hole->length() * height * (1 - 0.25*PI) * 0.5; + for (const Polygon &hole : bounds.holes) { + holesGaps += hole.length() * height * (1 - 0.25*PI) * 0.5; } boundsVolume += perimeterRoundGap + holesGaps; @@ -1278,7 +1279,7 @@ MedialAxis::ensure_not_overextrude(ThickPolylines& pp) //reduce width double reduce_by = boundsVolume / volume; for (ThickPolyline& polyline : pp) { - for (ThickLine l : polyline.thicklines()) { + for (ThickLine &l : polyline.thicklines()) { l.a_width *= reduce_by; l.b_width *= reduce_by; } @@ -1291,8 +1292,7 @@ MedialAxis::simplify_polygon_frontier() { //simplify the boundary between us and the bounds. - //int firstIdx = 0; - //while (firstIdx < contour.points.size() && bounds.contour.contains(contour.points[firstIdx])) firstIdx++; + //it will remove every point in the surface contour that aren't on the bounds contour ExPolygon simplified_poly = this->surface; if (&this->surface != &this->bounds) { bool need_intersect = false; @@ -1410,14 +1410,8 @@ MedialAxis::build(ThickPolylines* polylines_out) //fusion right-angle corners. fusion_corners(pp); - if (do_not_overextrude) { - const ExPolygons anchors = offset2_ex(diff_ex(this->bounds, this->expolygon), -SCALED_RESOLUTION, SCALED_RESOLUTION); - for (size_t i = 0; i < pp.size(); ++i) { - ThickPolyline& polyline = pp[i]; - extends_line(polyline, anchors, min_width); - polyline.reverse(); - extends_line(polyline, anchors, min_width); - } + if (stop_at_min_width) { + extends_line_both_side(pp); } //reduce extrusion when it's too thin to be printable @@ -1445,14 +1439,8 @@ MedialAxis::build(ThickPolylines* polylines_out) // Loop through all returned polylines in order to extend their endpoints to the // expolygon boundaries - if (!do_not_overextrude) { - const ExPolygons anchors = offset2_ex(diff_ex(this->bounds, this->expolygon), -SCALED_RESOLUTION, SCALED_RESOLUTION); - for (size_t i = 0; i < pp.size(); ++i) { - ThickPolyline& polyline = pp[i]; - extends_line(polyline, anchors, min_width); - polyline.reverse(); - extends_line(polyline, anchors, min_width); - } + if (!stop_at_min_width) { + extends_line_both_side(pp); } //{ // stringstream stri; diff --git a/xs/src/libslic3r/MedialAxis.hpp b/xs/src/libslic3r/MedialAxis.hpp index e4fd8e85d..21fbe3895 100644 --- a/xs/src/libslic3r/MedialAxis.hpp +++ b/xs/src/libslic3r/MedialAxis.hpp @@ -17,14 +17,14 @@ namespace Slic3r { class MedialAxis { public: - Lines lines; //lines is here only to avoid appassing it in argument of amny method. Initialized in polyline_from_voronoi. + Lines lines; //lines is here only to avoid passing it in argument of many methods. Initialized in polyline_from_voronoi. ExPolygon expolygon; const ExPolygon& bounds; const ExPolygon& surface; const double max_width; const double min_width; const double height; - bool do_not_overextrude = true; + bool stop_at_min_width = true; MedialAxis(const ExPolygon &_expolygon, const ExPolygon &_bounds, const double _max_width, const double _min_width, const double _height) : surface(_expolygon), bounds(_bounds), max_width(_max_width), min_width(_min_width), height(_height) { }; @@ -53,6 +53,7 @@ namespace Slic3r { void fusion_curve(ThickPolylines &pp); void main_fusion(ThickPolylines& pp); void fusion_corners(ThickPolylines &pp); + void extends_line_both_side(ThickPolylines& pp); void extends_line(ThickPolyline& polyline, const ExPolygons& anchors, const coord_t join_width); void remove_too_thin_extrusion(ThickPolylines& pp); void concatenate_polylines_with_crossing(ThickPolylines& pp); diff --git a/xs/src/libslic3r/PerimeterGenerator.cpp b/xs/src/libslic3r/PerimeterGenerator.cpp index 7c60b7cff..4d02caa7f 100644 --- a/xs/src/libslic3r/PerimeterGenerator.cpp +++ b/xs/src/libslic3r/PerimeterGenerator.cpp @@ -286,7 +286,7 @@ void PerimeterGenerator::process() for (ExPolygon &half_thin : half_thins) { //growing back the polygon ExPolygons thin = offset_ex(half_thin, (float)(min_width / 2)); - if (thin.size() != 1) continue; // impossible error, growing a single polygon can't create multiple or 0. + assert(thin.size() == 1); ExPolygons anchor = intersection_ex(offset_ex(half_thin, (float)(min_width / 2) + (float)(ext_perimeter_width / 2), jtSquare), no_thin_zone, true); ExPolygons bounds = union_ex(thin, anchor, true); diff --git a/xs/src/libslic3r/Polyline.hpp b/xs/src/libslic3r/Polyline.hpp index 2935e6450..10076cdd7 100644 --- a/xs/src/libslic3r/Polyline.hpp +++ b/xs/src/libslic3r/Polyline.hpp @@ -132,7 +132,7 @@ bool remove_degenerate(Polylines &polylines); /// ThickPolyline : a polyline with a width for each point -/// This calss has a vector of coordf_t, it must be the same size than points. +/// This class has a vector of coordf_t, it must be the same size as points. /// it's used to store the size of the line at this point. /// Also, the endpoint let us know if the front() and back() of the polyline /// join something or is a dead-end. From 288e678bd76a129bfe1ffd2473e2f9e61564248c Mon Sep 17 00:00:00 2001 From: photog0411 Date: Sat, 15 Dec 2018 11:30:48 -0500 Subject: [PATCH 25/29] Update PrintConfig.cpp --- xs/src/libslic3r/PrintConfig.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index dfdb4e983..fc8b80b02 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -357,10 +357,10 @@ PrintConfigDef::PrintConfigDef() def = this->add("enforce_full_fill_volume", coBool); def->label = L("Enforce 100% fill volume"); def->category = L("Infill"); - def->tooltip = L("Experimental option wich modify (in solid infill) fill flow to have the exact amount of plastic inside the volume to fill " + def->tooltip = L("Experimental option which modifies (in solid infill) fill flow to have the exact amount of plastic inside the volume to fill " "(it generally changes the flow from -7% to +4%, depending on the size of the surface to fill and the overlap parameters, " - "but it can go as high as +50% for infill in very small area where rectilinear doesn't have a good coverage). It has the advantage " - "to remove the over-extrusion seen in thin infill area, from the overlap ratio"); + "but it can go as high as +50% for infill in very small areas where rectilinear doesn't have good coverage). It has the advantage " + "to remove the over-extrusion seen in thin infill areas, from the overlap ratio"); def->cli = "enforce-full-fill-volume!"; def->default_value = new ConfigOptionBool(true); @@ -416,7 +416,7 @@ PrintConfigDef::PrintConfigDef() def->label = L(" "); def->category = L("Layers and Perimeters"); def->tooltip = L("Join the perimeters to create only one continuous extrusion without any z-hop." - " Long inside travel (from external to holes) are not extruded to give some place to the infill."); + " Long inside travel (from external to holes) are not extruded to give some space to the infill."); def->cli = "loop-perimeter!"; def->default_value = new ConfigOptionBool(false); @@ -1425,7 +1425,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("no_perimeter_unsupported", coBool); def->label = L(""); def->category = L("Layers and Perimeters"); - def->tooltip = L("Experimental option to remove perimeters where there are nothing under and where a bridged infill should be better. Computationaly intensive!"); + def->tooltip = L("Experimental option to remove perimeters where there is nothing under it and where a bridged infill should be better. Computationally intensive!"); def->cli = "no-perimeter-unsupported!"; def->default_value = new ConfigOptionBool(false); @@ -1438,9 +1438,9 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionInt(0); def = this->add("noperi_bridge_only", coBool); - def->label = L("Only on briged area"); + def->label = L("Only on bridged areas"); def->category = L("Layers and Perimeters"); - def->tooltip = L("Only remove perimeters over area marked as 'bridge'. Can be useful to let perimeter run over overhangs, but it's not very reliable."); + def->tooltip = L("Only remove perimeters and over area marked as 'bridge'. Can be useful to let perimeter run over overhangs, but it's not very reliable."); def->cli = "noperi-bridge-only!"; def->default_value = new ConfigOptionBool(true); From b647bad80792f45ba3dfcae0e8159c4a6d0980d8 Mon Sep 17 00:00:00 2001 From: photog0411 Date: Sat, 15 Dec 2018 11:34:17 -0500 Subject: [PATCH 26/29] Update PrintConfig.cpp --- xs/src/libslic3r/PrintConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index fc8b80b02..f964be182 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -1440,7 +1440,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("noperi_bridge_only", coBool); def->label = L("Only on bridged areas"); def->category = L("Layers and Perimeters"); - def->tooltip = L("Only remove perimeters and over area marked as 'bridge'. Can be useful to let perimeter run over overhangs, but it's not very reliable."); + def->tooltip = L("Only remove perimeters over areas marked as 'bridge'. Can be useful to let perimeter run over overhangs, but it's not very reliable."); def->cli = "noperi-bridge-only!"; def->default_value = new ConfigOptionBool(true); From 91760aa0dc772f1767e0a8c268bb66065b640089 Mon Sep 17 00:00:00 2001 From: photog0411 Date: Sat, 15 Dec 2018 11:36:27 -0500 Subject: [PATCH 27/29] Update Tab.cpp --- xs/src/slic3r/GUI/Tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index d3d74f6c2..3ec0310eb 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -846,7 +846,7 @@ void TabPrint::build() optgroup = page->new_optgroup(_(L("Reducing printing time"))); optgroup->append_single_option_line("infill_every_layers"); optgroup->append_single_option_line("infill_only_where_needed"); - line = { _(L("Suporting dense layer")), "" }; + line = { _(L("Supporting dense layer")), "" }; line.append_option(optgroup->get_option("infill_dense")); line.append_option(optgroup->get_option("infill_dense_algo")); optgroup->append_line(line); From dd1d0f86dcf43c35911b0400f466a5a4207fbc5d Mon Sep 17 00:00:00 2001 From: photog0411 Date: Sat, 15 Dec 2018 11:41:57 -0500 Subject: [PATCH 28/29] Update PrintConfig.cpp --- xs/src/libslic3r/PrintConfig.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index f964be182..eedd107e9 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -367,7 +367,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("external_infill_margin", coFloat); def->label = L("Default"); def->category = L("Infill"); - def->tooltip = L("This parameter grow the top/bottom/solid layers by some mm to anchor them into the part. Put 0 to deactivate it."); + def->tooltip = L("This parameter grows the top/bottom/solid layers by the specified MM to anchor them into the part. Put 0 to deactivate it."); def->sidetext = L("mm"); def->cli = "top-layer-anchor=f"; def->min = 0; @@ -376,7 +376,7 @@ PrintConfigDef::PrintConfigDef() def = this->add("bridged_infill_margin", coFloat); def->label = L("Bridged"); def->category = L("Infill"); - def->tooltip = L("This parameter grow the bridged solid infill layers by some mm to anchor them into the part. Put 0 to deactivate it."); + def->tooltip = L("This parameter grows the bridged solid infill layers by the specified MM to anchor them into the part. Put 0 to deactivate it."); def->sidetext = L("mm"); def->cli = "top-layer-anchor=f"; def->min = 0; @@ -922,8 +922,8 @@ PrintConfigDef::PrintConfigDef() def = this->add("gap_fill", coBool); def->label = L("Gap fill"); def->category = L("Advanced"); - def->tooltip = L("Enable gap fill algorithm. It will extrude small lines between perimeter " - "when there are not enough space for an other perimeter or an infill."); + def->tooltip = L("Enable gap fill algorithm. It will extrude small lines between perimeters " + "when there is not enough space for another perimeter or an infill."); def->cli = "gap-fill!"; def->default_value = new ConfigOptionBool(true); @@ -1003,8 +1003,8 @@ PrintConfigDef::PrintConfigDef() def = this->add("infill_dense", coBool); def->label = (""); def->category = L("Infill"); - def->tooltip = L("Enable the creation of a support layer under the first solid layer. Allow to use lower infill ratio without compromizing the top quality." - " The dense infill is layed out with a 50% infill density."); + def->tooltip = L("Enables the creation of a support layer under the first solid layer. This allows you to use a lower infill ratio without compromising the top quality." + " The dense infill is laid out with a 50% infill density."); def->cli = "infill-dense!"; def->default_value = new ConfigOptionBool(false); From eaedfde8878d58c7cd12dab1a1045978a4628d78 Mon Sep 17 00:00:00 2001 From: supermerill Date: Mon, 17 Dec 2018 12:58:39 +0100 Subject: [PATCH 29/29] fr loc file updated (because of en typos). --- resources/localization/fr_FR/Slic3rPE_fr.po | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/resources/localization/fr_FR/Slic3rPE_fr.po b/resources/localization/fr_FR/Slic3rPE_fr.po index 394b774d6..36a89e94d 100644 --- a/resources/localization/fr_FR/Slic3rPE_fr.po +++ b/resources/localization/fr_FR/Slic3rPE_fr.po @@ -4490,7 +4490,7 @@ msgid "Fill external" msgstr "Remplissage plein externe" #: supermerill's add: tab.cpp -msgid "Suporting dense layer" +msgid "Supporting dense layer" msgstr "Couche de support pour remplissage plein" #: supermerill's add: tab.cpp @@ -4594,7 +4594,7 @@ msgid "Minimum perimeters" msgstr "Nombre min de pĂ©rimètres" #: supermerill's add: PrintConfig.cpp -msgid "Only on briged area" +msgid "Only on bridged areas" msgstr "Seulement sur ponts" #: supermerill's add: PrintConfig.cpp @@ -4671,23 +4671,23 @@ msgid "Fill pattern for bottom infill. This only affects the bottom external vis msgstr "Motif pour les surfaces du dessous. Ceci affecte seulement la couche externe visible, et non les coques pleines adjacentes." #: supermerill's add: PrintConfig.cpp -msgid "Experimental option wich modify (in solid infill) fill flow to have the exact amount of plastic inside the volume to fill " +msgid "Experimental option which modifies (in solid infill) fill flow to have the exact amount of plastic inside the volume to fill " "(it generally changes the flow from -7% to +4%, depending on the size of the surface to fill and the overlap parameters, " - "but it can go as high as +50% for infill in very small area where rectilinear doesn't have a good coverage). It has the advantage " - "to remove the over-extrusion seen in thin infill area, from the overlap ratio" + "but it can go as high as +50% for infill in very small areas where rectilinear doesn't have good coverage). It has the advantage " + "to remove the over-extrusion seen in thin infill areas, from the overlap ratio" msgstr "Option expĂ©rimentale qui modifie le dĂ©bit dans les couches pleines pour s'assurer que le volume extrudĂ© est Ă©gal au volume Ă  remplir. En gĂ©nral, le dĂ©bit n'ets modifiĂ© que de 4-7% mais cela peut aller jusqu'a +50% dans les très petites zones oĂą il est difficile de circuler. Le pricipal avantage est de retirer l'effet de sur-extrusion souvent vues dans les zones de remplissage Ă©troites." #: supermerill's add: PrintConfig.cpp -msgid "This parameter grow the top/bottom/solid layers by some mm to anchor them into the part. Put 0 to deactivate it." +msgid This parameter grows the top/bottom/solid layers by the specified MM to anchor them into the part. Put 0 to deactivate it." msgstr "Ce paramètre agrandi les couches pleines par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." #: supermerill's add: PrintConfig.cpp -msgid "This parameter grow the bridged solid infill layers by some mm to anchor them into the part. Put 0 to deactivate it." +msgid "This parameter grows the bridged solid infill layers by the specified MM to anchor them into the part. Put 0 to deactivate it." msgstr "Ce paramètre agrandi les couches de pont par X mm pour bien les ancrer dans la pièce. Mettre 0 pour dĂ©sactiver cette fonction." #: supermerill's add: PrintConfig.cpp msgid "Join the perimeters to create only one continuous extrusion without any z-hop." - " Long inside travel (from external to holes) are not extruded to give some place to the infill." + " Long inside travel (from external to holes) are not extruded to give some space to the infill." msgstr "Rabouter les pĂ©rimètres pour en crĂ©er une unique et longue extrusion. Lors d'un passage de pĂ©rimètre extĂ©rieur vers intĂ©rieur, si l'espace est grand, un dĂ©placemnt sera tout de mĂŞme utilisĂ©." #: supermerill's add: PrintConfig.cpp @@ -4713,13 +4713,13 @@ msgid "If expressed as absolute value in mm/s, this speed will be applied to inf msgstr "Si exprimĂ©e avec une valeur absolue en mm/s, cette vitesse sera appliquĂ©e aux impressions de remplissage de la première couche (et si la vitesse par dĂ©faut est plus petite, elle sera utilisĂ©e Ă  la place). Si exprimĂ©e comme un pourcentage (par exemple 40%), cela modulera la vitesse par dĂ©faut." #: supermerill's add: PrintConfig.cpp -msgid "Enable gap fill algorithm. It will extrude small lines between perimeter " - "when there are not enough space for an other perimeter or an infill." +msgid "Enable gap fill algorithm. It will extrude small lines between perimeters " + "when there is not enough space for another perimeter or an infill." msgstr "Active les impression de remplissage des petits trous qui peuvent subsister entre les pĂ©rimètres et sui sont trop petits pour faire du remplissage." #: supermerill's add: PrintConfig.cpp -msgid "Enable the creation of a support layer under the first solid layer. Allow to use lower infill ratio without compromizing the top quality." - " The dense infill is layed out with a 50% infill density." +msgid "Enables the creation of a support layer under the first solid layer. This allows you to use a lower infill ratio without compromising the top quality." + " The dense infill is laid out with a 50% infill density." msgstr "Active le remplacement du motif de remplissage sous les remplissage plein afin de permettre un meilleur support de ceux-ci. Cela permet de choisir un ratio de remplissage plus petit." #: supermerill's add: PrintConfig.cpp @@ -4749,7 +4749,7 @@ msgid "This setting controls the height of last object layers to put the last la msgstr "Ce paramètre fonctionne mal, ne l'utilisez pas. Il aurait dĂ» placer la dernière couche exactement Ă  la hauteur de l'objet, mais ça marche mal." #: supermerill's add: PrintConfig.cpp -msgid "Experimental option to remove perimeters where there are nothing under and where a bridged infill should be better. Computationaly intensive!" +msgid "Experimental option to remove perimeters where there is nothing under it and where a bridged infill should be better. Computationally intensive!" msgstr "option très expĂ©rimentale pour permettre de ne pas mettre de pĂ©rimètres s'il n'y a pas de couches en support en-dessous." #: supermerill's add: PrintConfig.cpp @@ -4757,7 +4757,7 @@ msgid "Number of perimeters exluded from this option." msgstr "Nombre de pĂ©rimètre qui ne sont pas retirĂ©s par cette fonction" #: supermerill's add: PrintConfig.cpp -msgid "Only remove perimeters over area marked as 'bridge'. Can be useful to let perimeter run over overhangs, but it's not very reliable." +msgid "Only remove perimeters over areas marked as 'bridge'. Can be useful to let perimeter run over overhangs, but it's not very reliable." msgstr "Ne retirer les pĂ©rimètres qu'au dessus des endroit oĂą il peut y avoir des ponts. Utile pour garder les surplombs." #: supermerill's add: PrintConfig.cpp