diff options
author | tamasmeszaros <meszaros.q@gmail.com> | 2019-07-12 22:03:49 +0300 |
---|---|---|
committer | tamasmeszaros <meszaros.q@gmail.com> | 2019-07-12 22:17:11 +0300 |
commit | df7bb94dafea6a64922184fe65db3c61f7c85da0 (patch) | |
tree | 9338cc78208b7f8b9c32dd4a2d5842ef881f2599 /src/slic3r/GUI/Plater.cpp | |
parent | 9372f1c6ad15d6d4f938f167625ff9e8e5905cb1 (diff) |
Not handling logical beds in arrange()
Diffstat (limited to 'src/slic3r/GUI/Plater.cpp')
-rw-r--r-- | src/slic3r/GUI/Plater.cpp | 46 |
1 files changed, 13 insertions, 33 deletions
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a49b541b5..3adfc0f05 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1217,28 +1217,6 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi return true; } -namespace { -arrangement::ArrangeablePtrs get_arrange_input(Model &model, const Selection &sel) { - auto selmap = sel.get_content(); - - size_t count = 0; - for (auto obj : model.objects) count += obj->instances.size(); - - arrangement::ArrangeablePtrs ret; ret.reserve(count); - - if (selmap.empty()) - for (ModelObject *mo : model.objects) - for (ModelInstance *minst : mo->instances) - ret.emplace_back(minst); - else - for (auto &s : selmap) - for (auto &instid : s.second) - ret.emplace_back(model.objects[s.first]->instances[instid]); - - return ret; -} -} - // Plater / private struct Plater::priv { @@ -1447,17 +1425,18 @@ struct Plater::priv class ArrangeJob : public Job { GLCanvas3D::WipeTowerInfo m_wti; - arrangement::ArrangeablePtrs m_selected, m_unselected; - - static std::array<arrangement::ArrangeablePtrs, 2> collect( + arrangement::ArrangePolygons m_selected, m_unselected; + + static std::array<arrangement::ArrangePolygons, 2> collect( Model &model, const Selection &sel) { - auto selmap = sel.get_content(); - + const Selection::ObjectIdxsToInstanceIdxsMap &selmap = + sel.get_content(); + size_t count = 0; for (auto obj : model.objects) count += obj->instances.size(); - arrangement::ArrangeablePtrs selected, unselected; + arrangement::ArrangePolygons selected, unselected; selected.reserve(count + 1 /* for optional wti */); unselected.reserve(count + 1 /* for optional wti */); @@ -1475,12 +1454,12 @@ struct Plater::priv ModelInstance *inst = model.objects[oidx] ->instances[iidx]; instit == iids.end() ? - unselected.emplace_back(inst) : - selected.emplace_back(inst); + unselected.emplace_back(inst->get_arrange_polygon()) : + selected.emplace_back(inst->get_arrange_polygon()); } } else // object not selected, all instances are unselected for (auto inst : model.objects[oidx]->instances) - unselected.emplace_back(inst); + unselected.emplace_back(inst->get_arrange_polygon()); } if (selected.empty()) selected.swap(unselected); @@ -1495,14 +1474,15 @@ struct Plater::priv m_wti = plater().view3D->get_canvas3d()->get_wipe_tower_info(); const Selection& sel = plater().get_selection(); + BoundingBoxf bedbb(plater().bed.get_shape()); auto arrinput = collect(plater().model, sel); m_selected.swap(arrinput[0]); m_unselected.swap(arrinput[1]); if (m_wti) sel.is_wipe_tower() ? - m_selected.emplace_back(&m_wti) : - m_unselected.emplace_back(&m_wti); + m_selected.emplace_back(m_wti.get_arrange_polygon()) : + m_unselected.emplace_back(m_wti.get_arrange_polygon()); } public: |