Commit 25545756 authored by jean-pierre charras's avatar jean-pierre charras

More work on CPOLYGONS_LIST class.

Pcbnew: fix minor bug about  plot line width.
parent cf86e18f
...@@ -88,7 +88,8 @@ static void BuildPadShapeThickOutlineAsPolygon( D_PAD* aPad, ...@@ -88,7 +88,8 @@ static void BuildPadShapeThickOutlineAsPolygon( D_PAD* aPad,
aCircleToSegmentsCount, aCorrectionFactor ); aCircleToSegmentsCount, aCorrectionFactor );
// Add outlines as thick segments in polygon buffer // Add outlines as thick segments in polygon buffer
for( unsigned ii = 0, jj = corners.size() - 1; ii < corners.size(); jj = ii, ii++ ) for( unsigned ii = 0, jj = corners.GetCornersCount() - 1;
ii < corners.GetCornersCount(); jj = ii, ii++ )
{ {
TransformRoundedEndsSegmentToPolygon( aCornerBuffer, TransformRoundedEndsSegmentToPolygon( aCornerBuffer,
corners.GetPos( jj ), corners.GetPos( jj ),
...@@ -282,7 +283,7 @@ void EDA_3D_CANVAS::BuildBoard3DView() ...@@ -282,7 +283,7 @@ void EDA_3D_CANVAS::BuildBoard3DView()
} }
// bufferPolys contains polygons to merge. Many overlaps . Calculate merged polygons // bufferPolys contains polygons to merge. Many overlaps . Calculate merged polygons
if( bufferPolys.size() == 0 ) if( bufferPolys.GetCornersCount() == 0 )
continue; continue;
KI_POLYGON_SET currLayerPolyset; KI_POLYGON_SET currLayerPolyset;
...@@ -294,7 +295,7 @@ void EDA_3D_CANVAS::BuildBoard3DView() ...@@ -294,7 +295,7 @@ void EDA_3D_CANVAS::BuildBoard3DView()
// Add holes in polygon list // Add holes in polygon list
currLayerHoles.Append( allLayerHoles ); currLayerHoles.Append( allLayerHoles );
if( currLayerHoles.size() > 0 ) if( currLayerHoles.GetCornersCount() > 0 )
currLayerHoles.ExportTo( polysetHoles ); currLayerHoles.ExportTo( polysetHoles );
// Merge polygons, remove holes // Merge polygons, remove holes
...@@ -313,7 +314,7 @@ void EDA_3D_CANVAS::BuildBoard3DView() ...@@ -313,7 +314,7 @@ void EDA_3D_CANVAS::BuildBoard3DView()
thickness, thickness,
g_Parm_3D_Visu.m_BiuTo3Dunits ); g_Parm_3D_Visu.m_BiuTo3Dunits );
if( bufferZonesPolys.size() ) if( bufferZonesPolys.GetCornersCount() )
Draw3D_SolidHorizontalPolyPolygons( bufferZonesPolys, zpos, Draw3D_SolidHorizontalPolyPolygons( bufferZonesPolys, zpos,
thickness, thickness,
g_Parm_3D_Visu.m_BiuTo3Dunits ); g_Parm_3D_Visu.m_BiuTo3Dunits );
...@@ -404,7 +405,7 @@ void EDA_3D_CANVAS::BuildBoard3DView() ...@@ -404,7 +405,7 @@ void EDA_3D_CANVAS::BuildBoard3DView()
// bufferPolys contains polygons to merge. Many overlaps . // bufferPolys contains polygons to merge. Many overlaps .
// Calculate merged polygons and remove pads and vias holes // Calculate merged polygons and remove pads and vias holes
if( bufferPolys.size() == 0 ) if( bufferPolys.GetCornersCount() == 0 )
continue; continue;
KI_POLYGON_SET currLayerPolyset; KI_POLYGON_SET currLayerPolyset;
......
...@@ -96,11 +96,11 @@ static void Draw3D_VerticalPolygonalCylinder( const CPOLYGONS_LIST& aPolysList, ...@@ -96,11 +96,11 @@ static void Draw3D_VerticalPolygonalCylinder( const CPOLYGONS_LIST& aPolysList,
// Draw the vertical polygonal side // Draw the vertical polygonal side
int startContour = 0; int startContour = 0;
for( unsigned ii = 0; ii < aPolysList.size(); ii++ ) for( unsigned ii = 0; ii < aPolysList.GetCornersCount(); ii++ )
{ {
unsigned jj = ii + 1; unsigned jj = ii + 1;
if( aPolysList.IsEndContour( ii ) || jj >= aPolysList.size() ) if( aPolysList.IsEndContour( ii ) || jj >= aPolysList.GetCornersCount() )
{ {
jj = startContour; jj = startContour;
startContour = ii + 1; startContour = ii + 1;
...@@ -170,7 +170,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -170,7 +170,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
{ {
int startContour = 1; int startContour = 1;
for( unsigned ii = 0; ii < polylist.size(); ii++ ) for( unsigned ii = 0; ii < polylist.GetCornersCount(); ii++ )
{ {
if( startContour == 1 ) if( startContour == 1 )
{ {
......
...@@ -59,10 +59,10 @@ void TransformCircleToPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -59,10 +59,10 @@ void TransformCircleToPolygon( CPOLYGONS_LIST& aCornerBuffer,
RotatePoint( &corner_position.x, &corner_position.y, angle ); RotatePoint( &corner_position.x, &corner_position.y, angle );
corner_position += aCenter; corner_position += aCenter;
CPolyPt polypoint( corner_position.x, corner_position.y ); CPolyPt polypoint( corner_position.x, corner_position.y );
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
} }
...@@ -112,7 +112,7 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -112,7 +112,7 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer,
corner += startp; corner += startp;
polypoint.x = corner.x; polypoint.x = corner.x;
polypoint.y = corner.y; polypoint.y = corner.y;
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
// Finish arc: // Finish arc:
...@@ -121,7 +121,7 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -121,7 +121,7 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer,
corner += startp; corner += startp;
polypoint.x = corner.x; polypoint.x = corner.x;
polypoint.y = corner.y; polypoint.y = corner.y;
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
// add left rounded end: // add left rounded end:
for( int ii = 0; ii < 1800; ii += delta ) for( int ii = 0; ii < 1800; ii += delta )
...@@ -132,7 +132,7 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -132,7 +132,7 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer,
corner += startp; corner += startp;
polypoint.x = corner.x; polypoint.x = corner.x;
polypoint.y = corner.y; polypoint.y = corner.y;
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
// Finish arc: // Finish arc:
...@@ -141,9 +141,9 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -141,9 +141,9 @@ void TransformRoundedEndsSegmentToPolygon( CPOLYGONS_LIST& aCornerBuffer,
corner += startp; corner += startp;
polypoint.x = corner.x; polypoint.x = corner.x;
polypoint.y = corner.y; polypoint.y = corner.y;
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
} }
...@@ -229,13 +229,13 @@ void TransformRingToPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -229,13 +229,13 @@ void TransformRingToPolygon( CPOLYGONS_LIST& aCornerBuffer,
curr_point += aCentre; curr_point += aCentre;
polycorner.x = curr_point.x; polycorner.x = curr_point.x;
polycorner.y = curr_point.y; polycorner.y = curr_point.y;
aCornerBuffer.push_back( polycorner ); aCornerBuffer.Append( polycorner );
} }
// Draw the last point of inner circle // Draw the last point of inner circle
polycorner.x = aCentre.x + inner_radius; polycorner.x = aCentre.x + inner_radius;
polycorner.y = aCentre.y; polycorner.y = aCentre.y;
aCornerBuffer.push_back( polycorner ); aCornerBuffer.Append( polycorner );
// Draw the outer circle of the ring // Draw the outer circle of the ring
for( int ii = 0; ii < 3600; ii += delta ) for( int ii = 0; ii < 3600; ii += delta )
...@@ -246,16 +246,16 @@ void TransformRingToPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -246,16 +246,16 @@ void TransformRingToPolygon( CPOLYGONS_LIST& aCornerBuffer,
curr_point += aCentre; curr_point += aCentre;
polycorner.x = curr_point.x; polycorner.x = curr_point.x;
polycorner.y = curr_point.y; polycorner.y = curr_point.y;
aCornerBuffer.push_back( polycorner ); aCornerBuffer.Append( polycorner );
} }
// Draw the last point of outer circle // Draw the last point of outer circle
polycorner.x = aCentre.x + outer_radius; polycorner.x = aCentre.x + outer_radius;
polycorner.y = aCentre.y; polycorner.y = aCentre.y;
aCornerBuffer.push_back( polycorner ); aCornerBuffer.Append( polycorner );
// Close the polygon // Close the polygon
polycorner.x = aCentre.x + inner_radius; polycorner.x = aCentre.x + inner_radius;
polycorner.end_contour = true; polycorner.end_contour = true;
aCornerBuffer.push_back( polycorner ); aCornerBuffer.Append( polycorner );
} }
...@@ -137,7 +137,7 @@ void MODULE::TransformGraphicShapesWithClearanceToPolygonSet( ...@@ -137,7 +137,7 @@ void MODULE::TransformGraphicShapesWithClearanceToPolygonSet(
RotatePoint( &corner.x, &corner.y, GetOrientation() ); RotatePoint( &corner.x, &corner.y, GetOrientation() );
corner.x += GetPosition().x; corner.x += GetPosition().x;
corner.y += GetPosition().y; corner.y += GetPosition().y;
aCornerBuffer.push_back( corner ); aCornerBuffer.Append( corner );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.back().end_contour = true;
break; break;
...@@ -170,7 +170,7 @@ void ZONE_CONTAINER::TransformSolidAreasShapesToPolygonSet( ...@@ -170,7 +170,7 @@ void ZONE_CONTAINER::TransformSolidAreasShapesToPolygonSet(
int aCircleToSegmentsCount, int aCircleToSegmentsCount,
double aCorrectionFactor ) double aCorrectionFactor )
{ {
unsigned cornerscount = GetFilledPolysList().size(); unsigned cornerscount = GetFilledPolysList().GetCornersCount();
CPOLYGONS_LIST polygonslist; CPOLYGONS_LIST polygonslist;
if( cornerscount == 0 ) if( cornerscount == 0 )
...@@ -239,7 +239,7 @@ void TEXTE_PCB::TransformBoundingBoxWithClearanceToPolygon( ...@@ -239,7 +239,7 @@ void TEXTE_PCB::TransformBoundingBoxWithClearanceToPolygon(
{ {
// Rotate polygon // Rotate polygon
RotatePoint( &corners[ii].x, &corners[ii].y, m_Pos.x, m_Pos.y, m_Orient ); RotatePoint( &corners[ii].x, &corners[ii].y, m_Pos.x, m_Pos.y, m_Orient );
aCornerBuffer.push_back( corners[ii] ); aCornerBuffer.Append( corners[ii] );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.back().end_contour = true;
...@@ -492,7 +492,7 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer ...@@ -492,7 +492,7 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer
// Rotate according to module orientation // Rotate according to module orientation
corner_position += PadShapePos; // Shift origin to position corner_position += PadShapePos; // Shift origin to position
CPolyPt polypoint( corner_position.x, corner_position.y ); CPolyPt polypoint( corner_position.x, corner_position.y );
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
for( int i = 0; i < aCircleToSegmentsCount / 4 + 1; i++ ) for( int i = 0; i < aCircleToSegmentsCount / 4 + 1; i++ )
...@@ -505,7 +505,7 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer ...@@ -505,7 +505,7 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer
RotatePoint( &corner_position, angle ); RotatePoint( &corner_position, angle );
corner_position += PadShapePos; corner_position += PadShapePos;
CPolyPt polypoint( corner_position.x, corner_position.y ); CPolyPt polypoint( corner_position.x, corner_position.y );
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
for( int i = 0; i < aCircleToSegmentsCount / 4 + 1; i++ ) for( int i = 0; i < aCircleToSegmentsCount / 4 + 1; i++ )
...@@ -518,7 +518,7 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer ...@@ -518,7 +518,7 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer
RotatePoint( &corner_position, angle ); RotatePoint( &corner_position, angle );
corner_position += PadShapePos; corner_position += PadShapePos;
CPolyPt polypoint( corner_position.x, corner_position.y ); CPolyPt polypoint( corner_position.x, corner_position.y );
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
for( int i = 0; i < aCircleToSegmentsCount / 4 + 1; i++ ) for( int i = 0; i < aCircleToSegmentsCount / 4 + 1; i++ )
...@@ -531,10 +531,10 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer ...@@ -531,10 +531,10 @@ void D_PAD:: TransformShapeWithClearanceToPolygon( CPOLYGONS_LIST& aCornerBuffer
RotatePoint( &corner_position, angle ); RotatePoint( &corner_position, angle );
corner_position += PadShapePos; corner_position += PadShapePos;
CPolyPt polypoint( corner_position.x, corner_position.y ); CPolyPt polypoint( corner_position.x, corner_position.y );
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
break; break;
} }
} }
...@@ -569,10 +569,10 @@ void D_PAD::BuildPadShapePolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -569,10 +569,10 @@ void D_PAD::BuildPadShapePolygon( CPOLYGONS_LIST& aCornerBuffer,
{ {
corners[ii] += PadShapePos; // Shift origin to position corners[ii] += PadShapePos; // Shift origin to position
CPolyPt polypoint( corners[ii].x, corners[ii].y ); CPolyPt polypoint( corners[ii].x, corners[ii].y );
aCornerBuffer.push_back( polypoint ); aCornerBuffer.Append( polypoint );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
break; break;
} }
} }
...@@ -768,10 +768,10 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -768,10 +768,10 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer,
corner = corners_buffer[ii]; corner = corners_buffer[ii];
RotatePoint( &corner, th_angle + angle_pad ); // Rotate by segment angle and pad orientation RotatePoint( &corner, th_angle + angle_pad ); // Rotate by segment angle and pad orientation
corner += PadShapePos; corner += PadShapePos;
aCornerBuffer.push_back( CPolyPt( corner.x, corner.y ) ); aCornerBuffer.Append( CPolyPt( corner.x, corner.y ) );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
th_angle += 900; // Note: th_angle in in 0.1 deg. th_angle += 900; // Note: th_angle in in 0.1 deg.
} }
} }
...@@ -872,7 +872,7 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -872,7 +872,7 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer,
wxPoint cpos = corners_buffer[ic]; wxPoint cpos = corners_buffer[ic];
RotatePoint( &cpos, angle ); RotatePoint( &cpos, angle );
cpos += PadShapePos; cpos += PadShapePos;
aCornerBuffer.push_back( CPolyPt( cpos.x, cpos.y ) ); aCornerBuffer.Append( CPolyPt( cpos.x, cpos.y ) );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.back().end_contour = true;
...@@ -897,7 +897,7 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -897,7 +897,7 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer,
wxPoint cpos = corners_buffer[ic]; wxPoint cpos = corners_buffer[ic];
RotatePoint( &cpos, angle ); RotatePoint( &cpos, angle );
cpos += PadShapePos; cpos += PadShapePos;
aCornerBuffer.push_back( CPolyPt( cpos.x, cpos.y ) ); aCornerBuffer.Append( CPolyPt( cpos.x, cpos.y ) );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.back().end_contour = true;
...@@ -970,10 +970,10 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -970,10 +970,10 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer,
wxPoint cpos = corners_buffer[ic]; wxPoint cpos = corners_buffer[ic];
RotatePoint( &cpos, angle ); // Rotate according to module orientation RotatePoint( &cpos, angle ); // Rotate according to module orientation
cpos += PadShapePos; // Shift origin to position cpos += PadShapePos; // Shift origin to position
aCornerBuffer.push_back( CPolyPt( cpos.x, cpos.y ) ); aCornerBuffer.Append( CPolyPt( cpos.x, cpos.y ) );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
angle = AddAngles( angle, 1800 ); // this is calculate hole 3 angle = AddAngles( angle, 1800 ); // this is calculate hole 3
} }
...@@ -993,10 +993,10 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer, ...@@ -993,10 +993,10 @@ void CreateThermalReliefPadPolygon( CPOLYGONS_LIST& aCornerBuffer,
wxPoint cpos = corners_buffer[ic]; wxPoint cpos = corners_buffer[ic];
RotatePoint( &cpos, angle ); RotatePoint( &cpos, angle );
cpos += PadShapePos; cpos += PadShapePos;
aCornerBuffer.push_back( CPolyPt( cpos.x, cpos.y ) ); aCornerBuffer.Append( CPolyPt( cpos.x, cpos.y ) );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
angle = AddAngles( angle, 1800 ); angle = AddAngles( angle, 1800 );
} }
......
...@@ -120,7 +120,8 @@ EDA_ITEM* ZONE_CONTAINER::Clone() const ...@@ -120,7 +120,8 @@ EDA_ITEM* ZONE_CONTAINER::Clone() const
bool ZONE_CONTAINER::UnFill() bool ZONE_CONTAINER::UnFill()
{ {
bool change = ( m_FilledPolysList.size() > 0 ) || ( m_FillSegmList.size() > 0 ); bool change = ( m_FilledPolysList.GetCornersCount() > 0 ) ||
( m_FillSegmList.size() > 0 );
m_FilledPolysList.clear(); m_FilledPolysList.clear();
m_FillSegmList.clear(); m_FillSegmList.clear();
...@@ -250,7 +251,7 @@ void ZONE_CONTAINER::DrawFilledArea( EDA_DRAW_PANEL* panel, ...@@ -250,7 +251,7 @@ void ZONE_CONTAINER::DrawFilledArea( EDA_DRAW_PANEL* panel,
if( DisplayOpt.DisplayZonesMode == 1 ) // Do not show filled areas if( DisplayOpt.DisplayZonesMode == 1 ) // Do not show filled areas
return; return;
if( m_FilledPolysList.size() == 0 ) // Nothing to draw if( m_FilledPolysList.GetCornersCount() == 0 ) // Nothing to draw
return; return;
BOARD* brd = GetBoard(); BOARD* brd = GetBoard();
...@@ -279,7 +280,7 @@ void ZONE_CONTAINER::DrawFilledArea( EDA_DRAW_PANEL* panel, ...@@ -279,7 +280,7 @@ void ZONE_CONTAINER::DrawFilledArea( EDA_DRAW_PANEL* panel,
CornersBuffer.clear(); CornersBuffer.clear();
// Draw all filled areas // Draw all filled areas
int imax = m_FilledPolysList.size() - 1; int imax = m_FilledPolysList.GetCornersCount() - 1;
for( int ic = 0; ic <= imax; ic++ ) for( int ic = 0; ic <= imax; ic++ )
{ {
...@@ -490,7 +491,7 @@ bool ZONE_CONTAINER::HitTestForCorner( const wxPoint& refPos ) ...@@ -490,7 +491,7 @@ bool ZONE_CONTAINER::HitTestForCorner( const wxPoint& refPos )
int min_dist = MIN_DIST_IN_MILS*IU_PER_MILS; int min_dist = MIN_DIST_IN_MILS*IU_PER_MILS;
wxPoint delta; wxPoint delta;
unsigned lim = m_Poly->m_CornersList.size(); unsigned lim = m_Poly->m_CornersList.GetCornersCount();
for( unsigned item_pos = 0; item_pos < lim; item_pos++ ) for( unsigned item_pos = 0; item_pos < lim; item_pos++ )
{ {
...@@ -513,7 +514,7 @@ bool ZONE_CONTAINER::HitTestForCorner( const wxPoint& refPos ) ...@@ -513,7 +514,7 @@ bool ZONE_CONTAINER::HitTestForCorner( const wxPoint& refPos )
bool ZONE_CONTAINER::HitTestForEdge( const wxPoint& refPos ) bool ZONE_CONTAINER::HitTestForEdge( const wxPoint& refPos )
{ {
unsigned lim = m_Poly->m_CornersList.size(); unsigned lim = m_Poly->m_CornersList.GetCornersCount();
m_CornerSelection = -1; // Set to not found m_CornerSelection = -1; // Set to not found
...@@ -610,7 +611,7 @@ bool ZONE_CONTAINER::HitTestFilledArea( const wxPoint& aRefPos ) const ...@@ -610,7 +611,7 @@ bool ZONE_CONTAINER::HitTestFilledArea( const wxPoint& aRefPos ) const
unsigned indexstart = 0, indexend; unsigned indexstart = 0, indexend;
bool inside = false; bool inside = false;
for( indexend = 0; indexend < m_FilledPolysList.size(); indexend++ ) for( indexend = 0; indexend < m_FilledPolysList.GetCornersCount(); indexend++ )
{ {
if( m_FilledPolysList.IsEndContour( indexend ) ) // end of a filled sub-area found if( m_FilledPolysList.IsEndContour( indexend ) ) // end of a filled sub-area found
{ {
...@@ -701,7 +702,7 @@ void ZONE_CONTAINER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList ) ...@@ -701,7 +702,7 @@ void ZONE_CONTAINER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), GetLayerName(), BROWN ) ); aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), GetLayerName(), BROWN ) );
msg.Printf( wxT( "%d" ), (int) m_Poly->m_CornersList.size() ); msg.Printf( wxT( "%d" ), (int) m_Poly->m_CornersList.GetCornersCount() );
aList.push_back( MSG_PANEL_ITEM( _( "Corners" ), msg, BLUE ) ); aList.push_back( MSG_PANEL_ITEM( _( "Corners" ), msg, BLUE ) );
if( m_FillMode ) if( m_FillMode )
...@@ -715,9 +716,9 @@ void ZONE_CONTAINER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList ) ...@@ -715,9 +716,9 @@ void ZONE_CONTAINER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
msg.Printf( wxT( "%d" ), (int) m_Poly->m_HatchLines.size() ); msg.Printf( wxT( "%d" ), (int) m_Poly->m_HatchLines.size() );
aList.push_back( MSG_PANEL_ITEM( _( "Hatch lines" ), msg, BLUE ) ); aList.push_back( MSG_PANEL_ITEM( _( "Hatch lines" ), msg, BLUE ) );
if( m_FilledPolysList.size() ) if( m_FilledPolysList.GetCornersCount() )
{ {
msg.Printf( wxT( "%d" ), (int) m_FilledPolysList.size() ); msg.Printf( wxT( "%d" ), (int) m_FilledPolysList.GetCornersCount() );
aList.push_back( MSG_PANEL_ITEM( _( "Corners in DrawList" ), msg, BLUE ) ); aList.push_back( MSG_PANEL_ITEM( _( "Corners in DrawList" ), msg, BLUE ) );
} }
} }
...@@ -728,7 +729,7 @@ void ZONE_CONTAINER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList ) ...@@ -728,7 +729,7 @@ void ZONE_CONTAINER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
void ZONE_CONTAINER::Move( const wxPoint& offset ) void ZONE_CONTAINER::Move( const wxPoint& offset )
{ {
/* move outlines */ /* move outlines */
for( unsigned ii = 0; ii < m_Poly->m_CornersList.size(); ii++ ) for( unsigned ii = 0; ii < m_Poly->m_CornersList.GetCornersCount(); ii++ )
{ {
SetCornerPosition( ii, GetCornerPosition( ii ) + offset ); SetCornerPosition( ii, GetCornerPosition( ii ) + offset );
} }
...@@ -736,7 +737,7 @@ void ZONE_CONTAINER::Move( const wxPoint& offset ) ...@@ -736,7 +737,7 @@ void ZONE_CONTAINER::Move( const wxPoint& offset )
m_Poly->Hatch(); m_Poly->Hatch();
/* move filled areas: */ /* move filled areas: */
for( unsigned ic = 0; ic < m_FilledPolysList.size(); ic++ ) for( unsigned ic = 0; ic < m_FilledPolysList.GetCornersCount(); ic++ )
{ {
m_FilledPolysList.SetX( ic, m_FilledPolysList.GetX( ic ) + offset.x ); m_FilledPolysList.SetX( ic, m_FilledPolysList.GetX( ic ) + offset.x );
m_FilledPolysList.SetY( ic, m_FilledPolysList.GetX( ic ) + offset.y ); m_FilledPolysList.SetY( ic, m_FilledPolysList.GetX( ic ) + offset.y );
...@@ -778,7 +779,7 @@ void ZONE_CONTAINER::Rotate( const wxPoint& centre, double angle ) ...@@ -778,7 +779,7 @@ void ZONE_CONTAINER::Rotate( const wxPoint& centre, double angle )
{ {
wxPoint pos; wxPoint pos;
for( unsigned ic = 0; ic < m_Poly->m_CornersList.size(); ic++ ) for( unsigned ic = 0; ic < m_Poly->m_CornersList.GetCornersCount(); ic++ )
{ {
pos = m_Poly->m_CornersList.GetPos( ic ); pos = m_Poly->m_CornersList.GetPos( ic );
RotatePoint( &pos, centre, angle ); RotatePoint( &pos, centre, angle );
...@@ -789,7 +790,7 @@ void ZONE_CONTAINER::Rotate( const wxPoint& centre, double angle ) ...@@ -789,7 +790,7 @@ void ZONE_CONTAINER::Rotate( const wxPoint& centre, double angle )
m_Poly->Hatch(); m_Poly->Hatch();
/* rotate filled areas: */ /* rotate filled areas: */
for( unsigned ic = 0; ic < m_FilledPolysList.size(); ic++ ) for( unsigned ic = 0; ic < m_FilledPolysList.GetCornersCount(); ic++ )
{ {
pos = m_FilledPolysList.GetPos( ic ); pos = m_FilledPolysList.GetPos( ic );
RotatePoint( &pos, centre, angle ); RotatePoint( &pos, centre, angle );
...@@ -814,7 +815,7 @@ void ZONE_CONTAINER::Flip( const wxPoint& aCentre ) ...@@ -814,7 +815,7 @@ void ZONE_CONTAINER::Flip( const wxPoint& aCentre )
void ZONE_CONTAINER::Mirror( const wxPoint& mirror_ref ) void ZONE_CONTAINER::Mirror( const wxPoint& mirror_ref )
{ {
for( unsigned ic = 0; ic < m_Poly->m_CornersList.size(); ic++ ) for( unsigned ic = 0; ic < m_Poly->m_CornersList.GetCornersCount(); ic++ )
{ {
int py = m_Poly->m_CornersList.GetY( ic ) - mirror_ref.y; int py = m_Poly->m_CornersList.GetY( ic ) - mirror_ref.y;
NEGATE( py ); NEGATE( py );
...@@ -824,7 +825,7 @@ void ZONE_CONTAINER::Mirror( const wxPoint& mirror_ref ) ...@@ -824,7 +825,7 @@ void ZONE_CONTAINER::Mirror( const wxPoint& mirror_ref )
m_Poly->Hatch(); m_Poly->Hatch();
/* mirror filled areas: */ /* mirror filled areas: */
for( unsigned ic = 0; ic < m_FilledPolysList.size(); ic++ ) for( unsigned ic = 0; ic < m_FilledPolysList.GetCornersCount(); ic++ )
{ {
int py = m_FilledPolysList.GetY( ic ) - mirror_ref.y; int py = m_FilledPolysList.GetY( ic ) - mirror_ref.y;
NEGATE( py ); NEGATE( py );
......
...@@ -449,7 +449,7 @@ public: ...@@ -449,7 +449,7 @@ public:
int GetNumCorners( void ) const int GetNumCorners( void ) const
{ {
return m_Poly->GetNumCorners(); return m_Poly->GetCornersCount();
} }
void RemoveAllContours( void ) void RemoveAllContours( void )
......
...@@ -1398,12 +1398,12 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const ...@@ -1398,12 +1398,12 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
const CPOLYGONS_LIST& cv = aZone->Outline()->m_CornersList; const CPOLYGONS_LIST& cv = aZone->Outline()->m_CornersList;
int newLine = 0; int newLine = 0;
if( cv.size() ) if( cv.GetCornersCount() )
{ {
m_out->Print( aNestLevel+1, "(polygon\n"); m_out->Print( aNestLevel+1, "(polygon\n");
m_out->Print( aNestLevel+2, "(pts\n" ); m_out->Print( aNestLevel+2, "(pts\n" );
for( unsigned it = 0; it < cv.size(); ++it ) for( unsigned it = 0; it < cv.GetCornersCount(); ++it )
{ {
if( newLine == 0 ) if( newLine == 0 )
m_out->Print( aNestLevel+3, "(xy %s %s)", m_out->Print( aNestLevel+3, "(xy %s %s)",
...@@ -1429,7 +1429,7 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const ...@@ -1429,7 +1429,7 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
m_out->Print( aNestLevel+2, ")\n" ); m_out->Print( aNestLevel+2, ")\n" );
if( it+1 != cv.size() ) if( it+1 != cv.GetCornersCount() )
{ {
newLine = 0; newLine = 0;
m_out->Print( aNestLevel+1, ")\n" ); m_out->Print( aNestLevel+1, ")\n" );
...@@ -1446,12 +1446,12 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const ...@@ -1446,12 +1446,12 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
const CPOLYGONS_LIST& fv = aZone->GetFilledPolysList(); const CPOLYGONS_LIST& fv = aZone->GetFilledPolysList();
newLine = 0; newLine = 0;
if( fv.size() ) if( fv.GetCornersCount() )
{ {
m_out->Print( aNestLevel+1, "(filled_polygon\n" ); m_out->Print( aNestLevel+1, "(filled_polygon\n" );
m_out->Print( aNestLevel+2, "(pts\n" ); m_out->Print( aNestLevel+2, "(pts\n" );
for( unsigned it = 0; it < fv.size(); ++it ) for( unsigned it = 0; it < fv.GetCornersCount(); ++it )
{ {
if( newLine == 0 ) if( newLine == 0 )
m_out->Print( aNestLevel+3, "(xy %s %s)", m_out->Print( aNestLevel+3, "(xy %s %s)",
...@@ -1477,7 +1477,7 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const ...@@ -1477,7 +1477,7 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
m_out->Print( aNestLevel+2, ")\n" ); m_out->Print( aNestLevel+2, ")\n" );
if( it+1 != fv.size() ) if( it+1 != fv.GetCornersCount() )
{ {
newLine = 0; newLine = 0;
m_out->Print( aNestLevel+1, ")\n" ); m_out->Print( aNestLevel+1, ")\n" );
......
...@@ -2360,7 +2360,7 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER() ...@@ -2360,7 +2360,7 @@ 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 cornerUtilityFlg = intParse( data ); int cornerUtilityFlg = intParse( data );
polysList.push_back( CPolyPt( x, y, end_contour, cornerUtilityFlg ) ); polysList.Append( CPolyPt( x, y, end_contour, cornerUtilityFlg ) );
} }
zc->AddFilledPolysList( polysList ); zc->AddFilledPolysList( polysList );
} }
...@@ -3693,7 +3693,7 @@ void LEGACY_PLUGIN::saveZONE_CONTAINER( const ZONE_CONTAINER* me ) const ...@@ -3693,7 +3693,7 @@ void LEGACY_PLUGIN::saveZONE_CONTAINER( const ZONE_CONTAINER* me ) const
// Save the corner list // Save the corner list
const CPOLYGONS_LIST& cv = me->Outline()->m_CornersList; const CPOLYGONS_LIST& cv = me->Outline()->m_CornersList;
for( unsigned it = 0; it < cv.size(); ++it ) for( unsigned it = 0; it < cv.GetCornersCount(); ++it )
{ {
fprintf( m_fp, "ZCorner %s %d\n", fprintf( m_fp, "ZCorner %s %d\n",
fmtBIUPair( cv.GetX( it ), cv.GetY( it ) ).c_str(), fmtBIUPair( cv.GetX( it ), cv.GetY( it ) ).c_str(),
...@@ -3702,11 +3702,11 @@ void LEGACY_PLUGIN::saveZONE_CONTAINER( const ZONE_CONTAINER* me ) const ...@@ -3702,11 +3702,11 @@ void LEGACY_PLUGIN::saveZONE_CONTAINER( const ZONE_CONTAINER* me ) const
// Save the PolysList // Save the PolysList
const CPOLYGONS_LIST& fv = me->GetFilledPolysList(); const CPOLYGONS_LIST& fv = me->GetFilledPolysList();
if( fv.size() ) if( fv.GetCornersCount() )
{ {
fprintf( m_fp, "$POLYSCORNERS\n" ); fprintf( m_fp, "$POLYSCORNERS\n" );
for( unsigned it = 0; it < fv.size(); ++it ) for( unsigned it = 0; it < fv.GetCornersCount(); ++it )
{ {
fprintf( m_fp, "%s %d %d\n", fprintf( m_fp, "%s %d %d\n",
fmtBIUPair( fv.GetX( it ), fv.GetY( it ) ).c_str(), fmtBIUPair( fv.GetX( it ), fv.GetY( it ) ).c_str(),
......
...@@ -665,7 +665,7 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* ...@@ -665,7 +665,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->GetFilledPolysList().size() > 0 ) if( edge_zone->GetFilledPolysList().GetCornersCount() > 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 ) );
......
...@@ -2614,11 +2614,11 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR ) ...@@ -2614,11 +2614,11 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
for( token = NextTok(); token != T_RIGHT; token = NextTok() ) for( token = NextTok(); token != T_RIGHT; token = NextTok() )
{ {
pts.push_back( CPolyPt( parseXY() ) ); pts.Append( CPolyPt( parseXY() ) );
} }
NeedRIGHT(); NeedRIGHT();
pts.back().end_contour = true; pts.CloseLastContour();
} }
break; break;
...@@ -2665,7 +2665,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR ) ...@@ -2665,7 +2665,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
zone->Outline()->SetHatch( hatchStyle, hatchPitch, true ); zone->Outline()->SetHatch( hatchStyle, hatchPitch, true );
} }
if( pts.size() ) if( pts.GetCornersCount() )
zone->AddFilledPolysList( pts ); zone->AddFilledPolysList( pts );
// Ensure keepout does not have a net (which have no sense for a keepout zone) // Ensure keepout does not have a net (which have no sense for a keepout zone)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 1992-2011 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#define PLOT_LINEWIDTH_MIN (0.02*IU_PER_MM) // min value for default line thickness #define PLOT_LINEWIDTH_MIN (0.02*IU_PER_MM) // min value for default line thickness
#define PLOT_LINEWIDTH_MAX (2*IU_PER_MM) // max value for default line thickness #define PLOT_LINEWIDTH_MAX (2*IU_PER_MM) // max value for default line thickness
#define PLOT_LINEWIDTH_DEFAULT (0.15*IU_PER_MM) // def. value for default line thickness
#define HPGL_PEN_DIAMETER_MIN 0 #define HPGL_PEN_DIAMETER_MIN 0
#define HPGL_PEN_DIAMETER_MAX 100 // Unit = mil #define HPGL_PEN_DIAMETER_MAX 100 // Unit = mil
#define HPGL_PEN_SPEED_MIN 1 // this param is always in cm/s #define HPGL_PEN_SPEED_MIN 1 // this param is always in cm/s
...@@ -47,7 +48,7 @@ ...@@ -47,7 +48,7 @@
* Default line thickness in internal units used to draw or plot items using a * Default line thickness in internal units used to draw or plot items using a
* default thickness line value (Frame references) * default thickness line value (Frame references)
*/ */
int g_DrawDefaultLineThickness = (0.15*IU_PER_MM); int g_DrawDefaultLineThickness = PLOT_LINEWIDTH_DEFAULT;
using namespace PCBPLOTPARAMS_T; using namespace PCBPLOTPARAMS_T;
...@@ -132,8 +133,8 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter, ...@@ -132,8 +133,8 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter,
m_useGerberExtensions ? trueStr : falseStr ); m_useGerberExtensions ? trueStr : falseStr );
aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_excludeedgelayer ), aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_excludeedgelayer ),
m_excludeEdgeLayer ? trueStr : falseStr ); m_excludeEdgeLayer ? trueStr : falseStr );
aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_linewidth ), aFormatter->Print( aNestLevel+1, "(%s %f)\n", getTokenName( T_linewidth ),
m_lineWidth ); m_lineWidth / IU_PER_MM );
aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotframeref ), aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotframeref ),
m_plotFrameRef ? trueStr : falseStr ); m_plotFrameRef ? trueStr : falseStr );
aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_viasonmask ), aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_viasonmask ),
...@@ -332,83 +333,89 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) ...@@ -332,83 +333,89 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams )
aPcbPlotParams->m_layerSelection = atol( CurText() ); aPcbPlotParams->m_layerSelection = atol( CurText() );
break; break;
case T_usegerberextensions: case T_usegerberextensions:
aPcbPlotParams->m_useGerberExtensions = ParseBool(); aPcbPlotParams->m_useGerberExtensions = parseBool();
break; break;
case T_psa4output: case T_psa4output:
aPcbPlotParams->m_A4Output = ParseBool(); aPcbPlotParams->m_A4Output = parseBool();
break; break;
case T_excludeedgelayer: case T_excludeedgelayer:
aPcbPlotParams->m_excludeEdgeLayer = ParseBool(); aPcbPlotParams->m_excludeEdgeLayer = parseBool();
break; break;
case T_linewidth: case T_linewidth:
aPcbPlotParams->m_lineWidth = ParseInt( PLOT_LINEWIDTH_MIN, {
PLOT_LINEWIDTH_MAX ); // Due to a bug, this (minor) parameter was saved in biu
// and now is saved in mm
// If the read value is outside bounds, force a default value
double tmp = parseDouble();
if( !aPcbPlotParams->SetLineWidth( KiROUND( tmp * IU_PER_MM ) ) )
aPcbPlotParams->SetLineWidth( PLOT_LINEWIDTH_DEFAULT );
}
break; break;
case T_plotframeref: case T_plotframeref:
aPcbPlotParams->m_plotFrameRef = ParseBool(); aPcbPlotParams->m_plotFrameRef = parseBool();
break; break;
case T_viasonmask: case T_viasonmask:
aPcbPlotParams->m_plotViaOnMaskLayer = ParseBool(); aPcbPlotParams->m_plotViaOnMaskLayer = parseBool();
break; break;
case T_mode: case T_mode:
aPcbPlotParams->m_mode = static_cast<EDA_DRAW_MODE_T>( ParseInt( 0, 2 ) ); aPcbPlotParams->m_mode = static_cast<EDA_DRAW_MODE_T>( parseInt( 0, 2 ) );
break; break;
case T_useauxorigin: case T_useauxorigin:
aPcbPlotParams->m_useAuxOrigin = ParseBool(); aPcbPlotParams->m_useAuxOrigin = parseBool();
break; break;
case T_hpglpennumber: case T_hpglpennumber:
aPcbPlotParams->m_HPGLPenNum = ParseInt( HPGL_PEN_NUMBER_MIN, aPcbPlotParams->m_HPGLPenNum = parseInt( HPGL_PEN_NUMBER_MIN,
HPGL_PEN_NUMBER_MAX ); HPGL_PEN_NUMBER_MAX );
break; break;
case T_hpglpenspeed: case T_hpglpenspeed:
aPcbPlotParams->m_HPGLPenSpeed = ParseInt( HPGL_PEN_SPEED_MIN, aPcbPlotParams->m_HPGLPenSpeed = parseInt( HPGL_PEN_SPEED_MIN,
HPGL_PEN_SPEED_MAX ); HPGL_PEN_SPEED_MAX );
break; break;
case T_hpglpendiameter: case T_hpglpendiameter:
aPcbPlotParams->m_HPGLPenDiam = ParseInt( HPGL_PEN_DIAMETER_MIN, aPcbPlotParams->m_HPGLPenDiam = parseInt( HPGL_PEN_DIAMETER_MIN,
HPGL_PEN_DIAMETER_MAX ); HPGL_PEN_DIAMETER_MAX );
break; break;
case T_hpglpenoverlay: case T_hpglpenoverlay:
aPcbPlotParams->m_HPGLPenOvr = ParseInt( HPGL_PEN_OVERLAP_MIN, aPcbPlotParams->m_HPGLPenOvr = parseInt( HPGL_PEN_OVERLAP_MIN,
HPGL_PEN_OVERLAP_MAX ); HPGL_PEN_OVERLAP_MAX );
break; break;
case T_pscolor: case T_pscolor:
NeedSYMBOL(); // This actually was never used... NeedSYMBOL(); // This actually was never used...
break; break;
case T_psnegative: case T_psnegative:
aPcbPlotParams->m_negative = ParseBool(); aPcbPlotParams->m_negative = parseBool();
break; break;
case T_plotreference: case T_plotreference:
aPcbPlotParams->m_plotReference = ParseBool(); aPcbPlotParams->m_plotReference = parseBool();
break; break;
case T_plotvalue: case T_plotvalue:
aPcbPlotParams->m_plotValue = ParseBool(); aPcbPlotParams->m_plotValue = parseBool();
break; break;
case T_plotothertext: case T_plotothertext:
aPcbPlotParams->m_plotOtherText = ParseBool(); aPcbPlotParams->m_plotOtherText = parseBool();
break; break;
case T_plotinvisibletext: case T_plotinvisibletext:
aPcbPlotParams->m_plotInvisibleText = ParseBool(); aPcbPlotParams->m_plotInvisibleText = parseBool();
break; break;
case T_padsonsilk: case T_padsonsilk:
aPcbPlotParams->m_plotPadsOnSilkLayer= ParseBool(); aPcbPlotParams->m_plotPadsOnSilkLayer= parseBool();
break; break;
case T_subtractmaskfromsilk: case T_subtractmaskfromsilk:
aPcbPlotParams->m_subtractMaskFromSilk = ParseBool(); aPcbPlotParams->m_subtractMaskFromSilk = parseBool();
break; break;
case T_outputformat: case T_outputformat:
aPcbPlotParams->m_format = static_cast<PlotFormat>( aPcbPlotParams->m_format = static_cast<PlotFormat>(
ParseInt( PLOT_FIRST_FORMAT, PLOT_LAST_FORMAT ) ); parseInt( PLOT_FIRST_FORMAT, PLOT_LAST_FORMAT ) );
break; break;
case T_mirror: case T_mirror:
aPcbPlotParams->m_mirror = ParseBool(); aPcbPlotParams->m_mirror = parseBool();
break; break;
case T_drillshape: case T_drillshape:
aPcbPlotParams->m_drillMarks = static_cast<PCB_PLOT_PARAMS::DrillMarksType> aPcbPlotParams->m_drillMarks = static_cast<PCB_PLOT_PARAMS::DrillMarksType>
( ParseInt( 0, 2 ) ); ( parseInt( 0, 2 ) );
break; break;
case T_scaleselection: case T_scaleselection:
aPcbPlotParams->m_scaleSelection = ParseInt( 0, 4 ); aPcbPlotParams->m_scaleSelection = parseInt( 0, 4 );
break; break;
case T_outputdirectory: case T_outputdirectory:
NeedSYMBOL(); NeedSYMBOL();
...@@ -423,7 +430,7 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) ...@@ -423,7 +430,7 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams )
} }
bool PCB_PLOT_PARAMS_PARSER::ParseBool() bool PCB_PLOT_PARAMS_PARSER::parseBool()
{ {
T token = NeedSYMBOL(); T token = NeedSYMBOL();
...@@ -434,7 +441,7 @@ bool PCB_PLOT_PARAMS_PARSER::ParseBool() ...@@ -434,7 +441,7 @@ bool PCB_PLOT_PARAMS_PARSER::ParseBool()
} }
int PCB_PLOT_PARAMS_PARSER::ParseInt( int aMin, int aMax ) int PCB_PLOT_PARAMS_PARSER::parseInt( int aMin, int aMax )
{ {
T token = NextTok(); T token = NextTok();
...@@ -450,3 +457,16 @@ int PCB_PLOT_PARAMS_PARSER::ParseInt( int aMin, int aMax ) ...@@ -450,3 +457,16 @@ int PCB_PLOT_PARAMS_PARSER::ParseInt( int aMin, int aMax )
return val; return val;
} }
double PCB_PLOT_PARAMS_PARSER::parseDouble()
{
T token = NextTok();
if( token != T_NUMBER )
Expecting( T_NUMBER );
double val = strtod( CurText(), NULL );
return val;
}
...@@ -46,16 +46,25 @@ public: ...@@ -46,16 +46,25 @@ public:
LINE_READER* GetReader() { return reader; }; LINE_READER* GetReader() { return reader; };
void Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) throw( PARSE_ERROR, IO_ERROR ); void Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) throw( PARSE_ERROR, IO_ERROR );
bool ParseBool();
private:
bool parseBool();
/** /**
* Function ParseInt * Function parseInt
* parses an integer and constrains it between two values. * parses an integer and constrains it between two values.
* @param aMin is the smallest return value. * @param aMin is the smallest return value.
* @param aMax is the largest return value. * @param aMax is the largest return value.
* @return int - the parsed integer. * @return int - the parsed integer.
*/ */
int ParseInt( int aMin, int aMax ); int parseInt( int aMin, int aMax );
/**
* Function parseDouble
* parses a double
* @return double - the parsed double.
*/
double parseDouble();
}; };
......
...@@ -509,7 +509,7 @@ void BRDITEMS_PLOTTER::PlotTextePcb( TEXTE_PCB* pt_texte ) ...@@ -509,7 +509,7 @@ void BRDITEMS_PLOTTER::PlotTextePcb( TEXTE_PCB* pt_texte )
void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE_CONTAINER* aZone ) void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE_CONTAINER* aZone )
{ {
const CPOLYGONS_LIST& polysList = aZone->GetFilledPolysList(); const CPOLYGONS_LIST& polysList = aZone->GetFilledPolysList();
unsigned imax = polysList.size(); unsigned imax = polysList.GetCornersCount();
if( imax == 0 ) // Nothing to draw if( imax == 0 ) // Nothing to draw
return; return;
......
...@@ -1502,7 +1502,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR ) ...@@ -1502,7 +1502,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
mainPolygon->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ]; mainPolygon->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ];
int count = item->Outline()->m_CornersList.size(); int count = item->Outline()->m_CornersList.GetCornersCount();
int ndx = 0; // used in 2 for() loops below int ndx = 0; // used in 2 for() loops below
for( ; ndx<count; ++ndx ) for( ; ndx<count; ++ndx )
{ {
...@@ -1579,7 +1579,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR ) ...@@ -1579,7 +1579,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
mainPolygon->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ]; mainPolygon->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ];
int count = item->Outline()->m_CornersList.size(); int count = item->Outline()->m_CornersList.GetCornersCount();
int ndx = 0; // used in 2 for() loops below int ndx = 0; // used in 2 for() loops below
for( ; ndx<count; ++ndx ) for( ; ndx<count; ++ndx )
{ {
......
...@@ -157,7 +157,7 @@ int ZONE_CONTAINER::FillZoneAreasWithSegments() ...@@ -157,7 +157,7 @@ int ZONE_CONTAINER::FillZoneAreasWithSegments()
// Read all filled areas in m_FilledPolysList // Read all filled areas in m_FilledPolysList
m_FillSegmList.clear(); m_FillSegmList.clear();
istart = 0; istart = 0;
int end_list = m_FilledPolysList.size()-1; int end_list = m_FilledPolysList.GetCornersCount()-1;
for( int ic = 0; ic <= end_list; ic++ ) for( int ic = 0; ic <= end_list; ic++ )
{ {
......
...@@ -358,7 +358,7 @@ void PCB_EDIT_FRAME::Remove_Zone_Corner( wxDC* DC, ZONE_CONTAINER* aZone ) ...@@ -358,7 +358,7 @@ void PCB_EDIT_FRAME::Remove_Zone_Corner( wxDC* DC, ZONE_CONTAINER* aZone )
{ {
OnModify(); OnModify();
if( aZone->Outline()->GetNumCorners() <= 3 ) if( aZone->Outline()->GetCornersCount() <= 3 )
{ {
m_canvas->RefreshDrawingRect( aZone->GetBoundingBox() ); m_canvas->RefreshDrawingRect( aZone->GetBoundingBox() );
......
...@@ -414,7 +414,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) ...@@ -414,7 +414,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
// cornerBufferPolysToSubstract contains polygons to substract. // cornerBufferPolysToSubstract contains polygons to substract.
// polyset_zone_solid_areas contains the main filled area // polyset_zone_solid_areas contains the main filled area
// Calculate now actual solid areas // Calculate now actual solid areas
if( cornerBufferPolysToSubstract.size() > 0 ) if( cornerBufferPolysToSubstract.GetCornersCount() > 0 )
{ {
KI_POLYGON_SET polyset_holes; KI_POLYGON_SET polyset_holes;
cornerBufferPolysToSubstract.ExportTo( polyset_holes ); cornerBufferPolysToSubstract.ExportTo( polyset_holes );
...@@ -440,7 +440,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) ...@@ -440,7 +440,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
s_Correction, s_thermalRot ); s_Correction, s_thermalRot );
// remove copper areas corresponding to not connected stubs // remove copper areas corresponding to not connected stubs
if( cornerBufferPolysToSubstract.size() ) if( cornerBufferPolysToSubstract.GetCornersCount() )
{ {
KI_POLYGON_SET polyset_holes; KI_POLYGON_SET polyset_holes;
cornerBufferPolysToSubstract.ExportTo( polyset_holes ); cornerBufferPolysToSubstract.ExportTo( polyset_holes );
......
...@@ -68,7 +68,7 @@ void ZONE_CONTAINER::TransformOutlinesShapeWithClearanceToPolygon( ...@@ -68,7 +68,7 @@ void ZONE_CONTAINER::TransformOutlinesShapeWithClearanceToPolygon(
KI_POLYGON_SET polyset_zone_solid_areas; KI_POLYGON_SET polyset_zone_solid_areas;
std::vector<KI_POLY_POINT> cornerslist; std::vector<KI_POLY_POINT> cornerslist;
unsigned ic = 0; unsigned ic = 0;
unsigned corners_count = zoneOutines.size(); unsigned corners_count = zoneOutines.GetCornersCount();
while( ic < corners_count ) while( ic < corners_count )
{ {
cornerslist.clear(); cornerslist.clear();
...@@ -104,10 +104,10 @@ void ZONE_CONTAINER::TransformOutlinesShapeWithClearanceToPolygon( ...@@ -104,10 +104,10 @@ void ZONE_CONTAINER::TransformOutlinesShapeWithClearanceToPolygon(
corner.x = point.x(); corner.x = point.x();
corner.y = point.y(); corner.y = point.y();
corner.end_contour = false; corner.end_contour = false;
aCornerBuffer.push_back( corner ); aCornerBuffer.Append( corner );
} }
aCornerBuffer.back().end_contour = true; aCornerBuffer.CloseLastContour();
} }
} }
...@@ -284,8 +284,8 @@ void BuildUnconnectedThermalStubsPolygonList( CPOLYGONS_LIST& aCornerBuffer, ...@@ -284,8 +284,8 @@ void BuildUnconnectedThermalStubsPolygonList( CPOLYGONS_LIST& aCornerBuffer,
CPolyPt corner; CPolyPt corner;
corner.x = cpos.x; corner.x = cpos.x;
corner.y = cpos.y; corner.y = cpos.y;
corner.end_contour = ( ic < (corners_buffer.size() - 1) ) ? 0 : 1; corner.end_contour = ( ic < (corners_buffer.size() - 1) ) ? false : true;
aCornerBuffer.push_back( corner ); aCornerBuffer.Append( corner );
} }
} }
} }
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
void ZONE_CONTAINER::TestForCopperIslandAndRemoveInsulatedIslands( BOARD* aPcb ) void ZONE_CONTAINER::TestForCopperIslandAndRemoveInsulatedIslands( BOARD* aPcb )
{ {
if( m_FilledPolysList.size() == 0 ) if( m_FilledPolysList.GetCornersCount() == 0 )
return; return;
// Build a list of points connected to the net: // Build a list of points connected to the net:
...@@ -79,7 +79,7 @@ void ZONE_CONTAINER::TestForCopperIslandAndRemoveInsulatedIslands( BOARD* aPcb ) ...@@ -79,7 +79,7 @@ void ZONE_CONTAINER::TestForCopperIslandAndRemoveInsulatedIslands( BOARD* aPcb )
unsigned indexstart = 0, indexend; unsigned indexstart = 0, indexend;
bool connected = false; bool connected = false;
for( indexend = 0; indexend < m_FilledPolysList.size(); indexend++ ) for( indexend = 0; indexend < m_FilledPolysList.GetCornersCount(); indexend++ )
{ {
if( m_FilledPolysList[indexend].end_contour ) // end of a filled sub-area found if( m_FilledPolysList[indexend].end_contour ) // end of a filled sub-area found
{ {
......
...@@ -51,7 +51,8 @@ void Merge_SubNets_Connected_By_CopperAreas( BOARD* aPcb, int aNetcode ); ...@@ -51,7 +51,8 @@ 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->GetFilledPolysList().size() < tst->GetFilledPolysList().size(); return ref->GetFilledPolysList().GetCornersCount() <
tst->GetFilledPolysList().GetCornersCount();
else else
return ref->GetNet() < tst->GetNet(); return ref->GetNet() < tst->GetNet();
} }
...@@ -94,7 +95,7 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode ) ...@@ -94,7 +95,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->GetFilledPolysList().size() == 0 ) if( curr_zone->GetFilledPolysList().GetCornersCount() == 0 )
continue; continue;
zones_candidates.push_back(curr_zone); zones_candidates.push_back(curr_zone);
} }
...@@ -144,7 +145,7 @@ void BOARD::Test_Connections_To_Copper_Areas( int aNetcode ) ...@@ -144,7 +145,7 @@ 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;
const CPOLYGONS_LIST& polysList = curr_zone->GetFilledPolysList(); const CPOLYGONS_LIST& polysList = curr_zone->GetFilledPolysList();
for( indexend = 0; indexend < polysList.size(); indexend++ ) for( indexend = 0; indexend < polysList.GetCornersCount(); indexend++ )
{ {
// end of a filled sub-area found // end of a filled sub-area found
if( polysList.IsEndContour( indexend ) ) if( polysList.IsEndContour( indexend ) )
......
...@@ -257,7 +257,7 @@ bool BOARD::TestAreaIntersection( ZONE_CONTAINER* area_ref, ZONE_CONTAINER* area ...@@ -257,7 +257,7 @@ bool BOARD::TestAreaIntersection( ZONE_CONTAINER* area_ref, ZONE_CONTAINER* area
// If a contour is inside an other contour, no segments intersects, but the zones // If a contour is inside an other contour, no segments intersects, but the zones
// can be combined if a corner is inside an outline (only one corner is enought) // can be combined if a corner is inside an outline (only one corner is enought)
for( int ic2 = 0; ic2 < poly2->GetNumCorners(); ic2++ ) for( int ic2 = 0; ic2 < poly2->GetCornersCount(); ic2++ )
{ {
int x = poly2->GetX( ic2 ); int x = poly2->GetX( ic2 );
int y = poly2->GetY( ic2 ); int y = poly2->GetY( ic2 );
...@@ -268,7 +268,7 @@ bool BOARD::TestAreaIntersection( ZONE_CONTAINER* area_ref, ZONE_CONTAINER* area ...@@ -268,7 +268,7 @@ bool BOARD::TestAreaIntersection( ZONE_CONTAINER* area_ref, ZONE_CONTAINER* area
} }
} }
for( int ic1 = 0; ic1 < poly1->GetNumCorners(); ic1++ ) for( int ic1 = 0; ic1 < poly1->GetCornersCount(); ic1++ )
{ {
int x = poly1->GetX( ic1 ); int x = poly1->GetX( ic1 );
int y = poly1->GetY( ic1 ); int y = poly1->GetY( ic1 );
...@@ -414,7 +414,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E ...@@ -414,7 +414,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
zone2zoneClearance = 1; zone2zoneClearance = 1;
// test for some corners of Area_Ref inside area_to_test // test for some corners of Area_Ref inside area_to_test
for( int ic = 0; ic < refSmoothedPoly->GetNumCorners(); ic++ ) for( int ic = 0; ic < refSmoothedPoly->GetCornersCount(); ic++ )
{ {
int x = refSmoothedPoly->GetX( ic ); int x = refSmoothedPoly->GetX( ic );
int y = refSmoothedPoly->GetY( ic ); int y = refSmoothedPoly->GetY( ic );
...@@ -438,7 +438,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E ...@@ -438,7 +438,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
} }
// test for some corners of area_to_test inside Area_Ref // test for some corners of area_to_test inside Area_Ref
for( int ic2 = 0; ic2 < testSmoothedPoly->GetNumCorners(); ic2++ ) for( int ic2 = 0; ic2 < testSmoothedPoly->GetCornersCount(); ic2++ )
{ {
int x = testSmoothedPoly->GetX( ic2 ); int x = testSmoothedPoly->GetX( ic2 );
int y = testSmoothedPoly->GetY( ic2 ); int y = testSmoothedPoly->GetY( ic2 );
......
...@@ -42,7 +42,7 @@ CPolyLine::~CPolyLine() ...@@ -42,7 +42,7 @@ CPolyLine::~CPolyLine()
int removed = 0; int removed = 0;
unsigned startcountour = 0; unsigned startcountour = 0;
for( unsigned icnt = 1; icnt < m_CornersList.size(); icnt ++ ) for( unsigned icnt = 1; icnt < m_CornersList.GetCornersCount(); icnt ++ )
{ {
unsigned last = icnt-1; unsigned last = icnt-1;
if( m_CornersList[icnt].end_contour ) if( m_CornersList[icnt].end_contour )
...@@ -84,7 +84,7 @@ int CPolyLine::NormalizeAreaOutlines( std::vector<CPolyLine*>* aNewPolygonList ) ...@@ -84,7 +84,7 @@ int CPolyLine::NormalizeAreaOutlines( std::vector<CPolyLine*>* aNewPolygonList )
ClipperLib::Polygon raw_polygon; ClipperLib::Polygon raw_polygon;
ClipperLib::Polygons normalized_polygons; ClipperLib::Polygons normalized_polygons;
unsigned corners_count = m_CornersList.size(); unsigned corners_count = m_CornersList.GetCornersCount();
KI_POLYGON_SET polysholes; KI_POLYGON_SET polysholes;
KI_POLYGON_WITH_HOLES mainpoly; KI_POLYGON_WITH_HOLES mainpoly;
...@@ -216,7 +216,7 @@ void CPolyLine::Start( LAYER_NUM layer, int x, int y, int hatch ) ...@@ -216,7 +216,7 @@ void CPolyLine::Start( LAYER_NUM layer, int x, int y, int hatch )
CPolyPt poly_pt( x, y ); CPolyPt poly_pt( x, y );
poly_pt.end_contour = false; poly_pt.end_contour = false;
m_CornersList.push_back( poly_pt ); m_CornersList.Append( poly_pt );
} }
...@@ -229,7 +229,7 @@ void CPolyLine::AppendCorner( int x, int y ) ...@@ -229,7 +229,7 @@ void CPolyLine::AppendCorner( int x, int y )
poly_pt.end_contour = false; poly_pt.end_contour = false;
// add entries for new corner // add entries for new corner
m_CornersList.push_back( poly_pt ); m_CornersList.Append( poly_pt );
} }
// move corner of polyline // move corner of polyline
...@@ -535,16 +535,16 @@ void CPolyLine::InsertCorner( int ic, int x, int y ) ...@@ -535,16 +535,16 @@ void CPolyLine::InsertCorner( int ic, int x, int y )
{ {
UnHatch(); UnHatch();
if( (unsigned) (ic) >= m_CornersList.size() ) if( (unsigned) (ic) >= m_CornersList.GetCornersCount() )
{ {
m_CornersList.push_back( CPolyPt( x, y ) ); m_CornersList.Append( CPolyPt( x, y ) );
} }
else else
{ {
m_CornersList.InsertCorner(ic, CPolyPt( x, y ) ); m_CornersList.InsertCorner(ic, CPolyPt( x, y ) );
} }
if( (unsigned) (ic + 1) < m_CornersList.size() ) if( (unsigned) (ic + 1) < m_CornersList.GetCornersCount() )
{ {
if( m_CornersList[ic].end_contour ) if( m_CornersList[ic].end_contour )
{ {
...@@ -585,7 +585,7 @@ CRect CPolyLine::GetCornerBounds() ...@@ -585,7 +585,7 @@ CRect CPolyLine::GetCornerBounds()
r.left = r.bottom = INT_MAX; r.left = r.bottom = INT_MAX;
r.right = r.top = INT_MIN; r.right = r.top = INT_MIN;
for( unsigned i = 0; i<m_CornersList.size(); i++ ) for( unsigned i = 0; i< m_CornersList.GetCornersCount(); i++ )
{ {
r.left = std::min( r.left, m_CornersList[i].x ); r.left = std::min( r.left, m_CornersList[i].x );
r.right = std::max( r.right, m_CornersList[i].x ); r.right = std::max( r.right, m_CornersList[i].x );
...@@ -618,26 +618,18 @@ CRect CPolyLine::GetCornerBounds( int icont ) ...@@ -618,26 +618,18 @@ CRect CPolyLine::GetCornerBounds( int icont )
} }
int CPolyLine::GetNumCorners() const
{
return m_CornersList.size();
}
int CPolyLine::GetContoursCount() int CPolyLine::GetContoursCount()
{ {
int ncont = 0; int ncont = 0;
if( !m_CornersList.size() ) if( !m_CornersList.GetCornersCount() )
return 0; return 0;
for( unsigned ic = 0; ic < m_CornersList.size(); ic++ ) for( unsigned ic = 0; ic < m_CornersList.GetCornersCount(); ic++ )
if( m_CornersList[ic].end_contour ) if( m_CornersList[ic].end_contour )
ncont++; ncont++;
if( !m_CornersList[m_CornersList.GetCornersCount() - 1].end_contour )
if( !m_CornersList[m_CornersList.size() - 1].end_contour )
ncont++; ncont++;
return ncont; return ncont;
...@@ -665,7 +657,7 @@ int CPolyLine::GetContourStart( int icont ) ...@@ -665,7 +657,7 @@ int CPolyLine::GetContourStart( int icont )
int ncont = 0; int ncont = 0;
for( unsigned i = 0; i<m_CornersList.size(); i++ ) for( unsigned i = 0; i<m_CornersList.GetCornersCount(); i++ )
{ {
if( m_CornersList[i].end_contour ) if( m_CornersList[i].end_contour )
{ {
...@@ -687,11 +679,11 @@ int CPolyLine::GetContourEnd( int icont ) ...@@ -687,11 +679,11 @@ int CPolyLine::GetContourEnd( int icont )
return 0; return 0;
if( icont == GetContoursCount() - 1 ) if( icont == GetContoursCount() - 1 )
return m_CornersList.size() - 1; return m_CornersList.GetCornersCount() - 1;
int ncont = 0; int ncont = 0;
for( unsigned i = 0; i<m_CornersList.size(); i++ ) for( unsigned i = 0; i<m_CornersList.GetCornersCount(); i++ )
{ {
if( m_CornersList[i].end_contour ) if( m_CornersList[i].end_contour )
{ {
...@@ -715,10 +707,10 @@ int CPolyLine::GetContourSize( int icont ) ...@@ -715,10 +707,10 @@ int CPolyLine::GetContourSize( int icont )
int CPolyLine::GetClosed() int CPolyLine::GetClosed()
{ {
if( m_CornersList.size() == 0 ) if( m_CornersList.GetCornersCount() == 0 )
return 0; return 0;
else else
return m_CornersList[m_CornersList.size() - 1].end_contour; return m_CornersList[m_CornersList.GetCornersCount() - 1].end_contour;
} }
...@@ -747,7 +739,7 @@ void CPolyLine::Hatch() ...@@ -747,7 +739,7 @@ void CPolyLine::Hatch()
int min_y = m_CornersList[0].y; int min_y = m_CornersList[0].y;
int max_y = m_CornersList[0].y; int max_y = m_CornersList[0].y;
for( unsigned ic = 1; ic < m_CornersList.size(); ic++ ) for( unsigned ic = 1; ic < m_CornersList.GetCornersCount(); ic++ )
{ {
if( m_CornersList[ic].x < min_x ) if( m_CornersList[ic].x < min_x )
min_x = m_CornersList[ic].x; min_x = m_CornersList[ic].x;
...@@ -798,7 +790,7 @@ void CPolyLine::Hatch() ...@@ -798,7 +790,7 @@ void CPolyLine::Hatch()
min_a += offset; min_a += offset;
// now calculate and draw hatch lines // now calculate and draw hatch lines
int nc = m_CornersList.size(); int nc = m_CornersList.GetCornersCount();
// loop through hatch lines // loop through hatch lines
#define MAXPTS 200 // Usually we store only few values per one hatch line #define MAXPTS 200 // Usually we store only few values per one hatch line
...@@ -824,7 +816,8 @@ void CPolyLine::Hatch() ...@@ -824,7 +816,8 @@ void CPolyLine::Hatch()
double x, y, x2, y2; double x, y, x2, y2;
int ok; int ok;
if( m_CornersList[ic].end_contour || ( ic == (int) (m_CornersList.size() - 1) ) ) if( m_CornersList[ic].end_contour ||
( ic == (int) (m_CornersList.GetCornersCount() - 1) ) )
{ {
ok = FindLineSegmentIntersection( a, slope, ok = FindLineSegmentIntersection( a, slope,
m_CornersList[ic].x, m_CornersList[ic].y, m_CornersList[ic].x, m_CornersList[ic].y,
...@@ -977,7 +970,7 @@ void CPolyLine::MoveOrigin( int x_off, int y_off ) ...@@ -977,7 +970,7 @@ void CPolyLine::MoveOrigin( int x_off, int y_off )
{ {
UnHatch(); UnHatch();
for( int ic = 0; ic < GetNumCorners(); ic++ ) for( int ic = 0; ic < GetCornersCount(); ic++ )
{ {
SetX( ic, GetX( ic ) + x_off ); SetX( ic, GetX( ic ) + x_off );
SetY( ic, GetY( ic ) + y_off ); SetY( ic, GetY( ic ) + y_off );
...@@ -1284,7 +1277,7 @@ void CPOLYGONS_LIST::ImportFrom( KI_POLYGON_SET& aPolygons ) ...@@ -1284,7 +1277,7 @@ void CPOLYGONS_LIST::ImportFrom( KI_POLYGON_SET& aPolygons )
void ConvertPolysListWithHolesToOnePolygon( const CPOLYGONS_LIST& aPolysListWithHoles, void ConvertPolysListWithHolesToOnePolygon( const CPOLYGONS_LIST& aPolysListWithHoles,
CPOLYGONS_LIST& aOnePolyList ) CPOLYGONS_LIST& aOnePolyList )
{ {
unsigned corners_count = aPolysListWithHoles.size(); unsigned corners_count = aPolysListWithHoles.GetCornersCount();
int polycount = 0; int polycount = 0;
for( unsigned ii = 0; ii < corners_count; ii++ ) for( unsigned ii = 0; ii < corners_count; ii++ )
...@@ -1305,7 +1298,7 @@ void ConvertPolysListWithHolesToOnePolygon( const CPOLYGONS_LIST& aPolysListWith ...@@ -1305,7 +1298,7 @@ void ConvertPolysListWithHolesToOnePolygon( const CPOLYGONS_LIST& aPolysListWith
KI_POLYGON_SET mainpoly; KI_POLYGON_SET mainpoly;
KI_POLYGON poly_tmp; KI_POLYGON poly_tmp;
std::vector<KI_POLY_POINT> cornerslist; std::vector<KI_POLY_POINT> cornerslist;
corners_count = aPolysListWithHoles.size(); corners_count = aPolysListWithHoles.GetCornersCount();
unsigned ic = 0; unsigned ic = 0;
// enter main outline // enter main outline
......
...@@ -118,8 +118,6 @@ public: ...@@ -118,8 +118,6 @@ public:
// vector <> methods // vector <> methods
void reserve( int aSize ) { m_cornersList.reserve( aSize ); } void reserve( int aSize ) { m_cornersList.reserve( aSize ); }
void clear() { m_cornersList.clear(); } void clear() { m_cornersList.clear(); }
unsigned size() const { return m_cornersList.size(); }
void push_back( const CPolyPt& aItem ) { m_cornersList.push_back( aItem ); }
CPolyPt& back() { return m_cornersList.back(); } CPolyPt& back() { return m_cornersList.back(); }
unsigned GetCornersCount() const { return m_cornersList.size(); } unsigned GetCornersCount() const { return m_cornersList.size(); }
...@@ -311,7 +309,11 @@ public: ...@@ -311,7 +309,11 @@ public:
// access functions // access functions
void SetLayer( LAYER_NUM aLayer ) { m_layer = aLayer; } void SetLayer( LAYER_NUM aLayer ) { m_layer = aLayer; }
LAYER_NUM GetLayer() const { return m_layer; } LAYER_NUM GetLayer() const { return m_layer; }
int GetNumCorners() const;
int GetCornersCount() const
{
return m_CornersList.GetCornersCount();
}
int GetClosed(); int GetClosed();
int GetContoursCount(); int GetContoursCount();
int GetContour( int ic ); int GetContour( int ic );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment