mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-12 19:59:01 +08:00
Refinements
This commit is contained in:
parent
9bc3410474
commit
2a8c9d7462
@ -46,6 +46,14 @@ std::vector<ExPolygons> slice_csgmesh_ex(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (ExPolygons &slice : ret) {
|
||||||
|
auto it = std::remove_if(slice.begin(), slice.end(), [](const ExPolygon &p){
|
||||||
|
return p.area() < double(SCALED_EPSILON) * double(SCALED_EPSILON);
|
||||||
|
});
|
||||||
|
|
||||||
|
slice.erase(it, slice.end());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -792,13 +792,6 @@ bool SLAPrint::is_step_done(SLAPrintObjectStep step) const
|
|||||||
|
|
||||||
SLAPrintObject::SLAPrintObject(SLAPrint *print, ModelObject *model_object)
|
SLAPrintObject::SLAPrintObject(SLAPrint *print, ModelObject *model_object)
|
||||||
: Inherited(print, model_object)
|
: Inherited(print, model_object)
|
||||||
// , m_transformed_rmesh([this](TriangleMesh &obj) {
|
|
||||||
//// obj = m_model_object->raw_mesh();
|
|
||||||
//// if (!obj.empty()) {
|
|
||||||
//// obj.transform(m_trafo);
|
|
||||||
//// }
|
|
||||||
// obj = transformed_mesh_csg(*this);
|
|
||||||
// })
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
SLAPrintObject::~SLAPrintObject() {}
|
SLAPrintObject::~SLAPrintObject() {}
|
||||||
@ -1056,7 +1049,8 @@ const TriangleMesh& SLAPrintObject::pad_mesh() const
|
|||||||
return EMPTY_MESH;
|
return EMPTY_MESH;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TriangleMesh &SLAPrintObject::get_mesh_to_print() const {
|
const TriangleMesh &SLAPrintObject::get_mesh_to_print() const
|
||||||
|
{
|
||||||
const TriangleMesh *ret = nullptr;
|
const TriangleMesh *ret = nullptr;
|
||||||
|
|
||||||
int s = SLAPrintObjectStep::slaposCount;
|
int s = SLAPrintObjectStep::slaposCount;
|
||||||
@ -1068,7 +1062,7 @@ const TriangleMesh &SLAPrintObject::get_mesh_to_print() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = &m_transformed_rmesh;
|
ret = &EMPTY_MESH;
|
||||||
|
|
||||||
return *ret;
|
return *ret;
|
||||||
}
|
}
|
||||||
@ -1158,4 +1152,29 @@ void SLAPrint::StatusReporter::operator()(SLAPrint & p,
|
|||||||
p.set_status(int(std::round(st)), msg, flags);
|
p.set_status(int(std::round(st)), msg, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace csg {
|
||||||
|
|
||||||
|
inline bool operator==(const VoxelizeParams &a, const VoxelizeParams &b)
|
||||||
|
{
|
||||||
|
std::hash<Slic3r::csg::VoxelizeParams> h;
|
||||||
|
return h(a) == h(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
VoxelGridPtr get_voxelgrid(const CSGPartForStep &part, const VoxelizeParams &p)
|
||||||
|
{
|
||||||
|
VoxelGridPtr &ret = part.gridcache[p];
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
ret = mesh_to_grid(*csg::get_mesh(part),
|
||||||
|
csg::get_transform(part),
|
||||||
|
p.voxel_scale(),
|
||||||
|
p.exterior_bandwidth(),
|
||||||
|
p.interior_bandwidth());
|
||||||
|
}
|
||||||
|
|
||||||
|
return clone(*ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace csg
|
||||||
|
|
||||||
} // namespace Slic3r
|
} // namespace Slic3r
|
||||||
|
@ -91,27 +91,7 @@ struct CSGPartForStep : public csg::CSGPart
|
|||||||
|
|
||||||
namespace csg {
|
namespace csg {
|
||||||
|
|
||||||
inline bool operator==(const VoxelizeParams &a, const VoxelizeParams &b)
|
VoxelGridPtr get_voxelgrid(const CSGPartForStep &part, const VoxelizeParams &p);
|
||||||
{
|
|
||||||
std::hash<Slic3r::csg::VoxelizeParams> h;
|
|
||||||
return h(a) == h(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline VoxelGridPtr get_voxelgrid(const CSGPartForStep &part,
|
|
||||||
const VoxelizeParams &p)
|
|
||||||
{
|
|
||||||
VoxelGridPtr &ret = part.gridcache[p];
|
|
||||||
|
|
||||||
if (!ret) {
|
|
||||||
ret = mesh_to_grid(*csg::get_mesh(part),
|
|
||||||
csg::get_transform(part),
|
|
||||||
p.voxel_scale(),
|
|
||||||
p.exterior_bandwidth(),
|
|
||||||
p.interior_bandwidth());
|
|
||||||
}
|
|
||||||
|
|
||||||
return clone(*ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace csg
|
} // namespace csg
|
||||||
|
|
||||||
@ -372,7 +352,7 @@ private:
|
|||||||
std::vector<float> m_model_height_levels;
|
std::vector<float> m_model_height_levels;
|
||||||
|
|
||||||
// Caching the transformed (m_trafo) raw mesh of the object
|
// Caching the transformed (m_trafo) raw mesh of the object
|
||||||
TriangleMesh m_transformed_rmesh;
|
// TriangleMesh m_transformed_rmesh;
|
||||||
|
|
||||||
struct SupportData
|
struct SupportData
|
||||||
{
|
{
|
||||||
|
@ -194,10 +194,6 @@ struct csg_inserter {
|
|||||||
void SLAPrint::Steps::mesh_assembly(SLAPrintObject &po)
|
void SLAPrint::Steps::mesh_assembly(SLAPrintObject &po)
|
||||||
{
|
{
|
||||||
po.m_mesh_to_slice.clear();
|
po.m_mesh_to_slice.clear();
|
||||||
|
|
||||||
po.m_transformed_rmesh = po.m_model_object->raw_mesh();
|
|
||||||
po.m_transformed_rmesh.transform(po.trafo());
|
|
||||||
|
|
||||||
csg::model_to_csgmesh(*po.model_object(), po.trafo(),
|
csg::model_to_csgmesh(*po.model_object(), po.trafo(),
|
||||||
csg_inserter{po.m_mesh_to_slice, slaposAssembly},
|
csg_inserter{po.m_mesh_to_slice, slaposAssembly},
|
||||||
csg::mpartsPositive | csg::mpartsNegative);
|
csg::mpartsPositive | csg::mpartsNegative);
|
||||||
@ -265,8 +261,11 @@ void SLAPrint::Steps::drill_holes(SLAPrintObject &po)
|
|||||||
csg_inserter{po.m_mesh_to_slice, slaposDrillHoles},
|
csg_inserter{po.m_mesh_to_slice, slaposDrillHoles},
|
||||||
csg::mpartsDrillHoles);
|
csg::mpartsDrillHoles);
|
||||||
|
|
||||||
|
auto r = po.m_mesh_to_slice.equal_range(slaposDrillHoles);
|
||||||
|
|
||||||
// update preview mesh
|
// update preview mesh
|
||||||
generate_preview(po, slaposDrillHoles);
|
if (r.first != r.second)
|
||||||
|
generate_preview(po, slaposDrillHoles);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Pred>
|
template<class Pred>
|
||||||
@ -374,8 +373,7 @@ void SLAPrint::Steps::slice_model(SLAPrintObject &po)
|
|||||||
auto thr = [this]() { m_print->throw_if_canceled(); };
|
auto thr = [this]() { m_print->throw_if_canceled(); };
|
||||||
auto &slice_grid = po.m_model_height_levels;
|
auto &slice_grid = po.m_model_height_levels;
|
||||||
|
|
||||||
Range csgrange = {po.m_mesh_to_slice.begin(), po.m_mesh_to_slice.end()};
|
po.m_model_slices = slice_csgmesh_ex(range(po.m_mesh_to_slice), slice_grid, params, thr);
|
||||||
po.m_model_slices = slice_csgmesh_ex(csgrange, slice_grid, params, thr);
|
|
||||||
|
|
||||||
auto mit = slindex_it;
|
auto mit = slindex_it;
|
||||||
for (size_t id = 0;
|
for (size_t id = 0;
|
||||||
@ -387,7 +385,8 @@ void SLAPrint::Steps::slice_model(SLAPrintObject &po)
|
|||||||
// We apply the printer correction offset here.
|
// We apply the printer correction offset here.
|
||||||
apply_printer_corrections(po, soModel);
|
apply_printer_corrections(po, soModel);
|
||||||
|
|
||||||
generate_preview(po, slaposObjectSlice);
|
// po.m_preview_meshes[slaposObjectSlice] = po.get_mesh_to_print();
|
||||||
|
// report_status(-2, "", SlicingStatus::RELOAD_SLA_PREVIEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void filter_support_points_by_modifiers(
|
static void filter_support_points_by_modifiers(
|
||||||
@ -448,7 +447,7 @@ void SLAPrint::Steps::support_points(SLAPrintObject &po)
|
|||||||
if (!po.m_supportdata)
|
if (!po.m_supportdata)
|
||||||
po.m_supportdata =
|
po.m_supportdata =
|
||||||
std::make_unique<SLAPrintObject::SupportData>(
|
std::make_unique<SLAPrintObject::SupportData>(
|
||||||
po.m_preview_meshes[slaposObjectSlice]
|
po.get_mesh_to_print()
|
||||||
);
|
);
|
||||||
|
|
||||||
po.m_supportdata->input.zoffset = csgmesh_positive_bb(po.m_mesh_to_slice)
|
po.m_supportdata->input.zoffset = csgmesh_positive_bb(po.m_mesh_to_slice)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user