21#include "manifold/common.h"
22#include "manifold/vec_view.h"
113template <
typename Precision,
typename I = u
int32_t>
225 size_t offset = 3 * t;
236 size_t offset = 4 * h;
237 return la::vec<Precision, 4>(
248 size_t offset = 12 * run;
252 return mat3x4(la::mat<Precision, 3, 4>(&
runTransform[offset]));
276MeshGL64 ReadOBJ(std::istream& stream);
277bool WriteOBJ(std::ostream& stream,
const MeshGL64& mesh);
332 "Compose is deprecated, use BatchBoolean with OpType::Add instead.")]]
335 static Manifold Cube(vec3 size = vec3(1.0),
bool center =
false);
337 double radiusHigh = -1.0,
int circularSegments = 0,
338 bool center =
false);
341 double edgeLength,
double level = 0,
342 double tolerance = -1,
bool canParallel =
true);
352 int nDivisions = 0,
double twistDegrees = 0.0,
353 vec2 scaleTop = vec2(1.0));
355 int circularSegments = 0,
356 double revolveDegrees = 360.0f);
364 PropertiesWrongLength,
365 MissingPositionProperties,
366 MergeVectorsDifferentLengths,
367 MergeIndexOutOfBounds,
368 TransformWrongLength,
400 std::vector<RayHit>
RayCast(vec3 origin, vec3 endpoint)
const;
419 double zDegrees = 0.0)
const;
444 double originOffset)
const;
456 std::function<
void(
double*, vec3,
const double*)> propFunc)
const;
472 const std::vector<Smoothness>& sharpenedEdges = {});
474 const std::vector<Smoothness>& sharpenedEdges = {});
481 static Manifold Hull(
const std::vector<Manifold>& manifolds);
520 static Manifold ReadOBJ(std::istream& stream);
521 bool WriteOBJ(std::ostream& stream)
const;
535 Manifold(std::shared_ptr<CsgNode> pNode_);
536 Manifold(std::shared_ptr<Impl> pImpl_);
538 static Manifold PropagateStatus(Error status);
539 mutable std::shared_ptr<std::mutex> pNodeMutex_ =
540 std::make_shared<std::mutex>();
541 mutable std::shared_ptr<CsgNode> pNode_;
543 std::shared_ptr<CsgNode> LoadPNode()
const;
544 CsgLeafNode& GetCsgLeafNode(ExecutionContext::Impl* ctx =
nullptr)
const;
557inline std::string ToString(
const Manifold::Error& error) {
559 case Manifold::Error::NoError:
561 case Manifold::Error::NonFiniteVertex:
562 return "Non Finite Vertex";
563 case Manifold::Error::NotManifold:
564 return "Not Manifold";
565 case Manifold::Error::VertexOutOfBounds:
566 return "Vertex Out Of Bounds";
567 case Manifold::Error::PropertiesWrongLength:
568 return "Properties Wrong Length";
569 case Manifold::Error::MissingPositionProperties:
570 return "Missing Position Properties";
571 case Manifold::Error::MergeVectorsDifferentLengths:
572 return "Merge Vectors Different Lengths";
573 case Manifold::Error::MergeIndexOutOfBounds:
574 return "Merge Index Out Of Bounds";
575 case Manifold::Error::TransformWrongLength:
576 return "Transform Wrong Length";
577 case Manifold::Error::RunIndexWrongLength:
578 return "Run Index Wrong Length";
579 case Manifold::Error::FaceIDWrongLength:
580 return "Face ID Wrong Length";
581 case Manifold::Error::InvalidConstruction:
582 return "Invalid Construction";
583 case Manifold::Error::ResultTooLarge:
584 return "Result Too Large";
585 case Manifold::Error::InvalidTangents:
586 return "Invalid Tangents";
587 case Manifold::Error::Cancelled:
590 return "Unknown Error";
594inline std::ostream& operator<<(std::ostream& stream,
595 const Manifold::Error& error) {
596 return stream << ToString(error);
Observe and control a long-running Manifold evaluation.
Definition common.h:215
static Manifold LevelSet(std::function< double(vec3)> sdf, Box bounds, double edgeLength, double level=0, double tolerance=-1, bool canParallel=true)
Definition sdf.cpp:468
Manifold SmoothOut(double minSharpAngle=60, double minSmoothness=0) const
Definition manifold.cpp:711
std::vector< RayHit > RayCast(vec3 origin, vec3 endpoint) const
Definition manifold.cpp:1075
Manifold RefineToLength(double) const
Definition manifold.cpp:766
Manifold CalculateCurvature(int gaussianIdx, int meanIdx) const
Definition manifold.cpp:635
static Manifold BatchBoolean(const std::vector< Manifold > &manifolds, OpType op)
Definition manifold.cpp:838
double MinGap(const Manifold &other, double searchLength) const
Definition manifold.cpp:1059
static uint32_t ReserveIDs(uint32_t)
Definition manifold.cpp:436
size_t NumProp() const
Definition manifold.cpp:299
Polygons Project() const
Definition manifold.cpp:997
size_t NumPropVert() const
Definition manifold.cpp:307
static Manifold Extrude(const Polygons &crossSection, double height, int nDivisions=0, double twistDegrees=0.0, vec2 scaleTop=vec2(1.0))
Definition constructors.cpp:247
Box BoundingBox() const
Definition manifold.cpp:314
std::pair< Manifold, Manifold > SplitByPlane(vec3 normal, double originOffset) const
Definition manifold.cpp:923
Error Status() const
Definition manifold.cpp:264
Manifold MinkowskiDifference(const Manifold &) const
Definition manifold.cpp:973
int Genus() const
Definition manifold.cpp:386
Manifold & operator+=(const Manifold &)
Definition manifold.cpp:860
Manifold Warp(std::function< void(vec3 &)>) const
Definition manifold.cpp:542
Manifold Refine(int) const
Definition manifold.cpp:745
MeshGL64 GetMeshGL64(int normalIdx=-1) const
Definition manifold.cpp:249
static Manifold Sphere(double radius, int circularSegments=0)
Definition constructors.cpp:203
std::pair< Manifold, Manifold > Split(const Manifold &) const
Definition manifold.cpp:902
bool MatchesTriNormals() const
Definition manifold.cpp:445
size_t NumEdge() const
Definition manifold.cpp:289
int OriginalID() const
Definition manifold.cpp:410
double Volume() const
Definition manifold.cpp:401
Manifold Transform(const mat3x4 &) const
Definition manifold.cpp:509
MeshGL GetMeshGL(int normalIdx=-1) const
Definition manifold.cpp:228
Manifold RefineToTolerance(double) const
Definition manifold.cpp:790
Manifold WarpBatch(std::function< void(VecView< vec3 >)>) const
Definition manifold.cpp:558
Manifold Translate(vec3) const
Definition manifold.cpp:464
std::vector< Manifold > Decompose() const
Definition constructors.cpp:487
Manifold Rotate(double xDegrees, double yDegrees=0.0, double zDegrees=0.0) const
Definition manifold.cpp:497
Manifold SetTolerance(double) const
Definition manifold.cpp:339
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:890
static Manifold Revolve(const Polygons &crossSection, int circularSegments=0, double revolveDegrees=360.0f)
Definition constructors.cpp:336
bool IsEmpty() const
Definition manifold.cpp:257
static Manifold Compose(const std::vector< Manifold > &)
Definition constructors.cpp:478
Manifold Boolean(const Manifold &second, OpType op) const
Definition manifold.cpp:830
Manifold AsOriginal() const
Definition manifold.cpp:421
Manifold Hull() const
Definition manifold.cpp:1019
Manifold SmoothByNormals(int normalIdx) const
Definition manifold.cpp:682
Manifold Scale(vec3) const
Definition manifold.cpp:474
Manifold TrimByPlane(vec3 normal, double originOffset) const
Definition manifold.cpp:943
size_t NumTri() const
Definition manifold.cpp:295
Manifold SetProperties(int numProp, std::function< void(double *, vec3, const double *)> propFunc) const
Definition manifold.cpp:580
Manifold CalculateNormals(int normalIdx, double minSharpAngle=60) const
Definition manifold.cpp:659
double SurfaceArea() const
Definition manifold.cpp:394
size_t NumVert() const
Definition manifold.cpp:283
Polygons Slice(double height=0) const
Definition manifold.cpp:987
double GetTolerance() const
Definition manifold.cpp:331
Manifold operator^(const Manifold &) const
Definition manifold.cpp:883
double GetEpsilon() const
Definition manifold.cpp:322
static Manifold Cube(vec3 size=vec3(1.0), bool center=false)
Definition constructors.cpp:137
Manifold()
Definition manifold.cpp:121
Manifold Mirror(vec3) const
Definition manifold.cpp:521
Manifold operator-(const Manifold &) const
Definition manifold.cpp:868
Manifold MinkowskiSum(const Manifold &) const
Definition manifold.cpp:956
Manifold & operator-=(const Manifold &)
Definition manifold.cpp:875
Manifold Simplify(double tolerance=0) const
Definition manifold.cpp:364
size_t NumDegenerateTris() const
Definition manifold.cpp:454
Manifold operator+(const Manifold &) const
Definition manifold.cpp:853
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:274
MeshGLP< float > MeshGL
Single-precision - ideal for most uses, especially graphics.
Definition manifold.h:270
ExecutionParams & ManifoldParams()
Definition manifold.cpp:1001
Global parameters that control debugging output. Only has an effect when compiled with the MANIFOLD_D...
Definition common.h:603
OpType
Boolean operation type: Add (Union), Subtract (Difference), and Intersect.
Definition common.h:569
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:144
Axis-aligned 3D box, primarily for bounding.
Definition common.h:241
Mesh input/output suitable for pushing directly into graphics libraries.
Definition manifold.h:114
la::vec< I, 3 > GetTriVerts(size_t t) const
Definition manifold.h:224
bool Backside(size_t run) const
Definition manifold.h:262
std::vector< uint32_t > mergeFromVert
Definition manifold.h:132
I NumRun() const
Number of triangle runs.
Definition manifold.h:120
void UpdateNormals(int normalIdx)
std::vector< uint32_t > runIndex
Definition manifold.h:144
std::vector< float > vertProperties
Definition manifold.h:126
std::vector< float > runTransform
Definition manifold.h:155
std::vector< uint8_t > runFlags
Definition manifold.h:159
std::vector< uint32_t > mergeToVert
Definition manifold.h:136
I NumTri() const
Number of triangles.
Definition manifold.h:118
mat3x4 GetRunTransform(size_t run) const
Definition manifold.h:247
std::vector< float > halfedgeTangent
Definition manifold.h:170
std::vector< uint32_t > runOriginalID
Definition manifold.h:150
std::vector< uint32_t > triVerts
Definition manifold.h:129
la::vec< Precision, 4 > GetTangent(size_t h) const
Definition manifold.h:235
float tolerance
Definition manifold.h:175
I NumVert() const
Number of property vertices.
Definition manifold.h:116
std::vector< uint32_t > faceID
Definition manifold.h:165
la::vec< Precision, 3 > GetVertPos(size_t v) const
Definition manifold.h:212
uint32_t numProp
Definition manifold.h:122