ENH: ease tree support removal
We discover a good quaility interface can help remove support. When enabling interface, directly generating circles from overhang polygons gives fairly good quality. Change-Id: I5d347fa7abaacea839650b6fd3a8c2c73abd5e56 (cherry picked from commit 474cbf7d59beda63e9ef1ec8b52636f2674811c7)
This commit is contained in:
parent
a9a228d071
commit
f8fc565dd8
|
@ -2053,7 +2053,8 @@ void TreeSupport::draw_circles(const std::vector<std::vector<Node*>>& contact_no
|
||||||
|
|
||||||
const Node& node = *p_node;
|
const Node& node = *p_node;
|
||||||
ExPolygon area;
|
ExPolygon area;
|
||||||
if (node.type == ePolygon) {
|
// 如果是混合支撑里的普通部分,或没有启用顶部接触层,则直接从overhang多边形生成
|
||||||
|
if (node.type == ePolygon || (top_interface_layers>0 &&node.support_roof_layers_below > 0)) {
|
||||||
area = offset_ex({ *node.overhang }, scale_(m_ts_data->m_xy_distance))[0];
|
area = offset_ex({ *node.overhang }, scale_(m_ts_data->m_xy_distance))[0];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -2999,6 +3000,7 @@ void TreeSupport::generate_contact_points(std::vector<std::vector<TreeSupport::N
|
||||||
constexpr size_t distance_to_top = 0;
|
constexpr size_t distance_to_top = 0;
|
||||||
constexpr bool to_buildplate = true;
|
constexpr bool to_buildplate = true;
|
||||||
Node* contact_node = new Node(candidate, distance_to_top, (layer_nr + z_distance_top_layers) % 2, support_roof_layers, to_buildplate, Node::NO_PARENT,print_z,height);
|
Node* contact_node = new Node(candidate, distance_to_top, (layer_nr + z_distance_top_layers) % 2, support_roof_layers, to_buildplate, Node::NO_PARENT,print_z,height);
|
||||||
|
contact_node->overhang = &overhang_part;
|
||||||
curr_nodes.emplace_back(contact_node);
|
curr_nodes.emplace_back(contact_node);
|
||||||
added = true;
|
added = true;
|
||||||
}
|
}
|
||||||
|
@ -3021,6 +3023,7 @@ void TreeSupport::generate_contact_points(std::vector<std::vector<TreeSupport::N
|
||||||
constexpr size_t distance_to_top = 0;
|
constexpr size_t distance_to_top = 0;
|
||||||
constexpr bool to_buildplate = true;
|
constexpr bool to_buildplate = true;
|
||||||
Node * contact_node = new Node(candidate, distance_to_top, layer_nr % 2, support_roof_layers, to_buildplate, Node::NO_PARENT, print_z, height);
|
Node * contact_node = new Node(candidate, distance_to_top, layer_nr % 2, support_roof_layers, to_buildplate, Node::NO_PARENT, print_z, height);
|
||||||
|
contact_node->overhang = &overhang_part;
|
||||||
curr_nodes.emplace_back(contact_node);
|
curr_nodes.emplace_back(contact_node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3033,6 +3036,7 @@ void TreeSupport::generate_contact_points(std::vector<std::vector<TreeSupport::N
|
||||||
auto v2 = (pt - points[(i + 1) % points.size()]).normalized();
|
auto v2 = (pt - points[(i + 1) % points.size()]).normalized();
|
||||||
if (v1.dot(v2) > -0.7) {
|
if (v1.dot(v2) > -0.7) {
|
||||||
Node *contact_node = new Node(pt, 0, layer_nr % 2, support_roof_layers, true, Node::NO_PARENT, print_z, height);
|
Node *contact_node = new Node(pt, 0, layer_nr % 2, support_roof_layers, true, Node::NO_PARENT, print_z, height);
|
||||||
|
contact_node->overhang = &overhang_part;
|
||||||
curr_nodes.emplace_back(contact_node);
|
curr_nodes.emplace_back(contact_node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue