Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Matena <lukasmatena@seznam.cz>2018-08-21 16:40:11 +0300
committerLukas Matena <lukasmatena@seznam.cz>2018-08-21 16:40:11 +0300
commit86b67bbd4282016fbbbbc94306e37eada582daf1 (patch)
tree2b8883c8fa9b306e82911927cf0a34031ba1fbdb /xs/src/libslic3r
parentd197a5149ae86800ca84fe62af3d2b42e90c0d92 (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.cpp2
-rw-r--r--xs/src/libslic3r/Model.hpp2
-rw-r--r--xs/src/libslic3r/TriangleMesh.cpp11
-rw-r--r--xs/src/libslic3r/TriangleMesh.hpp1
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);