20#include "manifold/common.h"
21#include "manifold/vec_view.h"
112template <
typename Precision,
typename I = u
int32_t>
206 size_t offset = 3 * t;
217 size_t offset = 4 * h;
218 return la::vec<Precision, 4>(
233MeshGL64 ReadOBJ(std::istream& stream);
234bool WriteOBJ(std::ostream& stream,
const MeshGL64& mesh);
289 "Compose is deprecated, use BatchBoolean with OpType::Add instead.")]]
292 static Manifold Cube(vec3 size = vec3(1.0),
bool center =
false);
294 double radiusHigh = -1.0,
int circularSegments = 0,
295 bool center =
false);
298 double edgeLength,
double level = 0,
299 double tolerance = -1,
bool canParallel =
true);
309 int nDivisions = 0,
double twistDegrees = 0.0,
310 vec2 scaleTop = vec2(1.0));
312 int circularSegments = 0,
313 double revolveDegrees = 360.0f);
321 PropertiesWrongLength,
322 MissingPositionProperties,
323 MergeVectorsDifferentLengths,
324 MergeIndexOutOfBounds,
325 TransformWrongLength,
372 double zDegrees = 0.0)
const;
397 double originOffset)
const;
409 std::function<
void(
double*, vec3,
const double*)> propFunc)
const;
425 const std::vector<Smoothness>& sharpenedEdges = {});
427 const std::vector<Smoothness>& sharpenedEdges = {});
434 static Manifold Hull(
const std::vector<Manifold>& manifolds);
473 static Manifold ReadOBJ(std::istream& stream);
474 bool WriteOBJ(std::ostream& stream)
const;
488 Manifold(std::shared_ptr<CsgNode> pNode_);
489 Manifold(std::shared_ptr<Impl> pImpl_);
491 mutable std::shared_ptr<CsgNode> pNode_;
493 CsgLeafNode& GetCsgLeafNode()
const;
506inline std::string ToString(
const Manifold::Error& error) {
508 case Manifold::Error::NoError:
510 case Manifold::Error::NonFiniteVertex:
511 return "Non Finite Vertex";
512 case Manifold::Error::NotManifold:
513 return "Not Manifold";
514 case Manifold::Error::VertexOutOfBounds:
515 return "Vertex Out Of Bounds";
516 case Manifold::Error::PropertiesWrongLength:
517 return "Properties Wrong Length";
518 case Manifold::Error::MissingPositionProperties:
519 return "Missing Position Properties";
520 case Manifold::Error::MergeVectorsDifferentLengths:
521 return "Merge Vectors Different Lengths";
522 case Manifold::Error::MergeIndexOutOfBounds:
523 return "Merge Index Out Of Bounds";
524 case Manifold::Error::TransformWrongLength:
525 return "Transform Wrong Length";
526 case Manifold::Error::RunIndexWrongLength:
527 return "Run Index Wrong Length";
528 case Manifold::Error::FaceIDWrongLength:
529 return "Face ID Wrong Length";
530 case Manifold::Error::InvalidConstruction:
531 return "Invalid Construction";
532 case Manifold::Error::ResultTooLarge:
533 return "Result Too Large";
535 return "Unknown Error";
539inline std::ostream& operator<<(std::ostream& stream,
540 const Manifold::Error& error) {
541 return stream << ToString(error);
static Manifold LevelSet(std::function< double(vec3)> sdf, Box bounds, double edgeLength, double level=0, double tolerance=-1, bool canParallel=true)
Definition sdf.cpp:456
Manifold SmoothOut(double minSharpAngle=60, double minSmoothness=0) const
Definition manifold.cpp:649
Manifold RefineToLength(double) const
Definition manifold.cpp:698
Manifold CalculateCurvature(int gaussianIdx, int meanIdx) const
Definition manifold.cpp:585
static Manifold BatchBoolean(const std::vector< Manifold > &manifolds, OpType op)
Definition manifold.cpp:764
double MinGap(const Manifold &other, double searchLength) const
Definition manifold.cpp:968
static uint32_t ReserveIDs(uint32_t)
Definition manifold.cpp:388
size_t NumProp() const
Definition manifold.cpp:254
Polygons Project() const
Definition manifold.cpp:913
size_t NumPropVert() const
Definition manifold.cpp:262
static Manifold Extrude(const Polygons &crossSection, double height, int nDivisions=0, double twistDegrees=0.0, vec2 scaleTop=vec2(1.0))
Definition constructors.cpp:245
Box BoundingBox() const
Definition manifold.cpp:269
std::pair< Manifold, Manifold > SplitByPlane(vec3 normal, double originOffset) const
Definition manifold.cpp:849
Error Status() const
Definition manifold.cpp:232
Manifold MinkowskiDifference(const Manifold &) const
Definition manifold.cpp:891
int Genus() const
Definition manifold.cpp:335
Manifold & operator+=(const Manifold &)
Definition manifold.cpp:786
Manifold Warp(std::function< void(vec3 &)>) const
Definition manifold.cpp:489
Manifold Refine(int) const
Definition manifold.cpp:680
MeshGL64 GetMeshGL64(int normalIdx=-1) const
Definition manifold.cpp:217
static Manifold Sphere(double radius, int circularSegments=0)
Definition constructors.cpp:203
std::pair< Manifold, Manifold > Split(const Manifold &) const
Definition manifold.cpp:828
bool MatchesTriNormals() const
Definition manifold.cpp:397
size_t NumEdge() const
Definition manifold.cpp:244
int OriginalID() const
Definition manifold.cpp:359
double Volume() const
Definition manifold.cpp:350
Manifold Transform(const mat3x4 &) const
Definition manifold.cpp:459
MeshGL GetMeshGL(int normalIdx=-1) const
Definition manifold.cpp:198
Manifold RefineToTolerance(double) const
Definition manifold.cpp:719
Manifold WarpBatch(std::function< void(VecView< vec3 >)>) const
Definition manifold.cpp:508
Manifold Translate(vec3) const
Definition manifold.cpp:416
std::vector< Manifold > Decompose() const
Definition constructors.cpp:485
Manifold Rotate(double xDegrees, double yDegrees=0.0, double zDegrees=0.0) const
Definition manifold.cpp:447
Manifold SetTolerance(double) const
Definition manifold.cpp:294
static Manifold Cylinder(double height, double radiusLow, double radiusHigh=-1.0, int circularSegments=0, bool center=false)
Definition constructors.cpp:160
Manifold & operator^=(const Manifold &)
Definition manifold.cpp:816
static Manifold Revolve(const Polygons &crossSection, int circularSegments=0, double revolveDegrees=360.0f)
Definition constructors.cpp:334
bool IsEmpty() const
Definition manifold.cpp:225
static Manifold Compose(const std::vector< Manifold > &)
Definition constructors.cpp:476
Manifold Boolean(const Manifold &second, OpType op) const
Definition manifold.cpp:756
Manifold AsOriginal() const
Definition manifold.cpp:370
Manifold Hull() const
Definition manifold.cpp:935
Manifold SmoothByNormals(int normalIdx) const
Definition manifold.cpp:623
Manifold Scale(vec3) const
Definition manifold.cpp:426
Manifold TrimByPlane(vec3 normal, double originOffset) const
Definition manifold.cpp:863
size_t NumTri() const
Definition manifold.cpp:250
Manifold SetProperties(int numProp, std::function< void(double *, vec3, const double *)> propFunc) const
Definition manifold.cpp:533
Manifold CalculateNormals(int normalIdx, double minSharpAngle=60) const
Definition manifold.cpp:606
double SurfaceArea() const
Definition manifold.cpp:343
size_t NumVert() const
Definition manifold.cpp:238
Polygons Slice(double height=0) const
Definition manifold.cpp:903
double GetTolerance() const
Definition manifold.cpp:286
Manifold operator^(const Manifold &) const
Definition manifold.cpp:809
double GetEpsilon() const
Definition manifold.cpp:277
static Manifold Cube(vec3 size=vec3(1.0), bool center=false)
Definition constructors.cpp:137
Manifold()
Definition manifold.cpp:120
Manifold Mirror(vec3) const
Definition manifold.cpp:471
Manifold operator-(const Manifold &) const
Definition manifold.cpp:794
Manifold MinkowskiSum(const Manifold &) const
Definition manifold.cpp:876
Manifold & operator-=(const Manifold &)
Definition manifold.cpp:801
Manifold Simplify(double tolerance=0) const
Definition manifold.cpp:316
size_t NumDegenerateTris() const
Definition manifold.cpp:406
Manifold operator+(const Manifold &) const
Definition manifold.cpp:779
static Manifold Tetrahedron()
Definition constructors.cpp:125
static Manifold Smooth(const MeshGL &, const std::vector< Smoothness > &sharpenedEdges={})
Definition constructors.cpp:83
MeshGLP< double, uint64_t > MeshGL64
Double-precision, 64-bit indices - best for huge meshes.
Definition manifold.h:231
MeshGLP< float > MeshGL
Single-precision - ideal for most uses, especially graphics.
Definition manifold.h:227
ExecutionParams & ManifoldParams()
Definition manifold.cpp:917
Global parameters that control debugging output. Only has an effect when compiled with the MANIFOLD_D...
Definition common.h:508
OpType
Boolean operation type: Add (Union), Subtract (Difference), and Intersect.
Definition common.h:473
std::vector< SimplePolygon > Polygons
Set of polygons with holes. Order of contours is arbitrary. Can contain any depth of nested holes and...
Definition common.h:139
Axis-aligned 3D box, primarily for bounding.
Definition common.h:157
Mesh input/output suitable for pushing directly into graphics libraries.
Definition manifold.h:113
la::vec< I, 3 > GetTriVerts(size_t t) const
Definition manifold.h:205
std::vector< uint32_t > mergeFromVert
Definition manifold.h:129
std::vector< uint32_t > runIndex
Definition manifold.h:141
std::vector< float > vertProperties
Definition manifold.h:123
std::vector< float > runTransform
Definition manifold.h:152
std::vector< uint32_t > mergeToVert
Definition manifold.h:133
I NumTri() const
Number of triangles.
Definition manifold.h:117
std::vector< float > halfedgeTangent
Definition manifold.h:163
std::vector< uint32_t > runOriginalID
Definition manifold.h:147
std::vector< uint32_t > triVerts
Definition manifold.h:126
la::vec< Precision, 4 > GetTangent(size_t h) const
Definition manifold.h:216
float tolerance
Definition manifold.h:168
I NumVert() const
Number of property vertices.
Definition manifold.h:115
std::vector< uint32_t > faceID
Definition manifold.h:158
la::vec< Precision, 3 > GetVertPos(size_t v) const
Definition manifold.h:193
uint32_t numProp
Definition manifold.h:119