KiCad PCB EDA Suite
BOX2< Vec > Class Template Reference

Class BOX2 handles a 2-D bounding box, built on top of an origin point and size vector, both of templated class Vec. More...

#include <box2.h>

Public Types

typedef Vec::coord_type coord_type
 
typedef Vec::extended_type ecoord_type
 
typedef std::numeric_limits< coord_typecoord_limits
 

Public Member Functions

 BOX2 ()
 
 BOX2 (const Vec &aPos, const Vec &aSize)
 
void SetMaximum ()
 
Vec Centre () const
 
template<class Container >
void Compute (const Container &aPointList)
 Compute the bounding box from a given list of points. More...
 
void Move (const Vec &aMoveVector)
 Function Move moves the rectangle by the aMoveVector. More...
 
BOX2< Vec > & Normalize ()
 Function Normalize ensures that the height ant width are positive. More...
 
bool Contains (const Vec &aPoint) const
 Function Contains. More...
 
bool Contains (coord_type x, coord_type y) const
 Function Contains. More...
 
bool Contains (const BOX2< Vec > &aRect) const
 Function Contains. More...
 
const Vec & GetSize () const
 
coord_type GetX () const
 
coord_type GetY () const
 
const Vec & GetOrigin () const
 
const Vec & GetPosition () const
 
const Vec GetEnd () const
 
coord_type GetWidth () const
 
coord_type GetHeight () const
 
coord_type GetRight () const
 
coord_type GetBottom () const
 
coord_type GetLeft () const
 
coord_type GetTop () const
 
void MoveTopTo (coord_type aTop)
 
void MoveBottomTo (coord_type aBottom)
 
void MoveLeftTo (coord_type aLeft)
 
void MoveRightTo (coord_type aRight)
 
void SetOrigin (const Vec &pos)
 
void SetOrigin (coord_type x, coord_type y)
 
void SetSize (const Vec &size)
 
void SetSize (coord_type w, coord_type h)
 
void Offset (coord_type dx, coord_type dy)
 
void Offset (const Vec &offset)
 
void SetX (coord_type val)
 
void SetY (coord_type val)
 
void SetWidth (coord_type val)
 
void SetHeight (coord_type val)
 
void SetEnd (coord_type x, coord_type y)
 
void SetEnd (const Vec &pos)
 
bool Intersects (const BOX2< Vec > &aRect) const
 Function Intersects. More...
 
const std::string Format () const
 
BOX2< Vec > & Inflate (coord_type dx, coord_type dy)
 Function Inflate inflates the rectangle horizontally by dx and vertically by dy. More...
 
BOX2< Vec > & Inflate (int aDelta)
 Function Inflate inflates the rectangle horizontally and vertically by aDelta. More...
 
BOX2< Vec > & Merge (const BOX2< Vec > &aRect)
 Function Merge modifies the position and size of the rectangle in order to contain aRect. More...
 
BOX2< Vec > & Merge (const Vec &aPoint)
 Function Merge modifies the position and size of the rectangle in order to contain the given point. More...
 
ecoord_type GetArea () const
 Function GetArea returns the area of the rectangle. More...
 
ecoord_type Diagonal () const
 Function GetArea returns the length of the diagonal of the rectangle. More...
 
ecoord_type SquaredDistance (const Vec &aP) const
 
ecoord_type Distance (const Vec &aP) const
 
ecoord_type SquaredDistance (const BOX2< Vec > &aBox) const
 Function SquaredDistance returns the square of the minimum distance between self and box aBox. More...
 
ecoord_type Distance (const BOX2< Vec > &aBox) const
 Function Distance returns the minimum distance between self and box aBox. More...
 

Private Attributes

Vec m_Pos
 
Vec m_Size
 

Detailed Description

template<class Vec>
class BOX2< Vec >

Class BOX2 handles a 2-D bounding box, built on top of an origin point and size vector, both of templated class Vec.

Definition at line 41 of file box2.h.

Member Typedef Documentation

template<class Vec>
typedef std::numeric_limits<coord_type> BOX2< Vec >::coord_limits

Definition at line 50 of file box2.h.

template<class Vec>
typedef Vec::coord_type BOX2< Vec >::coord_type

Definition at line 48 of file box2.h.

template<class Vec>
typedef Vec::extended_type BOX2< Vec >::ecoord_type

Definition at line 49 of file box2.h.

Constructor & Destructor Documentation

