Horizon
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | Protected Types | List of all members
SHAPE Class Referenceabstract

An abstract shape on 2D plane. More...

#include <shape.h>

Inheritance diagram for SHAPE:
SHAPE_BASE SHAPE_ARC SHAPE_CIRCLE SHAPE_COMPOUND SHAPE_LINE_CHAIN_BASE SHAPE_NULL SHAPE_POLY_SET SHAPE_RECT SHAPE_SEGMENT

Public Member Functions

 SHAPE (SHAPE_TYPE aType)
 Create an empty shape of type aType.
 
virtual SHAPEClone () const
 Return a dynamically allocated copy of the shape.
 
bool IsNull () const
 Return true if the shape is a null shape.
 
virtual bool Collide (const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const
 Check if the boundary of shape (this) lies closer to the point aP than aClearance, indicating a collision.
 
virtual bool Collide (const SHAPE *aShape, int aClearance, VECTOR2I *aMTV) const
 Check if the boundary of shape (this) lies closer to the shape aShape than aClearance, indicating a collision.
 
virtual bool Collide (const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const
 
virtual bool Collide (const SEG &aSeg, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const =0
 Check if the boundary of shape (this) lies closer to the segment aSeg than aClearance, indicating a collision.
 
virtual const BOX2I BBox (int aClearance=0) const =0
 Compute a bounding box of the shape, with a margin of aClearance a collision.
 
virtual VECTOR2I Centre () const
 Compute a center-of-mass of the shape.
 
virtual void Rotate (double aAngle, const VECTOR2I &aCenter={ 0, 0 })=0
 
virtual void Move (const VECTOR2I &aVector)=0
 
virtual bool IsSolid () const =0
 
virtual bool Parse (std::stringstream &aStream)
 
virtual const std::string Format () const
 
- Public Member Functions inherited from SHAPE_BASE
 SHAPE_BASE (SHAPE_TYPE aType)
 Create an empty shape of type aType.
 
SHAPE_TYPE Type () const
 Return the type of the shape.
 
virtual bool HasIndexableSubshapes () const
 
virtual size_t GetIndexableSubshapeCount () const
 
virtual void GetIndexableSubshapes (std::vector< SHAPE * > &aSubshapes)
 

Static Public Attributes

static const int MIN_PRECISION_IU = 4
 This is the minimum precision for all the points in a shape.
 

Protected Types

typedef VECTOR2I::extended_type ecoord
 

Additional Inherited Members

- Protected Attributes inherited from SHAPE_BASE
SHAPE_TYPE m_type
 < type of our shape
 

Detailed Description

An abstract shape on 2D plane.

Member Function Documentation

◆ BBox()

virtual const BOX2I SHAPE::BBox ( int  aClearance = 0) const
pure virtual

Compute a bounding box of the shape, with a margin of aClearance a collision.

Parameters
aClearancehow much the bounding box is expanded wrs to the minimum enclosing rectangle for the shape.
Returns
the bounding box.

Implemented in SHAPE_ARC, SHAPE_CIRCLE, SHAPE_COMPOUND, SHAPE_LINE_CHAIN, SHAPE_NULL, SHAPE_POLY_SET::TRIANGULATED_POLYGON::TRI, SHAPE_POLY_SET, SHAPE_RECT, SHAPE_SEGMENT, and SHAPE_SIMPLE.

◆ Centre()

virtual VECTOR2I SHAPE::Centre ( ) const
inlinevirtual

Compute a center-of-mass of the shape.

Returns
the center-of-mass point

◆ Clone()

virtual SHAPE * SHAPE::Clone ( ) const
inlinevirtual

Return a dynamically allocated copy of the shape.

Return values
copyof the shape

Reimplemented in SHAPE_ARC, SHAPE_CIRCLE, SHAPE_COMPOUND, SHAPE_LINE_CHAIN, SHAPE_NULL, SHAPE_POLY_SET, SHAPE_RECT, SHAPE_SEGMENT, and SHAPE_SIMPLE.

◆ Collide() [1/4]

virtual bool SHAPE::Collide ( const SEG aSeg,
int  aClearance = 0,
int *  aActual = nullptr,
VECTOR2I aLocation = nullptr 
) const
pure virtual

Check if the boundary of shape (this) lies closer to the segment aSeg than aClearance, indicating a collision.

Parameters
aActual[out] an optional pointer to an int to be updated with the actual distance int the event of a collision.
aLocation[out] an option pointer to a point to store a nearby location in the event of a collision.
Returns
true, if there is a collision.

Implemented in SHAPE_LINE_CHAIN_BASE, SHAPE_ARC, SHAPE_CIRCLE, SHAPE_COMPOUND, SHAPE_LINE_CHAIN, SHAPE_NULL, SHAPE_POLY_SET, SHAPE_RECT, SHAPE_SEGMENT, and SHAPE_SIMPLE.

◆ Collide() [2/4]

bool SHAPE::Collide ( const SHAPE aShape,
int  aClearance,
VECTOR2I aMTV 
) const
virtual

Check if the boundary of shape (this) lies closer to the shape aShape than aClearance, indicating a collision.

Parameters
aShapeshape to check collision against
aClearanceminimum clearance
aMTVminimum translation vector
aActual[out] an optional pointer to an int to store the actual distance in the event of a collision.
aLocation[out] an option pointer to a point to store a nearby location in the event of a collision.
Returns
true, if there is a collision.

Reimplemented in SHAPE_COMPOUND, SHAPE_RECT, and SHAPE_SEGMENT.

◆ Collide() [3/4]

bool SHAPE::Collide ( const SHAPE aShape,
int  aClearance = 0,
int *  aActual = nullptr,
VECTOR2I aLocation = nullptr 
) const
virtual

Reimplemented in SHAPE_POLY_SET.

◆ Collide() [4/4]

virtual bool SHAPE::Collide ( const VECTOR2I aP,
int  aClearance = 0,
int *  aActual = nullptr,
VECTOR2I aLocation = nullptr 
) const
inlinevirtual

Check if the boundary of shape (this) lies closer to the point aP than aClearance, indicating a collision.

Parameters
aActual[out] an optional pointer to an int to store the actual distance in the event of a collision.
aLocation[out] an option pointer to a point to store a nearby location in the event of a collision.
Returns
true, if there is a collision.

Reimplemented in SHAPE_LINE_CHAIN_BASE, SHAPE_ARC, SHAPE_LINE_CHAIN, SHAPE_POLY_SET, and SHAPE_SEGMENT.

◆ Format()

const std::string SHAPE::Format ( ) const
virtual

Reimplemented in SHAPE_LINE_CHAIN, and SHAPE_POLY_SET.

◆ IsNull()

bool SHAPE::IsNull ( ) const
inline

Return true if the shape is a null shape.

Return values
trueif null :-)

◆ IsSolid()

virtual bool SHAPE::IsSolid ( ) const
pure virtual

Implemented in SHAPE_POLY_SET.

◆ Move()

virtual void SHAPE::Move ( const VECTOR2I aVector)
pure virtual

Implemented in SHAPE_POLY_SET.

◆ Parse()

bool SHAPE::Parse ( std::stringstream &  aStream)
virtual

Reimplemented in SHAPE_LINE_CHAIN, and SHAPE_POLY_SET.

◆ Rotate()

virtual void SHAPE::Rotate ( double  aAngle,
const VECTOR2I aCenter = { 0, 0 } 
)
pure virtual
Parameters
aCenteris the rotation center.
aAnglerotation angle in radians.

Implemented in SHAPE_ARC, SHAPE_LINE_CHAIN, SHAPE_CIRCLE, SHAPE_COMPOUND, SHAPE_NULL, SHAPE_POLY_SET::TRIANGULATED_POLYGON::TRI, SHAPE_POLY_SET, SHAPE_RECT, SHAPE_SEGMENT, and SHAPE_SIMPLE.


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