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

This commit is contained in:
charras 2008-03-18 11:53:52 +00:00
parent 89acca7daf
commit 0ff83cbab7
7 changed files with 97 additions and 49 deletions

View File

@ -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.
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
*/ */

View File

@ -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 )
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 )
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;
} }

View File

@ -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;
} }

View File

@ -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

View File

@ -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

View File

@ -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()
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;
} }

View File

@ -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();