mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-01 05:02:01 +08:00
Added move constructor and move-assignment operator for TriangleMesh, factored out
the copy construtor and copy-assignment to a private clone() method. copy-and-swap had a conflict in the selection of signatures in some existing methods.
This commit is contained in:
parent
238e32666a
commit
8255dc321b
@ -73,6 +73,20 @@ TriangleMesh::TriangleMesh(const Pointf3* points, const Point3* facets, size_t n
|
|||||||
TriangleMesh::TriangleMesh(const TriangleMesh &other)
|
TriangleMesh::TriangleMesh(const TriangleMesh &other)
|
||||||
: stl(other.stl), repaired(other.repaired)
|
: stl(other.stl), repaired(other.repaired)
|
||||||
{
|
{
|
||||||
|
this->clone(other);
|
||||||
|
}
|
||||||
|
|
||||||
|
TriangleMesh& TriangleMesh::operator= (const TriangleMesh& other)
|
||||||
|
{
|
||||||
|
this->stl = other.stl;
|
||||||
|
this->repaired = other.repaired;
|
||||||
|
this->clone(other);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TriangleMesh::clone(const TriangleMesh& other) {
|
||||||
this->stl.heads = NULL;
|
this->stl.heads = NULL;
|
||||||
this->stl.tail = NULL;
|
this->stl.tail = NULL;
|
||||||
this->stl.error = other.stl.error;
|
this->stl.error = other.stl.error;
|
||||||
@ -93,9 +107,17 @@ TriangleMesh::TriangleMesh(const TriangleMesh &other)
|
|||||||
std::copy(other.stl.v_shared, other.stl.v_shared + other.stl.stats.shared_vertices, this->stl.v_shared);
|
std::copy(other.stl.v_shared, other.stl.v_shared + other.stl.stats.shared_vertices, this->stl.v_shared);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TriangleMesh& TriangleMesh::operator= (TriangleMesh other)
|
|
||||||
|
TriangleMesh::TriangleMesh(TriangleMesh&& other) {
|
||||||
|
this->repaired = std::move(other.repaired);
|
||||||
|
this->stl = std::move(other.stl);
|
||||||
|
}
|
||||||
|
|
||||||
|
TriangleMesh& TriangleMesh::operator= (TriangleMesh&& other)
|
||||||
{
|
{
|
||||||
this->swap(other);
|
this->repaired = std::move(other.repaired);
|
||||||
|
this->stl = std::move(other.stl);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -736,7 +758,7 @@ TriangleMesh::make_cube(double x, double y, double z) {
|
|||||||
|
|
||||||
TriangleMesh mesh(vertices ,facets);
|
TriangleMesh mesh(vertices ,facets);
|
||||||
mesh.repair();
|
mesh.repair();
|
||||||
return std::move(mesh);
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate the mesh for a cylinder and return it, using
|
// Generate the mesh for a cylinder and return it, using
|
||||||
@ -782,7 +804,7 @@ TriangleMesh::make_cylinder(double r, double h, double fa) {
|
|||||||
|
|
||||||
TriangleMesh mesh(vertices, facets);
|
TriangleMesh mesh(vertices, facets);
|
||||||
mesh.repair();
|
mesh.repair();
|
||||||
return std::move(mesh);
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generates mesh for a sphere centered about the origin, using the generated angle
|
// Generates mesh for a sphere centered about the origin, using the generated angle
|
||||||
@ -864,7 +886,7 @@ TriangleMesh::make_sphere(double rho, double fa) {
|
|||||||
id++;
|
id++;
|
||||||
TriangleMesh mesh(vertices, facets);
|
TriangleMesh mesh(vertices, facets);
|
||||||
mesh.repair();
|
mesh.repair();
|
||||||
return std::move(mesh);
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <Axis A>
|
template <Axis A>
|
||||||
|
@ -44,7 +44,13 @@ class TriangleMesh
|
|||||||
TriangleMesh(const Vertex_Cont& vertices, const Facet_Cont& facets) : TriangleMesh(vertices.data(), facets.data(), facets.size()) {}
|
TriangleMesh(const Vertex_Cont& vertices, const Facet_Cont& facets) : TriangleMesh(vertices.data(), facets.data(), facets.size()) {}
|
||||||
|
|
||||||
TriangleMesh(const TriangleMesh &other);
|
TriangleMesh(const TriangleMesh &other);
|
||||||
TriangleMesh& operator= (TriangleMesh other);
|
/// copy assignment
|
||||||
|
TriangleMesh& operator= (const TriangleMesh& other);
|
||||||
|
|
||||||
|
/// Move assignment
|
||||||
|
TriangleMesh& operator= (TriangleMesh&& other);
|
||||||
|
TriangleMesh(TriangleMesh&& other);
|
||||||
|
|
||||||
void swap(TriangleMesh &other);
|
void swap(TriangleMesh &other);
|
||||||
~TriangleMesh();
|
~TriangleMesh();
|
||||||
void ReadSTLFile(const std::string &input_file);
|
void ReadSTLFile(const std::string &input_file);
|
||||||
@ -149,6 +155,9 @@ class TriangleMesh
|
|||||||
/// Other constructors can call this one!
|
/// Other constructors can call this one!
|
||||||
TriangleMesh(const Pointf3* points, const Point3* facets, size_t n_facets);
|
TriangleMesh(const Pointf3* points, const Point3* facets, size_t n_facets);
|
||||||
|
|
||||||
|
/// Perform the mechanics of a stl copy
|
||||||
|
void clone(const TriangleMesh& other);
|
||||||
|
|
||||||
friend class TriangleMeshSlicer<X>;
|
friend class TriangleMeshSlicer<X>;
|
||||||
friend class TriangleMeshSlicer<Y>;
|
friend class TriangleMeshSlicer<Y>;
|
||||||
friend class TriangleMeshSlicer<Z>;
|
friend class TriangleMeshSlicer<Z>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user