ENH: add transition_layer for normal support
jira: STUDIO-11033 Change-Id: I188fd9d4919170bdbc673a500cffe02a6bc6ff02
This commit is contained in:
parent
c7f5569d75
commit
e2c4b80435
|
@ -208,6 +208,17 @@ std::pair<SupportGeneratorLayersPtr, SupportGeneratorLayersPtr> generate_interfa
|
|||
}
|
||||
});
|
||||
|
||||
tbb::parallel_for(tbb::blocked_range<int>(1, int(base_interface_layers.size())), [&base_interface_layers](const tbb::blocked_range<int> &range) {
|
||||
for (int layer_id = range.begin(); layer_id < range.end(); ++layer_id) {
|
||||
auto &base_interface_layer = base_interface_layers[layer_id];
|
||||
if (!base_interface_layer) return;
|
||||
|
||||
auto &lower_layer = base_interface_layers[layer_id - 1];
|
||||
if (!lower_layer) return;
|
||||
if (base_interface_layer->polygons == lower_layer->polygons) base_interface_layer->up = true;
|
||||
}
|
||||
});
|
||||
|
||||
// Compress contact_out, remove the nullptr items.
|
||||
// The parallel_for above may not have merged all the interface and base_interface layers
|
||||
// generated by the Organic supports code, do it here.
|
||||
|
@ -1697,7 +1708,8 @@ void generate_support_toolpaths(
|
|||
// the bridging flow does not quite apply. Reduce the flow to area of an ellipse? (A = pi * a * b)
|
||||
assert(! base_interface_layer.layer->bridging);
|
||||
Flow interface_flow = support_params.support_material_flow.with_height(float(base_interface_layer.layer->height));
|
||||
filler->angle = interface_angles[(support_layer_id + 1) % interface_angles.size()]; // need to be the same as the interface layer above
|
||||
filler->angle = base_interface_layer.layer->up ? interface_angles[(support_layer_id + 1) % interface_angles.size()] + M_PI_2 :
|
||||
(angles[(support_layer_id - 1) % angles.size()] + M_PI_2);
|
||||
filler->spacing = support_params.support_material_interface_flow.spacing();
|
||||
filler->link_max_length = coord_t(scale_(filler->spacing * link_max_length_factor / support_params.interface_density));
|
||||
fill_expolygons_generate_paths(
|
||||
|
@ -1709,7 +1721,7 @@ void generate_support_toolpaths(
|
|||
// Filler and its parameters
|
||||
filler, float(support_params.interface_density),
|
||||
// Extrusion parameters
|
||||
ExtrusionRole::erSupportMaterial, interface_flow);
|
||||
ExtrusionRole::erSupportTransition, interface_flow);
|
||||
}
|
||||
|
||||
// Base support or flange.
|
||||
|
|
|
@ -110,6 +110,8 @@ namespace Slic3r {
|
|||
size_t idx_object_layer_below{ size_t(-1) };
|
||||
// Use a bridging flow when printing this support layer.
|
||||
bool bridging{ false };
|
||||
//order of the transition layers
|
||||
bool up{false};
|
||||
|
||||
// Polygons to be filled by the support pattern.
|
||||
Polygons polygons;
|
||||
|
|
|
@ -35,7 +35,7 @@ struct SupportParameters {
|
|||
this->has_bottom_contacts = num_bottom_interface_layers > 0;
|
||||
if (this->soluble_interface_non_soluble_base) {
|
||||
// Try to support soluble dense interfaces with non-soluble dense interfaces.
|
||||
this->num_top_base_interface_layers = size_t(std::min(int(num_top_interface_layers) / 2, 2));
|
||||
this->num_top_base_interface_layers = num_top_interface_layers > 0 ? 2 : 0;
|
||||
this->num_bottom_base_interface_layers = size_t(std::min(int(num_bottom_interface_layers) / 2, 2));
|
||||
} else {
|
||||
// BBS: if support interface and support base do not use the same filament, add a base layer to improve their adhesion
|
||||
|
@ -43,7 +43,7 @@ struct SupportParameters {
|
|||
// support_filament==0
|
||||
bool differnt_support_interface_filament = object_config.support_interface_filament != 0 &&
|
||||
object_config.support_interface_filament != object_config.support_filament;
|
||||
this->num_top_base_interface_layers = differnt_support_interface_filament ? 1 : 0;
|
||||
this->num_top_base_interface_layers = differnt_support_interface_filament ? 2 : 0;
|
||||
this->num_bottom_base_interface_layers = differnt_support_interface_filament ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue