diff options
Diffstat (limited to 'src/libslic3r')
-rw-r--r-- | src/libslic3r/GCode.cpp | 23 | ||||
-rw-r--r-- | src/libslic3r/Layer.cpp | 1 | ||||
-rw-r--r-- | src/libslic3r/PerimeterGenerator.cpp | 2 | ||||
-rw-r--r-- | src/libslic3r/Preset.cpp | 7 | ||||
-rw-r--r-- | src/libslic3r/Print.cpp | 57 | ||||
-rw-r--r-- | src/libslic3r/Print.hpp | 6 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.cpp | 56 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.hpp | 6 | ||||
-rw-r--r-- | src/libslic3r/PrintObject.cpp | 1 | ||||
-rw-r--r-- | src/libslic3r/libslic3r.h | 2 |
10 files changed, 125 insertions, 36 deletions
diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 48a60af38..8121e3f43 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -833,6 +833,8 @@ namespace DoExport { } if (compute_min_mm3_per_mm.is_compatible({ erSkirt })) { mm3_per_mm.push_back(compute_min_mm3_per_mm.reset_use_get(print.skirt())); + if(print.skirt_first_layer()) + mm3_per_mm.push_back(compute_min_mm3_per_mm.reset_use_get(*print.skirt_first_layer())); mm3_per_mm.push_back(compute_min_mm3_per_mm.reset_use_get(print.brim())); } // filter out 0-width segments @@ -2082,7 +2084,14 @@ namespace Skirt { // not at the print_z of the interlaced support material layers. std::map<uint16_t, std::pair<size_t, size_t>> skirt_loops_per_extruder_out; if (skirt_done.empty() && print.has_skirt() && ! print.skirt().entities.empty()) { - skirt_loops_per_extruder_all_printing(print, layer_tools, skirt_loops_per_extruder_out); + if (print.skirt_first_layer()) { + size_t n_loops = print.skirt_first_layer()->entities.size(); + size_t n_tools = layer_tools.extruders.size(); + size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools; + for (size_t i = 0; i < n_loops; i += lines_per_extruder) + skirt_loops_per_extruder_out[layer_tools.extruders[i / lines_per_extruder]] = std::pair<size_t, size_t>(i, std::min(i + lines_per_extruder, n_loops)); + } else + skirt_loops_per_extruder_all_printing(print, layer_tools, skirt_loops_per_extruder_out); skirt_done.emplace_back(layer_tools.print_z); } return skirt_loops_per_extruder_out; @@ -2443,9 +2452,10 @@ void GCode::process_layer( Flow layer_skirt_flow(print.skirt_flow(extruder_id)); layer_skirt_flow.height = float(m_skirt_done.back() - (m_skirt_done.size() == 1 ? 0. : m_skirt_done[m_skirt_done.size() - 2])); double mm3_per_mm = layer_skirt_flow.mm3_per_mm(); + const ExtrusionEntityCollection& coll = first_layer && print.skirt_first_layer() ? *print.skirt_first_layer() : print.skirt(); for (size_t i = loops.first; i < loops.second; ++i) { // Adjust flow according to this layer's layer height. - ExtrusionLoop loop = *dynamic_cast<const ExtrusionLoop*>(print.skirt().entities[i]); + ExtrusionLoop loop = *dynamic_cast<const ExtrusionLoop*>(coll.entities[i]); for (ExtrusionPath &path : loop.paths) { assert(layer_skirt_flow.height == layer_skirt_flow.height); assert(mm3_per_mm == mm3_per_mm); @@ -2475,6 +2485,7 @@ void GCode::process_layer( m_avoid_crossing_perimeters.disable_once(); } //extrude object-only skirt + //TODO: use it also for wiping like the other one (as they are exlusiev) if (single_object_instance_idx != size_t(-1) && !layers.front().object()->skirt().empty() && extruder_id == layer_tools.extruders.front()) { //if first layer, ask for a bigger lift for travel to object, to be on the safe side @@ -2483,8 +2494,12 @@ void GCode::process_layer( const PrintObject *print_object = layers.front().object(); this->set_origin(unscale(print_object->instances()[single_object_instance_idx].shift)); if (this->m_layer != nullptr && (this->m_layer->id() < m_config.skirt_height || print.has_infinite_skirt() )) { - for (const ExtrusionEntity *ee : print_object->skirt().entities) - gcode += this->extrude_entity(*ee, "", m_config.support_material_speed.value); + if(first_layer && print.skirt_first_layer()) + for (const ExtrusionEntity* ee : print_object->skirt_first_layer()->entities) + gcode += this->extrude_entity(*ee, "", m_config.support_material_speed.value); + else + for (const ExtrusionEntity *ee : print_object->skirt().entities) + gcode += this->extrude_entity(*ee, "", m_config.support_material_speed.value); } } //extrude object-only brim diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 905d97fcc..eb58b81a4 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -158,6 +158,7 @@ void Layer::make_perimeters() && config.extra_perimeters_odd_layers == other_config.extra_perimeters_odd_layers && config.extra_perimeters_overhangs == other_config.extra_perimeters_overhangs && config.gap_fill == other_config.gap_fill + && config.gap_fill_last == other_config.gap_fill_last && config.gap_fill_min_area == other_config.gap_fill_min_area && config.gap_fill_overlap == other_config.gap_fill_overlap && config.gap_fill_speed == other_config.gap_fill_speed diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index ece14427c..d01ef6ed2 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -638,7 +638,7 @@ void PerimeterGenerator::process() // look for gaps if (this->config->gap_fill //check if we are going to have an other perimeter - && (i <= loop_number || has_overhang || next_onion.empty())) + && (i <= loop_number || has_overhang || next_onion.empty() || (this->config->gap_fill_last.value && i == loop_number+1))) // 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/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index be21b8b89..482cdc43d 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -515,6 +515,7 @@ const std::vector<std::string>& Preset::print_options() "travel_speed", "travel_speed_z", // gapfill "gap_fill", + "gap_fill_last", "gap_fill_min_area", "gap_fill_overlap", "gap_fill_speed", @@ -526,7 +527,11 @@ const std::vector<std::string>& Preset::print_options() "perimeter_acceleration", "travel_acceleration", // skirt - "skirts", "skirt_distance", "skirt_height", + "skirts", + "skirt_distance", + "skirt_distance_from_brim", + "skirt_height", + "skirt_brim", "skirt_extrusion_width", "min_skirt_length", "draft_shield", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 38883733d..6b5008893 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -200,7 +200,9 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option opt_key == "skirts" || opt_key == "skirt_height" || opt_key == "draft_shield" + || opt_key == "skirt_brim" || opt_key == "skirt_distance" + || opt_key == "skirt_distance_from_brim" || opt_key == "min_skirt_length" || opt_key == "complete_objects_one_skirt" || opt_key == "complete_objects_one_brim" @@ -326,7 +328,9 @@ bool Print::invalidate_step(PrintStep step) bool invalidated = Inherited::invalidate_step(step); // Propagate to dependent steps. if (step == psSkirt) - invalidated |= Inherited::invalidate_step(psBrim); + invalidated |= Inherited::invalidate_step(psBrim); + if (step == psBrim) // this one only if skirt_distance_from_brim + invalidated |= Inherited::invalidate_step(psSkirt); if (step != psGCodeExport) invalidated |= Inherited::invalidate_step(psGCodeExport); return invalidated; @@ -1641,16 +1645,22 @@ BoundingBox Print::total_bounding_box() const extra = std::max(extra, m_config.brim_width.value + brim_flow.width/2); } if (this->has_skirt()) { - int skirts = m_config.skirts.value; + int skirts = m_config.skirts.value + m_config.skirt_brim.value; if (skirts == 0 && this->has_infinite_skirt()) skirts = 1; Flow skirt_flow = this->skirt_flow(); - extra = std::max( - extra, - m_config.brim_width.value + if (m_config.skirt_distance_from_brim) + extra += m_config.brim_width.value + m_config.skirt_distance.value + skirts * skirt_flow.spacing() - + skirt_flow.width/2 - ); + + skirt_flow.width / 2; + else + extra = std::max( + extra, + m_config.brim_width.value + + m_config.skirt_distance.value + + skirts * skirt_flow.spacing() + + skirt_flow.width/2 + ); } if (extra > 0) @@ -1748,11 +1758,13 @@ void Print::process() } if (this->set_started(psSkirt)) { m_skirt.clear(); + m_skirt_first_layer.reset(); m_skirt_convex_hull.clear(); m_first_layer_convex_hull.points.clear(); for (PrintObject *obj : m_objects) { obj->m_skirt.clear(); + obj->m_skirt_first_layer.reset(); } if (this->has_skirt()) { this->set_status(88, L("Generating skirt")); @@ -1762,11 +1774,11 @@ void Print::process() const std::vector<PrintInstance> copies{ obj->instances() }; obj->m_instances.clear(); obj->m_instances.emplace_back(); - this->_make_skirt({ obj }, obj->m_skirt); + this->_make_skirt({ obj }, obj->m_skirt, obj->m_skirt_first_layer); obj->m_instances = copies; } } else { - this->_make_skirt(m_objects, m_skirt); + this->_make_skirt(m_objects, m_skirt, m_skirt_first_layer); } } this->set_done(psSkirt); @@ -1888,7 +1900,7 @@ std::string Print::export_gcode(const std::string& path_template, GCodeProcessor return path.c_str(); } -void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollection &out) +void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollection &out, std::optional<ExtrusionEntityCollection>& out_first_layer) { // First off we need to decide how tall the skirt must be. // The skirt_height option from config is expressed in layers, but our @@ -1931,6 +1943,12 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio append(object_points, polyline.points); } } + // Include the brim. + if (config().skirt_distance_from_brim) { + for (const ExPolygon& expoly : object->m_layers[0]->lslices) + for (const Polygon& poly : offset(expoly.contour, scale_(object->config().brim_width))) + append(object_points, poly.points); + } // Repeat points for each object copy. for (const PrintInstance &instance : object->instances()) { Points copy_points = object_points; @@ -1973,12 +1991,15 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio // Number of skirt loops per skirt layer. size_t n_skirts = m_config.skirts.value; + size_t n_skirts_first_layer = n_skirts + m_config.skirt_brim.value; if (this->has_infinite_skirt() && n_skirts == 0) n_skirts = 1; - + if (m_config.skirt_brim.value > 0) + out_first_layer.emplace(); // Initial offset of the brim inner edge from the object (possible with a support & raft). // The skirt will touch the brim if the brim is extruded. - auto distance = float(scale_(m_config.skirt_distance.value) - this->skirt_flow(extruders[extruders.size()-1]).spacing()/2.); + float distance = float(scale_(m_config.skirt_distance.value) - this->skirt_flow(extruders[extruders.size() - 1]).spacing() / 2.); + size_t lines_per_extruder = (n_skirts + extruders.size() - 1) / extruders.size(); size_t current_lines_per_extruder = n_skirts - lines_per_extruder * (extruders.size() - 1); @@ -1986,7 +2007,8 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio // Draw outlines from outside to inside. // Loop while we have less skirts than required or any extruder hasn't reached the min length if any. std::vector<coordf_t> extruded_length(extruders.size(), 0.); - for (size_t i = n_skirts, extruder_idx = 0, nb_skirts = 1; i > 0; -- i) { + for (size_t i = std::max(n_skirts, n_skirts_first_layer), extruder_idx = 0, nb_skirts = 1; i > 0; -- i) { + bool first_layer_only = i <= (n_skirts_first_layer - n_skirts); Flow flow = this->skirt_flow(extruders[extruders.size() - (1+ extruder_idx)]); float spacing = flow.spacing(); double mm3_per_mm = flow.mm3_per_mm(); @@ -2016,8 +2038,11 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio eloop.paths.back().polyline = loop.split_at_first_point(); //we make it clowkwise, but as it will be reversed, it will be ccw eloop.make_clockwise(); - out.append(eloop); - if (m_config.min_skirt_length.value > 0) { + if(!first_layer_only) + out.append(eloop); + if(out_first_layer) + out_first_layer->append(eloop); + if (m_config.min_skirt_length.value > 0 && !first_layer_only) { // The skirt length is limited. Sum the total amount of filament length extruded, in mm. extruded_length[extruder_idx] += unscale<double>(loop.length()) * extruders_e_per_mm[extruder_idx]; if (extruded_length[extruder_idx] < m_config.min_skirt_length.value) { @@ -2043,6 +2068,8 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio } // Brims were generated inside out, reverse to print the outmost contour first. out.reverse(); + if (out_first_layer) + out_first_layer->reverse(); // Remember the outer edge of the last skirt line extruded as m_skirt_convex_hull. for (Polygon &poly : offset(convex_hull, distance + 0.5f * float(this->skirt_flow(extruders[extruders.size() - 1]).scaled_spacing()), ClipperLib::jtRound, float(scale_(0.1)))) diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index ba79a4db5..300029d02 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -202,6 +202,7 @@ public: void project_and_append_custom_facets(bool seam, EnforcerBlockerType type, std::vector<ExPolygons>& expolys) const; /// skirts if done per copy and not per platter + const std::optional<ExtrusionEntityCollection>& skirt_first_layer() const { return m_skirt_first_layer; } const ExtrusionEntityCollection& skirt() const { return m_skirt; } const ExtrusionEntityCollection& brim() const { return m_brim; } @@ -271,6 +272,7 @@ private: // Ordered collections of extrusion paths to build skirt loops and brim. // have to be duplicated per copy + std::optional<ExtrusionEntityCollection> m_skirt_first_layer; ExtrusionEntityCollection m_skirt; ExtrusionEntityCollection m_brim; @@ -460,6 +462,7 @@ public: // If zero, then the print is empty and the print shall not be executed. uint16_t num_object_instances() const; + const std::optional<ExtrusionEntityCollection>& skirt_first_layer() const { return m_skirt_first_layer; } const ExtrusionEntityCollection& skirt() const { return m_skirt; } const ExtrusionEntityCollection& brim() const { return m_brim; } // Convex hull of the 1st layer extrusions, for bed leveling and placing the initial purge line. @@ -501,7 +504,7 @@ private: t_config_option_keys &full_config_diff, DynamicPrintConfig &filament_overrides) const; - void _make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollection &out); + void _make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollection &out, std::optional<ExtrusionEntityCollection> &out_first_layer); void _make_brim(const Flow &flow, const PrintObjectPtrs &objects, ExPolygons &unbrimmable, ExtrusionEntityCollection &out); void _make_brim_ears(const Flow &flow, const PrintObjectPtrs &objects, ExPolygons &unbrimmable, ExtrusionEntityCollection &out); void _make_brim_interior(const Flow &flow, const PrintObjectPtrs &objects, ExPolygons &unbrimmable, ExtrusionEntityCollection &out); @@ -525,6 +528,7 @@ private: PrintRegionPtrs m_regions; // Ordered collections of extrusion paths to build skirt loops and brim. + std::optional<ExtrusionEntityCollection> m_skirt_first_layer; ExtrusionEntityCollection m_skirt; ExtrusionEntityCollection m_brim; // Convex hull of the 1st layer extrusions. diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 7fc8f40b5..1f7a633d0 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -674,6 +674,13 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(true)); + def = this->add("draft_shield", coBool); + def->label = L("Draft shield"); + def->tooltip = L("If enabled, the skirt will be as tall as a highest printed object. " + "This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("duplicate_distance", coFloat); def->label = L("Distance between objects"); def->category = OptionCategory::output; @@ -1876,6 +1883,14 @@ void PrintConfigDef::init_fff_params() def->mode = comExpert; def->set_default_value(new ConfigOptionBool(true)); + def = this->add("gap_fill_last", coBool); + def->label = L("after last perimeter"); + def->full_label = L("Gapfill after last perimeter"); + def->category = OptionCategory::perimeter; + def->tooltip = L("All gaps between the alst periemter and the infill which are thinner than a perimeter will be filled by gapfill."); + def->mode = comExpert; + def->set_default_value(new ConfigOptionBool{true }); + def = this->add("gap_fill_min_area", coFloatOrPercent); def->label = L("Min surface"); def->full_label = L("Min gap-fill surface"); @@ -1884,7 +1899,7 @@ void PrintConfigDef::init_fff_params() def->ratio_over = "perimeter_width_square"; def->min = 0; def->mode = comExpert; - def->set_default_value(new ConfigOptionFloatOrPercent{ 100,true }); + def->set_default_value(new ConfigOptionFloatOrPercent{100, true }); def = this->add("gap_fill_overlap", coPercent); def->label = L("Gap fill overlap"); @@ -3264,6 +3279,14 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloat(30); def->set_default_value(new ConfigOptionFloat(30)); #endif + def = this->add("skirt_brim", coInt); + def->label = L("Brim"); + def->full_label = L("Skirt brim"); + def->category = OptionCategory::skirtBrim; + def->tooltip = L("Extra skirt lines on the first layer."); + def->sidetext = L("lines"); + def->mode = comExpert; + def->set_default_value(new ConfigOptionInt(0)); def = this->add("skirt_distance", coFloat); def->label = L("Distance from object"); @@ -3275,11 +3298,19 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(6)); + def = this->add("skirt_distance_from_brim", coBool); + def->label = L("from brim"); + def->full_label = L("Skirt distance from brim"); + def->category = OptionCategory::skirtBrim; + def->tooltip = L("The distance is computed from the brim and not from the objects"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + def = this->add("skirt_height", coInt); def->label = L("Skirt height"); def->category = OptionCategory::skirtBrim; def->tooltip = L("Height of skirt expressed in layers. Set this to a tall value to use skirt " - "as a shield against drafts."); + "as a shield against drafts."); def->sidetext = L("layers"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(1)); @@ -3298,13 +3329,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloatOrPercent(0, false)); - def = this->add("draft_shield", coBool); - def->label = L("Draft shield"); - def->tooltip = L("If enabled, the skirt will be as tall as a highest printed object. " - "This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); - def = this->add("skirts", coInt); def->label = L("Loops (minimum)"); def->full_label = L("Skirt Loops"); @@ -4405,7 +4429,7 @@ void PrintConfigDef::init_fff_params() "\nAs cylinders are often exported as triangles of varying size, points may not be on the circle circumference." " This setting allows you some leway to broaden the detection." "\nIn mm or in % of the radius."); - def->sidetext = L("mm²"); + def->sidetext = L("mm or %"); def->mode = comExpert; def->set_default_value(new ConfigOptionFloatOrPercent(0.01, false)); @@ -5494,6 +5518,7 @@ void PrintConfigDef::to_prusa(t_config_option_key& opt_key, std::string& value, "gap_fill", "gap_fill_min_area", "gap_fill_overlap", +"gap_fill_infill", "infill_dense", "infill_connection", "infill_dense_algo", @@ -5521,6 +5546,8 @@ void PrintConfigDef::to_prusa(t_config_option_key& opt_key, std::string& value, "retract_lift_top", "seam_angle_cost", "seam_travel_cost", +"skirt_brim", +"skirt_distance_from_brim", "skirt_extrusion_width", "small_perimeter_min_length", "small_perimeter_max_length", @@ -5745,7 +5772,10 @@ double PrintConfig::min_object_distance(const ConfigBase *config, double ref_hei const double first_layer_height = config->get_abs_value("first_layer_height"); //add the skirt - if (config->option("skirts")->getInt() > 0 && config->option("skirt_height")->getInt() >= 1 && !config->option("complete_objects_one_skirt")->getBool()) { + int skirts = config->option("skirts")->getInt(); + if (skirts > 0 && ref_height == 0) + skirts += config->option("skirt_brim")->getInt(); + if (skirts > 0 && config->option("skirt_height")->getInt() >= 1 && !config->option("complete_objects_one_skirt")->getBool()) { if (ref_height == 0) { skirt_dist = config->option("skirt_distance")->getFloat(); Flow skirt_flow = Flow::new_from_config_width( @@ -5754,7 +5784,7 @@ double PrintConfig::min_object_distance(const ConfigBase *config, double ref_hei (float)max_nozzle_diam, (float)first_layer_height ); - skirt_dist += skirt_flow.width + (skirt_flow.spacing() * ((double)config->option("skirts")->getInt() - 1)); + skirt_dist += skirt_flow.width + (skirt_flow.spacing() * ((double)skirts - 1)); base_dist = std::max(base_dist, skirt_dist + 1); //set to 0 becasue it's incorporated into the base_dist, so we don't want to be added in to it again. skirt_dist = 0; @@ -5768,7 +5798,7 @@ double PrintConfig::min_object_distance(const ConfigBase *config, double ref_hei (float)max_nozzle_diam, (float)first_layer_height ); - skirt_dist += skirt_flow.width + (skirt_flow.spacing() * ((double)config->option("skirts")->getInt() - 1)); + skirt_dist += skirt_flow.width + (skirt_flow.spacing() * ((double)skirts - 1)); } } } diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index d6b165be9..8175e11a5 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -790,6 +790,7 @@ public: ConfigOptionPercent fill_smooth_distribution; ConfigOptionFloatOrPercent fill_smooth_width; ConfigOptionBool gap_fill; + ConfigOptionBool gap_fill_last; ConfigOptionFloatOrPercent gap_fill_min_area; ConfigOptionPercent gap_fill_overlap; ConfigOptionFloat gap_fill_speed; @@ -905,6 +906,7 @@ protected: OPT_PTR(fill_smooth_distribution); OPT_PTR(fill_smooth_width); OPT_PTR(gap_fill); + OPT_PTR(gap_fill_last); OPT_PTR(gap_fill_min_area); OPT_PTR(gap_fill_overlap); OPT_PTR(gap_fill_speed); @@ -1327,7 +1329,9 @@ public: ConfigOptionFloat resolution; ConfigOptionFloats retract_before_travel; ConfigOptionBools retract_layer_change; + ConfigOptionInt skirt_brim; ConfigOptionFloat skirt_distance; + ConfigOptionBool skirt_distance_from_brim; ConfigOptionInt skirt_height; ConfigOptionFloatOrPercent skirt_extrusion_width; ConfigOptionBool draft_shield; @@ -1424,7 +1428,9 @@ protected: OPT_PTR(resolution); OPT_PTR(retract_before_travel); OPT_PTR(retract_layer_change); + OPT_PTR(skirt_brim); OPT_PTR(skirt_distance); + OPT_PTR(skirt_distance_from_brim); OPT_PTR(skirt_extrusion_width); OPT_PTR(skirt_height); OPT_PTR(draft_shield); diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 02c3d5057..457931b7b 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -678,6 +678,7 @@ namespace Slic3r { for (const t_config_option_key& opt_key : opt_keys) { if ( opt_key == "gap_fill" + || opt_key == "gap_fill_last" || opt_key == "gap_fill_min_area" || opt_key == "only_one_perimeter_top" || opt_key == "only_one_perimeter_top_other_algo" diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index a5e8f98dd..71103513b 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -57,7 +57,7 @@ static constexpr coordf_t RESOLUTION = 0.0125; #ifdef __linux__ static constexpr coord_t SCALED_RESOLUTION = 12500; #else -static constexpr coord_t SCALED_RESOLUTION = 0.0125 * UNSCALING_FACTOR; +static constexpr coord_t SCALED_RESOLUTION = coord_t(0.0125 * UNSCALING_FACTOR); #endif //for creating circles (for brim_ear) #define POLY_SIDES 24 |