pcbnew: insulated islands in copper pour removed
This commit is contained in:
parent
2ffa08973c
commit
7c5feb61e7
|
@ -5,6 +5,18 @@ Started 2007-June-11
|
|||
Please add newer entries at the top, list the date and your name with
|
||||
email address.
|
||||
|
||||
2008-oct-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
|
||||
================================================================================
|
||||
+pcbnew:
|
||||
More about copper zones filled without grid (by polygons)
|
||||
Currently for tests only (work in progress).
|
||||
now working
|
||||
thermal reliefs.
|
||||
texts on copper zones.
|
||||
Removing insulated copper islands.
|
||||
currently : not implemented:
|
||||
trapezoidal pads
|
||||
|
||||
2008-oct-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
|
||||
================================================================================
|
||||
+pcbnew:
|
||||
|
|
|
@ -570,7 +570,7 @@ enum main_id {
|
|||
ID_POPUP_PCB_PLACE_ZONE_OUTLINES,
|
||||
ID_POPUP_PCB_DRAG_ZONE_OUTLINE_SEGMENT,
|
||||
ID_POPUP_PCB_PLACE_DRAGGED_ZONE_OUTLINE_SEGMENT,
|
||||
ID_POPUP_ZONE_UNUSED3,
|
||||
ID_POPUP_PCB_REMOVE_FILLED_AREAS,
|
||||
ID_POPUP_ZONE_UNUSED4,
|
||||
|
||||
ID_POPUP_PCB_DELETE_MARKER,
|
||||
|
|
|
@ -143,6 +143,7 @@ set(PCBNEW_SRCS
|
|||
zones_by_polygon.cpp
|
||||
zones_convert_brd_items_to_polygons.cpp
|
||||
zone_filling_algorithm.cpp
|
||||
zones_polygons_insulated_copper_islands.cpp
|
||||
zones_test_and_combine_areas.cpp
|
||||
)
|
||||
|
||||
|
|
|
@ -101,6 +101,12 @@ public:
|
|||
|
||||
EDA_Rect GetBoundingBox();
|
||||
|
||||
/**
|
||||
* Function Test_For_Copper_Island_And_Remove__Insulated_Islands
|
||||
* Remove insulated copper islands found in m_FilledPolysList.
|
||||
* @param aPcb = the board to analyse
|
||||
*/
|
||||
void Test_For_Copper_Island_And_Remove_Insulated_Islands( BOARD* aPcb );
|
||||
|
||||
/**
|
||||
* Function DrawWhileCreateOutline
|
||||
|
@ -157,7 +163,7 @@ public:
|
|||
* used in BuildFilledPolysListData when calculating filled areas in a zone
|
||||
* Non copper areas are pads and track and their clearance area
|
||||
* The filled copper area must be computed before
|
||||
* BuildFilledPolysListData() call this function just after creating the
|
||||
* BuildFilledPolysListData() call this function just after creating the
|
||||
* filled copper area polygon (without clearence areas
|
||||
* @param aPcb: the current board
|
||||
*/
|
||||
|
|
|
@ -68,6 +68,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
case ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE:
|
||||
case ID_POPUP_PCB_DELETE_ZONE_LAST_CREATED_CORNER:
|
||||
case ID_POPUP_PCB_FILL_ALL_ZONES:
|
||||
case ID_POPUP_PCB_REMOVE_FILLED_AREAS:
|
||||
case ID_POPUP_PCB_PLACE_ZONE_CORNER:
|
||||
case ID_POPUP_PCB_PLACE_ZONE_OUTLINES:
|
||||
case ID_POPUP_PCB_EDIT_ZONE_PARAMS:
|
||||
|
@ -542,6 +543,22 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
DrawPanel->MouseToCursorSchema();
|
||||
Fill_All_Zones( &dc );
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_REMOVE_FILLED_AREAS: // Remove all zones :
|
||||
if( m_Pcb->m_Zone )
|
||||
{
|
||||
m_Pcb->m_Zone->DeleteStructList();
|
||||
m_Pcb->m_Zone = NULL;
|
||||
m_Pcb->m_NbSegmZone = 0;
|
||||
}
|
||||
for( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ )
|
||||
{
|
||||
ZONE_CONTAINER* zone_container = m_Pcb->GetArea( ii );
|
||||
zone_container->m_FilledPolysList.clear();;
|
||||
}
|
||||
GetScreen()->SetModify();
|
||||
DrawPanel->Refresh();
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_FILL_ZONE:
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
|
|
|
@ -13,7 +13,8 @@ LIBVIEWER3D = ../3d-viewer/3d-viewer.a
|
|||
|
||||
ZONE_FILES = zones_by_polygon.o zones_test_and_combine_areas.o\
|
||||
zone_filling_algorithm.o\
|
||||
zones_convert_brd_items_to_polygons.o
|
||||
zones_convert_brd_items_to_polygons.o\
|
||||
zones_polygons_insulated_copper_islands.o
|
||||
|
||||
SPECCTRA_TOOLS = specctra.o specctra_export.o dsn.o specctra_import.o
|
||||
|
||||
|
|
|
@ -338,8 +338,11 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
|
|||
case ID_PCB_ZONES_BUTT:
|
||||
if( m_Pcb->m_ZoneDescriptorList.size() > 0 )
|
||||
{
|
||||
aPopMenu->AppendSeparator();
|
||||
ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_FILL_ALL_ZONES,
|
||||
_( "Fill or Refill All Zones" ), fill_zone_xpm );
|
||||
ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_REMOVE_FILLED_AREAS,
|
||||
_( "Remove Filled Areas" ), fill_zone_xpm );
|
||||
aPopMenu->AppendSeparator();
|
||||
}
|
||||
|
||||
|
|
|
@ -4,10 +4,6 @@
|
|||
// Licence: GPL License
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if defined (__GNUG__) && !defined (NO_GCC_PRAGMA)
|
||||
#pragma implementation "dialog_zones_by_polygon.h"
|
||||
#endif
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
|
|
@ -13,6 +13,9 @@ using namespace std;
|
|||
|
||||
#include "PolyLine.h"
|
||||
|
||||
extern void Test_For_Copper_Island_And_Remove( BOARD* aPcb, ZONE_CONTAINER* aZone_container );
|
||||
|
||||
|
||||
// Local Functions:
|
||||
void AddTrackWithClearancePolygon( Bool_Engine* aBooleng,
|
||||
TRACK& aTrack, int aClearanceValue );
|
||||
|
@ -181,6 +184,10 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
|
|||
}
|
||||
|
||||
delete booleng;
|
||||
|
||||
// Remove insulated islands:
|
||||
if ( GetNet() > 0 )
|
||||
Test_For_Copper_Island_And_Remove_Insulated_Islands( aPcb );
|
||||
}
|
||||
|
||||
|
||||
|
@ -310,12 +317,12 @@ void AddThermalReliefPadPolygon( Bool_Engine* aBooleng,
|
|||
}
|
||||
corners_buffer.push_back( corner_end.x );
|
||||
corners_buffer.push_back( corner_end.y );
|
||||
|
||||
|
||||
/* add the radius lines */
|
||||
corner.x = corner.y = aThermalGap / 2;
|
||||
corners_buffer.push_back( corner.x );
|
||||
corners_buffer.push_back( corner.y );
|
||||
|
||||
|
||||
|
||||
// Now, add the 4 holes ( each is the pattern, rotated by 0, 90, 180 and 270 deg
|
||||
angle = 450; // TODO: problems with kbool if angle = 0 (bad filled polygon on some pads, but not alls)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
set(POLYGON_SRCS
|
||||
math_for_graphics.cpp
|
||||
PolyLine.cpp)
|
||||
PolyLine.cpp
|
||||
polygon_test_point_inside.cpp
|
||||
)
|
||||
|
||||
add_library(polygon ${POLYGON_SRCS})
|
||||
|
|
|
@ -96,7 +96,7 @@ public:
|
|||
class CPolyPt
|
||||
{
|
||||
public:
|
||||
CPolyPt( int qx = 0, int qy = 0, bool qf = FALSE )
|
||||
CPolyPt( int qx = 0, int qy = 0, bool qf = false )
|
||||
{ x = qx; y = qy; end_contour = qf; utility = 0; };
|
||||
int x;
|
||||
int y;
|
||||
|
@ -104,6 +104,8 @@ public:
|
|||
int utility;
|
||||
};
|
||||
|
||||
#include "polygon_test_point_inside.h"
|
||||
|
||||
class CPolyLine
|
||||
{
|
||||
public:
|
||||
|
@ -116,11 +118,11 @@ public:
|
|||
|
||||
// functions for modifying polyline
|
||||
void Start( int layer, int x, int y, int hatch );
|
||||
void AppendCorner( int x, int y, int style = STRAIGHT, bool bDraw = TRUE );
|
||||
void AppendCorner( int x, int y, int style = STRAIGHT, bool bDraw = false );
|
||||
void InsertCorner( int ic, int x, int y );
|
||||
void DeleteCorner( int ic, bool bDraw = TRUE );
|
||||
void DeleteCorner( int ic, bool bDraw = false );
|
||||
void MoveCorner( int ic, int x, int y );
|
||||
void Close( int style = STRAIGHT, bool bDraw = TRUE );
|
||||
void Close( int style = STRAIGHT, bool bDraw = false );
|
||||
void RemoveContour( int icont );
|
||||
|
||||
void RemoveAllContours( void );
|
||||
|
@ -170,7 +172,7 @@ public:
|
|||
int RestoreArcs( std::vector<CArc> * arc_array, std::vector<CPolyLine*> * pa = NULL );
|
||||
|
||||
int NormalizeAreaOutlines( std::vector<CPolyLine*> * pa = NULL,
|
||||
bool bRetainArcs = FALSE );
|
||||
bool bRetainArcs = false );
|
||||
|
||||
// KBOOL functions
|
||||
|
||||
|
@ -214,7 +216,7 @@ public:
|
|||
* 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 == false, try to retain arcs in polys
|
||||
* @return number of external contours, or -1 if error
|
||||
*/
|
||||
int NormalizeWithKbool( std::vector<CPolyLine*> * aExtraPolyList, bool bRetainArcs );
|
||||
|
|
|
@ -6,7 +6,9 @@ COMMON =
|
|||
|
||||
OBJECTS= \
|
||||
PolyLine.o\
|
||||
math_for_graphics.o
|
||||
math_for_graphics.o\
|
||||
polygon_test_point_inside.o
|
||||
|
||||
|
||||
PolyLine.o: PolyLine.cpp PolyLine.h
|
||||
|
||||
|
|
Loading…
Reference in New Issue