template<class Vec>
BOX2< Vec >::BOX2 ( )
inline

Definition at line 52 of file box2.h.

52 {};
template<class Vec>
BOX2< Vec >::BOX2 ( const Vec &  aPos,
const Vec &  aSize 
)
inline

Definition at line 54 of file box2.h.

54  :
55  m_Pos( aPos ),
56  m_Size( aSize )
57  {
58  Normalize();
59  }
BOX2< Vec > & Normalize()
Function Normalize ensures that the height ant width are positive.
Definition: box2.h:117
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45

Member Function Documentation

template<class Vec>
Vec BOX2< Vec >::Centre ( ) const
inline

Definition at line 67 of file box2.h.

Referenced by SHAPE::Centre(), PNS::OPTIMIZER::convexBreakouts(), KIGFX::VIEW::SetViewport(), and KIGFX::WX_VIEW_CONTROLS::UpdateScrollbars().

68  {
69  return Vec( m_Pos.x + ( m_Size.x / 2 ),
70  m_Pos.y + ( m_Size.y / 2 ) );
71  }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
template<class Container >
void BOX2< Vec >::Compute ( const Container &  aPointList)
inline

Compute the bounding box from a given list of points.

Parameters
aPointListis the list points of the object.

Definition at line 79 of file box2.h.

Referenced by SHAPE_LINE_CHAIN::BBox(), and KIGFX::STROKE_FONT::computeBoundingBox().

80  {
81  Vec vmin, vmax;
82 
83  typename Container::const_iterator i;
84 
85  if( !aPointList.size() )
86  return;
87 
88  vmin = vmax = aPointList[0];
89 
90  for( i = aPointList.begin(); i != aPointList.end(); ++i )
91  {
92  Vec p( *i );
93  vmin.x = std::min( vmin.x, p.x );
94  vmin.y = std::min( vmin.y, p.y );
95  vmax.x = std::max( vmax.x, p.x );
96  vmax.y = std::max( vmax.y, p.y );
97  }
98 
99  SetOrigin( vmin );
100  SetSize( vmax - vmin );
101  }
void SetSize(const Vec &size)
Definition: box2.h:200
#define max(a, b)
Definition: auxiliary.h:86
void SetOrigin(const Vec &pos)
Definition: box2.h:198
#define min(a, b)
Definition: auxiliary.h:85
template<class Vec>
bool BOX2< Vec >::Contains ( const Vec &  aPoint) const
inline

Function Contains.

Parameters
aPoint= the point to test
Returns
true if aPoint is inside the boundary box. A point on a edge is seen as inside

Definition at line 139 of file box2.h.

Referenced by PNS::LINE_RESTRICTIONS::Build(), BOX2< VECTOR2I >::Contains(), POLY_GRID_PARTITION::containsPoint(), CN_LIST::FindNearby(), SHAPE_POLY_SET::pointInPolygon(), GERBVIEW_SELECTION_TOOL::selectionContains(), SELECTION_TOOL::selectionContains(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), KIGFX::VIEW::SetCenter(), and KIGFX::WX_VIEW_CONTROLS::WarpCursor().

140  {
141  Vec rel_pos = aPoint - m_Pos;
142  Vec size = m_Size;
143 
144  if( size.x < 0 )
145  {
146  size.x = -size.x;
147  rel_pos.x += size.x;
148  }
149 
150  if( size.y < 0 )
151  {
152  size.y = -size.y;
153  rel_pos.y += size.y;
154  }
155 
156  return ( rel_pos.x >= 0 ) && ( rel_pos.y >= 0 ) && ( rel_pos.y <= size.y) && ( rel_pos.x <= size.x);
157  }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
bool BOX2< Vec >::Contains ( coord_type  x,
coord_type  y 
) const
inline

Function Contains.

Parameters
x= the x coordinate of the point to test
y= the x coordinate of the point to test
Returns
true if point is inside the boundary box. A point on a edge is seen as inside

Definition at line 165 of file box2.h.

Referenced by BOX2< VECTOR2I >::Contains().

165 { return Contains( Vec( x, y ) ); }
bool Contains(const Vec &aPoint) const
Function Contains.
Definition: box2.h:139
template<class Vec>
bool BOX2< Vec >::Contains ( const BOX2< Vec > &  aRect) const
inline

Function Contains.

Parameters
aRect= the BOX2 to test
Returns
true if aRect is Contained. A common edge is seen as contained

