PNS: Moving the rest of the placer to Fix/Commit

Springback introduced a new PNS structure to check for valid placement
as well as separating the Fix/Commit routines.  This updates the
remaining placers to utilize the new structure.

Fixes https://gitlab.com/kicad/code/kicad/issues/4008
This commit is contained in:
Seth Hillbrand 2020-03-06 09:55:20 -08:00
parent f6317fba82
commit 4dfe630b28
5 changed files with 71 additions and 2 deletions

View File

@ -86,10 +86,13 @@ public:
*/
bool FixRoute( const VECTOR2I& aP, ITEM* aEndItem, bool aForceFinish ) override;
/// @copydoc PLACEMENT_ALGO::CommitPlacement()
bool CommitPlacement() override;
/// @copydoc PLACEMENT_ALGO::AbortPlacement()
bool AbortPlacement() override;
/// @copydoc PLACEMENT_ALGO::HasPlacedAnything()
bool HasPlacedAnything() const override;
/**

View File

@ -315,12 +315,36 @@ bool DP_MEANDER_PLACER::FixRoute( const VECTOR2I& aP, ITEM* aEndItem, bool aForc
m_currentNode->Add( lP );
m_currentNode->Add( lN );
Router()->CommitRouting( m_currentNode );
CommitPlacement();
return true;
}
bool DP_MEANDER_PLACER::AbortPlacement()
{
m_world->KillChildren();
return true;
}
bool DP_MEANDER_PLACER::HasPlacedAnything() const
{
return m_originPair.CP().SegmentCount() > 0 ||
m_originPair.CN().SegmentCount() > 0;
}
bool DP_MEANDER_PLACER::CommitPlacement()
{
if( m_currentNode )
Router()->CommitRouting( m_currentNode );
m_currentNode = NULL;
return true;
}
bool DP_MEANDER_PLACER::CheckFit( MEANDER_SHAPE* aShape )
{
LINE l1( m_originPair.PLine(), aShape->CLine( 0 ) );

View File

@ -80,6 +80,15 @@ public:
*/
bool FixRoute( const VECTOR2I& aP, ITEM* aEndItem, bool aForceFinish = false ) override;
/// @copydoc PLACEMENT_ALGO::CommitPlacement()
bool CommitPlacement() override;
/// @copydoc PLACEMENT_ALGO::AbortPlacement()
bool AbortPlacement() override;
/// @copydoc PLACEMENT_ALGO::HasPlacedAnything()
bool HasPlacedAnything() const override;
const LINE Trace() const;
/**

View File

@ -197,12 +197,36 @@ bool MEANDER_PLACER::FixRoute( const VECTOR2I& aP, ITEM* aEndItem, bool aForceFi
m_currentTrace = LINE( m_originLine, m_finalShape );
m_currentNode->Add( m_currentTrace );
CommitPlacement();
Router()->CommitRouting( m_currentNode );
return true;
}
bool MEANDER_PLACER::AbortPlacement()
{
m_world->KillChildren();
return true;
}
bool MEANDER_PLACER::HasPlacedAnything() const
{
return m_currentTrace.SegmentCount() > 0;
}
bool MEANDER_PLACER::CommitPlacement()
{
if( m_currentNode )
Router()->CommitRouting( m_currentNode );
m_currentNode = NULL;
return true;
}
bool MEANDER_PLACER::CheckFit( MEANDER_SHAPE* aShape )
{
LINE l( m_originLine, aShape->CLine( 0 ) );

View File

@ -61,6 +61,15 @@ public:
/// @copydoc PLACEMENT_ALGO::FixRoute()
virtual bool FixRoute( const VECTOR2I& aP, ITEM* aEndItem, bool aForceFinish = false ) override;
/// @copydoc PLACEMENT_ALGO::CommitPlacement()
bool CommitPlacement() override;
/// @copydoc PLACEMENT_ALGO::AbortPlacement()
bool AbortPlacement() override;
/// @copydoc PLACEMENT_ALGO::HasPlacedAnything()
bool HasPlacedAnything() const override;
/// @copydoc PLACEMENT_ALGO::CurrentNode()
NODE* CurrentNode( bool aLoopsRemoved = false ) const override;