Added object gluing across beds for scheduling of individual beds.

This commit is contained in:
surynek 2025-02-12 14:40:42 +01:00 committed by Lukas Matena
parent 1259d59098
commit c1bef5eae0
2 changed files with 31 additions and 13 deletions

View File

@ -147,18 +147,26 @@ bool check_ScheduledObjectsForSequentialPrintability(const SolverConfiguration
is unable to scedule even single object on the plate. The latter case
is detected by timeout and should not normally happen. These failures
are reported via exceptions.
The trans_bed_glue parameter should be set to false when scheduling
all objects. If only objects on a separate bed are scheduled, then
trans_bed_glue should be set to true when there is an object on the
previous bed that is temporally glued to the first scheduled object.
In such a case, the first object will be scheduled as first temporally.
*/
std::vector<ScheduledPlate> schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver_configuration,
const PrinterGeometry &printer_geometry,
const std::vector<ObjectToPrint> &objects_to_print,
std::function<void(int)> progress_callback = [](int progress){});
std::function<void(int)> progress_callback = [](int progress){},
bool trans_bed_glue = false);
void schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver_configuration,
const PrinterGeometry &printer_geometry,
const std::vector<ObjectToPrint> &objects_to_print,
std::vector<ScheduledPlate> &scheduled_plates,
std::function<void(int)> progress_callback = [](int progress){});
std::function<void(int)> progress_callback = [](int progress){},
bool trans_bed_glue = false);
/*----------------------------------------------------------------*/
@ -169,7 +177,8 @@ void schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver
int schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver_configuration,
const std::vector<ObjectToPrint> &objects_to_print,
std::vector<ScheduledPlate> &scheduled_plates,
std::function<void(int)> progress_callback = [](int progress){});
std::function<void(int)> progress_callback = [](int progress){},
bool trans_bed_glue = false);
void setup_ExtruderUnreachableZones(const SolverConfiguration &solver_configuration,
std::vector<std::vector<Slic3r::Polygon> > &convex_unreachable_zones,
@ -180,7 +189,8 @@ int schedule_ObjectsForSequentialPrint(const SolverConfiguration
const std::vector<std::vector<Slic3r::Polygon> > &convex_unreachable_zones,
const std::vector<std::vector<Slic3r::Polygon> > &box_unreachable_zones,
std::vector<ScheduledPlate> &scheduled_plates,
std::function<void(int)> progress_callback = [](int progress){});
std::function<void(int)> progress_callback = [](int progress){},
bool trans_bed_glue = false);
/*----------------------------------------------------------------*/

View File

@ -319,7 +319,8 @@ bool check_ScheduledObjectsForSequentialPrintability(const SolverConfiguration
std::vector<ScheduledPlate> schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver_configuration,
const PrinterGeometry &printer_geometry,
const std::vector<ObjectToPrint> &objects_to_print,
std::function<void(int)> progress_callback)
std::function<void(int)> progress_callback,
bool trans_bed_glue)
{
std::vector<ScheduledPlate> scheduled_plates;
@ -327,7 +328,8 @@ std::vector<ScheduledPlate> schedule_ObjectsForSequentialPrint(const SolverConfi
printer_geometry,
objects_to_print,
scheduled_plates,
progress_callback);
progress_callback,
trans_bed_glue);
return scheduled_plates;
}
@ -349,7 +351,8 @@ void schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver
const PrinterGeometry &printer_geometry,
const std::vector<ObjectToPrint> &objects_to_print,
std::vector<ScheduledPlate> &scheduled_plates,
std::function<void(int)> progress_callback)
std::function<void(int)> progress_callback,
bool trans_bed_glue)
{
#ifdef PROFILE
clock_t start, finish;
@ -421,7 +424,7 @@ void schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver
int progress_object_phases_done = 0;
int progress_object_phases_total = SEQ_MAKE_EXTRA_PROGRESS((objects_to_print.size() * SEQ_PROGRESS_PHASES_PER_OBJECT));
bool trans_bed_lepox = false;
bool trans_bed_lepox = trans_bed_glue;
do
{
@ -484,6 +487,7 @@ void schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver
if (solvable_objects[i].lepox_to_next && !is_scheduled(i + 1, decided_polygons))
{
split = true;
break;
}
}
if (split)
@ -587,7 +591,8 @@ void schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver
int schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver_configuration,
const std::vector<ObjectToPrint> &objects_to_print,
std::vector<ScheduledPlate> &scheduled_plates,
std::function<void(int)> progress_callback)
std::function<void(int)> progress_callback,
bool trans_bed_glue)
{
#ifdef PROFILE
clock_t start, finish;
@ -837,7 +842,7 @@ int schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver_
int progress_object_phases_done = 0;
int progress_object_phases_total = SEQ_MAKE_EXTRA_PROGRESS((objects_to_print.size() * SEQ_PROGRESS_PHASES_PER_OBJECT));
bool trans_bed_lepox = false;
bool trans_bed_lepox = trans_bed_glue;
do
{
@ -900,6 +905,7 @@ int schedule_ObjectsForSequentialPrint(const SolverConfiguration &solver_
if (solvable_objects[i].lepox_to_next && !is_scheduled(i + 1, decided_polygons))
{
split = true;
break;
}
}
if (split)
@ -1038,7 +1044,8 @@ int schedule_ObjectsForSequentialPrint(const SolverConfiguration
const std::vector<std::vector<Slic3r::Polygon> > &convex_unreachable_zones,
const std::vector<std::vector<Slic3r::Polygon> > &box_unreachable_zones,
std::vector<ScheduledPlate> &scheduled_plates,
std::function<void(int)> progress_callback)
std::function<void(int)> progress_callback,
bool trans_bed_glue)
{
#ifdef PROFILE
clock_t start, finish;
@ -1174,7 +1181,7 @@ int schedule_ObjectsForSequentialPrint(const SolverConfiguration
int progress_object_phases_done = 0;
int progress_object_phases_total = SEQ_MAKE_EXTRA_PROGRESS((objects_to_print.size() * SEQ_PROGRESS_PHASES_PER_OBJECT));
bool trans_bed_lepox = false;
bool trans_bed_lepox = trans_bed_glue;
do
{
@ -1238,6 +1245,7 @@ int schedule_ObjectsForSequentialPrint(const SolverConfiguration
if (solvable_objects[i].lepox_to_next && !is_scheduled(i + 1, decided_polygons))
{
split = true;
break;
}
}
if (split)