Definition at line 172 of file box2.h.

173  {
174  return Contains( aRect.GetOrigin() ) && Contains( aRect.GetEnd() );
175  }
const Vec & GetOrigin() const
Definition: box2.h:181
const Vec GetEnd() const
Definition: box2.h:183
bool Contains(const Vec &aPoint) const
Function Contains.
Definition: box2.h:139
template<class Vec>
ecoord_type BOX2< Vec >::Diagonal ( ) const
inline

Function GetArea returns the length of the diagonal of the rectangle.

Returns
The area of the diagonal.

Definition at line 401 of file box2.h.

402  {
403  return m_Size.EuclideanNorm();
404  }
Vec m_Size
Definition: box2.h:45
template<class Vec>
ecoord_type BOX2< Vec >::Distance ( const Vec &  aP) const
inline

Definition at line 415 of file box2.h.

Referenced by SHAPE_INDEX_LIST< T, >::query_iterator::next().

416  {
417  return sqrt( SquaredDistance( aP ) );
418  }
ecoord_type SquaredDistance(const Vec &aP) const
Definition: box2.h:406
template<class Vec>
ecoord_type BOX2< Vec >::Distance ( const BOX2< Vec > &  aBox) const
inline

Function Distance returns the minimum distance between self and box aBox.

Parameters
aBoxthe other box
Returns
The distance

Definition at line 461 of file box2.h.

462  {
463  return sqrt( SquaredDistance( aBox ) );
464  }
ecoord_type SquaredDistance(const Vec &aP) const
Definition: box2.h:406
template<class Vec>
const std::string BOX2< Vec >::Format ( ) const
inline

Definition at line 252 of file box2.h.

253  {
254  std::stringstream ss;
255 
256  ss << "( box corner " << m_Pos.Format() << " w " << m_Size.x << " h " << m_Size.y << " )";
257 
258  return ss.str();
259  }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
ecoord_type BOX2< Vec >::GetArea ( ) const
inline

Function GetArea returns the area of the rectangle.

Returns
The area of the rectangle.

Definition at line 391 of file box2.h.

392  {
393  return (ecoord_type) GetWidth() * (ecoord_type) GetHeight();
394  }
coord_type GetWidth() const
Definition: box2.h:185
Vec::extended_type ecoord_type
Definition: box2.h:49
coord_type GetHeight() const
Definition: box2.h:186
template<class Vec>
const Vec BOX2< Vec >::GetEnd ( ) const
inline
template<class Vec>
coord_type BOX2< Vec >::GetLeft ( ) const
inline
template<class Vec>
const Vec& BOX2< Vec >::GetOrigin ( ) const
inline
template<class Vec>
coord_type BOX2< Vec >::GetTop ( ) const
inline
template<class Vec>
BOX2<Vec>& BOX2< Vec >::Inflate ( coord_type  dx,
coord_type  dy 
)
inline

Function Inflate inflates the rectangle horizontally by dx and vertically by dy.

If dx and/or dy is negative the rectangle is deflated.

Definition at line 266 of file box2.h.

Referenced by SHAPE_SEGMENT::BBox(), SHAPE_LINE_CHAIN::BBox(), SHAPE_POLY_SET::BBox(), PNS::LINE::ChangedArea(), BOX2< VECTOR2I >::Inflate(), SHAPE_INDEX< T >::Query(), DIALOG_PAD_PROPERTIES::redraw(), GERBVIEW_SELECTION_TOOL::selectionContains(), SELECTION_TOOL::selectionContains(), and ROUTER_PREVIEW_ITEM::ViewBBox().

