mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-07-13 17:21:47 +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
|
page:Skirt & Brim:skirt+brim
|
||||||
group:Skirt
|
group:Skirt
|
||||||
setting:skirts
|
setting:skirts
|
||||||
|
line:Distance
|
||||||
setting:skirt_distance
|
setting:skirt_distance
|
||||||
|
setting:label$from brim:sidetext$else from object:skirt_distance_from_brim
|
||||||
|
end_line
|
||||||
setting:skirt_height
|
setting:skirt_height
|
||||||
setting:draft_shield
|
setting:draft_shield
|
||||||
setting:skirt_brim
|
setting:skirt_brim
|
||||||
|
@ -527,7 +527,10 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
"perimeter_acceleration",
|
"perimeter_acceleration",
|
||||||
"travel_acceleration",
|
"travel_acceleration",
|
||||||
// skirt
|
// skirt
|
||||||
"skirts", "skirt_distance", "skirt_height",
|
"skirts",
|
||||||
|
"skirt_distance",
|
||||||
|
"skirt_distance_from_brim",
|
||||||
|
"skirt_height",
|
||||||
"skirt_brim",
|
"skirt_brim",
|
||||||
"skirt_extrusion_width",
|
"skirt_extrusion_width",
|
||||||
"min_skirt_length",
|
"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 == "draft_shield"
|
||||||
|| opt_key == "skirt_brim"
|
|| opt_key == "skirt_brim"
|
||||||
|| opt_key == "skirt_distance"
|
|| opt_key == "skirt_distance"
|
||||||
|
|| opt_key == "skirt_distance_from_brim"
|
||||||
|| opt_key == "min_skirt_length"
|
|| opt_key == "min_skirt_length"
|
||||||
|| opt_key == "complete_objects_one_skirt"
|
|| opt_key == "complete_objects_one_skirt"
|
||||||
|| opt_key == "complete_objects_one_brim"
|
|| opt_key == "complete_objects_one_brim"
|
||||||
@ -328,6 +329,8 @@ bool Print::invalidate_step(PrintStep step)
|
|||||||
// Propagate to dependent steps.
|
// Propagate to dependent steps.
|
||||||
if (step == psSkirt)
|
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)
|
if (step != psGCodeExport)
|
||||||
invalidated |= Inherited::invalidate_step(psGCodeExport);
|
invalidated |= Inherited::invalidate_step(psGCodeExport);
|
||||||
return invalidated;
|
return invalidated;
|
||||||
@ -1645,6 +1648,12 @@ BoundingBox Print::total_bounding_box() const
|
|||||||
int skirts = m_config.skirts.value + m_config.skirt_brim.value;
|
int skirts = m_config.skirts.value + m_config.skirt_brim.value;
|
||||||
if (skirts == 0 && this->has_infinite_skirt()) skirts = 1;
|
if (skirts == 0 && this->has_infinite_skirt()) skirts = 1;
|
||||||
Flow skirt_flow = this->skirt_flow();
|
Flow skirt_flow = this->skirt_flow();
|
||||||
|
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;
|
||||||
|
else
|
||||||
extra = std::max(
|
extra = std::max(
|
||||||
extra,
|
extra,
|
||||||
m_config.brim_width.value
|
m_config.brim_width.value
|
||||||
@ -1934,6 +1943,12 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio
|
|||||||
append(object_points, polyline.points);
|
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.
|
// Repeat points for each object copy.
|
||||||
for (const PrintInstance &instance : object->instances()) {
|
for (const PrintInstance &instance : object->instances()) {
|
||||||
Points copy_points = object_points;
|
Points copy_points = object_points;
|
||||||
@ -1983,7 +1998,8 @@ void Print::_make_skirt(const PrintObjectPtrs &objects, ExtrusionEntityCollectio
|
|||||||
out_first_layer.emplace();
|
out_first_layer.emplace();
|
||||||
// Initial offset of the brim inner edge from the object (possible with a support & raft).
|
// 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.
|
// 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 lines_per_extruder = (n_skirts + extruders.size() - 1) / extruders.size();
|
||||||
size_t current_lines_per_extruder = n_skirts - lines_per_extruder * (extruders.size() - 1);
|
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->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloat(6));
|
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 = this->add("skirt_height", coInt);
|
||||||
def->label = L("Skirt height");
|
def->label = L("Skirt height");
|
||||||
def->category = OptionCategory::skirtBrim;
|
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_angle_cost",
|
||||||
"seam_travel_cost",
|
"seam_travel_cost",
|
||||||
"skirt_brim",
|
"skirt_brim",
|
||||||
|
"skirt_distance_from_brim",
|
||||||
"skirt_extrusion_width",
|
"skirt_extrusion_width",
|
||||||
"small_perimeter_min_length",
|
"small_perimeter_min_length",
|
||||||
"small_perimeter_max_length",
|
"small_perimeter_max_length",
|
||||||
|
@ -1331,6 +1331,7 @@ public:
|
|||||||
ConfigOptionBools retract_layer_change;
|
ConfigOptionBools retract_layer_change;
|
||||||
ConfigOptionInt skirt_brim;
|
ConfigOptionInt skirt_brim;
|
||||||
ConfigOptionFloat skirt_distance;
|
ConfigOptionFloat skirt_distance;
|
||||||
|
ConfigOptionBool skirt_distance_from_brim;
|
||||||
ConfigOptionInt skirt_height;
|
ConfigOptionInt skirt_height;
|
||||||
ConfigOptionFloatOrPercent skirt_extrusion_width;
|
ConfigOptionFloatOrPercent skirt_extrusion_width;
|
||||||
ConfigOptionBool draft_shield;
|
ConfigOptionBool draft_shield;
|
||||||
@ -1429,6 +1430,7 @@ protected:
|
|||||||
OPT_PTR(retract_layer_change);
|
OPT_PTR(retract_layer_change);
|
||||||
OPT_PTR(skirt_brim);
|
OPT_PTR(skirt_brim);
|
||||||
OPT_PTR(skirt_distance);
|
OPT_PTR(skirt_distance);
|
||||||
|
OPT_PTR(skirt_distance_from_brim);
|
||||||
OPT_PTR(skirt_extrusion_width);
|
OPT_PTR(skirt_extrusion_width);
|
||||||
OPT_PTR(skirt_height);
|
OPT_PTR(skirt_height);
|
||||||
OPT_PTR(draft_shield);
|
OPT_PTR(draft_shield);
|
||||||
|
@ -440,7 +440,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config)
|
|||||||
bool have_skirt = config->opt_int("skirts") > 0;
|
bool have_skirt = config->opt_int("skirts") > 0;
|
||||||
toggle_field("skirt_height", have_skirt && !config->opt_bool("draft_shield"));
|
toggle_field("skirt_height", have_skirt && !config->opt_bool("draft_shield"));
|
||||||
toggle_field("skirt_width", have_skirt);
|
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);
|
toggle_field(el, have_skirt);
|
||||||
|
|
||||||
bool have_brim = config->opt_float("brim_width") > 0 || config->opt_float("brim_width_interior") > 0;
|
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",
|
"first_layer_extrusion_width",
|
||||||
"perimeter_extrusion_width",
|
"perimeter_extrusion_width",
|
||||||
"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",
|
"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", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle",
|
||||||
"wipe_tower_brim",
|
"wipe_tower_brim",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user