MODULE::GetBoundingBox() takes in account the clearence around the pads. other very minor changes
This commit is contained in:
parent
89acca7daf
commit
0ff83cbab7
|
@ -5,6 +5,12 @@ Started 2007-June-11
|
|||
Please add newer entries at the top, list the date and your name with
|
||||
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>
|
||||
================================================================================
|
||||
|
@ -35,8 +41,8 @@ email address.
|
|||
some code cleaning and comment translations.
|
||||
added:
|
||||
/** EDA_Rect::Merge( EDA_Rect & aRect )
|
||||
* Modify Position and Size of this in order to contains the given rect
|
||||
* mainly used to calculate bouding boxes
|
||||
* Modify Position and Size of this in order to contain the given rect
|
||||
* mainly used to calculate bounding boxes
|
||||
* @param aRect = given rect to merge with this
|
||||
*/
|
||||
|
||||
|
|
|
@ -123,9 +123,9 @@ void EDA_BaseStruct::Place( WinEDA_DrawFrame* frame, wxDC* DC )
|
|||
|
||||
// see base_struct.h
|
||||
SEARCH_RESULT EDA_BaseStruct::IterateForward( EDA_BaseStruct* listStart,
|
||||
INSPECTOR* inspector,
|
||||
const void* testData,
|
||||
const KICAD_T scanTypes[] )
|
||||
INSPECTOR* inspector,
|
||||
const void* testData,
|
||||
const KICAD_T scanTypes[] )
|
||||
{
|
||||
EDA_BaseStruct* p = listStart;
|
||||
|
||||
|
@ -200,11 +200,11 @@ void EDA_BaseStruct::Show( int nestLevel, std::ostream& os )
|
|||
NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str() << ">\n";
|
||||
|
||||
/*
|
||||
* EDA_BaseStruct* kid = m_Son;
|
||||
* for( ; kid; kid = kid->Pnext )
|
||||
* {
|
||||
* kid->Show( nestLevel+1, os );
|
||||
* }
|
||||
* EDA_BaseStruct* kid = m_Son;
|
||||
* for( ; kid; kid = kid->Pnext )
|
||||
* {
|
||||
* kid->Show( nestLevel+1, os );
|
||||
* }
|
||||
*/
|
||||
NestedSpace( nestLevel + 1, os ) << "Need ::Show() override\n";
|
||||
|
||||
|
@ -729,33 +729,76 @@ bool EDA_Rect::Intersects( const EDA_Rect aRect ) const
|
|||
/**************************************************/
|
||||
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 )
|
||||
{
|
||||
// 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_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;
|
||||
}
|
||||
}
|
||||
else
|
||||
else // size.x < 0:
|
||||
{
|
||||
// The inflate is valid.
|
||||
m_Pos.x -= dx;
|
||||
m_Size.x += 2 * dx;
|
||||
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 )
|
||||
{
|
||||
// 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_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;
|
||||
}
|
||||
}
|
||||
else
|
||||
else // size.y < 0:
|
||||
{
|
||||
// The inflate is valid.
|
||||
m_Pos.y -= dy;
|
||||
m_Size.y += 2 * dy;
|
||||
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;
|
||||
|
@ -772,14 +815,14 @@ void EDA_Rect::Merge( const EDA_Rect& aRect )
|
|||
Normalize(); // ensure width and height >= 0
|
||||
EDA_Rect rect = aRect;
|
||||
rect.Normalize(); // ensure width and height >= 0
|
||||
wxPoint end = GetEnd();
|
||||
wxPoint rect_end = rect.GetEnd();
|
||||
wxPoint end = GetEnd();
|
||||
wxPoint rect_end = rect.GetEnd();
|
||||
|
||||
// Change origin and size in order to contain the given rect
|
||||
m_Pos.x = MIN( m_Pos.x, rect.m_Pos.x );
|
||||
m_Pos.y = MIN( m_Pos.y, rect.m_Pos.y );
|
||||
end.x = MAX( end.x, rect_end.x );
|
||||
end.y = MAX( end.y, rect_end.y );
|
||||
end.x = MAX( end.x, rect_end.x );
|
||||
end.y = MAX( end.y, rect_end.y );
|
||||
SetEnd( end );
|
||||
}
|
||||
|
||||
|
|
|
@ -282,13 +282,9 @@ EDA_Rect EDA_SchComponentStruct::GetBoundingBox()
|
|||
ret.Merge( m_Field[i].GetBoundaryBox() );
|
||||
}
|
||||
|
||||
// ... add padding TODO: improve this
|
||||
ret.m_Pos.x -= PADDING;
|
||||
ret.m_Pos.y -= PADDING;
|
||||
ret.m_Size.x += 2*PADDING;
|
||||
ret.m_Size.y += 2*PADDING;
|
||||
// ... add padding
|
||||
ret.Inflate(PADDING, 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ and then:
|
|||
|
||||
-- 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 install
|
||||
|
||||
|
|
|
@ -3,16 +3,13 @@ if(ZLIB_FOUND)
|
|||
message(STATUS "Check for installed zlib -- found")
|
||||
else(ZLIB_FOUND)
|
||||
message(STATUS "Check for installed zlib -- not found")
|
||||
if(NOT MINGW)
|
||||
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
|
||||
# include files are in ${wxWidgets_ROOT_DIR}/src/zlib
|
||||
# and the corresponding library is libwxzlib-<version>.a (like libwxzlib-2.8.a)
|
||||
# and we try to use it
|
||||
include_directories(${wxWidgets_ROOT_DIR}/src/zlib)
|
||||
endif(NOT MINGW)
|
||||
message(STATUS "Use wxWidgets zlib")
|
||||
# zlib is not installed, and in this case wxWidgets creates its own zlib library
|
||||
# include files are in ${wxWidgets_ROOT_DIR}/src/zlib
|
||||
# and the corresponding library is libwxzlib-<version>.a (like libwxzlib-2.8.a)
|
||||
# and we try to use it
|
||||
INCLUDE_DIRECTORIES( ${wxWidgets_ROOT_DIR}/src/zlib)
|
||||
set(ZLIB_LIBRARIES ${wxWidgets_ROOT_DIR}/lib/libwxzlib-2.8.a)
|
||||
endif(ZLIB_FOUND)
|
||||
|
||||
set(MINIZIP_SRCS
|
||||
|
|
|
@ -1054,6 +1054,7 @@ void MODULE::SetRectangleExinscrit()
|
|||
/**
|
||||
* Function GetBoundingBox
|
||||
* 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()
|
||||
{
|
||||
|
@ -1078,6 +1079,10 @@ EDA_Rect MODULE::GetBoundingBox()
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -87,6 +87,7 @@ public:
|
|||
/**
|
||||
* Function GetBoundingBox
|
||||
* returns the bounding box of this Footprint
|
||||
* Mainly used to redraw the screen area occuped by the footprint
|
||||
*/
|
||||
EDA_Rect GetBoundingBox();
|
||||
|
||||
|
|
Loading…
Reference in New Issue