267  {
268  if( m_Size.x >= 0 )
269  {
270  if( m_Size.x < -2 * dx )
271  {
272  // Don't allow deflate to eat more width than we have,
273  m_Pos.x += m_Size.x / 2;
274  m_Size.x = 0;
275  }
276  else
277  {
278  // The inflate is valid.
279  m_Pos.x -= dx;
280  m_Size.x += 2 * dx;
281  }
282  }
283  else // size.x < 0:
284  {
285  if( m_Size.x > -2 * dx )
286  {
287  // Don't allow deflate to eat more width than we have,
288  m_Pos.x -= m_Size.x / 2;
289  m_Size.x = 0;
290  }
291  else
292  {
293  // The inflate is valid.
294  m_Pos.x += dx;
295  m_Size.x -= 2 * dx; // m_Size.x <0: inflate when dx > 0
296  }
297  }
298 
299  if( m_Size.y >= 0 )
300  {
301  if( m_Size.y < -2 * dy )
302  {
303  // Don't allow deflate to eat more height than we have,
304  m_Pos.y += m_Size.y / 2;
305  m_Size.y = 0;
306  }
307  else
308  {
309  // The inflate is valid.
310  m_Pos.y -= dy;
311  m_Size.y += 2 * dy;
312  }
313  }
314  else // size.y < 0:
315  {
316  if( m_Size.y > 2 * dy )
317  {
318  // Don't allow deflate to eat more height than we have,
319  m_Pos.y -= m_Size.y / 2;
320  m_Size.y = 0;
321  }
322  else
323  {
324  // The inflate is valid.
325  m_Pos.y += dy;
326  m_Size.y -= 2 * dy; // m_Size.y <0: inflate when dy > 0
327  }
328  }
329 
330  return *this;
331  }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
BOX2<Vec>& BOX2< Vec >::Inflate ( int  aDelta)
inline

Function Inflate inflates the rectangle horizontally and vertically by aDelta.

If aDelta is negative the rectangle is deflated.

Definition at line 338 of file box2.h.

339  {
340  Inflate( aDelta, aDelta );
341  return *this;
342  }
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:266
template<class Vec>
bool BOX2< Vec >::Intersects ( const BOX2< Vec > &  aRect) const
inline

Function Intersects.

Returns
bool - true if the argument rectangle intersects this rectangle. (i.e. if the 2 rectangles have at least a common point)

Definition at line 224 of file box2.h.

Referenced by BOARD::CombineAllAreasInNet(), CN_ZONE_LIST::FindNearbyZones(), SHAPE_LINE_CHAIN::Intersect(), and BOARD::TestAreaIntersection().

225  {
226  // this logic taken from wxWidgets' geometry.cpp file:
227  bool rc;
228 
229  BOX2<Vec> me( *this );
230  BOX2<Vec> rect( aRect );
231  me.Normalize(); // ensure size is >= 0
232  rect.Normalize(); // ensure size is >= 0
233 
234  // calculate the left common area coordinate:
235  int left = std::max( me.m_Pos.x, rect.m_Pos.x );
236  // calculate the right common area coordinate:
237  int right = std::min( me.m_Pos.x + me.m_Size.x, rect.m_Pos.x + rect.m_Size.x );
238  // calculate the upper common area coordinate:
239  int top = std::max( me.m_Pos.y, aRect.m_Pos.y );
240  // calculate the lower common area coordinate:
241  int bottom = std::min( me.m_Pos.y + me.m_Size.y, rect.m_Pos.y + rect.m_Size.y );
242 
243  // if a common area exists, it must have a positive (null accepted) size
244  if( left <= right && top <= bottom )
245  rc = true;
246  else
247  rc = false;
248 
249  return rc;
250  }
Class BOX2 handles a 2-D bounding box, built on top of an origin point and size vector, both of templated class Vec.
Definition: box2.h:41
Vec m_Pos
Definition: box2.h:44
#define max(a, b)
Definition: auxiliary.h:86
#define min(a, b)
Definition: auxiliary.h:85
template<class Vec>
BOX2<Vec>& BOX2< Vec >::Merge ( const BOX2< Vec > &  aRect)
inline

Function Merge modifies the position and size of the rectangle in order to contain aRect.

It is mainly used to calculate bounding boxes.

Parameters
aRectThe rectangle to merge with this rectangle.

Definition at line 350 of file box2.h.

Referenced by SHAPE_LINE_CHAIN::Append(), SHAPE_POLY_SET::BBox(), PNS::VIA::ChangedArea(), PNS::extendBox(), KIGFX::VIEW::extentsVisitor::operator()(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), DIMENSION::ViewBBox(), and EDIT_POINTS::ViewBBox().

