ENH: detect in_head_wrap_zone more precisly
1.Union first layer convex hull with object's bbox to detect whether model enter head_wrap_detect_zone jira:NEW Signed-off-by: XunZhangBambu <xun.zhang@bambulab.com> Change-Id: I11f26967d7421f41e9c824e62794c96591e6ae71
This commit is contained in:
parent
97541e2043
commit
fef0f7811b
|
@ -1096,7 +1096,7 @@ bool GCode::is_BBL_Printer()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//BBS : get the plate model's projection on first layer, contain plate offset
|
//BBS : get the plate model's projection on first layer, contain plate offset,unscaled data
|
||||||
BoundingBoxf GCode::first_layer_projection(const Print& print) const
|
BoundingBoxf GCode::first_layer_projection(const Print& print) const
|
||||||
{
|
{
|
||||||
// too slow
|
// too slow
|
||||||
|
@ -1947,13 +1947,39 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
||||||
{bbox.min.x() - plate_offset.x(),bbox.min.y() - plate_offset.y()},
|
{bbox.min.x() - plate_offset.x(),bbox.min.y() - plate_offset.y()},
|
||||||
{bbox.max.x() - plate_offset.x(),bbox.max.y() - plate_offset.y()}
|
{bbox.max.x() - plate_offset.x(),bbox.max.y() - plate_offset.y()}
|
||||||
};
|
};
|
||||||
BoundingBoxf bbox_head_wrap_zone (print.config().head_wrap_detect_zone.values);
|
|
||||||
|
|
||||||
m_placeholder_parser.set("first_layer_print_convex_hull", pts.release());
|
m_placeholder_parser.set("first_layer_print_convex_hull", pts.release());
|
||||||
m_placeholder_parser.set("first_layer_print_min", new ConfigOptionFloats({ bbox_without_plate_offset.min.x(),bbox_without_plate_offset.min.y() }));
|
m_placeholder_parser.set("first_layer_print_min", new ConfigOptionFloats({ bbox_without_plate_offset.min.x(),bbox_without_plate_offset.min.y() }));
|
||||||
m_placeholder_parser.set("first_layer_print_max", new ConfigOptionFloats({ bbox_without_plate_offset.max.x(),bbox_without_plate_offset.max.y() }));
|
m_placeholder_parser.set("first_layer_print_max", new ConfigOptionFloats({ bbox_without_plate_offset.max.x(),bbox_without_plate_offset.max.y() }));
|
||||||
m_placeholder_parser.set("first_layer_print_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() }));
|
m_placeholder_parser.set("first_layer_print_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() }));
|
||||||
m_placeholder_parser.set("in_head_wrap_detect_zone",bbox_head_wrap_zone.overlap(bbox_without_plate_offset));
|
|
||||||
|
{ // BBS:deal with head wrap detect
|
||||||
|
// use first layer convex_hull union with each object's bbox to check whether in head detect zone
|
||||||
|
Polygons object_projections;
|
||||||
|
for (auto& obj : print.objects()) {
|
||||||
|
for (auto& instance : obj->instances()) {
|
||||||
|
const auto& bbox = instance.get_bounding_box();
|
||||||
|
Point min_p{ coord_t(scale_(bbox.min.x())),coord_t(scale_(bbox.min.y())) };
|
||||||
|
Point max_p{ coord_t(scale_(bbox.max.x())),coord_t(scale_(bbox.max.y())) };
|
||||||
|
Polygon instance_projection = {
|
||||||
|
{min_p.x(),min_p.y()},
|
||||||
|
{max_p.x(),min_p.y()},
|
||||||
|
{max_p.x(),max_p.y()},
|
||||||
|
{min_p.x(),max_p.y()}
|
||||||
|
};
|
||||||
|
object_projections.emplace_back(std::move(instance_projection));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
object_projections.emplace_back(print.first_layer_convex_hull());
|
||||||
|
|
||||||
|
Polygons project_polys = union_(object_projections);
|
||||||
|
Polygon head_wrap_detect_zone;
|
||||||
|
for (auto& point : print.config().head_wrap_detect_zone.values)
|
||||||
|
head_wrap_detect_zone.append(scale_(point).cast<coord_t>() + scale_(plate_offset).cast<coord_t>());
|
||||||
|
|
||||||
|
m_placeholder_parser.set("in_head_wrap_detect_zone", !intersection_pl(project_polys, {head_wrap_detect_zone}).empty());
|
||||||
|
}
|
||||||
|
|
||||||
// get center without wipe tower
|
// get center without wipe tower
|
||||||
BoundingBoxf bbox_wo_wt;// bounding box without wipe tower
|
BoundingBoxf bbox_wo_wt;// bounding box without wipe tower
|
||||||
for (auto& objPtr : print.objects()) {
|
for (auto& objPtr : print.objects()) {
|
||||||
|
|
Loading…
Reference in New Issue