21#include "manifold/common.h"
22#include "manifold/mesh.h"
23#include "manifold/vec_view.h"
87 MeshGL
GetMeshGL(
int normalIdx = -1)
const;
97 "Compose is deprecated, use BatchBoolean with OpType::Add instead.")]]
100 static Manifold Cube(vec3 size = vec3(1.0),
bool center =
false);
102 double radiusHigh = -1.0,
int circularSegments = 0,
103 bool center =
false);
106 double edgeLength,
double level = 0,
107 double tolerance = -1,
bool canParallel =
true);
117 int nDivisions = 0,
double twistDegrees = 0.0,
118 vec2 scaleTop = vec2(1.0));
120 int circularSegments = 0,
121 double revolveDegrees = 360.0f);
129 PropertiesWrongLength,
130 MissingPositionProperties,
131 MergeVectorsDifferentLengths,
132 MergeIndexOutOfBounds,
133 TransformWrongLength,
190 std::vector<RayHit>
RayCast(vec3 origin, vec3 endpoint)
const;
191 std::vector<int>
WindingNumber(
const std::vector<vec3>& points)
const;
210 double zDegrees = 0.0)
const;
235 double originOffset)
const;
247 std::function<
void(
double*, vec3,
const double*)> propFunc)
const;
250 double minSharpAngle = 52.5)
const;
263 double minSmoothness = 0)
const;
265 const std::vector<Smoothness>& sharpenedEdges = {});
267 const std::vector<Smoothness>& sharpenedEdges = {});
274 static Manifold Hull(
const std::vector<Manifold>& manifolds);
313#ifndef MANIFOLD_NO_IOSTREAM
314 static Manifold ReadOBJ(std::istream& stream);
315 bool WriteOBJ(std::ostream& stream)
const;
333 static Manifold FromImpl(std::shared_ptr<Impl> pImpl);
336 Manifold(std::shared_ptr<CsgNode> pNode_);
337 Manifold(std::shared_ptr<Impl> pImpl_);
339 static Manifold PropagateStatus(Error status);
340 mutable std::shared_ptr<std::mutex> pNodeMutex_ =
341 std::make_shared<std::mutex>();
342 mutable std::shared_ptr<CsgNode> pNode_;
358 std::shared_ptr<ExecutionContext::Impl> ctx_;
360 std::shared_ptr<CsgNode> LoadPNode()
const;
361 CsgLeafNode& GetCsgLeafNode(ExecutionContext::Impl* ctx =
nullptr)
const;
374inline std::string ToString(
const Manifold::Error& error) {
376 case Manifold::Error::NoError:
378 case Manifold::Error::NonFiniteVertex:
379 return "Non Finite Vertex";
380 case Manifold::Error::NotManifold:
381 return "Not Manifold";
382 case Manifold::Error::VertexOutOfBounds:
383 return "Vertex Out Of Bounds";
384 case Manifold::Error::PropertiesWrongLength:
385 return "Properties Wrong Length";
386 case Manifold::Error::MissingPositionProperties:
387 return "Missing Position Properties";
388 case Manifold::Error::MergeVectorsDifferentLengths:
389 return "Merge Vectors Different Lengths";
390 case Manifold::Error::MergeIndexOutOfBounds:
391 return "Merge Index Out Of Bounds";
392 case Manifold::Error::TransformWrongLength:
393 return "Transform Wrong Length";
394 case Manifold::Error::RunIndexWrongLength:
395 return "Run Index Wrong Length";
396 case Manifold::Error::FaceIDWrongLength:
397 return "Face ID Wrong Length";
398 case Manifold::Error::InvalidConstruction:
399 return "Invalid Construction";
400 case Manifold::Error::ResultTooLarge:
401 return "Result Too Large";
402 case Manifold::Error::InvalidTangents:
403 return "Invalid Tangents";
404 case Manifold::Error::Cancelled:
407 return "Unknown Error";
411inline std::ostream& operator<<(std::ostream& stream,
412 const Manifold::Error& error) {
413 return stream << ToString(error);
Observe and control a long-running Manifold evaluation.
Definition common.h:244
Manifold WithContext(const ExecutionContext &ctx) const
Definition manifold.cpp:171
static Manifold LevelSet(std::function< double(vec3)> sdf, Box bounds, double edgeLength, double level=0, double tolerance=-1, bool canParallel=true)
Definition sdf.cpp:469
Manifold SmoothOut(double minSharpAngle=52.5, double minSmoothness=0) const
Definition manifold.cpp:766
std::vector< RayHit > RayCast(vec3 origin, vec3 endpoint) const
Definition manifold.cpp:1138
Manifold RefineToLength(double) const
Definition manifold.cpp:814
Manifold CalculateCurvature(int gaussianIdx, int meanIdx) const
Definition manifold.cpp:678
static Manifold BatchBoolean(const std::vector< Manifold > &manifolds, OpType op)
Definition manifold.cpp:895
double MinGap(const Manifold &other, double searchLength) const
Definition manifold.cpp:1122
static uint32_t ReserveIDs(uint32_t)
Definition manifold.cpp:466
size_t NumProp() const
Definition manifold.cpp:329
Polygons Project() const
Definition manifold.cpp:1056
size_t NumPropVert() const
Definition manifold.cpp:337
static Manifold Extrude(const Polygons &crossSection, double height, int nDivisions=0, double twistDegrees=0.0, vec2 scaleTop=vec2(1.0))
Definition constructors.cpp:215
Box BoundingBox() const
Definition manifold.cpp:344
std::pair< Manifold, Manifold > SplitByPlane(vec3 normal, double originOffset) const
Definition manifold.cpp:980
Error Status() const
Definition manifold.cpp:302
Manifold MinkowskiDifference(const Manifold &) const
Definition manifold.cpp:1031
int Genus() const
Definition manifold.cpp:416
Manifold & operator+=(const Manifold &)
Definition manifold.cpp:917
Manifold Warp(std::function< void(vec3 &)>) const
Definition manifold.cpp:577
Manifold Refine(int) const
Definition manifold.cpp:790
MeshGL64 GetMeshGL64(int normalIdx=-1) const
Definition manifold.cpp:286
static Manifold Sphere(double radius, int circularSegments=0)
Definition constructors.cpp:171
std::pair< Manifold, Manifold > Split(const Manifold &) const
Definition manifold.cpp:959
bool MatchesTriNormals() const
Definition manifold.cpp:475
size_t NumEdge() const
Definition manifold.cpp:319
int OriginalID() const
Definition manifold.cpp:440
double Volume() const
Definition manifold.cpp:431
Manifold Transform(const mat3x4 &) const
Definition manifold.cpp:539
MeshGL GetMeshGL(int normalIdx=-1) const
Definition manifold.cpp:261
Manifold RefineToTolerance(double) const
Definition manifold.cpp:843
Manifold WarpBatch(std::function< void(VecView< vec3 >)>) const
Definition manifold.cpp:596
Manifold Translate(vec3) const
Definition manifold.cpp:494
std::vector< Manifold > Decompose() const
Definition constructors.cpp:455
Manifold Rotate(double xDegrees, double yDegrees=0.0, double zDegrees=0.0) const
Definition manifold.cpp:527
Manifold SetTolerance(double) const
Definition manifold.cpp:369
static Manifold Cylinder(double height, double radiusLow, double radiusHigh=-1.0, int circularSegments=0, bool center=false)
Definition constructors.cpp:128
Manifold & operator^=(const Manifold &)
Definition manifold.cpp:947
static Manifold Revolve(const Polygons &crossSection, int circularSegments=0, double revolveDegrees=360.0f)
Definition constructors.cpp:304
bool IsEmpty() const
Definition manifold.cpp:295
static Manifold Compose(const std::vector< Manifold > &)
Definition constructors.cpp:446
Manifold Boolean(const Manifold &second, OpType op) const
Definition manifold.cpp:884
Manifold AsOriginal() const
Definition manifold.cpp:451
Manifold Hull() const
Definition manifold.cpp:1078
Manifold CalculateNormals(int normalIdx=0, double minSharpAngle=52.5) const
Definition manifold.cpp:706
Manifold Scale(vec3) const
Definition manifold.cpp:504
Manifold TrimByPlane(vec3 normal, double originOffset) const
Definition manifold.cpp:1000
size_t NumTri() const
Definition manifold.cpp:325
Manifold SetProperties(int numProp, std::function< void(double *, vec3, const double *)> propFunc) const
Definition manifold.cpp:623
std::vector< int > WindingNumber(const std::vector< vec3 > &points) const
Definition manifold.cpp:1150
double SurfaceArea() const
Definition manifold.cpp:424
size_t NumVert() const
Definition manifold.cpp:313
Polygons Slice(double height=0) const
Definition manifold.cpp:1046
double GetTolerance() const
Definition manifold.cpp:361
Manifold operator^(const Manifold &) const
Definition manifold.cpp:940
double GetEpsilon() const
Definition manifold.cpp:352
static Manifold Cube(vec3 size=vec3(1.0), bool center=false)
Definition constructors.cpp:105
Manifold()
Definition manifold.cpp:123
Manifold Mirror(vec3) const
Definition manifold.cpp:551
Manifold operator-(const Manifold &) const
Definition manifold.cpp:925
Manifold MinkowskiSum(const Manifold &) const
Definition manifold.cpp:1013
Manifold & operator-=(const Manifold &)
Definition manifold.cpp:932
Manifold Simplify(double tolerance=0) const
Definition manifold.cpp:394
Manifold SmoothByNormals(int normalIdx=0) const
Definition manifold.cpp:737
size_t NumDegenerateTris() const
Definition manifold.cpp:484
Manifold operator+(const Manifold &) const
Definition manifold.cpp:910
static Manifold Tetrahedron()
Definition constructors.cpp:93
static Manifold Smooth(const MeshGL &, const std::vector< Smoothness > &sharpenedEdges={})
Definition constructors.cpp:51
ExecutionParams & ManifoldParams()
Definition manifold.cpp:1060
Global parameters that control debugging output. Only has an effect when compiled with the MANIFOLD_D...
Definition common.h:693
OpType
Boolean operation type: Add (Union), Subtract (Difference), and Intersect.
Definition common.h:626
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:155
Axis-aligned 3D box, primarily for bounding.
Definition common.h:298