Loading gerbview/makefile.include +2 −1 Original line number Original line Diff line number Diff line 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\ EXTRACPPFLAGS= -DGERBVIEW -DPCBNEW -fno-strict-aliasing\ -I./ -I../gerbview -I../include\ -I./ -I../gerbview -I../include\ Loading makefile.gtk +1 −1 Original line number Original line Diff line number Diff line MAKEGTK = $(MAKE) -f makefile.gtk 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_BIN = eeschema eeschema/plugins pcbnew cvpcb kicad gerbview KICAD_SUBDIRS_RES = internat modules template library KICAD_SUBDIRS_RES = internat modules template library KICAD_SUBDIRS_HELP = help KICAD_SUBDIRS_HELP = help Loading pcbnew/pcbframe.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -572,7 +572,7 @@ void WinEDA_PcbFrame::GetKicadAbout( wxCommandEvent& event ) /**********************************************************/ /**********************************************************/ { { wxString extra_message = 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) extra_message << wxT("version ") << wxT(KBOOL_VERSION) << wxT("\nsee http://boolean.klaasholwerda.nl/bool.html\n"); << wxT("\nsee http://boolean.klaasholwerda.nl/bool.html\n"); Loading polygon/PolyLine.cpp +12 −9 Original line number Original line Diff line number Diff line Loading @@ -30,19 +30,22 @@ CPolyLine::CPolyLine() CPolyLine::~CPolyLine() CPolyLine::~CPolyLine() { { Undraw(); Undraw(); if ( m_Kbool_Poly_Engine ) delete m_Kbool_Poly_Engine; } } /** Function NormalizeWithKbool /** Function NormalizeWithKbool * Use the Kbool Library to clip contours: if outlines are crossing, the self-crossing polygon * 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 * 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 * if more than one outside contour are found, extra CPolyLines will be created * because copper areas have only one outside contour * because copper areas have only one outside contour * Therefore, if this results in new CPolyLines, return them as std::vector pa * Therefore, if this results in new CPolyLines, return them as std::vector pa * @param pa: pointer on a std::vector<CPolyLine*> to store extra CPolyLines * @param aExtraPolys: pointer on a std::vector<CPolyLine*> to store extra CPolyLines * @param bRetainArcs == TRUE, try to retain arcs in polys * @param bRetainArcs == TRUE, try to retain arcs in polys * @return number of external contours, or -1 if error * @return number of external contours, or -1 if error */ */ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArcs ) int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * aExtraPolyList, bool bRetainArcs ) { { std::vector<CArc> arc_array; std::vector<CArc> arc_array; std::vector <void*> hole_array; // list of holes std::vector <void*> hole_array; // list of holes Loading Loading @@ -111,10 +114,10 @@ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArc Close(); Close(); n_ext_cont++; 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 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; bool first = true; while( m_Kbool_Poly_Engine->PolygonHasMorePoints() ) // read next external contour while( m_Kbool_Poly_Engine->PolygonHasMorePoints() ) // read next external contour { { Loading Loading @@ -153,13 +156,13 @@ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArc int y = (*hole)[1]; int y = (*hole)[1]; if( TestPointInside( x, y ) ) if( TestPointInside( x, y ) ) polyline = this; polyline = this; else if( pa ) else if( aExtraPolyList ) { { for( int ext_ic = 0; ext_ic<n_ext_cont - 1; ext_ic++ ) for( int ext_ic = 0; ext_ic<n_ext_cont - 1; ext_ic++ ) { { if( (*pa)[ext_ic]->TestPointInside( x, y ) ) if( (*aExtraPolyList)[ext_ic]->TestPointInside( x, y ) ) { { polyline = (*pa)[ext_ic]; polyline = (*aExtraPolyList)[ext_ic]; break; break; } } } } Loading @@ -182,7 +185,7 @@ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArc } } if( bRetainArcs ) if( bRetainArcs ) RestoreArcs( &arc_array, pa ); RestoreArcs( &arc_array, aExtraPolyList ); delete m_Kbool_Poly_Engine; delete m_Kbool_Poly_Engine; m_Kbool_Poly_Engine = NULL; m_Kbool_Poly_Engine = NULL; Loading Loading @@ -1142,7 +1145,7 @@ void CPolyLine::Hatch() return; return; } } int layer = m_layer; int layer = GetLayer(); if( GetClosed() ) // If not closed, the poly is beeing created and not finalised. Not not hatch if( GetClosed() ) // If not closed, the poly is beeing created and not finalised. Not not hatch { { Loading polygon/PolyLine.h +19 −14 Original line number Original line Diff line number Diff line Loading @@ -201,17 +201,22 @@ public: * @param arc_array : return data on arcs in arc_array * @param arc_array : return data on arcs in arc_array * @return error: 0 if Ok, 1 if error * @return error: 0 if Ok, 1 if error */ */ int MakeKboolPoly( int aStart_contour = -1, int aEnd_contour = -1, std::vector<CArc> * arc_array = NULL ); int MakeKboolPoly( int aStart_contour = -1, int aEnd_contour = -1, std::vector<CArc> * arc_array = NULL ); /** Function NormalizeWithKbool /** Function NormalizeWithKbool * Use the Kbool Library to clip contours: if outlines are crossing, the self-crossing polygon * 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 * is converted to non self-crossing polygon by adding extra points at the crossing locations * If this results in new polygons, return them as std::vector pa * and reordering corners * @param pa: pointer on a std::vector<CPolyLine*> to store extra polylines * 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<CPolyLine*> to store extra CPolyLines * @param bRetainArcs == TRUE, try to retain arcs in polys * @param bRetainArcs == TRUE, try to retain arcs in polys * @return number of external contours, or -1 if error * @return number of external contours, or -1 if error */ */ int NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArcs ); int NormalizeWithKbool( std::vector<CPolyLine*> * aExtraPolyList, bool bRetainArcs ); private: private: int m_layer; // layer to draw on int m_layer; // layer to draw on Loading Loading
gerbview/makefile.include +2 −1 Original line number Original line Diff line number Diff line 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\ EXTRACPPFLAGS= -DGERBVIEW -DPCBNEW -fno-strict-aliasing\ -I./ -I../gerbview -I../include\ -I./ -I../gerbview -I../include\ Loading
makefile.gtk +1 −1 Original line number Original line Diff line number Diff line MAKEGTK = $(MAKE) -f makefile.gtk 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_BIN = eeschema eeschema/plugins pcbnew cvpcb kicad gerbview KICAD_SUBDIRS_RES = internat modules template library KICAD_SUBDIRS_RES = internat modules template library KICAD_SUBDIRS_HELP = help KICAD_SUBDIRS_HELP = help Loading
pcbnew/pcbframe.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -572,7 +572,7 @@ void WinEDA_PcbFrame::GetKicadAbout( wxCommandEvent& event ) /**********************************************************/ /**********************************************************/ { { wxString extra_message = 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) extra_message << wxT("version ") << wxT(KBOOL_VERSION) << wxT("\nsee http://boolean.klaasholwerda.nl/bool.html\n"); << wxT("\nsee http://boolean.klaasholwerda.nl/bool.html\n"); Loading
polygon/PolyLine.cpp +12 −9 Original line number Original line Diff line number Diff line Loading @@ -30,19 +30,22 @@ CPolyLine::CPolyLine() CPolyLine::~CPolyLine() CPolyLine::~CPolyLine() { { Undraw(); Undraw(); if ( m_Kbool_Poly_Engine ) delete m_Kbool_Poly_Engine; } } /** Function NormalizeWithKbool /** Function NormalizeWithKbool * Use the Kbool Library to clip contours: if outlines are crossing, the self-crossing polygon * 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 * 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 * if more than one outside contour are found, extra CPolyLines will be created * because copper areas have only one outside contour * because copper areas have only one outside contour * Therefore, if this results in new CPolyLines, return them as std::vector pa * Therefore, if this results in new CPolyLines, return them as std::vector pa * @param pa: pointer on a std::vector<CPolyLine*> to store extra CPolyLines * @param aExtraPolys: pointer on a std::vector<CPolyLine*> to store extra CPolyLines * @param bRetainArcs == TRUE, try to retain arcs in polys * @param bRetainArcs == TRUE, try to retain arcs in polys * @return number of external contours, or -1 if error * @return number of external contours, or -1 if error */ */ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArcs ) int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * aExtraPolyList, bool bRetainArcs ) { { std::vector<CArc> arc_array; std::vector<CArc> arc_array; std::vector <void*> hole_array; // list of holes std::vector <void*> hole_array; // list of holes Loading Loading @@ -111,10 +114,10 @@ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArc Close(); Close(); n_ext_cont++; 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 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; bool first = true; while( m_Kbool_Poly_Engine->PolygonHasMorePoints() ) // read next external contour while( m_Kbool_Poly_Engine->PolygonHasMorePoints() ) // read next external contour { { Loading Loading @@ -153,13 +156,13 @@ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArc int y = (*hole)[1]; int y = (*hole)[1]; if( TestPointInside( x, y ) ) if( TestPointInside( x, y ) ) polyline = this; polyline = this; else if( pa ) else if( aExtraPolyList ) { { for( int ext_ic = 0; ext_ic<n_ext_cont - 1; ext_ic++ ) for( int ext_ic = 0; ext_ic<n_ext_cont - 1; ext_ic++ ) { { if( (*pa)[ext_ic]->TestPointInside( x, y ) ) if( (*aExtraPolyList)[ext_ic]->TestPointInside( x, y ) ) { { polyline = (*pa)[ext_ic]; polyline = (*aExtraPolyList)[ext_ic]; break; break; } } } } Loading @@ -182,7 +185,7 @@ int CPolyLine::NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArc } } if( bRetainArcs ) if( bRetainArcs ) RestoreArcs( &arc_array, pa ); RestoreArcs( &arc_array, aExtraPolyList ); delete m_Kbool_Poly_Engine; delete m_Kbool_Poly_Engine; m_Kbool_Poly_Engine = NULL; m_Kbool_Poly_Engine = NULL; Loading Loading @@ -1142,7 +1145,7 @@ void CPolyLine::Hatch() return; return; } } int layer = m_layer; int layer = GetLayer(); if( GetClosed() ) // If not closed, the poly is beeing created and not finalised. Not not hatch if( GetClosed() ) // If not closed, the poly is beeing created and not finalised. Not not hatch { { Loading
polygon/PolyLine.h +19 −14 Original line number Original line Diff line number Diff line Loading @@ -201,17 +201,22 @@ public: * @param arc_array : return data on arcs in arc_array * @param arc_array : return data on arcs in arc_array * @return error: 0 if Ok, 1 if error * @return error: 0 if Ok, 1 if error */ */ int MakeKboolPoly( int aStart_contour = -1, int aEnd_contour = -1, std::vector<CArc> * arc_array = NULL ); int MakeKboolPoly( int aStart_contour = -1, int aEnd_contour = -1, std::vector<CArc> * arc_array = NULL ); /** Function NormalizeWithKbool /** Function NormalizeWithKbool * Use the Kbool Library to clip contours: if outlines are crossing, the self-crossing polygon * 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 * is converted to non self-crossing polygon by adding extra points at the crossing locations * If this results in new polygons, return them as std::vector pa * and reordering corners * @param pa: pointer on a std::vector<CPolyLine*> to store extra polylines * 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<CPolyLine*> to store extra CPolyLines * @param bRetainArcs == TRUE, try to retain arcs in polys * @param bRetainArcs == TRUE, try to retain arcs in polys * @return number of external contours, or -1 if error * @return number of external contours, or -1 if error */ */ int NormalizeWithKbool( std::vector<CPolyLine*> * pa, bool bRetainArcs ); int NormalizeWithKbool( std::vector<CPolyLine*> * aExtraPolyList, bool bRetainArcs ); private: private: int m_layer; // layer to draw on int m_layer; // layer to draw on Loading