Gerbview: fix missing pad shapes when exporting to Pcbnew.
This commit is contained in:
parent
4efa13a3e3
commit
0b233d593a
|
@ -862,7 +862,7 @@ SHAPE_POLY_SET* APERTURE_MACRO::GetApertureMacroShape( const GERBER_DRAW_ITEM* a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void APERTURE_MACRO::DrawApertureMacroShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC,
|
void APERTURE_MACRO::DrawApertureMacroShape( const GERBER_DRAW_ITEM* aParent, wxDC* aDC,
|
||||||
const COLOR4D& aColor, const VECTOR2I& aShapePos,
|
const COLOR4D& aColor, const VECTOR2I& aShapePos,
|
||||||
bool aFilledShape )
|
bool aFilledShape )
|
||||||
{
|
{
|
||||||
|
|
|
@ -202,7 +202,8 @@ struct APERTURE_MACRO
|
||||||
* @param aShapePos is the actual shape position.
|
* @param aShapePos is the actual shape position.
|
||||||
* @param aFilledShape set to true to draw in filled mode, false to draw in sketch mode.
|
* @param aFilledShape set to true to draw in filled mode, false to draw in sketch mode.
|
||||||
*/
|
*/
|
||||||
void DrawApertureMacroShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR4D& aColor,
|
void DrawApertureMacroShape( const GERBER_DRAW_ITEM* aParent, wxDC* aDC,
|
||||||
|
const COLOR4D& aColor,
|
||||||
const VECTOR2I& aShapePos, bool aFilledShape );
|
const VECTOR2I& aShapePos, bool aFilledShape );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -144,7 +144,7 @@ int D_CODE::GetShapeDim( GERBER_DRAW_ITEM* aParent )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR4D& aColor,
|
void D_CODE::DrawFlashedShape( const GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR4D& aColor,
|
||||||
const VECTOR2I& aShapePos, bool aFilledShape )
|
const VECTOR2I& aShapePos, bool aFilledShape )
|
||||||
{
|
{
|
||||||
int radius;
|
int radius;
|
||||||
|
@ -174,7 +174,7 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR
|
||||||
else // rectangular hole
|
else // rectangular hole
|
||||||
{
|
{
|
||||||
if( m_Polygon.OutlineCount() == 0 )
|
if( m_Polygon.OutlineCount() == 0 )
|
||||||
ConvertShapeToPolygon();
|
ConvertShapeToPolygon( aParent );
|
||||||
|
|
||||||
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
||||||
}
|
}
|
||||||
|
@ -201,7 +201,7 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( m_Polygon.OutlineCount() == 0 )
|
if( m_Polygon.OutlineCount() == 0 )
|
||||||
ConvertShapeToPolygon();
|
ConvertShapeToPolygon( aParent );
|
||||||
|
|
||||||
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
||||||
}
|
}
|
||||||
|
@ -242,7 +242,7 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( m_Polygon.OutlineCount() == 0 )
|
if( m_Polygon.OutlineCount() == 0 )
|
||||||
ConvertShapeToPolygon();
|
ConvertShapeToPolygon( aParent );
|
||||||
|
|
||||||
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR
|
||||||
|
|
||||||
case APT_POLYGON:
|
case APT_POLYGON:
|
||||||
if( m_Polygon.OutlineCount() == 0 )
|
if( m_Polygon.OutlineCount() == 0 )
|
||||||
ConvertShapeToPolygon();
|
ConvertShapeToPolygon( aParent );
|
||||||
|
|
||||||
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
DrawFlashedPolygon( aParent, aDC, aColor, aFilledShape, aShapePos );
|
||||||
break;
|
break;
|
||||||
|
@ -260,7 +260,8 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void D_CODE::DrawFlashedPolygon( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR4D& aColor,
|
void D_CODE::DrawFlashedPolygon( const GERBER_DRAW_ITEM* aParent, wxDC* aDC,
|
||||||
|
const COLOR4D& aColor,
|
||||||
bool aFilled, const VECTOR2I& aPosition )
|
bool aFilled, const VECTOR2I& aPosition )
|
||||||
{
|
{
|
||||||
if( m_Polygon.OutlineCount() == 0 )
|
if( m_Polygon.OutlineCount() == 0 )
|
||||||
|
@ -290,7 +291,7 @@ static void addHoleToPolygon( SHAPE_POLY_SET* aPolygon, APERTURE_DEF_HOLETYPE aH
|
||||||
const VECTOR2I& aSize, const VECTOR2I& aAnchorPos );
|
const VECTOR2I& aSize, const VECTOR2I& aAnchorPos );
|
||||||
|
|
||||||
|
|
||||||
void D_CODE::ConvertShapeToPolygon()
|
void D_CODE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent )
|
||||||
{
|
{
|
||||||
VECTOR2I initialpos;
|
VECTOR2I initialpos;
|
||||||
VECTOR2I currpos;
|
VECTOR2I currpos;
|
||||||
|
@ -372,8 +373,7 @@ void D_CODE::ConvertShapeToPolygon()
|
||||||
|
|
||||||
addHoleToPolygon( &m_Polygon, m_DrillShape, m_Drill, initialpos );
|
addHoleToPolygon( &m_Polygon, m_DrillShape, m_Drill, initialpos );
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case APT_POLYGON:
|
case APT_POLYGON:
|
||||||
m_Polygon.NewOutline();
|
m_Polygon.NewOutline();
|
||||||
|
@ -402,8 +402,9 @@ void D_CODE::ConvertShapeToPolygon()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case APT_MACRO:
|
case APT_MACRO:
|
||||||
|
APERTURE_MACRO* macro = GetMacro();
|
||||||
// TODO
|
SHAPE_POLY_SET* macroShape = macro->GetApertureMacroShape( aParent, initialpos );
|
||||||
|
m_Polygon.Append( *macroShape );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,8 @@ public:
|
||||||
* @param aShapePos is the actual shape position
|
* @param aShapePos is the actual shape position
|
||||||
* @param aFilledShape set to true to draw in filled mode, false to draw in sketch mode
|
* @param aFilledShape set to true to draw in filled mode, false to draw in sketch mode
|
||||||
*/
|
*/
|
||||||
void DrawFlashedShape( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR4D& aColor,
|
void DrawFlashedShape( const GERBER_DRAW_ITEM* aParent, wxDC* aDC,
|
||||||
|
const COLOR4D& aColor,
|
||||||
const VECTOR2I& aShapePos, bool aFilledShape );
|
const VECTOR2I& aShapePos, bool aFilledShape );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -157,7 +158,8 @@ public:
|
||||||
* @param aFilled set to true to draw in filled mode, false to draw in sketch mode.
|
* @param aFilled set to true to draw in filled mode, false to draw in sketch mode.
|
||||||
* @param aPosition is the actual shape position.
|
* @param aPosition is the actual shape position.
|
||||||
*/
|
*/
|
||||||
void DrawFlashedPolygon( GERBER_DRAW_ITEM* aParent, wxDC* aDC, const COLOR4D& aColor,
|
void DrawFlashedPolygon( const GERBER_DRAW_ITEM* aParent, wxDC* aDC,
|
||||||
|
const COLOR4D& aColor,
|
||||||
bool aFilled, const VECTOR2I& aPosition );
|
bool aFilled, const VECTOR2I& aPosition );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -165,8 +167,10 @@ public:
|
||||||
*
|
*
|
||||||
* Arcs and circles are approximated by segments. Useful when a shape is not a graphic
|
* Arcs and circles are approximated by segments. Useful when a shape is not a graphic
|
||||||
* primitive (shape with hole, rotated shape ... ) and cannot be easily drawn.
|
* primitive (shape with hole, rotated shape ... ) and cannot be easily drawn.
|
||||||
|
* @param aParent is the #GERBER_DRAW_ITEM using this DCode.
|
||||||
|
* Not used in all shapes, used for APT_MACRO
|
||||||
*/
|
*/
|
||||||
void ConvertShapeToPolygon();
|
void ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate a value that can be used to evaluate the size of text when displaying the
|
* Calculate a value that can be used to evaluate the size of text when displaying the
|
||||||
|
|
|
@ -170,7 +170,7 @@ void GBR_TO_PCB_EXPORTER::export_non_copper_item( const GERBER_DRAW_ITEM* aGbrIt
|
||||||
case GBR_SPOT_OVAL:
|
case GBR_SPOT_OVAL:
|
||||||
case GBR_SPOT_POLY:
|
case GBR_SPOT_POLY:
|
||||||
case GBR_SPOT_MACRO:
|
case GBR_SPOT_MACRO:
|
||||||
d_codeDescr->ConvertShapeToPolygon();
|
d_codeDescr->ConvertShapeToPolygon( aGbrItem );
|
||||||
writePcbPolygon( d_codeDescr->m_Polygon, aLayer, aGbrItem->GetABPosition( seg_start ) );
|
writePcbPolygon( d_codeDescr->m_Polygon, aLayer, aGbrItem->GetABPosition( seg_start ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -281,6 +281,8 @@ void GBR_TO_PCB_EXPORTER::export_copper_item( const GERBER_DRAW_ITEM* aGbrItem,
|
||||||
case GBR_SPOT_CIRCLE:
|
case GBR_SPOT_CIRCLE:
|
||||||
case GBR_SPOT_RECT:
|
case GBR_SPOT_RECT:
|
||||||
case GBR_SPOT_OVAL:
|
case GBR_SPOT_OVAL:
|
||||||
|
case GBR_SPOT_POLY:
|
||||||
|
case GBR_SPOT_MACRO:
|
||||||
export_flashed_copper_item( aGbrItem, aLayer );
|
export_flashed_copper_item( aGbrItem, aLayer );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -395,7 +397,6 @@ void GBR_TO_PCB_EXPORTER::export_flashed_copper_item( const GERBER_DRAW_ITEM* aG
|
||||||
static D_CODE flashed_item_D_CODE( 0 );
|
static D_CODE flashed_item_D_CODE( 0 );
|
||||||
|
|
||||||
D_CODE* d_codeDescr = aGbrItem->GetDcodeDescr();
|
D_CODE* d_codeDescr = aGbrItem->GetDcodeDescr();
|
||||||
SHAPE_POLY_SET polygon;
|
|
||||||
|
|
||||||
if( d_codeDescr == nullptr )
|
if( d_codeDescr == nullptr )
|
||||||
d_codeDescr = &flashed_item_D_CODE;
|
d_codeDescr = &flashed_item_D_CODE;
|
||||||
|
@ -423,8 +424,9 @@ void GBR_TO_PCB_EXPORTER::export_flashed_copper_item( const GERBER_DRAW_ITEM* aG
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
d_codeDescr->ConvertShapeToPolygon();
|
APERTURE_MACRO* macro = d_codeDescr->GetMacro();
|
||||||
writePcbPolygon( d_codeDescr->m_Polygon, aLayer, offset );
|
SHAPE_POLY_SET* macroShape = macro->GetApertureMacroShape( aGbrItem, VECTOR2I( 0, 0 ) );
|
||||||
|
writePcbPolygon( *macroShape, aLayer, offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -323,7 +323,7 @@ const BOX2I GERBER_DRAW_ITEM::GetBoundingBox() const
|
||||||
if( code )
|
if( code )
|
||||||
{
|
{
|
||||||
if( code->m_Polygon.OutlineCount() == 0 )
|
if( code->m_Polygon.OutlineCount() == 0 )
|
||||||
code->ConvertShapeToPolygon();
|
code->ConvertShapeToPolygon( this );
|
||||||
|
|
||||||
bbox.Inflate( code->m_Polygon.BBox().GetWidth() / 2,
|
bbox.Inflate( code->m_Polygon.BBox().GetWidth() / 2,
|
||||||
code->m_Polygon.BBox().GetHeight() / 2 );
|
code->m_Polygon.BBox().GetHeight() / 2 );
|
||||||
|
|
|
@ -473,7 +473,7 @@ void GERBVIEW_PAINTER::drawFlashedShape( GERBER_DRAW_ITEM* aItem, bool aFilled )
|
||||||
else // rectangular hole
|
else // rectangular hole
|
||||||
{
|
{
|
||||||
if( code->m_Polygon.OutlineCount() == 0 )
|
if( code->m_Polygon.OutlineCount() == 0 )
|
||||||
code->ConvertShapeToPolygon();
|
code->ConvertShapeToPolygon( aItem );
|
||||||
|
|
||||||
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
||||||
}
|
}
|
||||||
|
@ -498,7 +498,7 @@ void GERBVIEW_PAINTER::drawFlashedShape( GERBER_DRAW_ITEM* aItem, bool aFilled )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( code->m_Polygon.OutlineCount() == 0 )
|
if( code->m_Polygon.OutlineCount() == 0 )
|
||||||
code->ConvertShapeToPolygon();
|
code->ConvertShapeToPolygon( aItem );
|
||||||
|
|
||||||
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
||||||
}
|
}
|
||||||
|
@ -537,7 +537,7 @@ void GERBVIEW_PAINTER::drawFlashedShape( GERBER_DRAW_ITEM* aItem, bool aFilled )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( code->m_Polygon.OutlineCount() == 0 )
|
if( code->m_Polygon.OutlineCount() == 0 )
|
||||||
code->ConvertShapeToPolygon();
|
code->ConvertShapeToPolygon( aItem );
|
||||||
|
|
||||||
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
||||||
}
|
}
|
||||||
|
@ -546,7 +546,7 @@ void GERBVIEW_PAINTER::drawFlashedShape( GERBER_DRAW_ITEM* aItem, bool aFilled )
|
||||||
|
|
||||||
case GBR_SPOT_POLY:
|
case GBR_SPOT_POLY:
|
||||||
if( code->m_Polygon.OutlineCount() == 0 )
|
if( code->m_Polygon.OutlineCount() == 0 )
|
||||||
code->ConvertShapeToPolygon();
|
code->ConvertShapeToPolygon( aItem );
|
||||||
|
|
||||||
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
drawPolygon( aItem, code->m_Polygon, aFilled, true );
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue