Added new constructor to TriangleMesh that accepts vectors of Points and make_cube function to make a new simple cube mesh.
This commit is contained in:
parent
ff33fbbb9a
commit
3bb237deee
@ -25,6 +25,48 @@ TriangleMesh::TriangleMesh()
|
|||||||
stl_initialize(&this->stl);
|
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)
|
TriangleMesh::TriangleMesh(const TriangleMesh &other)
|
||||||
: stl(other.stl), repaired(other.repaired)
|
: stl(other.stl), repaired(other.repaired)
|
||||||
{
|
{
|
||||||
@ -1099,4 +1141,23 @@ TriangleMeshSlicer::~TriangleMeshSlicer()
|
|||||||
if (this->v_scaled_shared != NULL) free(this->v_scaled_shared);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ class TriangleMesh
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriangleMesh();
|
TriangleMesh();
|
||||||
|
TriangleMesh(const Pointf3s &points, const std::vector<Point3> &facets);
|
||||||
TriangleMesh(const TriangleMesh &other);
|
TriangleMesh(const TriangleMesh &other);
|
||||||
TriangleMesh& operator= (TriangleMesh other);
|
TriangleMesh& operator= (TriangleMesh other);
|
||||||
void swap(TriangleMesh &other);
|
void swap(TriangleMesh &other);
|
||||||
@ -108,6 +109,8 @@ class TriangleMeshSlicer
|
|||||||
void make_expolygons(std::vector<IntersectionLine> &lines, ExPolygons* slices) const;
|
void make_expolygons(std::vector<IntersectionLine> &lines, ExPolygons* slices) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TriangleMesh make_cube(double x, double y, double z);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,6 +37,8 @@
|
|||||||
%code{% RETVAL = THIS->bounding_box().center(); %};
|
%code{% RETVAL = THIS->bounding_box().center(); %};
|
||||||
int facets_count();
|
int facets_count();
|
||||||
void reset_repair_stats();
|
void reset_repair_stats();
|
||||||
|
Clone<TriangleMesh> cube(double x, double y, double z)
|
||||||
|
%code{% RETVAL = make_cube(x, y, z); %};
|
||||||
%{
|
%{
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user