351  {
352  Normalize(); // ensure width and height >= 0
353  BOX2<Vec> rect = aRect;
354  rect.Normalize(); // ensure width and height >= 0
355  Vec end = GetEnd();
356  Vec rect_end = rect.GetEnd();
357 
358  // Change origin and size in order to contain the given rect
359  m_Pos.x = std::min( m_Pos.x, rect.m_Pos.x );
360  m_Pos.y = std::min( m_Pos.y, rect.m_Pos.y );
361  end.x = std::max( end.x, rect_end.x );
362  end.y = std::max( end.y, rect_end.y );
363  SetEnd( end );
364  return *this;
365  }
const Vec GetEnd() const
Definition: box2.h:183
Class BOX2 handles a 2-D bounding box, built on top of an origin point and size vector, both of templated class Vec.
Definition: box2.h:41
BOX2< Vec > & Normalize()
Function Normalize ensures that the height ant width are positive.
Definition: box2.h:117
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:213
Vec m_Pos
Definition: box2.h:44
#define max(a, b)
Definition: auxiliary.h:86
#define min(a, b)
Definition: auxiliary.h:85
template<class Vec>
BOX2<Vec>& BOX2< Vec >::Merge ( const Vec &  aPoint)
inline

Function Merge modifies the position and size of the rectangle in order to contain the given point.

Parameters
aPointThe point to merge with the rectangle.

Definition at line 372 of file box2.h.

373  {
374  Normalize(); // ensure width and height >= 0
375 
376  Vec end = GetEnd();
377  // Change origin and size in order to contain the given rect
378  m_Pos.x = std::min( m_Pos.x, aPoint.x );
379  m_Pos.y = std::min( m_Pos.y, aPoint.y );
380  end.x = std::max( end.x, aPoint.x );
381  end.y = std::max( end.y, aPoint.y );
382  SetEnd( end );
383  return *this;
384  }
const Vec GetEnd() const
Definition: box2.h:183
BOX2< Vec > & Normalize()
Function Normalize ensures that the height ant width are positive.
Definition: box2.h:117
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:213
Vec m_Pos
Definition: box2.h:44
#define max(a, b)
Definition: auxiliary.h:86
#define min(a, b)
Definition: auxiliary.h:85
template<class Vec>
void BOX2< Vec >::Move ( const Vec &  aMoveVector)
inline

Function Move moves the rectangle by the aMoveVector.

Parameters
aMoveVectorA point that is the value to move this rectangle

Definition at line 108 of file box2.h.

Referenced by DIALOG_PAD_PROPERTIES::redraw().

109  {
110  m_Pos += aMoveVector;
111  }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
void BOX2< Vec >::MoveBottomTo ( coord_type  aBottom)
inline

Definition at line 194 of file box2.h.

Referenced by EDA_DRAW_FRAME::AdjustScrollBars().

194 { m_Size.y = aBottom - m_Pos.y; }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::MoveLeftTo ( coord_type  aLeft)
inline

Definition at line 195 of file box2.h.

Referenced by EDA_DRAW_FRAME::AdjustScrollBars().

195 { m_Pos.x = aLeft; }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
void BOX2< Vec >::MoveRightTo ( coord_type  aRight)
inline

Definition at line 196 of file box2.h.

Referenced by EDA_DRAW_FRAME::AdjustScrollBars().

196 { m_Size.x = aRight - m_Pos.x; }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::MoveTopTo ( coord_type  aTop)
inline

Definition at line 193 of file box2.h.

Referenced by EDA_DRAW_FRAME::AdjustScrollBars().

193 { m_Pos.y = aTop; }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
BOX2<Vec>& BOX2< Vec >::Normalize ( )
inline

Function Normalize ensures that the height ant width are positive.

Definition at line 117 of file box2.h.

Referenced by BOX2< VECTOR2I >::BOX2(), PNS::ConvexHull(), KIGFX::VIEW::GetViewport(), BOX2< VECTOR2I >::Intersects(), BOX2< VECTOR2I >::Merge(), SVG_PLOTTER::Rect(), KIGFX::VIEW::Redraw(), KIGFX::PREVIEW::ARC_ASSISTANT::ViewBBox(), KIGFX::PREVIEW::RULER_ITEM::ViewBBox(), and KIGFX::PREVIEW::SELECTION_AREA::ViewBBox().

118  {
119  if( m_Size.y < 0 )
120  {
121  m_Size.y = -m_Size.y;
122  m_Pos.y -= m_Size.y;
123  }
124 
125  if( m_Size.x < 0 )
126  {
127  m_Size.x = -m_Size.x;
128  m_Pos.x -= m_Size.x;
129  }
130 
131  return *this;
132  }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::Offset ( coord_type  dx,
coord_type  dy 
)
inline

Definition at line 202 of file box2.h.

