diff options
author | Alessandro Ranellucci <aar@cpan.org> | 2014-12-13 00:43:04 +0300 |
---|---|---|
committer | Alessandro Ranellucci <aar@cpan.org> | 2014-12-13 00:43:56 +0300 |
commit | 360dee862b067d8768c739cd6c8622a0463bbe4e (patch) | |
tree | c09bd9da9dafc2f8af91fc00cd08bb21f8ea556a /xs/src | |
parent | 050f9ff61af1a673284d469b676df8628eb6e30f (diff) |
Keep model objects aligned to Z = 0 in plater
Diffstat (limited to 'xs/src')
-rw-r--r-- | xs/src/libslic3r/Model.cpp | 21 | ||||
-rw-r--r-- | xs/src/libslic3r/Model.hpp | 3 | ||||
-rw-r--r-- | xs/src/libslic3r/Point.cpp | 8 | ||||
-rw-r--r-- | xs/src/libslic3r/Point.hpp | 4 |
4 files changed, 25 insertions, 11 deletions
diff --git a/xs/src/libslic3r/Model.cpp b/xs/src/libslic3r/Model.cpp index d5e9aa6ee..06919cedd 100644 --- a/xs/src/libslic3r/Model.cpp +++ b/xs/src/libslic3r/Model.cpp @@ -480,27 +480,32 @@ ModelObject::center_around_origin() mesh.bounding_box(&bb); } - // first align to origin on XY - double shift_x = -bb.min.x; - double shift_y = -bb.min.y; + // first align to origin on XYZ + Vectorf3 vector(-bb.min.x, -bb.min.y, -bb.min.z); // then center it on XY Sizef3 size = bb.size(); - shift_x -= size.x/2; - shift_y -= size.y/2; + vector.x -= size.x/2; + vector.y -= size.y/2; - this->translate(shift_x, shift_y, 0); - this->origin_translation.translate(shift_x, shift_y); + this->translate(vector); + this->origin_translation.translate(vector); if (!this->instances.empty()) { for (ModelInstancePtrs::const_iterator i = this->instances.begin(); i != this->instances.end(); ++i) { - (*i)->offset.translate(-shift_x, -shift_y); + (*i)->offset.translate(-vector.x, -vector.y); } this->update_bounding_box(); } } void +ModelObject::translate(const Vectorf3 &vector) +{ + this->translate(vector.x, vector.y, vector.z); +} + +void ModelObject::translate(coordf_t x, coordf_t y, coordf_t z) { for (ModelVolumePtrs::const_iterator v = this->volumes.begin(); v != this->volumes.end(); ++v) { diff --git a/xs/src/libslic3r/Model.hpp b/xs/src/libslic3r/Model.hpp index 9cbe6be40..62bb38bfc 100644 --- a/xs/src/libslic3r/Model.hpp +++ b/xs/src/libslic3r/Model.hpp @@ -99,7 +99,7 @@ class ModelObject center_around_origin() method. Callers might want to apply the same translation to new volumes before adding them to this object in order to preset alignment when user expects that. */ - Pointf origin_translation; + Pointf3 origin_translation; // these should be private but we need to expose them via XS until all methods are ported BoundingBoxf3 _bounding_box; @@ -126,6 +126,7 @@ class ModelObject void raw_bounding_box(BoundingBoxf3* bb) const; void instance_bounding_box(size_t instance_idx, BoundingBoxf3* bb) const; void center_around_origin(); + void translate(const Vectorf3 &vector); void translate(coordf_t x, coordf_t y, coordf_t z); void scale(const Pointf3 &versor); size_t materials_count() const; diff --git a/xs/src/libslic3r/Point.cpp b/xs/src/libslic3r/Point.cpp index 76da85334..5f3f1da01 100644 --- a/xs/src/libslic3r/Point.cpp +++ b/xs/src/libslic3r/Point.cpp @@ -41,7 +41,7 @@ Point::translate(double x, double y) } void -Point::translate(const Point &vector) +Point::translate(const Vector &vector) { this->translate(vector.x, vector.y); } @@ -341,6 +341,12 @@ Pointf3::scale(double factor) } void +Pointf3::translate(const Vectorf3 &vector) +{ + this->translate(vector.x, vector.y, vector.z); +} + +void Pointf3::translate(double x, double y, double z) { Pointf::translate(x, y); diff --git a/xs/src/libslic3r/Point.hpp b/xs/src/libslic3r/Point.hpp index 60127b1b7..271c9584e 100644 --- a/xs/src/libslic3r/Point.hpp +++ b/xs/src/libslic3r/Point.hpp @@ -14,6 +14,7 @@ class Point; class Pointf; class Pointf3; typedef Point Vector; +typedef Pointf3 Vectorf3; typedef std::vector<Point> Points; typedef std::vector<Point*> PointPtrs; typedef std::vector<const Point*> PointConstPtrs; @@ -36,7 +37,7 @@ class Point std::string wkt() const; void scale(double factor); void translate(double x, double y); - void translate(const Point &vector); + void translate(const Vector &vector); void rotate(double angle, const Point ¢er); bool coincides_with(const Point &point) const; bool coincides_with_epsilon(const Point &point) const; @@ -93,6 +94,7 @@ class Pointf3 : public Pointf coordf_t z; explicit Pointf3(coordf_t _x = 0, coordf_t _y = 0, coordf_t _z = 0): Pointf(_x, _y), z(_z) {}; void scale(double factor); + void translate(const Vectorf3 &vector); void translate(double x, double y, double z); }; |