#include <PolygonShape_fwd.hpp>
Shape representing a simple (i.e. non self intersecting) nonempty polygon in 2D, which is given as a sequence of points.
vec_t | This shape class is used only for 2D domains. |
Usage example:
Definition at line 27 of file PolygonShape_fwd.hpp.
Public Member Functions | |
PolygonShape (const std::vector< vec_t > &points) | |
Create polygon given a sequence of points. More... | |
const std::vector< vec_t > & | points () const |
Get points representing the polygon. More... | |
void | setMargin (scalar_t margin) override |
Computes the polygon extended by margin as well. More... | |
bool | contains (const vec_t &point) const override |
Winding number test for point in a polygon inclusion (paying respect to margin). More... | |
std::pair< vec_t, vec_t > | bbox () const override |
Return the bounding box of the domain. More... | |
DomainDiscretization< vec_t > | discretizeBoundaryWithStep (scalar_t step, int type) const override |
Returns a discretization of the boundary of this shape with approximately uniform distance step between nodes. More... | |
DomainDiscretization< vec_t > | discretizeBoundaryWithDensity (const std::function< scalar_t(vec_t)> &dr, int type) const override |
Returns a discretization of the boundary of this shape with approximately uniform distance step between nodes. More... | |
PolygonShape< vec_t > * | clone () const override |
Polymorphic clone pattern. More... | |
std::ostream & | print (std::ostream &os) const override |
Output information about this shape to given output stream os . More... | |
virtual DomainDiscretization< vec_t > | discretizeBoundaryWithDensity (const std::function< scalar_t(vec_t)> &dr, int type) const=0 |
Discretizes boundary with given density and fill engine. More... | |
DomainDiscretization< vec_t > | discretizeBoundaryWithDensity (const std::function< scalar_t(vec_t)> &dr) const |
Overload with default type. More... | |
virtual DomainDiscretization< vec_t > | discretizeBoundaryWithStep (scalar_t step, int type) const |
Returns a discretization of the boundary of this shape with approximately uniform distance step between nodes. More... | |
DomainDiscretization< vec_t > | discretizeBoundaryWithStep (scalar_t step) const |
Returns a discretization of the boundary of this shape with approximately uniform distance step between nodes. More... | |
scalar_t | margin () const |
Returns current margin. More... | |
void | toggleMargin () |
Toggles the margin from positive to negative. More... | |
ShapeUnion< vec_t > | add (const DomainShape &other) const |
Returns a shape representing a union of *this and other . More... | |
ShapeUnion< vec_t > | operator+ (const DomainShape &other) const |
Operator form of DomainShape::add. More... | |
ShapeDifference< vec_t > | subtract (const DomainShape &other) const |
Returns a shape representing a difference of *this and other . More... | |
ShapeDifference< vec_t > | operator- (const DomainShape &other) const |
Operator form of DomainShape::subtract. More... | |
virtual std::pair< bool, vec_t > | projectPointToBoundary (const vec_t &point, const vec_t &unit_normal) const |
Project point to boundary using bisection along the line define by unit_normal . More... | |
virtual bool | hasContains () const |
Return true if shape has contains() method implemented. More... | |
DomainDiscretization< vec_t > | discretizeBoundaryWithStep (scalar_t step) const |
Returns a discretization of the boundary of this shape with approximately uniform distance step between nodes. More... | |
virtual DomainDiscretization< vec_t > | discretizeWithStep (scalar_t step, int internal_type, int boundary_type) const |
Returns a discretization of this shape with approximately uniform distance step between nodes. More... | |
DomainDiscretization< vec_t > | discretizeWithStep (scalar_t step) const |
discretizeWithStep but with default types as assigned by the shape. More... | |
virtual DomainDiscretization< vec_t > | discretizeWithDensity (const std::function< scalar_t(vec_t)> &dr, int internal_type, int boundary_type) const |
Returns a discretization of the domain with spatially variable step. More... | |
template<typename func_t , typename fill_t > | |
DomainDiscretization< vec_t > | discretizeWithDensity (const func_t &dr, const fill_t &fill, int internal_type, int boundary_type) const |
Overload for fill engine. More... | |
DomainDiscretization< vec_t > | discretizeWithDensity (const std::function< scalar_t(vec_t)> &dr) const |
Overload with default types. More... | |
template<typename func_t , typename fill_t > | |
DomainDiscretization< vec_t > | discretizeWithDensity (const func_t &dr, const fill_t &fill) const |
Overload for fill engine with default types. More... | |
DomainDiscretization< vec_t > | discretizeBoundaryWithDensity (const std::function< scalar_t(vec_t)> &dr) const |
Overload with default type. More... | |
TranslatedShape< vec_t > | translate (const vec_t &a) |
Translate the shape by given vector a . More... | |
RotatedShape< vec_t > | rotate (const Eigen::Matrix< scalar_t, dim, dim > &Q) |
Transform the shape by given orthogonal matrix Q . More... | |
RotatedShape< vec_t > | rotate (scalar_t angle) |
2D version of rotate accepting an angle. More... | |
Public Types | |
typedef vec_t::Scalar | scalar_t |
Scalar data type used in computation. More... | |
typedef vec_t | vector_t |
Vector data type used in computations. More... | |
enum | { dim = vec_t::dim } |
Store dimension of the domain. More... | |
Protected Attributes | |
scalar_t | margin_ |
Tolerance for the geometric operation of the domain. More... | |
Private Types | |
using | base_t = DomainShape< vec_t > |
Base class type. More... | |
Private Member Functions | |
void | extendByMargin () |
Save a version of points extended by margin_ for later contains checks. More... | |
Static Private Member Functions | |
static scalar_t | isLeft (const vec_t &P0, const vec_t &P1, const vec_t &P2) |
Tests if a point is left, on, or right of an infinite line. More... | |
Private Attributes | |
std::vector< vec_t > | points_ |
The points that define the polygon, stored in CCW order. More... | |
std::vector< vec_t > | points_with_margin_ |
Polygon extended by margin_, for contains checks. More... | |
|
inherited |
Store dimension of the domain.
Enumerator | |
---|---|
dim | Dimensionality of the domain. |
Definition at line 57 of file DomainShape_fwd.hpp.
|
explicit |
Create polygon given a sequence of points.
The points are stored in CCW order. It is the user's responsibility to ensure the polygon is non self intersecting. Polygon area is computed to ensure that polygon is nonempty and to possibly reverse the point ordering, so that points are stored in counter clockwise (CCW) order.
Definition at line 17 of file PolygonShape.hpp.
|
inherited |
Returns a shape representing a union of *this
and other
.
Definition at line 66 of file DomainShape.hpp.
|
overridevirtual |
Return the bounding box of the domain.
Bounding box is returned in format bbox() == {{mx, my, ...}, {MX, MY, ...}}
, such that mx <= Mx
and my <= My
etc.\ and that the whole domain is contained in the cuboid [mx, my, ...] x [Mx, My, ...]
.
Implements mm::DomainShape< vec_t >.
Definition at line 76 of file PolygonShape.hpp.
|
inlineoverridevirtual |
Polymorphic clone pattern.
Implements mm::DomainShape< vec_t >.
Definition at line 81 of file PolygonShape_fwd.hpp.
|
overridevirtual |
Winding number test for point in a polygon inclusion (paying respect to margin).
Loosely based on: http://geomalgorithms.com/a03-_inclusion.html
Implements mm::DomainShape< vec_t >.
Definition at line 54 of file PolygonShape.hpp.
|
inline |
Overload with default type.
Definition at line 189 of file DomainShape_fwd.hpp.
|
inlineinherited |
Overload with default type.
Definition at line 189 of file DomainShape_fwd.hpp.
|
overridevirtual |
Returns a discretization of the boundary of this shape with approximately uniform distance step
between nodes.
step
must be positive. Added nodes are of type type
, which must be non-positive. Value 0 indicates that types are dependant on the implementation of concrete shape.
The boundary points are guaranteed to be added in counter clock-wise order.
Implements mm::DomainShape< vec_t >.
Definition at line 118 of file PolygonShape.hpp.
virtual DomainDiscretization<vec_t> mm::DomainShape< vec_t >::discretizeBoundaryWithDensity |
Discretizes boundary with given density and fill engine.
If type is 0, the underlying shape provides the default.
|
inline |
Returns a discretization of the boundary of this shape with approximately uniform distance step
between nodes.
Node type are decided by the underlying shape.
Definition at line 126 of file DomainShape_fwd.hpp.
|
inlineinherited |
Returns a discretization of the boundary of this shape with approximately uniform distance step
between nodes.
Node type are decided by the underlying shape.
Definition at line 126 of file DomainShape_fwd.hpp.
|
inline |
Returns a discretization of the boundary of this shape with approximately uniform distance step
between nodes.
step
must be positive. Added nodes are of type type
, which must be non-positive. Value 0 indicates that types are dependant on the implementation of concrete shape.
Definition at line 118 of file DomainShape_fwd.hpp.
|
overridevirtual |
Returns a discretization of the boundary of this shape with approximately uniform distance step
between nodes.
step
must be positive. Added nodes are of type type
, which must be non-positive. Value 0 indicates that types are dependant on the implementation of concrete shape.
The boundary points are guaranteed to be added in counter clock-wise order.
Reimplemented from mm::DomainShape< vec_t >.
Definition at line 89 of file PolygonShape.hpp.
|
inlineinherited |
Overload for fill engine with default types.
Definition at line 177 of file DomainShape_fwd.hpp.
|
inlineinherited |
Overload for fill engine.
Definition at line 162 of file DomainShape_fwd.hpp.
|
inlineinherited |
Overload with default types.
Definition at line 170 of file DomainShape_fwd.hpp.
|
virtualinherited |
Returns a discretization of the domain with spatially variable step.
dr | Function giving desired internodal distance at each point. |
internal_type | User supplied type of internal nodes. Must be non-negative. |
boundary_type | User supplied type of boundary nodes. Must be non-positive. If any of the types is 0, the underlying shape provides the default. |
dr
. Reimplemented in mm::TranslatedShape< vec_t >, mm::ShapeUnion< vec_t >, and mm::ShapeDifference< vec_t >.
Definition at line 77 of file DomainShape.hpp.
|
inlineinherited |
discretizeWithStep but with default types as assigned by the shape.
Definition at line 144 of file DomainShape_fwd.hpp.
|
inlinevirtualinherited |
Returns a discretization of this shape with approximately uniform distance step
between nodes.
step
must be positive.
step | Desired internodal distance. |
internal_type | User supplied type of internal nodes. Must be non-negative. |
boundary_type | User supplied type of boundary nodes. Must be non-positive. If any of the types is 0, the underlying shape provides the default. |
Reimplemented in mm::TranslatedShape< vec_t >, mm::ShapeUnion< vec_t >, mm::BoxShape< vec_t >, mm::ShapeDifference< vec_t >, and mm::BallShape< vec_t >.
Definition at line 137 of file DomainShape_fwd.hpp.
|
private |
Save a version of points extended by margin_ for later contains checks.
Definition at line 39 of file PolygonShape.hpp.
|
inlinevirtualinherited |
Return true if shape has contains()
method implemented.
Reimplemented in mm::NURBSShape< vec_t, param_vec_t >, mm::RotatedShape< vec_t >, mm::ShapeDifference< vec_t >, mm::ShapeUnion< vec_t >, mm::STLShape< vec_t >, mm::TranslatedShape< vec_t >, and mm::UnknownShape< vec_t >.
Definition at line 96 of file DomainShape_fwd.hpp.
|
inlinestaticprivate |
Tests if a point is left, on, or right of an infinite line.
Input: three points P0, P1, and P2
Definition at line 94 of file PolygonShape_fwd.hpp.
|
inlineinherited |
Returns current margin.
Definition at line 72 of file DomainShape_fwd.hpp.
|
inlineinherited |
|
inlineinherited |
Operator form of DomainShape::subtract.
Definition at line 86 of file DomainShape_fwd.hpp.
|
inline |
Get points representing the polygon.
Definition at line 53 of file PolygonShape_fwd.hpp.
|
inlineoverridevirtual |
Output information about this shape to given output stream os
.
Implements mm::DomainShape< vec_t >.
Definition at line 83 of file PolygonShape_fwd.hpp.
|
virtualinherited |
Project point to boundary using bisection along the line define by unit_normal
.
Definition at line 21 of file DomainShape.hpp.
|
inherited |
Transform the shape by given orthogonal matrix Q
.
Definition at line 98 of file DomainShape.hpp.
|
inherited |
2D version of rotate accepting an angle.
Definition at line 89 of file DomainShape.hpp.
|
overridevirtual |
Computes the polygon extended by margin as well.
Reimplemented from mm::DomainShape< vec_t >.
Definition at line 33 of file PolygonShape.hpp.
|
inherited |
Returns a shape representing a difference of *this
and other
.
Definition at line 71 of file DomainShape.hpp.
|
inlineinherited |
Toggles the margin from positive to negative.
Definition at line 77 of file DomainShape_fwd.hpp.
|
inherited |
Translate the shape by given vector a
.
Definition at line 84 of file DomainShape.hpp.
|
protectedinherited |
Tolerance for the geometric operation of the domain.
The domain should behave as if it was margin_
thicker. Default margin is 1e-10
.
Definition at line 64 of file DomainShape_fwd.hpp.
|
private |
The points that define the polygon, stored in CCW order.
Definition at line 31 of file PolygonShape_fwd.hpp.
|
private |
Polygon extended by margin_, for contains checks.
It updates along with margin and has the first point repeated at the end.
Definition at line 34 of file PolygonShape_fwd.hpp.