202 { m_Pos.x += dx; m_Pos.y += dy; }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
void BOX2< Vec >::Offset ( const Vec &  offset)
inline

Definition at line 203 of file box2.h.

204  {
205  m_Pos.x += offset.x; m_Pos.y +=
206  offset.y;
207  }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
void BOX2< Vec >::SetEnd ( const Vec &  pos)
inline

Definition at line 214 of file box2.h.

215  {
216  m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y;
217  }
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::SetHeight ( coord_type  val)
inline

Definition at line 212 of file box2.h.

212 { m_Size.y = val; }
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::SetOrigin ( coord_type  x,
coord_type  y 
)
inline

Definition at line 199 of file box2.h.

199 { m_Pos.x = x; m_Pos.y = y; }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
void BOX2< Vec >::SetSize ( const Vec &  size)
inline

Definition at line 200 of file box2.h.

Referenced by BOX2< VECTOR2I >::Compute().

200 { m_Size = size; }
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::SetSize ( coord_type  w,
coord_type  h 
)
inline

Definition at line 201 of file box2.h.

201 { m_Size.x = w; m_Size.y = h; }
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::SetWidth ( coord_type  val)
inline

Definition at line 211 of file box2.h.

211 { m_Size.x = val; }
Vec m_Size
Definition: box2.h:45
template<class Vec>
void BOX2< Vec >::SetX ( coord_type  val)
inline

Definition at line 209 of file box2.h.

209 { m_Pos.x = val; }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
void BOX2< Vec >::SetY ( coord_type  val)
inline

Definition at line 210 of file box2.h.

210 { m_Pos.y = val; }
Vec m_Pos
Definition: box2.h:44
template<class Vec>
ecoord_type BOX2< Vec >::SquaredDistance ( const Vec &  aP) const
inline

Definition at line 406 of file box2.h.

Referenced by SHAPE_LINE_CHAIN::Collide(), BOX2< VECTOR2I >::Distance(), and SHAPE_INDEX_LIST< PNS::ITEM * >::Query().

407  {
408  ecoord_type x2 = m_Pos.x + m_Size.x;
409  ecoord_type y2 = m_Pos.y + m_Size.y;
410  ecoord_type xdiff = std::max( aP.x < m_Pos.x ? m_Pos.x - aP.x : m_Pos.x - x2, (ecoord_type) 0 );
411  ecoord_type ydiff = std::max( aP.y < m_Pos.y ? m_Pos.y - aP.y : m_Pos.y - y2, (ecoord_type) 0 );
412  return xdiff * xdiff + ydiff * ydiff;
413  }
Vec::extended_type ecoord_type
Definition: box2.h:49
Vec m_Pos
Definition: box2.h:44
#define max(a, b)
Definition: auxiliary.h:86
Vec m_Size
Definition: box2.h:45
template<class Vec>
ecoord_type BOX2< Vec >::SquaredDistance ( const BOX2< Vec > &  aBox) const
inline

Function SquaredDistance returns the square of the minimum distance between self and box aBox.

Parameters
aBoxthe other box
Returns
The distance, squared

Definition at line 426 of file box2.h.

427  {
428  ecoord_type s = 0;
429 
430  if( aBox.m_Pos.x + aBox.m_Size.x < m_Pos.x )
431  {
432  ecoord_type d = aBox.m_Pos.x + aBox.m_Size.x - m_Pos.x;
433  s += d * d;
434  }
435  else if( aBox.m_Pos.x > m_Pos.x + m_Size.x )
436  {
437  ecoord_type d = aBox.m_Pos.x - m_Size.x - m_Pos.x;
438  s += d * d;
439  }
440 
441  if( aBox.m_Pos.y + aBox.m_Size.y < m_Pos.y )
442  {
443  ecoord_type d = aBox.m_Pos.y + aBox.m_Size.y - m_Pos.y;
444  s += d * d;
445  }
446  else if( aBox.m_Pos.y > m_Pos.y + m_Size.y )
447  {
448  ecoord_type d = aBox.m_Pos.y - m_Size.y - m_Pos.y;
449  s += d * d;
450  }
451 
452  return s;
453  }
Vec::extended_type ecoord_type
Definition: box2.h:49
Vec m_Pos
Definition: box2.h:44
Vec m_Size
Definition: box2.h:45

Member Data Documentation

template<class Vec>
Vec BOX2< Vec >::m_Size
private

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