Commit 0ff83cba authored by charras's avatar charras

MODULE::GetBoundingBox() takes in account the clearence around the pads. other very minor changes

parent 89acca7d
...@@ -5,6 +5,12 @@ Started 2007-June-11 ...@@ -5,6 +5,12 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2008-Mar-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+pcbnew
MODULE::GetBoundingBox() takes in account the clearence around the pads
(the clearence limit shape around pads (when shown) was not always erased )
2008-Mar-17 UPDATE Dick Hollenbeck <dick@softplc.com> 2008-Mar-17 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================ ================================================================================
...@@ -35,8 +41,8 @@ email address. ...@@ -35,8 +41,8 @@ email address.
some code cleaning and comment translations. some code cleaning and comment translations.
added: added:
/** EDA_Rect::Merge( EDA_Rect & aRect ) /** EDA_Rect::Merge( EDA_Rect & aRect )
* Modify Position and Size of this in order to contains the given rect * Modify Position and Size of this in order to contain the given rect
* mainly used to calculate bouding boxes * mainly used to calculate bounding boxes
* @param aRect = given rect to merge with this * @param aRect = given rect to merge with this
*/ */
......
...@@ -729,11 +729,20 @@ bool EDA_Rect::Intersects( const EDA_Rect aRect ) const ...@@ -729,11 +729,20 @@ bool EDA_Rect::Intersects( const EDA_Rect aRect ) const
/**************************************************/ /**************************************************/
EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy ) EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy )
/**************************************************/ /**************************************************/
/** Function Inflate
* Inflate "this": move each horizontal edge by dx and each vertical edge by dy
* toward rect outside
* if dx and/or dy is negative, move toward rect inside (deflate)
* Works for positive and negative rect size
*
*/
{ {
if( -2 * dx > m_Size.x ) if( m_Size.x >= 0 )
{
if( m_Size.x < -2 * dx )
{ {
// Don't allow deflate to eat more width than we have, // Don't allow deflate to eat more width than we have,
// a well-defined rectangle cannot have negative width.
m_Pos.x += m_Size.x / 2; m_Pos.x += m_Size.x / 2;
m_Size.x = 0; m_Size.x = 0;
} }
...@@ -743,11 +752,29 @@ EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy ) ...@@ -743,11 +752,29 @@ EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy )
m_Pos.x -= dx; m_Pos.x -= dx;
m_Size.x += 2 * dx; m_Size.x += 2 * dx;
} }
}
else // size.x < 0:
{
if( m_Size.x > -2 * dx )
{
// Don't allow deflate to eat more width than we have,
m_Pos.x -= m_Size.x / 2;
m_Size.x = 0;
}
else
{
// The inflate is valid.
m_Pos.x += dx;
m_Size.x -= 2 * dx; // m_Size.x <0: inflate when dx > 0
}
}
if( -2 * dy > m_Size.y )
if( m_Size.y >= 0 )
{
if( m_Size.y < -2 * dy )
{ {
// Don't allow deflate to eat more height than we have, // Don't allow deflate to eat more height than we have,
// a well-defined rectangle cannot have negative height.
m_Pos.y += m_Size.y / 2; m_Pos.y += m_Size.y / 2;
m_Size.y = 0; m_Size.y = 0;
} }
...@@ -757,6 +784,22 @@ EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy ) ...@@ -757,6 +784,22 @@ EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy )
m_Pos.y -= dy; m_Pos.y -= dy;
m_Size.y += 2 * dy; m_Size.y += 2 * dy;
} }
}
else // size.y < 0:
{
if( m_Size.y > 2 * dy )
{
// Don't allow deflate to eat more height than we have,
m_Pos.y -= m_Size.y / 2;
m_Size.y = 0;
}
else
{
// The inflate is valid.
m_Pos.y += dy;
m_Size.y -= 2 * dy; // m_Size.y <0: inflate when dy > 0
}
}
return *this; return *this;
} }
......
...@@ -282,13 +282,9 @@ EDA_Rect EDA_SchComponentStruct::GetBoundingBox() ...@@ -282,13 +282,9 @@ EDA_Rect EDA_SchComponentStruct::GetBoundingBox()
ret.Merge( m_Field[i].GetBoundaryBox() ); ret.Merge( m_Field[i].GetBoundaryBox() );
} }
// ... add padding TODO: improve this // ... add padding
ret.m_Pos.x -= PADDING; ret.Inflate(PADDING, PADDING);
ret.m_Pos.y -= PADDING;
ret.m_Size.x += 2*PADDING;
ret.m_Size.y += 2*PADDING;
// D( printf("final box: %d,%d, %d,%d\n", ret.m_Pos.x, ret.m_Pos.y, ret.m_Size.x, ret.m_Size.y); )
return ret; return ret;
} }
......
...@@ -68,7 +68,7 @@ and then: ...@@ -68,7 +68,7 @@ and then:
-- debug -- debug
cd build-debug cd build-debug
../confgiure --enable-unicode --enable-monolithic --enable-debug --enable-debug_gdb --disable-shared --with-msw --with-opengl ../configure --enable-unicode --enable-monolithic --enable-debug --enable-debug_gdb --disable-shared --with-msw --with-opengl
make make
make install make install
......
...@@ -3,16 +3,13 @@ if(ZLIB_FOUND) ...@@ -3,16 +3,13 @@ if(ZLIB_FOUND)
message(STATUS "Check for installed zlib -- found") message(STATUS "Check for installed zlib -- found")
else(ZLIB_FOUND) else(ZLIB_FOUND)
message(STATUS "Check for installed zlib -- not found") message(STATUS "Check for installed zlib -- not found")
if(NOT MINGW) message(STATUS "Use wxWidgets zlib")
message(FATAL_ERROR
"zlib was not found - it is required to build KiCad")
else(NOT MINGW)
# zlib is not installed, and in this case wxWidgets creates its own zlib library # zlib is not installed, and in this case wxWidgets creates its own zlib library
# include files are in ${wxWidgets_ROOT_DIR}/src/zlib # include files are in ${wxWidgets_ROOT_DIR}/src/zlib
# and the corresponding library is libwxzlib-<version>.a (like libwxzlib-2.8.a) # and the corresponding library is libwxzlib-<version>.a (like libwxzlib-2.8.a)
# and we try to use it # and we try to use it
include_directories(${wxWidgets_ROOT_DIR}/src/zlib) INCLUDE_DIRECTORIES( ${wxWidgets_ROOT_DIR}/src/zlib)
endif(NOT MINGW) set(ZLIB_LIBRARIES ${wxWidgets_ROOT_DIR}/lib/libwxzlib-2.8.a)
endif(ZLIB_FOUND) endif(ZLIB_FOUND)
set(MINIZIP_SRCS set(MINIZIP_SRCS
......
...@@ -1054,6 +1054,7 @@ void MODULE::SetRectangleExinscrit() ...@@ -1054,6 +1054,7 @@ void MODULE::SetRectangleExinscrit()
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* returns the full bounding box of this Footprint, including texts * returns the full bounding box of this Footprint, including texts
* Mainly used to redraw the screen area occuped by the footprint
*/ */
EDA_Rect MODULE::GetBoundingBox() EDA_Rect MODULE::GetBoundingBox()
{ {
...@@ -1078,6 +1079,10 @@ EDA_Rect MODULE::GetBoundingBox() ...@@ -1078,6 +1079,10 @@ EDA_Rect MODULE::GetBoundingBox()
area.Merge( text_area ); area.Merge( text_area );
} }
// Add the Clearence shape size: (shape around the pads when the clearence is shown
// Not optimized, but the draw cost is small (perhaps smaller than optimization)
area.Inflate(g_DesignSettings.m_TrackClearence, g_DesignSettings.m_TrackClearence);
return area; return area;
} }
......
...@@ -87,6 +87,7 @@ public: ...@@ -87,6 +87,7 @@ public:
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* returns the bounding box of this Footprint * returns the bounding box of this Footprint
* Mainly used to redraw the screen area occuped by the footprint
*/ */
EDA_Rect GetBoundingBox(); EDA_Rect GetBoundingBox();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment