Add infobar error message for Autoplace when board not defined.
Fixes https://gitlab.com/kicad/code/kicad/issues/5425
This commit is contained in:
parent
d0479eb92c
commit
091f769106
|
@ -124,7 +124,7 @@ public:
|
||||||
* of time.
|
* of time.
|
||||||
*
|
*
|
||||||
* @param aMessage is the message to display
|
* @param aMessage is the message to display
|
||||||
* @param aTime is the amount of time to show the infobar
|
* @param aTime is the amount of time in microseconds to show the infobar
|
||||||
* @param aFlags is the flag containing the icon to display on the left side of the infobar
|
* @param aFlags is the flag containing the icon to display on the left side of the infobar
|
||||||
*/
|
*/
|
||||||
void ShowMessageFor( const wxString& aMessage, int aTime, int aFlags = wxICON_INFORMATION );
|
void ShowMessageFor( const wxString& aMessage, int aTime, int aFlags = wxICON_INFORMATION );
|
||||||
|
|
|
@ -257,7 +257,7 @@ set( PCBNEW_CLASS_SRCS
|
||||||
autorouter/spread_footprints.cpp
|
autorouter/spread_footprints.cpp
|
||||||
autorouter/ar_autoplacer.cpp
|
autorouter/ar_autoplacer.cpp
|
||||||
autorouter/ar_matrix.cpp
|
autorouter/ar_matrix.cpp
|
||||||
autorouter/autoplacer_tool.cpp
|
autorouter/autoplace_tool.cpp
|
||||||
|
|
||||||
action_plugin.cpp
|
action_plugin.cpp
|
||||||
array_creator.cpp
|
array_creator.cpp
|
||||||
|
|
|
@ -880,14 +880,13 @@ void AR_AUTOPLACER::drawPlacementRoutingMatrix( )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AR_RESULT AR_AUTOPLACER::AutoplaceModules( std::vector<MODULE*> aModules,
|
AR_RESULT AR_AUTOPLACER::AutoplaceModules( std::vector<MODULE*>& aModules, BOARD_COMMIT* aCommit,
|
||||||
BOARD_COMMIT* aCommit, bool aPlaceOffboardModules )
|
bool aPlaceOffboardModules )
|
||||||
{
|
{
|
||||||
wxPoint PosOK;
|
wxPoint memopos;
|
||||||
wxPoint memopos;
|
int error;
|
||||||
int error;
|
|
||||||
MODULE* module = nullptr;
|
MODULE* module = nullptr;
|
||||||
bool cancelled = false;
|
bool cancelled = false;
|
||||||
|
|
||||||
memopos = m_curPosition;
|
memopos = m_curPosition;
|
||||||
|
|
||||||
|
@ -908,32 +907,30 @@ AR_RESULT AR_AUTOPLACER::AutoplaceModules( std::vector<MODULE*> aModules,
|
||||||
m->SetNeedsPlaced( false );
|
m->SetNeedsPlaced( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<MODULE *> offboardMods;
|
std::vector<MODULE*> offboardMods;
|
||||||
|
|
||||||
if( aPlaceOffboardModules )
|
if( aPlaceOffboardModules )
|
||||||
{
|
{
|
||||||
for ( auto m : m_board->Modules() )
|
for( MODULE* m : m_board->Modules() )
|
||||||
{
|
{
|
||||||
if( !m_matrix.m_BrdBox.Contains( m->GetPosition() ) )
|
if( !m_matrix.m_BrdBox.Contains( m->GetPosition() ) )
|
||||||
{
|
|
||||||
offboardMods.push_back( m );
|
offboardMods.push_back( m );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( auto m : aModules )
|
for( MODULE* m : aModules )
|
||||||
{
|
{
|
||||||
m->SetNeedsPlaced( true );
|
m->SetNeedsPlaced( true );
|
||||||
aCommit->Modify(m);
|
aCommit->Modify(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( auto m : offboardMods )
|
for( MODULE* m : offboardMods )
|
||||||
{
|
{
|
||||||
m->SetNeedsPlaced( true );
|
m->SetNeedsPlaced( true );
|
||||||
aCommit->Modify(m);
|
aCommit->Modify(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( auto m : m_board->Modules() )
|
for( MODULE* m : m_board->Modules() )
|
||||||
{
|
{
|
||||||
if( m->NeedsPlaced() ) // Erase from screen
|
if( m->NeedsPlaced() ) // Erase from screen
|
||||||
moduleCount++;
|
moduleCount++;
|
||||||
|
@ -972,7 +969,6 @@ AR_RESULT AR_AUTOPLACER::AutoplaceModules( std::vector<MODULE*> aModules,
|
||||||
double bestScore = m_minCost;
|
double bestScore = m_minCost;
|
||||||
double bestRotation = 0.0;
|
double bestRotation = 0.0;
|
||||||
int rotAllowed;
|
int rotAllowed;
|
||||||
PosOK = m_curPosition;
|
|
||||||
|
|
||||||
if( error == AR_ABORT_PLACEMENT )
|
if( error == AR_ABORT_PLACEMENT )
|
||||||
goto end_of_tst;
|
goto end_of_tst;
|
||||||
|
@ -988,7 +984,6 @@ AR_RESULT AR_AUTOPLACER::AutoplaceModules( std::vector<MODULE*> aModules,
|
||||||
|
|
||||||
if( bestScore > m_minCost ) // This orientation is better.
|
if( bestScore > m_minCost ) // This orientation is better.
|
||||||
{
|
{
|
||||||
PosOK = m_curPosition;
|
|
||||||
bestScore = m_minCost;
|
bestScore = m_minCost;
|
||||||
bestRotation = 1800.0;
|
bestRotation = 1800.0;
|
||||||
}
|
}
|
||||||
|
@ -1012,7 +1007,6 @@ AR_RESULT AR_AUTOPLACER::AutoplaceModules( std::vector<MODULE*> aModules,
|
||||||
|
|
||||||
if( bestScore > m_minCost ) // This orientation is better.
|
if( bestScore > m_minCost ) // This orientation is better.
|
||||||
{
|
{
|
||||||
PosOK = m_curPosition;
|
|
||||||
bestScore = m_minCost;
|
bestScore = m_minCost;
|
||||||
bestRotation = 900.0;
|
bestRotation = 900.0;
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +1028,6 @@ AR_RESULT AR_AUTOPLACER::AutoplaceModules( std::vector<MODULE*> aModules,
|
||||||
|
|
||||||
if( bestScore > m_minCost ) // This orientation is better.
|
if( bestScore > m_minCost ) // This orientation is better.
|
||||||
{
|
{
|
||||||
PosOK = m_curPosition;
|
|
||||||
bestScore = m_minCost;
|
bestScore = m_minCost;
|
||||||
bestRotation = 2700.0;
|
bestRotation = 2700.0;
|
||||||
}
|
}
|
||||||
|
@ -1090,10 +1083,8 @@ end_of_tst:
|
||||||
|
|
||||||
m_matrix.UnInitRoutingMatrix();
|
m_matrix.UnInitRoutingMatrix();
|
||||||
|
|
||||||
for ( auto m : m_board->Modules() )
|
for( MODULE* m : m_board->Modules() )
|
||||||
{
|
|
||||||
m->CalculateBoundingBox();
|
m->CalculateBoundingBox();
|
||||||
}
|
|
||||||
|
|
||||||
return cancelled ? AR_CANCELLED : AR_COMPLETED;
|
return cancelled ? AR_CANCELLED : AR_COMPLETED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,8 +59,8 @@ class AR_AUTOPLACER
|
||||||
public:
|
public:
|
||||||
AR_AUTOPLACER( BOARD* aBoard );
|
AR_AUTOPLACER( BOARD* aBoard );
|
||||||
|
|
||||||
AR_RESULT AutoplaceModules( std::vector<MODULE*> aModules, BOARD_COMMIT* aCommit,
|
AR_RESULT AutoplaceModules( std::vector<MODULE*>& aModules, BOARD_COMMIT* aCommit,
|
||||||
bool aPlaceOffboardModules = false );
|
bool aPlaceOffboardModules = false );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a VIEW overlay to draw items during a autoplace session.
|
* Set a VIEW overlay to draw items during a autoplace session.
|
||||||
|
|
|
@ -23,17 +23,12 @@
|
||||||
|
|
||||||
|
|
||||||
#include <board_commit.h>
|
#include <board_commit.h>
|
||||||
//#include <confirm.h>
|
|
||||||
//#include <tool/tool_manager.h>
|
|
||||||
//#include <view/view_controls.h>
|
|
||||||
//#include <bitmaps.h>
|
|
||||||
//#include <class_module.h>
|
|
||||||
#include <tools/pcb_actions.h>
|
#include <tools/pcb_actions.h>
|
||||||
#include <widgets/infobar.h>
|
#include <widgets/infobar.h>
|
||||||
#include <widgets/progress_reporter.h>
|
#include <widgets/progress_reporter.h>
|
||||||
|
|
||||||
#include "ar_autoplacer.h"
|
#include "ar_autoplacer.h"
|
||||||
#include "autoplacer_tool.h"
|
#include "autoplace_tool.h"
|
||||||
|
|
||||||
|
|
||||||
AUTOPLACE_TOOL::AUTOPLACE_TOOL() : PCB_TOOL_BASE( "pcbnew.Autoplacer" )
|
AUTOPLACE_TOOL::AUTOPLACE_TOOL() : PCB_TOOL_BASE( "pcbnew.Autoplacer" )
|
||||||
|
@ -73,7 +68,7 @@ int AUTOPLACE_TOOL::autoplace( std::vector<MODULE*>& aModules, bool aPlaceOffboa
|
||||||
wxString msg = wxString::Format( _( "Board edges must be defined on the %s layer." ),
|
wxString msg = wxString::Format( _( "Board edges must be defined on the %s layer." ),
|
||||||
LayerName( Edge_Cuts ) );
|
LayerName( Edge_Cuts ) );
|
||||||
|
|
||||||
frame()->GetInfoBar()->ShowMessageFor( msg, 4000, wxICON_ERROR );
|
frame()->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_ERROR );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue