mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-07-13 04:41:46 +08:00
setting to decide from what the skirt is drawned (objects or brim)
supermerill/SuperSlicer#747
This commit is contained in:
parent
1c3ad9de01
commit
a2a2f38d41
@ -174,7 +174,10 @@ group:title_width$19:Ironing post-process (This will go on top of infills and pe
|
||||
page:Skirt & Brim:skirt+brim
|
||||
group:Skirt
|
||||
setting:skirts
|
||||
setting:skirt_distance
|
||||
line:Distance
|
||||
setting:skirt_distance
|
||||
setting:label$from brim:sidetext$else from object:skirt_distance_from_brim
|
||||
end_line
|
||||
setting:skirt_height
|
||||
setting:draft_shield
|
||||
setting:skirt_brim
|
||||
|
@ -527,7 +527,10 @@ 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",
|
||||
|
@ -202,6 +202,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|
||||
|| 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"
|
||||
@ -327,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;
|
||||
@ -1645,13 +1648,19 @@ BoundingBox Print::total_bounding_box() const
|
||||
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)
|
||||
@ -1934,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;
|
||||
@ -1983,7 +1998,8 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio
|
||||
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);
|
||||
|
@ -3298,6 +3298,14 @@ 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;
|
||||
@ -5539,6 +5547,7 @@ void PrintConfigDef::to_prusa(t_config_option_key& opt_key, std::string& value,
|
||||
"seam_angle_cost",
|
||||
"seam_travel_cost",
|
||||
"skirt_brim",
|
||||
"skirt_distance_from_brim",
|
||||
"skirt_extrusion_width",
|
||||
"small_perimeter_min_length",
|
||||
"small_perimeter_max_length",
|
||||
|
@ -1331,6 +1331,7 @@ public:
|
||||
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;
|
||||
@ -1429,6 +1430,7 @@ protected:
|
||||
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);
|
||||
|
@ -440,7 +440,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config)
|
||||
bool have_skirt = config->opt_int("skirts") > 0;
|
||||
toggle_field("skirt_height", have_skirt && !config->opt_bool("draft_shield"));
|
||||
toggle_field("skirt_width", have_skirt);
|
||||
for (auto el : { "skirt_distance", "skirt_brim", "draft_shield", "min_skirt_length" })
|
||||
for (auto el : { "skirt_brim", "skirt_distance", "skirt_distance_from_brim", "draft_shield", "min_skirt_length" })
|
||||
toggle_field(el, have_skirt);
|
||||
|
||||
bool have_brim = config->opt_float("brim_width") > 0 || config->opt_float("brim_width_interior") > 0;
|
||||
|
@ -1984,7 +1984,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
"first_layer_extrusion_width",
|
||||
"perimeter_extrusion_width",
|
||||
"extrusion_width",
|
||||
"skirts", "skirt_brim", "skirt_distance", "skirt_height", "draft_shield",
|
||||
"skirts", "skirt_brim", "skirt_distance", "skirt_distance_from_brim", "skirt_height", "draft_shield",
|
||||
"brim_width", "variable_layer_height", "nozzle_diameter", "single_extruder_multi_material",
|
||||
"wipe_tower", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle",
|
||||
"wipe_tower_brim",
|
||||
|
Loading…
x
Reference in New Issue
Block a user