Manifold 3.0
Robust geometry
Loading...
Searching...
No Matches
Structs

Miscellaneous data structures for interfacing with this library. More...

Classes

struct  PolyVert
 Polygon vertex. More...
struct  Smoothness
 Defines which edges to sharpen and how much for the Manifold.Smooth() constructor. More...
struct  RayHit
 Result of a ray cast query against a Manifold. More...
class  ExecutionContext
 Observe and control a long-running Manifold evaluation. More...
struct  Box
 Axis-aligned 3D box, primarily for bounding. More...
struct  Rect
 Axis-aligned 2D box, primarily for bounding. More...
class  Quality
 These static properties control how circular shapes are quantized by default on construction. More...

Typedefs

using SimplePolygonIdx = std::vector<PolyVert>
 Single polygon contour, wound CCW, with indices. First and last point are implicitly connected. Should ensure all input is ε-valid.
using PolygonsIdx = std::vector<SimplePolygonIdx>
 Set of indexed polygons with holes. Order of contours is arbitrary. Can contain any depth of nested holes and any number of separate polygons. Should ensure all input is ε-valid.
using SimplePolygon = std::vector<vec2>
 Single polygon contour, wound CCW. First and last point are implicitly connected. Should ensure all input is ε-valid.
using Polygons = std::vector<SimplePolygon>
 Set of polygons with holes. Order of contours is arbitrary. Can contain any depth of nested holes and any number of separate polygons. Should ensure all input is ε-valid.

Enumerations

enum class  OpType : char { Add , Subtract , Intersect }
 Boolean operation type: Add (Union), Subtract (Difference), and Intersect.
enum class  JoinType { Square , Round , Miter , Bevel }

Variables

constexpr int DEFAULT_SEGMENTS = 0
constexpr double DEFAULT_ANGLE = 10.0
constexpr double DEFAULT_LENGTH = 1.0

Detailed Description

Miscellaneous data structures for interfacing with this library.


Class Documentation

◆ manifold::PolyVert

struct manifold::PolyVert

Polygon vertex.

Class Members
vec2 pos X-Y position.
int idx ID or index into another vertex vector.

◆ manifold::Smoothness

struct manifold::Smoothness

Defines which edges to sharpen and how much for the Manifold.Smooth() constructor.

Class Members
size_t halfedge The halfedge index = 3 * tri + i, referring to Mesh.triVerts[tri][i].
double smoothness

A value between 0 and 1, where 0 is sharp and 1 is the default and the curvature is interpolated between these values. The two paired halfedges can have different values while maintaining C-1 continuity (except for 0).

◆ manifold::RayHit

struct manifold::RayHit

Result of a ray cast query against a Manifold.

Class Members
uint64_t faceID = 0 The triangle index that was hit.
double distance = 0

The parametric distance along the ray segment in the closed interval [0, 1], where 0 is the origin and 1 is the endpoint. Hits exactly at the origin or endpoint are included.

vec3 position = vec3(0.0) The 3D position of the hit point.
vec3 normal = vec3(0.0) The geometric face normal at the hit.

Enumeration Type Documentation

◆ JoinType

enum class JoinType
strong

Specifies the treatment of path/contour joins (corners) when offseting CrossSections. See the Clipper2 doc for illustrations.

Enumerator
Square 

Squaring is applied uniformly at all joins where the internal join angle is less that 90 degrees. The squared edge will be at exactly the offset distance from the join vertex.

Round 

Rounding is applied to all joins that have convex external angles, and it maintains the exact offset distance from the join vertex.

Miter 

There's a necessary limit to mitered joins (to avoid narrow angled joins producing excessively long and narrow spikes). So where mitered joins would exceed a given maximum miter distance (relative to the offset distance), these are 'squared' instead.

Bevel 

Bevelled joins are similar to 'squared' joins except that squaring won't occur at a fixed distance. While bevelled joins may not be as pretty as squared joins, bevelling is much easier (ie faster) than squaring. And perhaps this is why bevelling rather than squaring is preferred in numerous graphics display formats (including SVG and PDF document formats).