Incorrect default value (not saved in file) of DRAWSEGMENT width, for the S_POLYGON shape.

The value of the width is now always saved to avoid this kind of issue.

Also Fixes: lp:173257
This commit is contained in:
jean-pierre charras 2017-11-16 09:38:26 +01:00
parent af8b71ac87
commit 25f9c6e4f9
4 changed files with 24 additions and 9 deletions

View File

@ -57,7 +57,8 @@ DRAWSEGMENT::DRAWSEGMENT( BOARD_ITEM* aParent, KICAD_T idtype ) :
m_Angle = 0; m_Angle = 0;
m_Flags = 0; m_Flags = 0;
m_Shape = S_SEGMENT; m_Shape = S_SEGMENT;
m_Width = Millimeter2iu( 0.15 ); // Gives a decent width // Gives a decent pen size to draw shape:
m_Width = m_Shape == S_POLYGON ? 0 : Millimeter2iu( 0.15 );
} }
@ -317,6 +318,23 @@ void DRAWSEGMENT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
break; break;
case S_POLYGON:
{
SHAPE_POLY_SET& outline = GetPolyShape();
// Draw the polygon: only one polygon is expected
// However we provide a multi polygon shape drawing
// ( for the future or to show a non expected shape )
for( int jj = 0; jj < outline.OutlineCount(); ++jj )
{
SHAPE_LINE_CHAIN& poly = outline.Outline( jj );
GRClosedPoly( panel->GetClipBox(), DC, poly.PointCount(),
(wxPoint*)&poly.Point( 0 ), FILLED, GetWidth(),
color, color );
}
}
break;
default: default:
if( filled ) if( filled )
{ {

View File

@ -58,7 +58,7 @@ protected:
wxPoint m_BezierC2; ///< Bezier Control Point 2 wxPoint m_BezierC2; ///< Bezier Control Point 2
std::vector<wxPoint> m_BezierPoints; std::vector<wxPoint> m_BezierPoints;
SHAPE_POLY_SET m_Poly; SHAPE_POLY_SET m_Poly; ///< Stores the S_POLYGON shape
// Computes the bounding box for an arc // Computes the bounding box for an arc
void computeArcBBox( EDA_RECT& aBBox ) const; void computeArcBBox( EDA_RECT& aBBox ) const;

View File

@ -920,7 +920,6 @@ void PCB_IO::format( DRAWSEGMENT* aSegment, int aNestLevel ) const
formatLayer( aSegment ); formatLayer( aSegment );
if( aSegment->GetWidth() != 0 )
m_out->Print( 0, " (width %s)", FMT_IU( aSegment->GetWidth() ).c_str() ); m_out->Print( 0, " (width %s)", FMT_IU( aSegment->GetWidth() ).c_str() );
if( aSegment->GetTimeStamp() ) if( aSegment->GetTimeStamp() )
@ -1463,10 +1462,7 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
} }
} }
if( primitive.m_Thickness != 0 )
m_out->Print( 0, ") (width %s))", FMT_IU( primitive.m_Thickness ).c_str() ); m_out->Print( 0, ") (width %s))", FMT_IU( primitive.m_Thickness ).c_str() );
else
m_out->Print( 0, "))");
} }
break; break;

View File

@ -1438,6 +1438,7 @@ DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT()
case T_gr_poly: case T_gr_poly:
{ {
segment->SetShape( S_POLYGON ); segment->SetShape( S_POLYGON );
segment->SetWidth( 0 ); // this is the default value. will be (perhaps) modified later
NeedLEFT(); NeedLEFT();
token = NextTok(); token = NextTok();