diff --git a/gerbview/makefile.include b/gerbview/makefile.include index ca4049a828..c800604537 100644 --- a/gerbview/makefile.include +++ b/gerbview/makefile.include @@ -1,4 +1,5 @@ -EXTRALIBS = ../common/common.a ../bitmaps/libbitmaps.a ../polygon/lib_polygon.a +EXTRALIBS = ../common/common.a ../bitmaps/libbitmaps.a\ + ../polygon/lib_polygon.a ../polygon/kbool/src/libkbool.a EXTRACPPFLAGS= -DGERBVIEW -DPCBNEW -fno-strict-aliasing\ -I./ -I../gerbview -I../include\ diff --git a/makefile.gtk b/makefile.gtk index 966d120651..b58609e1ef 100644 --- a/makefile.gtk +++ b/makefile.gtk @@ -1,6 +1,6 @@ MAKEGTK = $(MAKE) -f makefile.gtk -KICAD_SUBDIRS = common bitmaps 3d-viewer polygon pcbnew eeschema eeschema/plugins cvpcb kicad gerbview +KICAD_SUBDIRS = common bitmaps 3d-viewer polygon polygon/kbool/src pcbnew eeschema eeschema/plugins cvpcb kicad gerbview KICAD_SUBDIRS_BIN = eeschema eeschema/plugins pcbnew cvpcb kicad gerbview KICAD_SUBDIRS_RES = internat modules template library KICAD_SUBDIRS_HELP = help diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 908a416883..d86d5f4838 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -572,7 +572,7 @@ void WinEDA_PcbFrame::GetKicadAbout( wxCommandEvent& event ) /**********************************************************/ { wxString extra_message = - wxT("\nPcbnew uses the kbool library (boolean operations on sets of 2d polygons)\n"); + wxT("\nPcbnew uses the kbool library \n"); extra_message << wxT("version ") << wxT(KBOOL_VERSION) << wxT("\nsee http://boolean.klaasholwerda.nl/bool.html\n"); diff --git a/polygon/PolyLine.cpp b/polygon/PolyLine.cpp index 68d232d60d..ab7895cad6 100644 --- a/polygon/PolyLine.cpp +++ b/polygon/PolyLine.cpp @@ -30,19 +30,22 @@ CPolyLine::CPolyLine() CPolyLine::~CPolyLine() { Undraw(); + if ( m_Kbool_Poly_Engine ) + delete m_Kbool_Poly_Engine; } /** Function NormalizeWithKbool * Use the Kbool Library to clip contours: if outlines are crossing, the self-crossing polygon * is converted to non self-crossing polygon by adding extra points at the crossing locations + * and reordering corners * if more than one outside contour are found, extra CPolyLines will be created * because copper areas have only one outside contour * Therefore, if this results in new CPolyLines, return them as std::vector pa - * @param pa: pointer on a std::vector to store extra CPolyLines + * @param aExtraPolys: pointer on a std::vector to store extra CPolyLines * @param bRetainArcs == TRUE, try to retain arcs in polys * @return number of external contours, or -1 if error */ -int CPolyLine::NormalizeWithKbool( std::vector * pa, bool bRetainArcs ) +int CPolyLine::NormalizeWithKbool( std::vector * aExtraPolyList, bool bRetainArcs ) { std::vector arc_array; std::vector hole_array; // list of holes @@ -111,10 +114,10 @@ int CPolyLine::NormalizeWithKbool( std::vector * pa, bool bRetainArc Close(); n_ext_cont++; } - else if( pa ) // a new outside contour is found: create a new CPolyLine + else if( aExtraPolyList ) // a new outside contour is found: create a new CPolyLine { polyline = new CPolyLine; // create new poly - pa->push_back( polyline ); // put it in array + aExtraPolyList->push_back( polyline ); // put it in array bool first = true; while( m_Kbool_Poly_Engine->PolygonHasMorePoints() ) // read next external contour { @@ -153,13 +156,13 @@ int CPolyLine::NormalizeWithKbool( std::vector * pa, bool bRetainArc int y = (*hole)[1]; if( TestPointInside( x, y ) ) polyline = this; - else if( pa ) + else if( aExtraPolyList ) { for( int ext_ic = 0; ext_icTestPointInside( x, y ) ) + if( (*aExtraPolyList)[ext_ic]->TestPointInside( x, y ) ) { - polyline = (*pa)[ext_ic]; + polyline = (*aExtraPolyList)[ext_ic]; break; } } @@ -182,7 +185,7 @@ int CPolyLine::NormalizeWithKbool( std::vector * pa, bool bRetainArc } if( bRetainArcs ) - RestoreArcs( &arc_array, pa ); + RestoreArcs( &arc_array, aExtraPolyList ); delete m_Kbool_Poly_Engine; m_Kbool_Poly_Engine = NULL; @@ -1142,7 +1145,7 @@ void CPolyLine::Hatch() return; } - int layer = m_layer; + int layer = GetLayer(); if( GetClosed() ) // If not closed, the poly is beeing created and not finalised. Not not hatch { diff --git a/polygon/PolyLine.h b/polygon/PolyLine.h index d846b82e1a..f65dfb1136 100644 --- a/polygon/PolyLine.h +++ b/polygon/PolyLine.h @@ -30,13 +30,13 @@ * false: holes are not linked: in this mode contours are added clockwise * and polygons added counter clockwise are holes */ -void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles = false); +void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles = false ); #define PCBU_PER_MIL 10 #define NM_PER_MIL 10 // 25400 -#define to_int( x ) (int) round( (x) ) +#define to_int( x ) (int) round( (x) ) #ifndef min #define min( x1, x2 ) ( (x1) > (x2) ) ? (x2) : (x1) #endif @@ -173,8 +173,8 @@ public: bool bThermal = FALSE, int spoke_w = 0 ); - int NormalizeAreaOutlines( std::vector * pa = NULL, - bool bRetainArcs = FALSE ); + int NormalizeAreaOutlines( std::vector * pa = NULL, + bool bRetainArcs = FALSE ); // KBOOL functions @@ -201,29 +201,34 @@ public: * @param arc_array : return data on arcs in arc_array * @return error: 0 if Ok, 1 if error */ - int MakeKboolPoly( int aStart_contour = -1, int aEnd_contour = -1, std::vector * arc_array = NULL ); + int MakeKboolPoly( int aStart_contour = -1, + int aEnd_contour = -1, + std::vector * arc_array = NULL ); /** Function NormalizeWithKbool * Use the Kbool Library to clip contours: if outlines are crossing, the self-crossing polygon - * is converted in 2 or more non self-crossing polygons - * If this results in new polygons, return them as std::vector pa - * @param pa: pointer on a std::vector to store extra polylines + * is converted to non self-crossing polygon by adding extra points at the crossing locations + * and reordering corners + * if more than one outside contour are found, extra CPolyLines will be created + * because copper areas have only one outside contour + * Therefore, if this results in new CPolyLines, return them as std::vector pa + * @param aExtraPolys: pointer on a std::vector to store extra CPolyLines * @param bRetainArcs == TRUE, try to retain arcs in polys * @return number of external contours, or -1 if error */ - int NormalizeWithKbool( std::vector * pa, bool bRetainArcs ); + int NormalizeWithKbool( std::vector * aExtraPolyList, bool bRetainArcs ); private: int m_layer; // layer to draw on int m_Width; // lines width when drawing. Provided but not really used int utility; public: - std::vector corner; // array of points for corners - std::vector side_style; // array of styles for sides - int m_HatchStyle; // hatch style, see enum above - std::vector m_HatchLines; // hatch lines + std::vector corner; // array of points for corners + std::vector side_style; // array of styles for sides + int m_HatchStyle; // hatch style, see enum above + std::vector m_HatchLines; // hatch lines private: - Bool_Engine * m_Kbool_Poly_Engine; // polygons set in kbool engine data + Bool_Engine* m_Kbool_Poly_Engine; // polygons set in kbool engine data bool bDrawn; }; diff --git a/polygon/kbool/include/_dl_itr.cpp b/polygon/kbool/include/_dl_itr.cpp index cd5bd5549d..53f50151b6 100644 --- a/polygon/kbool/include/_dl_itr.cpp +++ b/polygon/kbool/include/_dl_itr.cpp @@ -14,7 +14,7 @@ #endif #ifdef __UNIX__ -#include "kbool/include/_dl_itr.h" +#include "../include/_dl_itr.h" #endif //======================================================================= diff --git a/polygon/kbool/include/_lnk_itr.cpp b/polygon/kbool/include/_lnk_itr.cpp index 6993564c4c..716de3093a 100644 --- a/polygon/kbool/include/_lnk_itr.cpp +++ b/polygon/kbool/include/_lnk_itr.cpp @@ -13,7 +13,7 @@ #endif #ifdef __UNIX__ -#include "kbool/include/_lnk_itr.h" +#include "../include/_lnk_itr.h" #endif //=======================================================================