Merge branch 'tm_arrange_perf_improve'
This commit is contained in:
commit
0bfbe18a3c
5 changed files with 17 additions and 10 deletions
|
@ -309,7 +309,7 @@ protected:
|
|||
public:
|
||||
AutoArranger(const TBin & bin,
|
||||
const ArrangeParams ¶ms,
|
||||
std::function<void(unsigned)> progressind,
|
||||
std::function<void(unsigned, unsigned /*bins*/)> progressind,
|
||||
std::function<bool(void)> stopcond)
|
||||
: m_pck(bin, params.min_obj_distance)
|
||||
, m_bin(bin)
|
||||
|
@ -348,7 +348,9 @@ public:
|
|||
|
||||
m_pconf.object_function = get_objfn();
|
||||
|
||||
if (progressind) m_pck.progressIndicator(progressind);
|
||||
if (progressind) m_pck.progressIndicator([this, &progressind](unsigned rem) {
|
||||
progressind(rem, m_pck.lastResult().size() - 1);
|
||||
});
|
||||
if (stopcond) m_pck.stopCondition(stopcond);
|
||||
|
||||
m_pck.configure(m_pconf);
|
||||
|
@ -462,7 +464,7 @@ void _arrange(
|
|||
std::vector<Item> & excludes,
|
||||
const BinT & bin,
|
||||
const ArrangeParams ¶ms,
|
||||
std::function<void(unsigned)> progressfn,
|
||||
std::function<void(unsigned, unsigned)> progressfn,
|
||||
std::function<bool()> stopfn)
|
||||
{
|
||||
// Integer ceiling the min distance from the bed perimeters
|
||||
|
|
|
@ -74,7 +74,7 @@ struct ArrangeParams {
|
|||
|
||||
/// The accuracy of optimization.
|
||||
/// Goes from 0.0 to 1.0 and scales performance as well
|
||||
float accuracy = 0.65f;
|
||||
float accuracy = 1.f;
|
||||
|
||||
/// Allow parallel execution.
|
||||
bool parallel = true;
|
||||
|
@ -83,7 +83,8 @@ struct ArrangeParams {
|
|||
|
||||
/// Progress indicator callback called when an object gets packed.
|
||||
/// The unsigned argument is the number of items remaining to pack.
|
||||
std::function<void(unsigned)> progressind;
|
||||
/// Second is the current bed idx being filled.
|
||||
std::function<void(unsigned, unsigned /*bed_idx*/)> progressind;
|
||||
|
||||
/// A predicate returning true if abort is needed.
|
||||
std::function<bool(void)> stopcondition;
|
||||
|
|
|
@ -3892,7 +3892,7 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x)
|
|||
settings_changed = true;
|
||||
}
|
||||
|
||||
if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation)) {
|
||||
if (imgui->checkbox(_(L("Enable rotations (slow)")), settings.enable_rotation)) {
|
||||
m_arrange_settings.enable_rotation = settings.enable_rotation;
|
||||
settings_changed = true;
|
||||
}
|
||||
|
|
|
@ -158,14 +158,14 @@ void ArrangeJob::process()
|
|||
params.stopcondition = [this]() { return was_canceled(); };
|
||||
|
||||
try {
|
||||
params.progressind = [this, count](unsigned st) {
|
||||
params.progressind = [this, count](unsigned st, unsigned) {
|
||||
st += m_unprintable.size();
|
||||
if (st > 0) update_status(int(count - st), arrangestr);
|
||||
};
|
||||
|
||||
arrangement::arrange(m_selected, m_unselected, bedpts, params);
|
||||
|
||||
params.progressind = [this, count](unsigned st) {
|
||||
params.progressind = [this, count](unsigned st, unsigned) {
|
||||
if (st > 0) update_status(int(count - st), arrangestr);
|
||||
};
|
||||
|
||||
|
|
|
@ -90,9 +90,13 @@ void FillBedJob::process()
|
|||
params.min_obj_distance = scaled(settings.distance);
|
||||
params.allow_rotations = settings.enable_rotation;
|
||||
|
||||
params.stopcondition = [this]() { return was_canceled(); };
|
||||
unsigned curr_bed = 0;
|
||||
params.stopcondition = [this, &curr_bed]() {
|
||||
return was_canceled() || curr_bed > 0;
|
||||
};
|
||||
|
||||
params.progressind = [this](unsigned st) {
|
||||
params.progressind = [this, &curr_bed](unsigned st, unsigned bed) {
|
||||
curr_bed = bed;
|
||||
if (st > 0)
|
||||
update_status(int(m_status_range - st), _(L("Filling bed")));
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue