Converted more of TriangleMesh to doxygen comments, added documentation for make_* functions in TriangleMesh.

This commit is contained in:
Joseph Lenox 2017-05-20 21:28:04 -05:00
parent 8379a5c7a6
commit 725f3ed94f
2 changed files with 22 additions and 5 deletions

View File

@ -738,7 +738,7 @@ template <Axis A>
void
TriangleMeshSlicer<A>::slice(const std::vector<float> &z, std::vector<Polygons>* layers) const
{
/*
/**
This method gets called with a list of unscaled Z coordinates and outputs
a vector pointer having the same number of items as the original list.
Each item is a vector of polygons created by slicing our mesh at the
@ -1160,14 +1160,14 @@ template <Axis A>
void
TriangleMeshSlicer<A>::make_expolygons(const Polygons &loops, ExPolygons* slices) const
{
/*
/**
Input loops are not suitable for evenodd nor nonzero fill types, as we might get
two consecutive concentric loops having the same winding order - and we have to
respect such order. In that case, evenodd would create wrong inversions, and nonzero
would ignore holes inside two concentric contours.
So we're ordering loops and collapse consecutive concentric loops having the same
winding order.
TODO: find a faster algorithm for this, maybe with some sort of binary search.
\todo find a faster algorithm for this, maybe with some sort of binary search.
If we computed a "nesting tree" we could also just remove the consecutive loops
having the same winding order, and remove the extra one(s) so that we could just
supply everything to offset() instead of performing several union/diff calls.

View File

@ -60,12 +60,23 @@ class TriangleMesh
void extrude_tin(float offset);
void require_shared_vertices();
void reverse_normals();
/// Generate a mesh representing a cube with dimensions (x, y, z), with one corner at (0,0,0).
static TriangleMesh make_cube(double x, double y, double z);
/// Generate a mesh representing a cylinder of radius r and height h, with the base at (0,0,0).
/// param[in] r Radius
/// param[in] h Height
/// param[in] fa Facet angle. A smaller angle produces more facets. Default value is 2pi / 360.
static TriangleMesh make_cylinder(double r, double h, double fa=(2*PI/360));
/// Generate a mesh representing a sphere of radius rho, centered about (0,0,0).
/// param[in] rho Distance from center to the shell of the sphere.
/// param[in] fa Facet angle. A smaller angle produces more facets. Default value is 2pi / 360.
static TriangleMesh make_sphere(double rho, double fa=(2*PI/360));
stl_file stl;
/// Whether or not this mesh has been repaired.
bool repaired;
private:
@ -98,6 +109,8 @@ class IntersectionLine : public Line
typedef std::vector<IntersectionLine> IntersectionLines;
typedef std::vector<IntersectionLine*> IntersectionLinePtrs;
/// \brief Class for processing TriangleMesh objects.
template <Axis A>
class TriangleMeshSlicer
{
@ -112,7 +125,11 @@ class TriangleMeshSlicer
const float &min_z, const float &max_z, std::vector<IntersectionLine>* lines,
boost::mutex* lines_mutex = NULL) const;
void cut(float z, TriangleMesh* upper, TriangleMesh* lower) const;
/// \brief Splits the current mesh into two parts.
/// \param[in] z Coordinate plane to cut along.
/// \param[out] upper TriangleMesh object to add the mesh > z. NULL suppresses saving this.
/// \param[out] lower TriangleMesh object to save the mesh < z. NULL suppresses saving this.
void cut(float z, TriangleMesh* upper, TriangleMesh* lower) const
private:
typedef std::vector< std::vector<int> > t_facets_edges;