diff options
author | Lukas Matena <lukasmatena@seznam.cz> | 2018-08-21 16:40:11 +0300 |
---|---|---|
committer | Lukas Matena <lukasmatena@seznam.cz> | 2018-08-21 16:40:11 +0300 |
commit | 86b67bbd4282016fbbbbc94306e37eada582daf1 (patch) | |
tree | 2b8883c8fa9b306e82911927cf0a34031ba1fbdb /xs/src/libslic3r | |
parent | d197a5149ae86800ca84fe62af3d2b42e90c0d92 (diff) |
Lay flat - rotation is now done in one go directly about the necessary axis
Diffstat (limited to 'xs/src/libslic3r')
-rw-r--r-- | xs/src/libslic3r/Model.cpp | 2 | ||||
-rw-r--r-- | xs/src/libslic3r/Model.hpp | 2 | ||||
-rw-r--r-- | xs/src/libslic3r/TriangleMesh.cpp | 11 | ||||
-rw-r--r-- | xs/src/libslic3r/TriangleMesh.hpp | 1 |
4 files changed, 14 insertions, 2 deletions
diff --git a/xs/src/libslic3r/Model.cpp b/xs/src/libslic3r/Model.cpp index 23d447748..09b515c2f 100644 --- a/xs/src/libslic3r/Model.cpp +++ b/xs/src/libslic3r/Model.cpp @@ -725,7 +725,7 @@ void ModelObject::scale(const Pointf3 &versor) this->invalidate_bounding_box(); } -void ModelObject::rotate(float angle, const Axis &axis) +void ModelObject::rotate(float angle, const Pointf3& axis) { for (ModelVolume *v : this->volumes) { diff --git a/xs/src/libslic3r/Model.hpp b/xs/src/libslic3r/Model.hpp index 23af9fb1c..dadd515de 100644 --- a/xs/src/libslic3r/Model.hpp +++ b/xs/src/libslic3r/Model.hpp @@ -120,7 +120,7 @@ public: void translate(const Vectorf3 &vector) { this->translate(vector.x, vector.y, vector.z); } void translate(coordf_t x, coordf_t y, coordf_t z); void scale(const Pointf3 &versor); - void rotate(float angle, const Axis &axis); + void rotate(float angle, const Pointf3& axis); void transform(const float* matrix3x4); void mirror(const Axis &axis); size_t materials_count() const; diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp index 008679e6c..4c45680b6 100644 --- a/xs/src/libslic3r/TriangleMesh.cpp +++ b/xs/src/libslic3r/TriangleMesh.cpp @@ -324,6 +324,17 @@ void TriangleMesh::translate(float x, float y, float z) stl_invalidate_shared_vertices(&this->stl); } +void TriangleMesh::rotate(float angle, Pointf3 axis) +{ + if (angle == 0.f) + return; + + axis = normalize(axis); + Eigen::Transform<float, 3, Eigen::Affine> m = Eigen::Transform<float, 3, Eigen::Affine>::Identity(); + m.rotate(Eigen::AngleAxisf(angle, Eigen::Vector3f(axis.x, axis.y, axis.z))); + stl_transform(&stl, (float*)m.data()); +} + void TriangleMesh::rotate(float angle, const Axis &axis) { if (angle == 0.f) diff --git a/xs/src/libslic3r/TriangleMesh.hpp b/xs/src/libslic3r/TriangleMesh.hpp index be151f062..72e541afc 100644 --- a/xs/src/libslic3r/TriangleMesh.hpp +++ b/xs/src/libslic3r/TriangleMesh.hpp @@ -40,6 +40,7 @@ public: void scale(const Pointf3 &versor); void translate(float x, float y, float z); void rotate(float angle, const Axis &axis); + void rotate(float angle, Pointf3 axis); void rotate_x(float angle); void rotate_y(float angle); void rotate_z(float angle); |