Better board-edge error reporting.
Fixes https://gitlab.com/kicad/code/kicad/issues/4950
This commit is contained in:
parent
01eb8ad032
commit
66ff16dd3d
|
@ -426,8 +426,10 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR
|
||||||
if( aStatusReporter )
|
if( aStatusReporter )
|
||||||
aStatusReporter->Report( _( "Build board body" ) );
|
aStatusReporter->Report( _( "Build board body" ) );
|
||||||
|
|
||||||
if( !createBoardPolygon() )
|
wxString msg;
|
||||||
aWarningReporter->Report( _( "Board outline is not closed" ), RPT_SEVERITY_WARNING );
|
|
||||||
|
if( !createBoardPolygon( &msg ) )
|
||||||
|
aWarningReporter->Report( _( "Board outline is not closed: " ) + msg, RPT_SEVERITY_WARNING );
|
||||||
else
|
else
|
||||||
aWarningReporter->Report( wxEmptyString );
|
aWarningReporter->Report( wxEmptyString );
|
||||||
|
|
||||||
|
@ -454,13 +456,13 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool BOARD_ADAPTER::createBoardPolygon()
|
bool BOARD_ADAPTER::createBoardPolygon( wxString* aErrorMsg )
|
||||||
{
|
{
|
||||||
m_board_poly.RemoveAllContours();
|
m_board_poly.RemoveAllContours();
|
||||||
|
|
||||||
wxString errmsg;
|
wxString errmsg;
|
||||||
|
|
||||||
return m_board->GetBoardPolygonOutlines( m_board_poly, &errmsg );
|
return m_board->GetBoardPolygonOutlines( m_board_poly, aErrorMsg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -569,7 +569,7 @@ class BOARD_ADAPTER
|
||||||
*
|
*
|
||||||
* @return false if the outline could not be created
|
* @return false if the outline could not be created
|
||||||
*/
|
*/
|
||||||
bool createBoardPolygon();
|
bool createBoardPolygon( wxString* aErrorMsg );
|
||||||
void createLayers( REPORTER* aStatusReporter );
|
void createLayers( REPORTER* aStatusReporter );
|
||||||
void destroyLayers();
|
void destroyLayers();
|
||||||
|
|
||||||
|
|
|
@ -199,6 +199,9 @@ void INFOBAR_REPORTER::Finalize()
|
||||||
case RPT_SEVERITY_IGNORE: icon = wxICON_INFORMATION; break;
|
case RPT_SEVERITY_IGNORE: icon = wxICON_INFORMATION; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( m_message.EndsWith( "\n" ) )
|
||||||
|
m_message = m_message.Left( m_message.Length() - 1 );
|
||||||
|
|
||||||
if( HasMessage() )
|
if( HasMessage() )
|
||||||
m_infoBar->QueueShowMessage( m_message, icon );
|
m_infoBar->QueueShowMessage( m_message, icon );
|
||||||
else
|
else
|
||||||
|
|
|
@ -1813,11 +1813,11 @@ extern bool BuildBoardPolygonOutlines( BOARD* aBoard, SHAPE_POLY_SET& aOutlines,
|
||||||
wxPoint* aErrorLocation = nullptr );
|
wxPoint* aErrorLocation = nullptr );
|
||||||
|
|
||||||
|
|
||||||
bool BOARD::GetBoardPolygonOutlines( SHAPE_POLY_SET& aOutlines, wxString* aErrorText, wxPoint* aErrorLocation )
|
bool BOARD::GetBoardPolygonOutlines( SHAPE_POLY_SET& aOutlines, wxString* aErrorText,
|
||||||
|
wxPoint* aErrorLocation )
|
||||||
{
|
{
|
||||||
|
|
||||||
bool success = BuildBoardPolygonOutlines( this, aOutlines, aErrorText,
|
bool success = BuildBoardPolygonOutlines( this, aOutlines, aErrorText,
|
||||||
GetDesignSettings().m_MaxError, aErrorLocation );
|
GetDesignSettings().m_MaxError, aErrorLocation );
|
||||||
|
|
||||||
// Make polygon strictly simple to avoid issues (especially in 3D viewer)
|
// Make polygon strictly simple to avoid issues (especially in 3D viewer)
|
||||||
aOutlines.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
|
aOutlines.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
|
||||||
|
|
|
@ -621,8 +621,8 @@ public:
|
||||||
*
|
*
|
||||||
* @return true if success, false if a contour is not valid
|
* @return true if success, false if a contour is not valid
|
||||||
*/
|
*/
|
||||||
bool GetBoardPolygonOutlines( SHAPE_POLY_SET& aOutlines,
|
bool GetBoardPolygonOutlines( SHAPE_POLY_SET& aOutlines, wxString* aErrorText = nullptr,
|
||||||
wxString* aErrorText = nullptr, wxPoint* aErrorLocation = nullptr );
|
wxPoint* aErrorLocation = nullptr );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ConvertBrdLayerToPolygonalContours
|
* Function ConvertBrdLayerToPolygonalContours
|
||||||
|
|
|
@ -488,9 +488,9 @@ bool ConvertOutlineToPolygon( std::vector<DRAWSEGMENT*>& aSegList, SHAPE_POLY_SE
|
||||||
{
|
{
|
||||||
if( aErrorText )
|
if( aErrorText )
|
||||||
{
|
{
|
||||||
msg.Printf( _( "Unable to find segment with an endpoint of (%s, %s)." ),
|
msg.Printf( _( "Unable to find edge with an endpoint of (%s, %s)." ),
|
||||||
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.x, true ),
|
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.x, true ),
|
||||||
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.y, true ) );
|
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.y, true ) );
|
||||||
|
|
||||||
*aErrorText << msg << "\n";
|
*aErrorText << msg << "\n";
|
||||||
}
|
}
|
||||||
|
@ -694,7 +694,7 @@ bool ConvertOutlineToPolygon( std::vector<DRAWSEGMENT*>& aSegList, SHAPE_POLY_SE
|
||||||
{
|
{
|
||||||
if( aErrorText )
|
if( aErrorText )
|
||||||
{
|
{
|
||||||
msg.Printf( _( "Unable to find segment with an endpoint of (%s, %s)." ),
|
msg.Printf( _( "Unable to find edge with an endpoint of (%s, %s)." ),
|
||||||
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.x, true ),
|
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.x, true ),
|
||||||
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.y, true ) );
|
StringFromValue( EDA_UNITS::MILLIMETRES, prevPt.y, true ) );
|
||||||
|
|
||||||
|
@ -758,8 +758,8 @@ bool ConvertOutlineToPolygon( std::vector<DRAWSEGMENT*>& aSegList, SHAPE_POLY_SE
|
||||||
* Any closed outline inside the main outline is a hole
|
* Any closed outline inside the main outline is a hole
|
||||||
* All contours should be closed, i.e. valid closed polygon vertices
|
* All contours should be closed, i.e. valid closed polygon vertices
|
||||||
*/
|
*/
|
||||||
bool BuildBoardPolygonOutlines( BOARD* aBoard, SHAPE_POLY_SET& aOutlines,
|
bool BuildBoardPolygonOutlines( BOARD* aBoard, SHAPE_POLY_SET& aOutlines, wxString* aErrorText,
|
||||||
wxString* aErrorText, unsigned int aTolerance, wxPoint* aErrorLocation )
|
unsigned int aTolerance, wxPoint* aErrorLocation )
|
||||||
{
|
{
|
||||||
PCB_TYPE_COLLECTOR items;
|
PCB_TYPE_COLLECTOR items;
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
@ -783,6 +783,10 @@ bool BuildBoardPolygonOutlines( BOARD* aBoard, SHAPE_POLY_SET& aOutlines,
|
||||||
success = ConvertOutlineToPolygon( segList, aOutlines, aErrorText, aTolerance,
|
success = ConvertOutlineToPolygon( segList, aOutlines, aErrorText, aTolerance,
|
||||||
aErrorLocation );
|
aErrorLocation );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*aErrorText = _( "No edges found on Edge.Cuts layer." );
|
||||||
|
}
|
||||||
|
|
||||||
if( !success || !aOutlines.OutlineCount() )
|
if( !success || !aOutlines.OutlineCount() )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue