mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 17:56:03 +08:00
SLA Backend: skip voxelization if the original mesh is usable as preview
This commit is contained in:
parent
2cf48683de
commit
3a7af1c1de
@ -21,7 +21,7 @@ VoxelGridPtr get_voxelgrid(const CSGPartT &csgpart, VoxelizeParams params)
|
|||||||
params.trafo(params.trafo() * csg::get_transform(csgpart));
|
params.trafo(params.trafo() * csg::get_transform(csgpart));
|
||||||
|
|
||||||
if (its)
|
if (its)
|
||||||
ret = mesh_to_grid(*csg::get_mesh(csgpart), params);
|
ret = mesh_to_grid(*its, params);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -148,9 +148,17 @@ indexed_triangle_set SLAPrint::Steps::generate_preview_vdb(
|
|||||||
return po.m_print->cancel_status() != CancelStatus::NOT_CANCELED;
|
return po.m_print->cancel_status() != CancelStatus::NOT_CANCELED;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto grid = csg::voxelize_csgmesh(range(po.m_mesh_to_slice), voxparams);
|
auto r = range(po.m_mesh_to_slice);
|
||||||
|
auto m = indexed_triangle_set{};
|
||||||
auto m = grid ? grid_to_mesh(*grid) : indexed_triangle_set{};
|
if (r.size() > 1) {
|
||||||
|
auto grid = csg::voxelize_csgmesh(r, voxparams);
|
||||||
|
m = grid ? grid_to_mesh(*grid) : indexed_triangle_set{};
|
||||||
|
} else if (!r.empty()) {
|
||||||
|
m = *(csg::get_mesh(*r.begin()));
|
||||||
|
auto tr = csg::get_transform(*r.begin());
|
||||||
|
for (auto &v : m.vertices)
|
||||||
|
v = tr * v;
|
||||||
|
}
|
||||||
|
|
||||||
bench.stop();
|
bench.stop();
|
||||||
|
|
||||||
@ -165,21 +173,6 @@ indexed_triangle_set SLAPrint::Steps::generate_preview_vdb(
|
|||||||
|
|
||||||
void SLAPrint::Steps::generate_preview(SLAPrintObject &po, SLAPrintObjectStep step)
|
void SLAPrint::Steps::generate_preview(SLAPrintObject &po, SLAPrintObjectStep step)
|
||||||
{
|
{
|
||||||
// TODO: enable when this works reliably. Currently, perform_csgmesh_booleans
|
|
||||||
// can generate incorrect result despite not throwing any exception.
|
|
||||||
// MeshBoolean::cgal::CGALMeshPtr cgalptr;
|
|
||||||
|
|
||||||
// try {
|
|
||||||
// cgalptr = csg::perform_csgmesh_booleans(range(po.m_mesh_to_slice));
|
|
||||||
// } catch(...) {
|
|
||||||
// cgalptr = nullptr;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (cgalptr) {
|
|
||||||
// po.m_preview_meshes[step] = MeshBoolean::cgal::cgal_to_triangle_mesh(*cgalptr);
|
|
||||||
// } else
|
|
||||||
// po.m_preview_meshes[step] = TriangleMesh{generate_preview_vdb(po, step)};
|
|
||||||
|
|
||||||
po.m_preview_meshes[step] = TriangleMesh{generate_preview_vdb(po, step)};
|
po.m_preview_meshes[step] = TriangleMesh{generate_preview_vdb(po, step)};
|
||||||
|
|
||||||
for (size_t i = size_t(step) + 1; i < slaposCount; ++i)
|
for (size_t i = size_t(step) + 1; i < slaposCount; ++i)
|
||||||
@ -286,6 +279,8 @@ void SLAPrint::Steps::drill_holes(SLAPrintObject &po)
|
|||||||
// update preview mesh
|
// update preview mesh
|
||||||
if (r.first != r.second)
|
if (r.first != r.second)
|
||||||
generate_preview(po, slaposDrillHoles);
|
generate_preview(po, slaposDrillHoles);
|
||||||
|
else
|
||||||
|
po.m_preview_meshes[slaposDrillHoles] = po.get_mesh_to_print();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Pred>
|
template<class Pred>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user