Do some ZONE_CONTAINED encapsulation.
This commit is contained in:
parent
57acee0d4e
commit
2455a6cc3b
|
@ -258,7 +258,7 @@ GLuint EDA_3D_CANVAS::CreateDrawGL_List()
|
||||||
if( curr_zone->m_FillMode == 0 )
|
if( curr_zone->m_FillMode == 0 )
|
||||||
{
|
{
|
||||||
// solid polygons only are used to fill areas
|
// solid polygons only are used to fill areas
|
||||||
if( curr_zone->m_FilledPolysList.size() > 3 )
|
if( curr_zone->GetFilledPolysList().size() > 3 )
|
||||||
{
|
{
|
||||||
Draw3D_SolidPolygonsInZones( curr_zone );
|
Draw3D_SolidPolygonsInZones( curr_zone );
|
||||||
}
|
}
|
||||||
|
@ -286,14 +286,16 @@ GLuint EDA_3D_CANVAS::CreateDrawGL_List()
|
||||||
{
|
{
|
||||||
ZONE_CONTAINER* zone = pcb->GetArea( ii );
|
ZONE_CONTAINER* zone = pcb->GetArea( ii );
|
||||||
|
|
||||||
if( zone->m_FilledPolysList.size() == 0 )
|
std::vector<CPolyPt> polysList = zone->GetFilledPolysList();
|
||||||
|
|
||||||
|
if( polysList.size() == 0 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( zone->m_ZoneMinThickness <= 1 )
|
if( zone->m_ZoneMinThickness <= 1 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int imax = zone->m_FilledPolysList.size() - 1;
|
int imax = polysList.size() - 1;
|
||||||
CPolyPt* firstcorner = &zone->m_FilledPolysList[0];
|
CPolyPt* firstcorner = &polysList[0];
|
||||||
CPolyPt* begincorner = firstcorner;
|
CPolyPt* begincorner = firstcorner;
|
||||||
SEGZONE dummysegment( pcb );
|
SEGZONE dummysegment( pcb );
|
||||||
dummysegment.SetLayer( zone->GetLayer() );
|
dummysegment.SetLayer( zone->GetLayer() );
|
||||||
|
@ -301,7 +303,7 @@ GLuint EDA_3D_CANVAS::CreateDrawGL_List()
|
||||||
|
|
||||||
for( int ic = 1; ic <= imax; ic++ )
|
for( int ic = 1; ic <= imax; ic++ )
|
||||||
{
|
{
|
||||||
CPolyPt* endcorner = &zone->m_FilledPolysList[ic];
|
CPolyPt* endcorner = &polysList[ic];
|
||||||
|
|
||||||
if( begincorner->utility == 0 )
|
if( begincorner->utility == 0 )
|
||||||
{
|
{
|
||||||
|
@ -330,7 +332,7 @@ GLuint EDA_3D_CANVAS::CreateDrawGL_List()
|
||||||
ic++;
|
ic++;
|
||||||
|
|
||||||
if( ic < imax - 1 )
|
if( ic < imax - 1 )
|
||||||
begincorner = firstcorner = &zone->m_FilledPolysList[ic];
|
begincorner = firstcorner = &polysList[ic];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -440,7 +442,8 @@ void EDA_3D_CANVAS::Draw3D_SolidPolygonsInZones( ZONE_CONTAINER* aZone )
|
||||||
// Draw solid areas contained in this zone
|
// Draw solid areas contained in this zone
|
||||||
int StartContour = 1;
|
int StartContour = 1;
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < aZone->m_FilledPolysList.size(); ii++ )
|
std::vector<CPolyPt> polysList = aZone->GetFilledPolysList();
|
||||||
|
for( unsigned ii = 0; ii < polysList.size(); ii++ )
|
||||||
{
|
{
|
||||||
if( StartContour == 1 )
|
if( StartContour == 1 )
|
||||||
{
|
{
|
||||||
|
@ -449,11 +452,11 @@ void EDA_3D_CANVAS::Draw3D_SolidPolygonsInZones( ZONE_CONTAINER* aZone )
|
||||||
StartContour = 0;
|
StartContour = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
v_data[0] = aZone->m_FilledPolysList[ii].x * g_Parm_3D_Visu.m_BoardScale;
|
v_data[0] = polysList[ii].x * g_Parm_3D_Visu.m_BoardScale;
|
||||||
v_data[1] = -aZone->m_FilledPolysList[ii].y * g_Parm_3D_Visu.m_BoardScale;
|
v_data[1] = -polysList[ii].y * g_Parm_3D_Visu.m_BoardScale;
|
||||||
gluTessVertex( tess, v_data, &aZone->m_FilledPolysList[ii] );
|
gluTessVertex( tess, v_data, &polysList[ii] );
|
||||||
|
|
||||||
if( aZone->m_FilledPolysList[ii].end_contour == 1 )
|
if( polysList[ii].end_contour == 1 )
|
||||||
{
|
{
|
||||||
gluTessEndContour( tess );
|
gluTessEndContour( tess );
|
||||||
gluTessEndPolygon( tess );
|
gluTessEndPolygon( tess );
|
||||||
|
|
|
@ -457,6 +457,34 @@ public:
|
||||||
*/
|
*/
|
||||||
bool IsSame( const ZONE_CONTAINER &aZoneToCompare );
|
bool IsSame( const ZONE_CONTAINER &aZoneToCompare );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function ClearFilledPolysList
|
||||||
|
* clears the list of filled polygons.
|
||||||
|
*/
|
||||||
|
void ClearFilledPolysList()
|
||||||
|
{
|
||||||
|
m_FilledPolysList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetFilledPolysList
|
||||||
|
* returns a reference to the list of filled polygons.
|
||||||
|
* @return Reference to the list of filled polygons.
|
||||||
|
*/
|
||||||
|
const std::vector<CPolyPt>& GetFilledPolysList() const
|
||||||
|
{
|
||||||
|
return m_FilledPolysList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function AddFilledPolysList
|
||||||
|
* sets the list of filled polygons.
|
||||||
|
*/
|
||||||
|
void AddFilledPolysList( std::vector<CPolyPt>& aPolysList )
|
||||||
|
{
|
||||||
|
m_FilledPolysList = aPolysList;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetSmoothedPoly
|
* Function GetSmoothedPoly
|
||||||
* returns a pointer to the corner-smoothed version of
|
* returns a pointer to the corner-smoothed version of
|
||||||
|
@ -522,16 +550,6 @@ public:
|
||||||
// true when a zone was filled, false after deleting the filled areas
|
// true when a zone was filled, false after deleting the filled areas
|
||||||
bool m_IsFilled;
|
bool m_IsFilled;
|
||||||
|
|
||||||
/* set of filled polygons used to draw a zone as a filled area.
|
|
||||||
* from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole
|
|
||||||
* (they are* all in one piece) In very simple cases m_FilledPolysList is same
|
|
||||||
* as m_Poly. In less simple cases (when m_Poly has holes) m_FilledPolysList is
|
|
||||||
* a polygon equivalent to m_Poly, without holes but with extra outline segment
|
|
||||||
* connecting "holes" with external main outline. In complex cases an outline
|
|
||||||
* described by m_Poly can have many filled areas
|
|
||||||
*/
|
|
||||||
std::vector <CPolyPt> m_FilledPolysList;
|
|
||||||
|
|
||||||
/* set of segments used to fill area, when fill zone by segment is used.
|
/* set of segments used to fill area, when fill zone by segment is used.
|
||||||
* ( m_FillMode == 1 )
|
* ( m_FillMode == 1 )
|
||||||
* in this case segments have m_ZoneMinThickness width
|
* in this case segments have m_ZoneMinThickness width
|
||||||
|
@ -549,6 +567,16 @@ private:
|
||||||
// if priorities are equal, a DRC error is set
|
// if priorities are equal, a DRC error is set
|
||||||
unsigned m_priority;
|
unsigned m_priority;
|
||||||
ZoneConnection m_PadConnection;
|
ZoneConnection m_PadConnection;
|
||||||
|
|
||||||
|
/* set of filled polygons used to draw a zone as a filled area.
|
||||||
|
* from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole
|
||||||
|
* (they are* all in one piece) In very simple cases m_FilledPolysList is same
|
||||||
|
* as m_Poly. In less simple cases (when m_Poly has holes) m_FilledPolysList is
|
||||||
|
* a polygon equivalent to m_Poly, without holes but with extra outline segment
|
||||||
|
* connecting "holes" with external main outline. In complex cases an outline
|
||||||
|
* described by m_Poly can have many filled areas
|
||||||
|
*/
|
||||||
|
std::vector <CPolyPt> m_FilledPolysList;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -579,7 +579,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
// Remove filled areas in zone
|
// Remove filled areas in zone
|
||||||
ZONE_CONTAINER* zone_container = GetBoard()->GetArea( ii );
|
ZONE_CONTAINER* zone_container = GetBoard()->GetArea( ii );
|
||||||
zone_container->m_FilledPolysList.clear();
|
zone_container->ClearFilledPolysList();
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCurItem( NULL ); // CurItem might be deleted by this command, clear the pointer
|
SetCurItem( NULL ); // CurItem might be deleted by this command, clear the pointer
|
||||||
|
|
|
@ -970,7 +970,7 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, OUTPUTFORMATTER* aFormatter, int aNe
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save the PolysList
|
// Save the PolysList
|
||||||
const std::vector< CPolyPt >& fv = aZone->m_FilledPolysList;
|
const std::vector< CPolyPt >& fv = aZone->GetFilledPolysList();
|
||||||
|
|
||||||
if( fv.size() )
|
if( fv.size() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -2258,6 +2258,7 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
||||||
else if( TESTLINE( "$POLYSCORNERS" ) )
|
else if( TESTLINE( "$POLYSCORNERS" ) )
|
||||||
{
|
{
|
||||||
// Read the PolysList (polygons used for fill areas in the zone)
|
// Read the PolysList (polygons used for fill areas in the zone)
|
||||||
|
std::vector<CPolyPt> polysList;
|
||||||
|
|
||||||
while( READLINE( m_reader ) )
|
while( READLINE( m_reader ) )
|
||||||
{
|
{
|
||||||
|
@ -2273,8 +2274,9 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
||||||
bool end_contour = intParse( data, &data ); // end_countour was a bool when file saved, so '0' or '1' here
|
bool end_contour = intParse( data, &data ); // end_countour was a bool when file saved, so '0' or '1' here
|
||||||
int utility = intParse( data );
|
int utility = intParse( data );
|
||||||
|
|
||||||
zc->m_FilledPolysList.push_back( CPolyPt( x, y, end_contour, utility ) );
|
polysList.push_back( CPolyPt( x, y, end_contour, utility ) );
|
||||||
}
|
}
|
||||||
|
zc->AddFilledPolysList( polysList );
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( TESTLINE( "$FILLSEGMENTS" ) )
|
else if( TESTLINE( "$FILLSEGMENTS" ) )
|
||||||
|
@ -3569,7 +3571,7 @@ void LEGACY_PLUGIN::saveZONE_CONTAINER( const ZONE_CONTAINER* me ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save the PolysList
|
// Save the PolysList
|
||||||
const CPOLY_PTS& fv = me->m_FilledPolysList;
|
const CPOLY_PTS& fv = me->GetFilledPolysList();
|
||||||
if( fv.size() )
|
if( fv.size() )
|
||||||
{
|
{
|
||||||
fprintf( m_fp, "$POLYSCORNERS\n" );
|
fprintf( m_fp, "$POLYSCORNERS\n" );
|
||||||
|
|
|
@ -631,7 +631,7 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu*
|
||||||
AddMenuItem( zones_menu, ID_POPUP_PCB_FILL_ZONE, _( "Fill Zone" ),
|
AddMenuItem( zones_menu, ID_POPUP_PCB_FILL_ZONE, _( "Fill Zone" ),
|
||||||
KiBitmap( fill_zone_xpm ) );
|
KiBitmap( fill_zone_xpm ) );
|
||||||
|
|
||||||
if( edge_zone->m_FilledPolysList.size() > 0 )
|
if( edge_zone->GetFilledPolysList().size() > 0 )
|
||||||
{
|
{
|
||||||
AddMenuItem( zones_menu, ID_POPUP_PCB_REMOVE_FILLED_AREAS_IN_CURRENT_ZONE,
|
AddMenuItem( zones_menu, ID_POPUP_PCB_REMOVE_FILLED_AREAS_IN_CURRENT_ZONE,
|
||||||
_( "Remove Filled Areas in Zone" ), KiBitmap( zone_unfill_xpm ) );
|
_( "Remove Filled Areas in Zone" ), KiBitmap( zone_unfill_xpm ) );
|
||||||
|
|
|
@ -523,7 +523,8 @@ void PlotTextePcb( PLOTTER* aPlotter, const PCB_PLOT_PARAMS& aPlotOpts, TEXTE_PC
|
||||||
*/
|
*/
|
||||||
void PlotFilledAreas( PLOTTER* aPlotter, const PCB_PLOT_PARAMS& aPlotOpts, ZONE_CONTAINER* aZone, EDA_DRAW_MODE_T trace_mode )
|
void PlotFilledAreas( PLOTTER* aPlotter, const PCB_PLOT_PARAMS& aPlotOpts, ZONE_CONTAINER* aZone, EDA_DRAW_MODE_T trace_mode )
|
||||||
{
|
{
|
||||||
unsigned imax = aZone->m_FilledPolysList.size();
|
std::vector<CPolyPt> polysList = aZone->GetFilledPolysList();
|
||||||
|
unsigned imax = polysList.size();
|
||||||
|
|
||||||
if( imax == 0 ) // Nothing to draw
|
if( imax == 0 ) // Nothing to draw
|
||||||
return;
|
return;
|
||||||
|
@ -540,7 +541,7 @@ void PlotFilledAreas( PLOTTER* aPlotter, const PCB_PLOT_PARAMS& aPlotOpts, ZONE_
|
||||||
*/
|
*/
|
||||||
for( unsigned ic = 0; ic < imax; ic++ )
|
for( unsigned ic = 0; ic < imax; ic++ )
|
||||||
{
|
{
|
||||||
CPolyPt* corner = &aZone->m_FilledPolysList[ic];
|
CPolyPt* corner = &polysList[ic];
|
||||||
cornerList.push_back( wxPoint( corner->x, corner->y) );
|
cornerList.push_back( wxPoint( corner->x, corner->y) );
|
||||||
|
|
||||||
if( corner->end_contour ) // Plot the current filled area outline
|
if( corner->end_contour ) // Plot the current filled area outline
|
||||||
|
|
|
@ -105,7 +105,7 @@ int PCB_EDIT_FRAME::Fill_Zone( ZONE_CONTAINER* aZone )
|
||||||
|
|
||||||
wxBusyCursor dummy; // Shows an hourglass cursor (removed by its destructor)
|
wxBusyCursor dummy; // Shows an hourglass cursor (removed by its destructor)
|
||||||
|
|
||||||
aZone->m_FilledPolysList.clear();
|
aZone->ClearFilledPolysList();
|
||||||
aZone->UnFill();
|
aZone->UnFill();
|
||||||
aZone->BuildFilledPolysListData( GetBoard() );
|
aZone->BuildFilledPolysListData( GetBoard() );
|
||||||
|
|
||||||
|
|
|
@ -471,6 +471,7 @@ int CopyPolygonsFromKPolygonListToFilledPolysList( ZONE_CONTAINER* aZone,
|
||||||
KPolygonSet& aKPolyList )
|
KPolygonSet& aKPolyList )
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
std::vector<CPolyPt> polysList;
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < aKPolyList.size(); ii++ )
|
for( unsigned ii = 0; ii < aKPolyList.size(); ii++ )
|
||||||
{
|
{
|
||||||
|
@ -487,14 +488,15 @@ int CopyPolygonsFromKPolygonListToFilledPolysList( ZONE_CONTAINER* aZone,
|
||||||
// Flag this corner if starting a hole connection segment:
|
// Flag this corner if starting a hole connection segment:
|
||||||
// This is used by draw functions to draw only useful segments (and not extra segments)
|
// This is used by draw functions to draw only useful segments (and not extra segments)
|
||||||
// corner.utility = (aBoolengine->GetPolygonPointEdgeType() == KB_FALSE_EDGE) ? 1 : 0;
|
// corner.utility = (aBoolengine->GetPolygonPointEdgeType() == KB_FALSE_EDGE) ? 1 : 0;
|
||||||
aZone->m_FilledPolysList.push_back( corner );
|
polysList.push_back( corner );
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
corner.end_contour = true;
|
corner.end_contour = true;
|
||||||
aZone->m_FilledPolysList.pop_back();
|
polysList.pop_back();
|
||||||
aZone->m_FilledPolysList.push_back( corner );
|
polysList.push_back( corner );
|
||||||
}
|
}
|
||||||
|
aZone->AddFilledPolysList( polysList );
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -503,7 +505,8 @@ int CopyPolygonsFromKPolygonListToFilledPolysList( ZONE_CONTAINER* aZone,
|
||||||
int CopyPolygonsFromFilledPolysListTotKPolygonList( ZONE_CONTAINER* aZone,
|
int CopyPolygonsFromFilledPolysListTotKPolygonList( ZONE_CONTAINER* aZone,
|
||||||
KPolygonSet& aKPolyList )
|
KPolygonSet& aKPolyList )
|
||||||
{
|
{
|
||||||
unsigned corners_count = aZone->m_FilledPolysList.size();
|
std::vector<CPolyPt> polysList = aZone->GetFilledPolysList();
|
||||||
|
unsigned corners_count = polysList.size();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
unsigned ic = 0;
|
unsigned ic = 0;
|
||||||
|
|
||||||
|
@ -511,7 +514,7 @@ int CopyPolygonsFromFilledPolysListTotKPolygonList( ZONE_CONTAINER* aZone,
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < corners_count; ii++ )
|
for( unsigned ii = 0; ii < corners_count; ii++ )
|
||||||
{
|
{
|
||||||
CPolyPt* corner = &aZone->m_FilledPolysList[ic];
|
CPolyPt* corner = &polysList[ic];
|
||||||
|
|
||||||
if( corner->end_contour )
|
if( corner->end_contour )
|
||||||
polycount++;
|
polycount++;
|
||||||
|
@ -527,7 +530,7 @@ int CopyPolygonsFromFilledPolysListTotKPolygonList( ZONE_CONTAINER* aZone,
|
||||||
{
|
{
|
||||||
for( ; ic < corners_count; ic++ )
|
for( ; ic < corners_count; ic++ )
|
||||||
{
|
{
|
||||||
CPolyPt* corner = &aZone->m_FilledPolysList[ic];
|
CPolyPt* corner = &polysList[ic];
|
||||||
cornerslist.push_back( KPolyPoint( corner->x, corner->y ) );
|
cornerslist.push_back( KPolyPoint( corner->x, corner->y ) );
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ void Merge_SubNets_Connected_By_CopperAreas( BOARD* aPcb, int aNetcode );
|
||||||
bool sort_areas( const ZONE_CONTAINER* ref, const ZONE_CONTAINER* tst )
|
bool sort_areas( const ZONE_CONTAINER* ref, const ZONE_CONTAINER* tst )
|
||||||
{
|
{
|
||||||
if( ref->GetNet() == tst->GetNet() )
|
if( ref->GetNet() == tst->GetNet() )
|
||||||
return ref->m_FilledPolysList.size() < tst->m_FilledPolysList.size();
|
return ref->GetFilledPolysList().size() < tst->GetFilledPolysList().size();
|
||||||
else
|
else
|
||||||
return ref->GetNet() < tst->GetNet();
|
return ref->GetNet() < tst->GetNet();
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode )
|
||||||
continue;
|
continue;
|
||||||
if( (aNetcode >= 0) && ( aNetcode != curr_zone->GetNet() ) )
|
if( (aNetcode >= 0) && ( aNetcode != curr_zone->GetNet() ) )
|
||||||
continue;
|
continue;
|
||||||
if( curr_zone->m_FilledPolysList.size() == 0 )
|
if( curr_zone->GetFilledPolysList().size() == 0 )
|
||||||
continue;
|
continue;
|
||||||
zones_candidates.push_back(curr_zone);
|
zones_candidates.push_back(curr_zone);
|
||||||
}
|
}
|
||||||
|
@ -120,10 +120,11 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode )
|
||||||
|
|
||||||
// test if a candidate is inside a filled area of this zone
|
// test if a candidate is inside a filled area of this zone
|
||||||
unsigned indexstart = 0, indexend;
|
unsigned indexstart = 0, indexend;
|
||||||
for( indexend = 0; indexend < curr_zone->m_FilledPolysList.size(); indexend++ )
|
std::vector<CPolyPt> polysList = curr_zone->GetFilledPolysList();
|
||||||
|
for( indexend = 0; indexend < polysList.size(); indexend++ )
|
||||||
{
|
{
|
||||||
// end of a filled sub-area found
|
// end of a filled sub-area found
|
||||||
if( curr_zone->m_FilledPolysList[indexend].end_contour )
|
if( polysList[indexend].end_contour )
|
||||||
{
|
{
|
||||||
subnet++;
|
subnet++;
|
||||||
EDA_RECT bbox = curr_zone->CalculateSubAreaBoundaryBox( indexstart, indexend );
|
EDA_RECT bbox = curr_zone->CalculateSubAreaBoundaryBox( indexstart, indexend );
|
||||||
|
@ -162,7 +163,7 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode )
|
||||||
|
|
||||||
if( bbox.Contains( pos1 ) )
|
if( bbox.Contains( pos1 ) )
|
||||||
{
|
{
|
||||||
if( TestPointInsidePolygon( curr_zone->m_FilledPolysList, indexstart,
|
if( TestPointInsidePolygon( polysList, indexstart,
|
||||||
indexend, pos1.x, pos1.y ) )
|
indexend, pos1.x, pos1.y ) )
|
||||||
connected = true;
|
connected = true;
|
||||||
}
|
}
|
||||||
|
@ -170,7 +171,7 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode )
|
||||||
{
|
{
|
||||||
if( bbox.Contains( pos2 ) )
|
if( bbox.Contains( pos2 ) )
|
||||||
{
|
{
|
||||||
if( TestPointInsidePolygon( curr_zone->m_FilledPolysList,
|
if( TestPointInsidePolygon( polysList,
|
||||||
indexstart, indexend,
|
indexstart, indexend,
|
||||||
pos2.x, pos2.y ) )
|
pos2.x, pos2.y ) )
|
||||||
connected = true;
|
connected = true;
|
||||||
|
|
Loading…
Reference in New Issue