From 0ff83cbab7fbb49811c098502b581e14884e50c3 Mon Sep 17 00:00:00 2001 From: charras Date: Tue, 18 Mar 2008 11:53:52 +0000 Subject: [PATCH] MODULE::GetBoundingBox() takes in account the clearence around the pads. other very minor changes --- change_log.txt | 10 +++- common/base_struct.cpp | 103 +++++++++++++++++++++++++---------- eeschema/cmpclass.cpp | 8 +-- how-to-build-kicad.txt | 2 +- kicad/minizip/CMakeLists.txt | 17 +++--- pcbnew/class_module.cpp | 5 ++ pcbnew/class_module.h | 1 + 7 files changed, 97 insertions(+), 49 deletions(-) diff --git a/change_log.txt b/change_log.txt index 018d611800..f59f5c2732 100644 --- a/change_log.txt +++ b/change_log.txt @@ -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 +================================================================================ ++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 ================================================================================ @@ -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 */ diff --git a/common/base_struct.cpp b/common/base_struct.cpp index 8124539e6a..f1c9eb8edd 100644 --- a/common/base_struct.cpp +++ b/common/base_struct.cpp @@ -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 ); } diff --git a/eeschema/cmpclass.cpp b/eeschema/cmpclass.cpp index 99b870606a..bb68774e1a 100644 --- a/eeschema/cmpclass.cpp +++ b/eeschema/cmpclass.cpp @@ -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; } diff --git a/how-to-build-kicad.txt b/how-to-build-kicad.txt index a4c3c40656..f310de2156 100644 --- a/how-to-build-kicad.txt +++ b/how-to-build-kicad.txt @@ -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 diff --git a/kicad/minizip/CMakeLists.txt b/kicad/minizip/CMakeLists.txt index 7d66f0d33f..1d6e7f695d 100644 --- a/kicad/minizip/CMakeLists.txt +++ b/kicad/minizip/CMakeLists.txt @@ -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-.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-.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 diff --git a/pcbnew/class_module.cpp b/pcbnew/class_module.cpp index 2493ae2bdf..f9c2406f07 100644 --- a/pcbnew/class_module.cpp +++ b/pcbnew/class_module.cpp @@ -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; } diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h index 2f870971a1..22f7274d56 100644 --- a/pcbnew/class_module.h +++ b/pcbnew/class_module.h @@ -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();