mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 09:47:58 -06:00
Fixed loading of huge models
This commit is contained in:
parent
42249d6649
commit
9d8e78636b
3 changed files with 25 additions and 2 deletions
|
@ -983,6 +983,16 @@ void ModelObject::mirror(Axis axis)
|
||||||
this->invalidate_bounding_box();
|
this->invalidate_bounding_box();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelObject::scale_mesh(const Vec3d &versor)
|
||||||
|
{
|
||||||
|
for (ModelVolume *v : this->volumes)
|
||||||
|
{
|
||||||
|
v->scale_geometry(versor);
|
||||||
|
v->set_offset(versor.cwiseProduct(v->get_offset()));
|
||||||
|
}
|
||||||
|
this->invalidate_bounding_box();
|
||||||
|
}
|
||||||
|
|
||||||
size_t ModelObject::materials_count() const
|
size_t ModelObject::materials_count() const
|
||||||
{
|
{
|
||||||
std::set<t_model_material_id> material_ids;
|
std::set<t_model_material_id> material_ids;
|
||||||
|
@ -1514,6 +1524,12 @@ void ModelVolume::mirror(Axis axis)
|
||||||
#endif // ENABLE_MODELVOLUME_TRANSFORM
|
#endif // ENABLE_MODELVOLUME_TRANSFORM
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelVolume::scale_geometry(const Vec3d& versor)
|
||||||
|
{
|
||||||
|
mesh.scale(versor);
|
||||||
|
m_convex_hull.scale(versor);
|
||||||
|
}
|
||||||
|
|
||||||
#if !ENABLE_MODELVOLUME_TRANSFORM
|
#if !ENABLE_MODELVOLUME_TRANSFORM
|
||||||
void ModelInstance::set_rotation(const Vec3d& rotation)
|
void ModelInstance::set_rotation(const Vec3d& rotation)
|
||||||
{
|
{
|
||||||
|
|
|
@ -237,6 +237,9 @@ public:
|
||||||
void rotate(double angle, Axis axis);
|
void rotate(double angle, Axis axis);
|
||||||
void rotate(double angle, const Vec3d& axis);
|
void rotate(double angle, const Vec3d& axis);
|
||||||
void mirror(Axis axis);
|
void mirror(Axis axis);
|
||||||
|
|
||||||
|
void scale_mesh(const Vec3d& versor);
|
||||||
|
|
||||||
size_t materials_count() const;
|
size_t materials_count() const;
|
||||||
size_t facets_count() const;
|
size_t facets_count() const;
|
||||||
bool needed_repair() const;
|
bool needed_repair() const;
|
||||||
|
@ -331,6 +334,8 @@ public:
|
||||||
void rotate(double angle, const Vec3d& axis);
|
void rotate(double angle, const Vec3d& axis);
|
||||||
void mirror(Axis axis);
|
void mirror(Axis axis);
|
||||||
|
|
||||||
|
void scale_geometry(const Vec3d& versor);
|
||||||
|
|
||||||
#if ENABLE_MODELVOLUME_TRANSFORM
|
#if ENABLE_MODELVOLUME_TRANSFORM
|
||||||
// translates the mesh and the convex hull so that the origin of their vertices is in the center of this volume's bounding box
|
// translates the mesh and the convex hull so that the origin of their vertices is in the center of this volume's bounding box
|
||||||
void center_geometry();
|
void center_geometry();
|
||||||
|
|
|
@ -1494,7 +1494,7 @@ std::vector<size_t> Plater::priv::load_model_objects(const ModelObjectPtrs &mode
|
||||||
#if !ENABLE_MODELVOLUME_TRANSFORM
|
#if !ENABLE_MODELVOLUME_TRANSFORM
|
||||||
const Vec3d bed_center = Slic3r::to_3d(bed_shape.center().cast<double>(), 0.0);
|
const Vec3d bed_center = Slic3r::to_3d(bed_shape.center().cast<double>(), 0.0);
|
||||||
#endif // !ENABLE_MODELVOLUME_TRANSFORM
|
#endif // !ENABLE_MODELVOLUME_TRANSFORM
|
||||||
const Vec3d bed_size = Slic3r::to_3d(bed_shape.size().cast<double>(), 1.0);
|
const Vec3d bed_size = Slic3r::to_3d(bed_shape.size().cast<double>(), 1.0) - 2.0 * Vec3d::Ones();
|
||||||
|
|
||||||
bool need_arrange = false;
|
bool need_arrange = false;
|
||||||
bool scaled_down = false;
|
bool scaled_down = false;
|
||||||
|
@ -1527,7 +1527,9 @@ std::vector<size_t> Plater::priv::load_model_objects(const ModelObjectPtrs &mode
|
||||||
// the size of the object is too big -> this could lead to overflow when moving to clipper coordinates,
|
// the size of the object is too big -> this could lead to overflow when moving to clipper coordinates,
|
||||||
// so scale down the mesh
|
// so scale down the mesh
|
||||||
double inv = 1. / max_ratio;
|
double inv = 1. / max_ratio;
|
||||||
object->scale(Vec3d(inv, inv, inv));
|
object->scale_mesh(Vec3d(inv, inv, inv));
|
||||||
|
object->origin_translation = Vec3d::Zero();
|
||||||
|
object->center_around_origin();
|
||||||
scaled_down = true;
|
scaled_down = true;
|
||||||
} else if (max_ratio > 5) {
|
} else if (max_ratio > 5) {
|
||||||
const Vec3d inverse = ratio.cwiseInverse();
|
const Vec3d inverse = ratio.cwiseInverse();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue