mirror of
https://git.mirrors.martin98.com/https://github.com/bambulab/BambuStudio.git
synced 2025-09-20 22:43:16 +08:00
ENH: improve auto-arranging
1. add a translation jira: STUDIO-5758 2. fix by-object arranging failing issue due to wrong exclusion_gap jira: STUDIO-5941 Change-Id: Icbdbdf7d8ba91be7f355d31a5f81a9f79356dc7e (cherry picked from commit eed212e3550cb2256625a6fd09fc3d69d66659c4)
This commit is contained in:
parent
ee39610e27
commit
fde4d41821
@ -131,10 +131,10 @@ void update_selected_items_inflation(ArrangePolygons& selected, const DynamicPri
|
|||||||
|
|
||||||
void update_unselected_items_inflation(ArrangePolygons& unselected, const DynamicPrintConfig* print_cfg, const ArrangeParams& params)
|
void update_unselected_items_inflation(ArrangePolygons& unselected, const DynamicPrintConfig* print_cfg, const ArrangeParams& params)
|
||||||
{
|
{
|
||||||
float exclusion_gap = 1.f;
|
coord_t exclusion_gap = scale_(1.f);
|
||||||
if (params.is_seq_print) {
|
if (params.is_seq_print) {
|
||||||
// bed_shrink_x is typically (-params.min_obj_distance / 2+5) for seq_print
|
// bed_shrink_x is typically (-params.min_obj_distance / 2+5) for seq_print
|
||||||
exclusion_gap = std::max(exclusion_gap, params.min_obj_distance / 2 + params.bed_shrink_x + 1.f); // +1mm gap so the exclusion region is not too close
|
exclusion_gap = std::max(exclusion_gap, params.min_obj_distance / 2 + scaled<coord_t>(params.bed_shrink_x + 1.f)); // +1mm gap so the exclusion region is not too close
|
||||||
// dont forget to move the excluded region
|
// dont forget to move the excluded region
|
||||||
for (auto& region : unselected) {
|
for (auto& region : unselected) {
|
||||||
if (region.is_virt_object) region.poly.translate(scaled(params.bed_shrink_x), scaled(params.bed_shrink_y));
|
if (region.is_virt_object) region.poly.translate(scaled(params.bed_shrink_x), scaled(params.bed_shrink_y));
|
||||||
@ -147,7 +147,7 @@ void update_unselected_items_inflation(ArrangePolygons& unselected, const Dynami
|
|||||||
// 其他物体的膨胀轮廓是可以跟它们重叠的。
|
// 其他物体的膨胀轮廓是可以跟它们重叠的。
|
||||||
std::for_each(unselected.begin(), unselected.end(),
|
std::for_each(unselected.begin(), unselected.end(),
|
||||||
[&](auto& ap) { ap.inflation = !ap.is_virt_object ? (params.min_obj_distance == 0 ? scaled(ap.brim_width) : params.min_obj_distance / 2)
|
[&](auto& ap) { ap.inflation = !ap.is_virt_object ? (params.min_obj_distance == 0 ? scaled(ap.brim_width) : params.min_obj_distance / 2)
|
||||||
: (ap.is_extrusion_cali_object ? 0 : scale_(exclusion_gap)); });
|
: (ap.is_extrusion_cali_object ? 0 : exclusion_gap); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_selected_items_axis_align(ArrangePolygons& selected, const DynamicPrintConfig* print_cfg, const ArrangeParams& params)
|
void update_selected_items_axis_align(ArrangePolygons& selected, const DynamicPrintConfig* print_cfg, const ArrangeParams& params)
|
||||||
|
@ -477,7 +477,7 @@ void ArrangeJob::prepare()
|
|||||||
auto polys_to_draw = m_selected;
|
auto polys_to_draw = m_selected;
|
||||||
for (auto it = polys_to_draw.begin(); it != polys_to_draw.end(); it++) {
|
for (auto it = polys_to_draw.begin(); it != polys_to_draw.end(); it++) {
|
||||||
it->poly.translate(center);
|
it->poly.translate(center);
|
||||||
bbox.merge(it->poly);
|
bbox.merge(get_extents(it->poly));
|
||||||
}
|
}
|
||||||
SVG svg("SVG/arrange_poly.svg", bbox);
|
SVG svg("SVG/arrange_poly.svg", bbox);
|
||||||
if (svg.is_opened()) {
|
if (svg.is_opened()) {
|
||||||
@ -510,9 +510,7 @@ void ArrangeJob::check_unprintable()
|
|||||||
m_unprintable.push_back(*it);
|
m_unprintable.push_back(*it);
|
||||||
it = m_selected.erase(it);
|
it = m_selected.erase(it);
|
||||||
if (it->poly.area() < 0.001) {
|
if (it->poly.area() < 0.001) {
|
||||||
auto msg = (boost::format(
|
auto msg = (boost::format(_u8L("Object %1% has zero size and can't be arranged.")) % it->name).str();
|
||||||
_utf8("Object %s has zero size and can't be arranged."))
|
|
||||||
% _utf8(it->name)).str();
|
|
||||||
m_plater->get_notification_manager()->push_notification(NotificationType::BBLPlateInfo,
|
m_plater->get_notification_manager()->push_notification(NotificationType::BBLPlateInfo,
|
||||||
NotificationManager::NotificationLevel::WarningNotificationLevel, msg);
|
NotificationManager::NotificationLevel::WarningNotificationLevel, msg);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user