6#ifndef ACTIVE_GEOMETRY_POLYGON
7#define ACTIVE_GEOMETRY_POLYGON
9#include "Active/Container/List.h"
10#include "Active/Container/Vector.h"
11#include "Active/Geometry/Box.h"
12#include "Active/Geometry/PolyPoint.h"
13#include "Active/Geometry/Rotation.h"
14#include "Active/Geometry/XPoint.h"
15#include "Active/Utility/Cloner.h"
65 using Unique = std::unique_ptr<Polygon>;
67 using Shared = std::shared_ptr<Polygon>;
69 using Option = std::optional<Polygon>;
102 Polygon(
const Box& source,
double angle = 0.0);
248 virtual bool isValid(
bool doIntersect =
false,
double prec =
math::eps)
const;
328 double getArea(
bool isNet =
true,
bool isResultSigned =
false)
const;
514 void setTopID(vertex_id topId) { m_topID = topId; }
520 void clear(
bool allVertices =
true,
bool allHoles =
true);
549 void setHoles(std::unique_ptr<PolyVector>&& holes =
nullptr);
618 void renumber(
bool restart =
false);
636 std::unique_ptr<PolyVector> m_hole;
638 vertex_id m_topID = 0;
653 using Unique = std::unique_ptr<PolyVector>;
655 using Shared = std::shared_ptr<PolyVector>;
657 using Option = std::optional<PolyVector>;
typename base::size_type size_type
Container size (index) type.
Definition Vector.h:36
typename base::iterator iterator
Container iterator type.
Definition Vector.h:38
typename base::const_iterator const_iterator
Container const iterator type.
Definition Vector.h:40
Class to represent an arc.
Definition Arc.h:25
std::optional< Box > Option
Optional.
Definition Box.h:31
Class to represent a linear equation.
Definition LinEquation.h:19
Class to represent a line.
Definition Line.h:21
A 3x3 matrix class.
Definition Matrix3x3.h:16
A 4x4 matrix class.
Definition Matrix4x4.h:14
Class to represent a plane.
Definition Plane.h:21
std::optional< Point > Option
Optional.
Definition Point.h:48
Definition PolyPoint.h:24
A vector of polygons.
Definition Polygon.h:643
const_iterator findLargest() const
Definition Polygon.cpp:2405
PolyVector(const PolyVector &source)
Definition Polygon.h:670
std::optional< PolyVector > Option
Optional.
Definition Polygon.h:657
typename base::size_type size_type
Size type for indexing etc.
Definition Polygon.h:651
virtual ~PolyVector()=default
PolyVector(size_type toReserve=0)
Definition Polygon.h:665
std::shared_ptr< PolyVector > Shared
Shared pointer.
Definition Polygon.h:655
std::unique_ptr< PolyVector > Unique
Unique pointer.
Definition Polygon.h:653
std::optional< Index > findVertexByLocation(const Point &pt, double prec=math::eps) const
Definition Polygon.cpp:1048
vertex_id getTopID() const
Definition Polygon.h:283
virtual Polygon & operator=(const Polygon &source)
Definition Polygon.cpp:652
const Polygon & getShape(part_index index) const
Definition Polygon.cpp:1067
void setHoles(PolyVector &&hole)
virtual bool isValid(bool doIntersect=false, double prec=math::eps) const
Definition Polygon.cpp:911
Polygon(vertex_index size=defSize, part_index holeSize=0, bool isClosed=true)
Definition Polygon.cpp:570
Box::Option bounds() const
Definition Polygon.cpp:1117
void setBaseLevel(double z=0)
Definition Polygon.cpp:2375
static const vertex_index defSize
The default number of vertices in a new polygon.
Definition Polygon.h:72
vertex_index intersectionWith(const Line &ref, XList &inter, double prec=math::eps) const
Definition Polygon.cpp:1513
double getArea(bool isNet=true, bool isResultSigned=false) const
Definition Polygon.cpp:1216
Polygon operator*(const double &mult) const
Definition Polygon.cpp:753
virtual bool insertUniqueVertex(PolyPoint &&pt, vertOption where=std::nullopt)
Definition Polygon.cpp:2204
virtual ~Polygon()=default
bool isEqual3D(const Polygon &ref, double prec=math::eps) const
Definition Polygon.cpp:964
void removeHole(part_index which)
Definition Polygon.cpp:2094
XPoint closestPointAlong3D(const Point &ref, bool withHoles, double prec=math::eps) const
Definition Polygon.cpp:1469
std::unique_ptr< Polygon > Unique
Unique pointer.
Definition Polygon.h:65
XPoint closestPointAlong2D(const Point &ref, bool withHoles, double prec=math::eps) const
Definition Polygon.cpp:1428
double getPerimeter2D() const
Definition Polygon.cpp:1152
vertex_index wrapIndex(vertex_index index) const
Definition Polygon.cpp:1246
bool isTangentialAt(vertex_index vertex, double anglePrec=math::epsAngle) const
Definition Polygon.cpp:1280
void renumber(bool restart=false)
Definition Polygon.cpp:2334
Polygon & operator*=(const double &mult)
Definition Polygon.cpp:765
vertex_index edgeSize() const
Definition Polygon.h:273
Polygon operator-(const Point &offset) const
Definition Polygon.cpp:724
std::shared_ptr< Polygon > Shared
Shared pointer.
Definition Polygon.h:67
void facet()
Definition Polygon.cpp:2355
base::iterator iteratorAt(vertex_index index)
Definition Polygon.cpp:1091
Polygon operator/(const double &mult) const
Definition Polygon.cpp:856
Polygon & operator+=(const Point &offset)
Definition Polygon.cpp:707
double getInternalAngleAt(vertex_index index) const
Definition Polygon.cpp:1262
virtual void reverse()
Definition Polygon.cpp:2236
void alignTo(const Plane &plane)
Definition Polygon.cpp:2390
virtual Polygon * movePtr()
Definition Polygon.h:127
Polygon operator+(const Point &offset) const
Definition Polygon.cpp:695
bool removeDuplicates3D(double prec=math::eps)
Definition Polygon.cpp:2285
double getPerimeter3D() const
Definition Polygon.cpp:1165
bool overlaps(const Polygon &ref, double prec=math::eps) const
Definition Polygon.cpp:1965
void splitWith(const LinEquation &ref, PolyVector *polyRight=nullptr, PolyVector *polyLeft=nullptr, double prec=math::eps) const
Definition Polygon.cpp:1621
std::unique_ptr< PolyVector > releaseHoles()
Definition Polygon.cpp:2136
vertex_index tracePerimeter(double len, PolyPoint &endPos) const
Definition Polygon.cpp:1181
Polygon(const std::initializer_list< PolyPoint > &points, bool isClosed=true)
Definition Polygon.h:96
void setHoles(std::unique_ptr< PolyVector > &&holes=nullptr)
std::optional< Rotation > getDirection() const
Definition Polygon.cpp:1140
Polygon & operator-=(const Point &offset)
Definition Polygon.cpp:736
bool isEqual2D(const Polygon &ref, double prec=math::eps) const
Definition Polygon.cpp:940
PolyPoint * operator[](vertex_index index)
Definition Polygon.cpp:885
Polygon * emplaceHole(Polygon::Unique &&hole)
Definition Polygon.cpp:2067
bool isHole
True if the polygon is a hole.
Definition Polygon.h:137
bool isClosed
True if the polygon is closed, i.e. an edge is assumed from the last vertex to the first.
Definition Polygon.h:139
void optimise(bool doColin=false, double prec=math::eps)
Definition Polygon.cpp:2311
void clear(bool allVertices=true, bool allHoles=true)
Definition Polygon.cpp:2026
bool removeDuplicates2D(double prec=math::eps)
Definition Polygon.cpp:2258
bool encloses(const Point &ref, double prec=math::eps) const
Definition Polygon.cpp:1887
virtual Polygon::Unique cloneGeometry() const
Definition Polygon.cpp:633
virtual void setDirection(Rotation direct=clockwise, bool withHoles=true, bool invertHoleDir=false)
Definition Polygon.cpp:2222
vertex_id addNodeAlong(vertex_id ID, const Point &pos, double prec=math::eps)
Definition Polygon.cpp:2150
void setTopID(vertex_id topId)
Definition Polygon.h:514
bool crosses(const Line &ref, double prec=math::eps) const
Definition Polygon.cpp:1860
Polygon & operator/=(const double &mult)
Definition Polygon.cpp:868
Polygon * getHole(part_index which) const
Definition Polygon.cpp:1014
vertex_index vertSize(bool isOuter=true) const
Definition Polygon.cpp:987
part_index getHoleSize() const
Definition Polygon.cpp:1002
std::optional< Polygon > Option
Optional.
Definition Polygon.h:69
Point::Option getInternalPoint() const
Definition Polygon.cpp:1324
PolyVector * getHoles() const
Definition Polygon.h:294
part_index resolveSelfIntersect(PolyVector &resolved, double prec=math::eps) const
Definition Polygon.cpp:1795
Polygon::Unique releaseHole(part_index which)
Definition Polygon.cpp:2110
Position positionOf(const Point &ref, double prec=math::eps) const
Definition Polygon.cpp:1356
Polygon * insertHole(const Polygon &hole)
Definition Polygon.cpp:2043
virtual Polygon * clonePtr() const
Definition Polygon.h:122
bool isReflection(vertex_index index, const LinEquation &ref, double prec=math::eps) const
Definition Polygon.cpp:1296
vertex_id allocateID()
Definition Polygon.h:509
std::optional< Index > findVertexById(vertex_id ID) const
Definition Polygon.cpp:1028
std::optional< vertex_index > vertOption
Optional vertex index (for an undefined or missing vertex index)
Definition Point.h:24
int32_t vertex_index
Index of a vertex, e.g. within a polygon.
Definition Point.h:22
Position
Relative spatial position.
Definition Position.h:12
int32_t part_index
Index of a part, e.g. a hole within a polygon.
Definition Point.h:26
Rotation
Arc direction of travel.
Definition Rotation.h:12
@ clockwise
Clockwise direction.
constexpr double eps
Default length precision (0.01mm)
Definition MathFunctions.h:22
constexpr double epsAngle
Default angle precision (0.1 degrees)
Definition MathFunctions.h:24