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

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/xs
diff options
context:
space:
mode:
authorJoseph Lenox <lenox.joseph@gmail.com>2016-11-28 01:06:45 +0300
committerbubnikv <bubnikv@gmail.com>2017-02-21 18:10:14 +0300
commit3bb237deee86b8a362cbfcef877e015aeee359be (patch)
tree699f0a112f6a637c96aaae0cc227811d65f0c0e9 /xs
parentff33fbbb9a8e0ab44225ee97a5e9cb6d33dd0769 (diff)
Added new constructor to TriangleMesh that accepts vectors of Points and make_cube function to make a new simple cube mesh.
Diffstat (limited to 'xs')
-rw-r--r--xs/src/libslic3r/TriangleMesh.cpp61
-rw-r--r--xs/src/libslic3r/TriangleMesh.hpp3
-rw-r--r--xs/xsp/TriangleMesh.xsp2
3 files changed, 66 insertions, 0 deletions
diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp
index 71e34f3b8..968ce371e 100644
--- a/xs/src/libslic3r/TriangleMesh.cpp
+++ b/xs/src/libslic3r/TriangleMesh.cpp
@@ -25,6 +25,48 @@ TriangleMesh::TriangleMesh()
stl_initialize(&this->stl);
}
+TriangleMesh::TriangleMesh(const Pointf3s &points, const std::vector<Point3>& facets )
+ : repaired(false)
+{
+ stl_initialize(&this->stl);
+ stl_file &stl = this->stl;
+ stl.error = 0;
+ stl.stats.type = inmemory;
+
+ // count facets and allocate memory
+ stl.stats.number_of_facets = facets.size();
+ stl.stats.original_num_facets = stl.stats.number_of_facets;
+ stl_allocate(&stl);
+
+ for (int i = 0; i < stl.stats.number_of_facets; i++) {
+ stl_facet facet;
+ facet.normal.x = 0;
+ facet.normal.y = 0;
+ facet.normal.z = 0;
+
+ const Pointf3& ref_f1 = points[facets[i].x];
+ facet.vertex[0].x = ref_f1.x;
+ facet.vertex[0].y = ref_f1.y;
+ facet.vertex[0].z = ref_f1.z;
+
+ const Pointf3& ref_f2 = points[facets[i].y];
+ facet.vertex[1].x = ref_f2.x;
+ facet.vertex[1].y = ref_f2.y;
+ facet.vertex[1].z = ref_f2.z;
+
+ const Pointf3& ref_f3 = points[facets[i].z];
+ facet.vertex[2].x = ref_f3.x;
+ facet.vertex[2].y = ref_f3.y;
+ facet.vertex[2].z = ref_f3.z;
+
+ facet.extra[0] = 0;
+ facet.extra[1] = 0;
+
+ stl.facet_start[i] = facet;
+ }
+ stl_get_size(&stl);
+}
+
TriangleMesh::TriangleMesh(const TriangleMesh &other)
: stl(other.stl), repaired(other.repaired)
{
@@ -1099,4 +1141,23 @@ TriangleMeshSlicer::~TriangleMeshSlicer()
if (this->v_scaled_shared != NULL) free(this->v_scaled_shared);
}
+TriangleMesh make_cube(double x, double y, double z) {
+ Pointf3 pv[8] = {
+ Pointf3(x, y, 0), Pointf3(x, 0, 0), Pointf3(0, 0, 0),
+ Pointf3(0, y, 0), Pointf3(x, y, z), Pointf3(0, y, z),
+ Pointf3(0, 0, z), Pointf3(x, 0, z)
+ };
+ Point3 fv[12] = {
+ Point3(0, 1, 2), Point3(0, 2, 3), Point3(4, 5, 6),
+ Point3(4, 6, 7), Point3(0, 4, 7), Point3(0, 7, 1),
+ Point3(1, 7, 6), Point3(1, 6, 2), Point3(2, 6, 5),
+ Point3(2, 5, 3), Point3(4, 0, 3), Point3(4, 3, 5)
+ };
+
+ std::vector<Point3> facets(&fv[0], &fv[0]+12);
+ Pointf3s vertices(&pv[0], &pv[0]+8);
+
+ TriangleMesh mesh(vertices ,facets);
+ return mesh;
+}
}
diff --git a/xs/src/libslic3r/TriangleMesh.hpp b/xs/src/libslic3r/TriangleMesh.hpp
index ff332ed66..4c2ad2d5e 100644
--- a/xs/src/libslic3r/TriangleMesh.hpp
+++ b/xs/src/libslic3r/TriangleMesh.hpp
@@ -21,6 +21,7 @@ class TriangleMesh
{
public:
TriangleMesh();
+ TriangleMesh(const Pointf3s &points, const std::vector<Point3> &facets);
TriangleMesh(const TriangleMesh &other);
TriangleMesh& operator= (TriangleMesh other);
void swap(TriangleMesh &other);
@@ -108,6 +109,8 @@ class TriangleMeshSlicer
void make_expolygons(std::vector<IntersectionLine> &lines, ExPolygons* slices) const;
};
+TriangleMesh make_cube(double x, double y, double z);
+
}
#endif
diff --git a/xs/xsp/TriangleMesh.xsp b/xs/xsp/TriangleMesh.xsp
index c7324f98d..24d1b5f88 100644
--- a/xs/xsp/TriangleMesh.xsp
+++ b/xs/xsp/TriangleMesh.xsp
@@ -37,6 +37,8 @@
%code{% RETVAL = THIS->bounding_box().center(); %};
int facets_count();
void reset_repair_stats();
+ Clone<TriangleMesh> cube(double x, double y, double z)
+ %code{% RETVAL = make_cube(x, y, z); %};
%{
void