Adaptagrams
Public Member Functions | Public Attributes | List of all members
Avoid::Polygon Class Reference

A dynamic Polygon, to which points can be easily added and removed. More...

#include <geomtypes.h>

Inheritance diagram for Avoid::Polygon:
Inheritance graph
Collaboration diagram for Avoid::Polygon:
Collaboration graph

Public Member Functions

 Polygon ()
 Constructs an empty polygon (with zero points).
 
 Polygon (const int n)
 Constructs a new polygon with n points. More...
 
 Polygon (const PolygonInterface &poly)
 Constructs a new polygon from an existing Polygon. More...
 
void clear (void)
 Resets this to the empty polygon.
 
bool empty (void) const
 Returns true if this polygon is empty.
 
size_t size (void) const
 Returns the number of points in this polygon.
 
int id (void) const
 Returns the ID value associated with this polygon.
 
const Pointat (size_t index) const
 Returns a specific point in the polygon. More...
 
void setPoint (size_t index, const Point &point)
 Sets a position for a particular point in the polygon.. More...
 
Polygon simplify (void) const
 Returns a simplified Polyline, where all collinear line segments have been collapsed down into single line segments. More...
 
Polygon curvedPolyline (const double curve_amount, const bool closed=false) const
 Returns a curved approximation of this multi-segment PolyLine, with the corners replaced by smooth Bezier curves. More...
 
void translate (const double xDist, const double yDist)
 Translates the polygon position by a relative amount. More...
 
- Public Member Functions inherited from Avoid::PolygonInterface
 PolygonInterface ()
 Constructor.
 
virtual ~PolygonInterface ()
 Destructor.
 
Polygon boundingRectPolygon (void) const
 Returns the bounding rectangle for this polygon. More...
 
Box offsetBoundingBox (double offset) const
 Returns the bounding rectangle that contains this polygon with optionally some buffer space around it for routing. More...
 

Public Attributes

int _id
 An ID for the polygon.
 
std::vector< Pointps
 A vector of the points that make up the Polygon.
 
std::vector< char > ts
 If used, denotes whether the corresponding point in ps is a move-to operation or a Bezier curve-to. More...
 

Detailed Description

A dynamic Polygon, to which points can be easily added and removed.

Note
The Rectangle class can be used as an easy way of constructing a square or rectangular polygon.

Constructor & Destructor Documentation

◆ Polygon() [1/2]

Avoid::Polygon::Polygon ( const int  n)

Constructs a new polygon with n points.

A rectangle would be comprised of four point. An n segment PolyLine (represented as a Polygon) would be comprised of n+1 points. Whether a particular Polygon is closed or not, depends on whether it is a Polygon or Polyline. Shape polygons are always considered to be closed, meaning the last point joins back to the first point.

The values for points can be set by setting the Polygon:ps vector, or via the Polygon::setPoint() method.

Parameters
[in]nNumber of points in the polygon.

◆ Polygon() [2/2]

Avoid::Polygon::Polygon ( const PolygonInterface poly)

Constructs a new polygon from an existing Polygon.

Parameters
[in]polyAn existing polygon to copy the new polygon from.

References Avoid::PolygonInterface::at(), ps, and Avoid::PolygonInterface::size().

Here is the call graph for this function:

Member Function Documentation

◆ at()

const Point & Avoid::Polygon::at ( size_t  index) const
virtual

Returns a specific point in the polygon.

Parameters
[in]indexThe array index of the point to be returned.

Implements Avoid::PolygonInterface.

References ps, and size().

Referenced by Avoid::Router::outputInstanceToSVG(), and Avoid::ConnRef::splitAtSegment().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ curvedPolyline()

Polygon Avoid::Polygon::curvedPolyline ( const double  curve_amount,
const bool  closed = false 
) const

Returns a curved approximation of this multi-segment PolyLine, with the corners replaced by smooth Bezier curves.

This function does not do any further obstacle avoidance with the curves produced. Hence, you would usually specify a curve_amount in similar size to the space buffer around obstacles in the scene. This way the curves will cut the corners around shapes but still run within this buffer space.

Parameters
curve_amountDescribes the distance along the end of each line segment to turn into a curve.
closedDescribes whether the Polygon should be treated as closed. Defaults to false.
Returns
A new polyline (polygon) representing the curved path. Its points represent endpoints of line segments and Bezier spline control points. The Polygon::ts vector for this returned polygon is populated with a character for each point describing its type.
See also
ts

References _id, ps, simplify(), size(), and ts.

Referenced by Avoid::Router::outputInstanceToSVG().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setPoint()

void Avoid::Polygon::setPoint ( size_t  index,
const Point point 
)

Sets a position for a particular point in the polygon..

Parameters
[in]indexThe array index of the point to be set.
[in]pointThe point value to be assigned..

References ps, and size().

Referenced by dialect::Node::makeLibavoidPolygon().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ simplify()

Polygon Avoid::Polygon::simplify ( void  ) const

Returns a simplified Polyline, where all collinear line segments have been collapsed down into single line segments.

Returns
A new polyline with a simplified representation.

References ps, and size().

Referenced by curvedPolyline(), Avoid::ConnRef::displayRoute(), and Avoid::ConnRef::setFixedRoute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ translate()

void Avoid::Polygon::translate ( const double  xDist,
const double  yDist 
)

Translates the polygon position by a relative amount.

Parameters
[in]xDistDistance to move polygon in the x dimension.
[in]yDistDistance to move polygon in the y dimension.

References ps, and size().

Referenced by Avoid::Router::moveShape().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ ts

std::vector<char> Avoid::Polygon::ts

If used, denotes whether the corresponding point in ps is a move-to operation or a Bezier curve-to.

Each character describes the drawing operation for the corresponding point in the ps vector. Possible values are:

  • 'M': A moveto operation, marks the first point;
  • 'L': A lineto operation, is a line from the previous point to the current point; or
  • 'C': A curveto operation, three consecutive 'C' points (along with the previous point) describe the control points of a Bezier curve.
  • 'Z': Closes the path (used for cluster boundaries).
Note
This vector will currently only be populated for polygons returned by curvedPolyline().

Referenced by clear(), curvedPolyline(), and Avoid::Router::outputInstanceToSVG().


The documentation for this class was generated from the following files: