KiCad PCB EDA Suite
SHAPE_SIMPLE Class Reference

SHAPE_SIMPLE. More...

#include <shape_simple.h>

Inheritance diagram for SHAPE_SIMPLE:
SHAPE

Public Member Functions

 SHAPE_SIMPLE ()
 Constructor Creates an empty polygon. More...
 
 SHAPE_SIMPLE (const SHAPE_LINE_CHAIN &aPoly)
 
 SHAPE_SIMPLE (const SHAPE_SIMPLE &aOther)
 
SHAPEClone () const override
 Function Clone() More...
 
void Clear ()
 Function Clear() Removes all points from the polygon. More...
 
const BOX2I BBox (int aClearance=0) const override
 Function BBox() More...
 
int PointCount () const
 Function PointCount() More...
 
const VECTOR2ICPoint (int aIndex) const
 Function Point() More...
 
const VECTOR2D CDPoint (int aIndex) const
 Function CDPoint() More...
 
const SHAPE_LINE_CHAINVertices () const
 Function Vertices() More...
 
void Append (int aX, int aY)
 Function Append() More...
 
void Append (const VECTOR2I &aP)
 Function Append() More...
 
bool Collide (const SEG &aSeg, int aClearance=0, int *aActual=nullptr) const override
 Function Collide() More...
 
void Rotate (double aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
 Function Rotate. More...
 
void Move (const VECTOR2I &aVector) override
 
bool IsSolid () const override
 
SHAPE_TYPE Type () const
 Function Type() More...
 
virtual bool Collide (const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr) const
 Function Collide() More...
 
virtual bool Collide (const SHAPE *aShape, int aClearance, VECTOR2I *aMTV) const
 Function Collide() More...
 
virtual bool Collide (const SHAPE *aShape, int aClearance=0, int *aActual=nullptr) const
 
virtual VECTOR2I Centre () const
 Function Centre() More...
 
virtual bool Parse (std::stringstream &aStream)
 
virtual const std::string Format () const
 
FACETNewFacet ()
 
SGNODECalcShape (SGNODE *aParent, SGNODE *aColor, WRL1_ORDER aVertexOrder, float aCreaseLimit=0.74317, bool isVRML2=false)
 

Protected Types

typedef VECTOR2I::extended_type ecoord
 

Protected Attributes

SHAPE_TYPE m_type
 

type of our shape

More...
 

Private Attributes

SHAPE_LINE_CHAIN m_points
 

Detailed Description

SHAPE_SIMPLE.

Represents a simple polygon consisting of a zero-thickness closed chain of connected line segments.

Internally the vertices are held in a SHAPE_LINE_CHAIN, please note that there is a "virtual" line segment between the last and first vertex.

Definition at line 42 of file shape_simple.h.

Member Typedef Documentation

◆ ecoord

typedef VECTOR2I::extended_type SHAPE::ecoord
protectedinherited

Definition at line 77 of file shape.h.

Constructor & Destructor Documentation

◆ SHAPE_SIMPLE() [1/3]

SHAPE_SIMPLE::SHAPE_SIMPLE ( )
inline

Constructor Creates an empty polygon.

Definition at line 49 of file shape_simple.h.

49  :
50  SHAPE( SH_SIMPLE )
51  {
52  m_points.SetClosed( true );
53  }
SHAPE(SHAPE_TYPE aType)
Constructor.
Definition: shape.h:86
void SetClosed(bool aClosed)
Function SetClosed()
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184
circle
Definition: shape.h:45

References m_points, and SHAPE_LINE_CHAIN::SetClosed().

Referenced by Clone().

◆ SHAPE_SIMPLE() [2/3]

SHAPE_SIMPLE::SHAPE_SIMPLE ( const SHAPE_LINE_CHAIN aPoly)
inline

Definition at line 55 of file shape_simple.h.

55  :
56  SHAPE( SH_SIMPLE ),
57  m_points( aPoly )
58  {
59  m_points.SetClosed( true );
60  }
SHAPE(SHAPE_TYPE aType)
Constructor.
Definition: shape.h:86
void SetClosed(bool aClosed)
Function SetClosed()
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184
circle
Definition: shape.h:45

References m_points, and SHAPE_LINE_CHAIN::SetClosed().

◆ SHAPE_SIMPLE() [3/3]

SHAPE_SIMPLE::SHAPE_SIMPLE ( const SHAPE_SIMPLE aOther)
inline

Definition at line 62 of file shape_simple.h.

62  :
63  SHAPE( SH_SIMPLE ), m_points( aOther.m_points )
64  {}
SHAPE(SHAPE_TYPE aType)
Constructor.
Definition: shape.h:86
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184
circle
Definition: shape.h:45

Member Function Documentation

◆ Append() [1/2]

void SHAPE_SIMPLE::Append ( int  aX,
int  aY 
)
inline

Function Append()

Appends a new point at the end of the polygon.

Parameters
aXis X coordinate of the new point
aYis Y coordinate of the new point

Definition at line 144 of file shape_simple.h.

145  {
146  VECTOR2I v( aX, aY );
147  Append( v );
148  }
VECTOR2 defines a general 2D-vector/point.
Definition: vector2d.h:61
void Append(int aX, int aY)
Function Append()
Definition: shape_simple.h:144

Referenced by PNS_KICAD_IFACE_BASE::syncPad(), and PNS_KICAD_IFACE_BASE::syncZone().

◆ Append() [2/2]

void SHAPE_SIMPLE::Append ( const VECTOR2I aP)
inline

Function Append()

Appends a new point at the end of the polygon.

Parameters
aPthe new point

Definition at line 156 of file shape_simple.h.

157  {
158  m_points.Append( aP );
159  }
void Append(int aX, int aY, bool aAllowDuplication=false)
Function Append()
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184

References SHAPE_LINE_CHAIN::Append(), and m_points.

◆ BBox()

const BOX2I SHAPE_SIMPLE::BBox ( int  aClearance = 0) const
inlineoverridevirtual

Function BBox()

Computes 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.

Implements SHAPE.

Definition at line 81 of file shape_simple.h.

82  {
83  return m_points.BBox( aClearance );
84  }
const BOX2I BBox(int aClearance=0) const override
Function BBox()
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184

References SHAPE_LINE_CHAIN::BBox(), and m_points.

Referenced by PNS::ConvexHull(), and PNS::OPTIMIZER::customBreakouts().

◆ CalcShape()

SGNODE * SHAPE::CalcShape ( SGNODE aParent,
SGNODE aColor,
WRL1_ORDER  aVertexOrder,
float  aCreaseLimit = 0.74317,
bool  isVRML2 = false 
)
inherited

Definition at line 713 of file wrlfacet.cpp.

715 {
716  if( facets.empty() || !facets.front()->HasMinPoints() )
717  return NULL;
718 
719  std::vector< std::list< FACET* > > flist;
720 
721  // determine the max. index and size flist as appropriate
722  std::list< FACET* >::iterator sF = facets.begin();
723  std::list< FACET* >::iterator eF = facets.end();
724 
725  int maxIdx = 0;
726  int tmi;
727  float maxV = 0.0;
728  float tV = 0.0;
729 
730  while( sF != eF )
731  {
732  tV = (*sF)->CalcFaceNormal();
733  tmi = (*sF)->GetMaxIndex();
734 
735  if( tmi > maxIdx )
736  maxIdx = tmi;
737 
738  if( tV > maxV )
739  maxV = tV;
740 
741  ++sF;
742  }
743 
744  ++maxIdx;
745 
746  if( maxIdx < 3 )
747  return NULL;
748 
749  flist.resize( maxIdx );
750 
751  // create the lists of facets common to indices
752  sF = facets.begin();
753 
754  while( sF != eF )
755  {
756  (*sF)->Renormalize( tV );
757  (*sF)->CollectVertices( flist );
758  ++sF;
759  }
760 
761  // calculate the normals
762  size_t vs = flist.size();
763 
764  for( size_t i = 0; i < vs; ++i )
765  {
766  sF = flist[i].begin();
767  eF = flist[i].end();
768 
769  while( sF != eF )
770  {
771  (*sF)->CalcVertexNormal( i, flist[i], aCreaseLimit );
772  ++sF;
773  }
774  }
775 
776  std::vector< WRLVEC3F > vertices;
777  std::vector< WRLVEC3F > normals;
778  std::vector< SGCOLOR > colors;
779 
780  // push the facet data to the final output list
781  sF = facets.begin();
782  eF = facets.end();
783 
784  while( sF != eF )
785  {
786  (*sF)->GetData( vertices, normals, colors, aVertexOrder );
787  ++sF;
788  }
789 
790  flist.clear();
791 
792  if( vertices.size() < 3 )
793  return NULL;
794 
795  IFSG_SHAPE shapeNode( false );
796 
797  if( !isVRML2 )
798  {
799  shapeNode.NewNode( aParent );
800 
801  if( aColor )
802  {
803  if( NULL == S3D::GetSGNodeParent( aColor ) )
804  shapeNode.AddChildNode( aColor );
805  else
806  shapeNode.AddRefNode( aColor );
807  }
808  }
809 
810  std::vector< SGPOINT > lCPts; // vertex points in SGPOINT (double) format
811  std::vector< SGVECTOR > lCNorm; // per-vertex normals
812  vs = vertices.size();
813 
814  for( size_t i = 0; i < vs; ++i )
815  {
816  SGPOINT pt;
817  pt.x = vertices[i].x;
818  pt.y = vertices[i].y;
819  pt.z = vertices[i].z;
820  lCPts.push_back( pt );
821  lCNorm.emplace_back( normals[i].x, normals[i].y, normals[i].z );
822  }
823 
824  vertices.clear();
825  normals.clear();
826 
827  IFSG_FACESET fsNode( false );
828 
829  if( !isVRML2 )
830  fsNode.NewNode( shapeNode );
831  else
832  fsNode.NewNode( aParent );
833 
834  IFSG_COORDS cpNode( fsNode );
835  cpNode.SetCoordsList( lCPts.size(), &lCPts[0] );
836  IFSG_COORDINDEX ciNode( fsNode );
837 
838  for( int i = 0; i < (int)lCPts.size(); ++i )
839  ciNode.AddIndex( i );
840 
841  IFSG_NORMALS nmNode( fsNode );
842  nmNode.SetNormalList( lCNorm.size(), &lCNorm[0] );
843 
844  if( !colors.empty() )
845  {
846  IFSG_COLORS nmColor( fsNode );
847  nmColor.SetColorList( colors.size(), &colors[0] );
848  colors.clear();
849  }
850 
851  if( !isVRML2 )
852  return shapeNode.GetRawPtr();
853 
854  return fsNode.GetRawPtr();
855 }
double x
Definition: sg_base.h:70
IFSG_COORDS is the wrapper for SGCOORDS.
Definition: ifsg_coords.h:40
IFSG_COORDINDEX is the wrapper for SGCOORDINDEX.
IFSG_COLORS is the wrapper for SGCOLORS.
Definition: ifsg_colors.h:41
SGLIB_API SGNODE * GetSGNodeParent(SGNODE *aNode)
Definition: ifsg_api.cpp:636
double y
Definition: sg_base.h:71
IFSG_NORMALS is the wrapper for the SGNORMALS class.
Definition: ifsg_normals.h:40
#define NULL
std::list< FACET * > facets
Definition: wrlfacet.h:143
IFSG_FACESET is the wrapper for the SGFACESET class.
Definition: ifsg_faceset.h:40
double z
Definition: sg_base.h:72
static VRML_COLOR colors[VRML_COLOR_LAST]
IFSG_SHAPE is the wrapper for the SGSHAPE class.
Definition: ifsg_shape.h:40

References IFSG_NODE::AddChildNode(), IFSG_INDEX::AddIndex(), IFSG_NODE::AddRefNode(), colors, SHAPE::facets, IFSG_NODE::GetRawPtr(), S3D::GetSGNodeParent(), IFSG_FACESET::NewNode(), IFSG_SHAPE::NewNode(), NULL, IFSG_COLORS::SetColorList(), IFSG_COORDS::SetCoordsList(), IFSG_NORMALS::SetNormalList(), SGPOINT::x, SGPOINT::y, and SGPOINT::z.

Referenced by WRL1FACESET::TranslateToSG(), X3DIFACESET::TranslateToSG(), and WRL2FACESET::TranslateToSG().

◆ CDPoint()

const VECTOR2D SHAPE_SIMPLE::CDPoint ( int  aIndex) const
inline

Function CDPoint()

Returns a given point as a vector with elements of type double.

Parameters
aIndexindex of the point
Returns
the point with elements of type double

Definition at line 119 of file shape_simple.h.

120  {
121  const VECTOR2I& v = CPoint( aIndex );
122  return VECTOR2D( v.x, v.y );
123  }
const VECTOR2I & CPoint(int aIndex) const
Function Point()
Definition: shape_simple.h:106
VECTOR2 defines a general 2D-vector/point.
Definition: vector2d.h:61
VECTOR2< double > VECTOR2D
Definition: vector2d.h:593

References CPoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by ROUTER_PREVIEW_ITEM::ViewDraw().

◆ Centre()

virtual VECTOR2I SHAPE::Centre ( ) const
inlinevirtualinherited

Function Centre()

Computes a center-of-mass of the shape

Returns
the center-of-mass point

Definition at line 173 of file shape.h.

174  {
175  return BBox( 0 ).Centre(); // if nothing better is available....
176  }
virtual const BOX2I BBox(int aClearance=0) const =0
Function BBox()
Vec Centre() const
Definition: box2.h:78

References SHAPE::BBox(), and BOX2< Vec >::Centre().

Referenced by PNS_PCBNEW_RULE_RESOLVER::CollideHoles().

◆ Clear()

void SHAPE_SIMPLE::Clear ( )
inline

Function Clear() Removes all points from the polygon.

Definition at line 75 of file shape_simple.h.

76  {
77  m_points.Clear();
78  }
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184
void Clear()
Function Clear() Removes all points from the line chain.

References SHAPE_LINE_CHAIN::Clear(), and m_points.

◆ Clone()

SHAPE* SHAPE_SIMPLE::Clone ( ) const
inlineoverridevirtual

Function Clone()

Returns a dynamically allocated copy of the shape

Return values
copyof the shape

Reimplemented from SHAPE.

Definition at line 66 of file shape_simple.h.

67  {
68  return new SHAPE_SIMPLE( *this );
69  }
SHAPE_SIMPLE()
Constructor Creates an empty polygon.
Definition: shape_simple.h:49

References SHAPE_SIMPLE().

◆ Collide() [1/4]

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

Function Collide()

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

Parameters
aActualan optional pointer to an int to store the actual distance in the event of a collision.
Returns
true, if there is a collision.

Reimplemented in SHAPE_POLY_SET, SHAPE_LINE_CHAIN, SHAPE_SEGMENT, and SHAPE_ARC.

Definition at line 125 of file shape.h.

126  {
127  return Collide( SEG( aP, aP ), aClearance );
128  }
Definition: seg.h:39
virtual bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr) const
Function Collide()
Definition: shape.h:125

Referenced by SHAPE_SEGMENT::Collide(), collide(), SHAPE_RECT::Collide(), PNS::ITEM::collideSimple(), PNS::SHOVE::onCollidingVia(), PNS::HIT_VISITOR::operator()(), and PNS::OPTIMIZER::smartPadsSingle().

◆ Collide() [2/4]

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

Function Collide()

Checks 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
aActualan optional pointer to an int to store the actual distance in the event of a collision.
Returns
true, if there is a collision.

Reimplemented in SHAPE_RECT, and SHAPE_SEGMENT.

Definition at line 621 of file shape_collisions.cpp.

622 {
623  return collideShapes( this, aShape, aClearance, nullptr, aMTV );
624 }
bool collideShapes(const SHAPE *aA, const SHAPE *aB, int aClearance, int *aActual, VECTOR2I *aMTV)

References collideShapes().

◆ Collide() [3/4]

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

Reimplemented in SHAPE_RECT, and SHAPE_SEGMENT.

Definition at line 627 of file shape_collisions.cpp.

628 {
629  return collideShapes( this, aShape, aClearance, aActual, nullptr );
630 }
bool collideShapes(const SHAPE *aA, const SHAPE *aB, int aClearance, int *aActual, VECTOR2I *aMTV)

References collideShapes().

◆ Collide() [4/4]

bool SHAPE_SIMPLE::Collide ( const SEG aSeg,
int  aClearance = 0,
int *  aActual = nullptr 
) const
inlineoverridevirtual

Function Collide()

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

Parameters
aActualan optional pointer to an int to store the actual distance in the event of a collision.
Returns
true, if there is a collision.

Implements SHAPE.

Definition at line 162 of file shape_simple.h.

163  {
164  return m_points.Collide( aSeg, aClearance, aActual );
165  }
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184
bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr) const override
Function Collide()

References SHAPE_LINE_CHAIN::Collide(), and m_points.

◆ CPoint()

const VECTOR2I& SHAPE_SIMPLE::CPoint ( int  aIndex) const
inline

Function Point()

Returns a const reference to a given point in the polygon. Negative indices count from the end of the point list, e.g. -1 means "last point", -2 means "second to last point" and so on.

Parameters
aIndexindex of the point
Returns
const reference to the point

Definition at line 106 of file shape_simple.h.

107  {
108  return m_points.CPoint( aIndex );
109  }
const VECTOR2I & CPoint(int aIndex) const
Function Point()
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184

References SHAPE_LINE_CHAIN::CPoint(), and m_points.

Referenced by CDPoint(), and PNS::LOGGER::dumpShape().

◆ Format()

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

Reimplemented in SHAPE_POLY_SET, and SHAPE_LINE_CHAIN.

Definition at line 35 of file shape.cpp.

36 {
37  assert( false );
38  return std::string( "" );
39 }

Referenced by SHAPE_FILE_IO::Write().

◆ IsSolid()

bool SHAPE_SIMPLE::IsSolid ( ) const
inlineoverridevirtual

Implements SHAPE.

Definition at line 177 of file shape_simple.h.

178  {
179  return true;
180  }

◆ Move()

void SHAPE_SIMPLE::Move ( const VECTOR2I aVector)
inlineoverridevirtual

Implements SHAPE.

Definition at line 172 of file shape_simple.h.

173  {
174  m_points.Move( aVector );
175  }
void Move(const VECTOR2I &aVector) override
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184

References m_points, and SHAPE_LINE_CHAIN::Move().

◆ NewFacet()

FACET * SHAPE::NewFacet ( )
inherited

Definition at line 705 of file wrlfacet.cpp.

706 {
707  FACET* fp = new FACET;
708  facets.push_back( fp );
709  return fp;
710 }
Definition: wrlfacet.h:41
std::list< FACET * > facets
Definition: wrlfacet.h:143

References SHAPE::facets.

Referenced by WRL1FACESET::TranslateToSG(), X3DIFACESET::TranslateToSG(), and WRL2FACESET::TranslateToSG().

◆ Parse()

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

Reimplemented in SHAPE_POLY_SET, and SHAPE_LINE_CHAIN.

Definition at line 28 of file shape.cpp.

29 {
30  assert( false );
31  return false;
32 }

◆ PointCount()

int SHAPE_SIMPLE::PointCount ( ) const
inline

Function PointCount()

Returns the number of points (vertices) in this polygon

Returns
number of points

Definition at line 92 of file shape_simple.h.

93  {
94  return m_points.PointCount();
95  }
int PointCount() const
Function PointCount()
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184

References m_points, and SHAPE_LINE_CHAIN::PointCount().

Referenced by PNS::LOGGER::dumpShape(), and ROUTER_PREVIEW_ITEM::ViewDraw().

◆ Rotate()

void SHAPE_SIMPLE::Rotate ( double  aAngle,
const VECTOR2I aCenter = { 0, 0 } 
)
inlineoverridevirtual

Function Rotate.

Parameters
aCenteris the rotation center
aAnglerotation angle in radians

Implements SHAPE.

Definition at line 167 of file shape_simple.h.

167  { 0, 0 } ) override
168  {
169  m_points.Rotate( aAngle, aCenter );
170  }
void Rotate(double aAngle, const VECTOR2I &aCenter=VECTOR2I(0, 0)) override
Function Rotate rotates all vertices by a given angle.
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184

◆ Type()

SHAPE_TYPE SHAPE::Type ( ) const
inlineinherited

Function Type()

Returns the type of the shape.

Return values
thetype

Definition at line 99 of file shape.h.

100  {
101  return m_type;
102  }
SHAPE_TYPE m_type
type of our shape
Definition: shape.h:195

References SHAPE::m_type.

Referenced by PNS::DP_GATEWAYS::BuildFromPrimitivePair(), collideShapes(), PNS::OPTIMIZER::computeBreakouts(), PNS::LOGGER::dumpShape(), PNS::SOLID::Hull(), ROUTER_PREVIEW_ITEM::ViewDraw(), and SHAPE_FILE_IO::Write().

◆ Vertices()

const SHAPE_LINE_CHAIN& SHAPE_SIMPLE::Vertices ( ) const
inline

Function Vertices()

Returns the list of vertices defining this simple polygon.

Returns
the list of vertices defining this simple polygon

Definition at line 132 of file shape_simple.h.

133  {
134  return m_points;
135  }
SHAPE_LINE_CHAIN m_points
Definition: shape_simple.h:184

References m_points.

Referenced by Collide(), PNS::ConvexHull(), and PNS::OPTIMIZER::customBreakouts().

Member Data Documentation

◆ m_points

SHAPE_LINE_CHAIN SHAPE_SIMPLE::m_points
private

Definition at line 184 of file shape_simple.h.

Referenced by Append(), BBox(), Clear(), Collide(), CPoint(), Move(), PointCount(), SHAPE_SIMPLE(), and Vertices().

◆ m_type

SHAPE_TYPE SHAPE::m_type
protectedinherited

type of our shape

Definition at line 195 of file shape.h.

Referenced by SHAPE::Type().


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