mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-06 05:48:03 +08:00
Arrange: Fix local arrange in SLA mode
This commit is contained in:
parent
e588d80e23
commit
4f7366045e
@ -497,12 +497,14 @@ class ArrangeableSLAPrintObject : public Arrangeable
|
||||
const SLAPrintObject *m_po;
|
||||
Arrangeable *m_arrbl;
|
||||
Transform3d m_inst_trafo;
|
||||
std::optional<int> m_bed_constraint;
|
||||
|
||||
public:
|
||||
ArrangeableSLAPrintObject(const SLAPrintObject *po,
|
||||
Arrangeable *arrbl,
|
||||
const std::optional<int> bed_constraint,
|
||||
const Transform3d &inst_tr = Transform3d::Identity())
|
||||
: m_po{po}, m_arrbl{arrbl}, m_inst_trafo{inst_tr}
|
||||
: m_po{po}, m_arrbl{arrbl}, m_inst_trafo{inst_tr}, m_bed_constraint(bed_constraint)
|
||||
{}
|
||||
|
||||
ObjectID id() const override { return m_arrbl->id(); }
|
||||
@ -524,6 +526,8 @@ public:
|
||||
return m_arrbl->assign_bed(bedidx);
|
||||
}
|
||||
|
||||
std::optional<int> bed_constraint() const override { return m_bed_constraint; }
|
||||
|
||||
bool is_printable() const override { return m_arrbl->is_printable(); }
|
||||
bool is_selected() const override { return m_arrbl->is_selected(); }
|
||||
int priority() const override { return m_arrbl->priority(); }
|
||||
|
@ -623,22 +623,28 @@ void ArrangeableSLAPrint::for_each_arrangeable_(Self &&self, Fn &&fn)
|
||||
InstPos pos;
|
||||
for (auto *obj : self.m_model->objects) {
|
||||
for (auto *inst : obj->instances) {
|
||||
ArrangeableModelInstance ainst{inst, self.m_vbed_handler.get(),
|
||||
self.m_selmask.get(), pos, std::nullopt};
|
||||
if (!self.m_considered_instances || should_include_instance(inst->id(), *self.m_considered_instances)) {
|
||||
ArrangeableModelInstance ainst{inst, self.m_vbed_handler.get(),
|
||||
self.m_selmask.get(), pos, get_bed_constraint(inst->id(), self.m_bed_constraints)};
|
||||
|
||||
auto obj_id = inst->get_object()->id();
|
||||
const SLAPrintObject *po =
|
||||
self.m_slaprint->get_print_object_by_model_object_id(obj_id);
|
||||
auto obj_id = inst->get_object()->id();
|
||||
const SLAPrintObject *po =
|
||||
self.m_slaprint->get_print_object_by_model_object_id(obj_id);
|
||||
|
||||
if (po) {
|
||||
auto &vbh = self.m_vbed_handler;
|
||||
auto phtr = vbh->get_physical_bed_trafo(vbh->get_bed_index(VBedPlaceableMI{*inst}));
|
||||
ArrangeableSLAPrintObject ainst_po{po, &ainst, phtr * inst->get_matrix()};
|
||||
fn(ainst_po);
|
||||
} else {
|
||||
fn(ainst);
|
||||
if (po) {
|
||||
auto &vbh = self.m_vbed_handler;
|
||||
auto phtr = vbh->get_physical_bed_trafo(vbh->get_bed_index(VBedPlaceableMI{*inst}));
|
||||
ArrangeableSLAPrintObject ainst_po{
|
||||
po,
|
||||
&ainst,
|
||||
get_bed_constraint(inst->id(), self.m_bed_constraints),
|
||||
phtr * inst->get_matrix()
|
||||
};
|
||||
fn(ainst_po);
|
||||
} else {
|
||||
fn(ainst);
|
||||
}
|
||||
}
|
||||
|
||||
++pos.inst_idx;
|
||||
}
|
||||
pos.inst_idx = 0;
|
||||
@ -682,7 +688,12 @@ void ArrangeableSLAPrint::visit_arrangeable_(Self &&self, const ObjectID &id, Fn
|
||||
if (po) {
|
||||
auto &vbh = self.m_vbed_handler;
|
||||
auto phtr = vbh->get_physical_bed_trafo(vbh->get_bed_index(VBedPlaceableMI{*inst}));
|
||||
ArrangeableSLAPrintObject ainst_po{po, &ainst, phtr * inst->get_matrix()};
|
||||
ArrangeableSLAPrintObject ainst_po{
|
||||
po,
|
||||
&ainst,
|
||||
get_bed_constraint(inst->id(), self.m_bed_constraints),
|
||||
phtr * inst->get_matrix()
|
||||
};
|
||||
fn(ainst_po);
|
||||
} else {
|
||||
fn(ainst);
|
||||
|
Loading…
x
Reference in New Issue
Block a user