30#define PNSLOGINFO PNS::DEBUG_DECORATOR::SRC_LOCATION_INFO( __FILE__, __FUNCTION__, __LINE__ )
57 m_router->Sizes().SetTrackWidth( 250000 );
68 std::vector<PNS::ITEM*> added, removed, heads;
69 m_router->GetUpdatedItems( removed, added, heads );
72 for(
auto item : removed )
80 for(
auto item : added )
87 for(
auto head : heads )
94 bool aUpdateExpectedResult )
103 int totalEvents = aLog->
Events().size();
105 for(
auto evt : aLog->
Events() )
107 if( eventIdx < aFrom || ( aTo >= 0 && eventIdx > aTo ) )
113 printf(
"items: %zu\n", items.size() );
114 ITEM* ritem =
nullptr;
116 if( items.size() && items[0] )
117 ritem =
m_router->GetWorld()->FindItemByParent( items[0] );
119 int routingLayer = ritem ? ritem->
Layers().
Start() : evt.layer;
123 if(
ITEM* routerItem =
m_router->GetWorld()->FindItemByParent( item ) )
124 ritems.
Add( routerItem );
135 m_iface->SetStartLayerFromPNS( routingLayer );
136 m_iface->ImportSizes( sizes, ritem,
nullptr, evt.p );
142 bool status =
m_router->StartRouting( evt.p, ritem, routingLayer );
144 msg = wxString::Format(
"event [%d/%d]: route-start (%d, %d), layer %d, startitem %p status %d", eventIdx,
145 totalEvents, evt.p.x, evt.p.y, routingLayer, ritem, status ? 1 : 0 );
157 m_iface->SetStartLayerFromPNS( routingLayer );
158 m_iface->ImportSizes( sizes, ritem,
nullptr, evt.p );
164 auto msg = wxString::Format(
"event [%d/%d]: drag-start (%d, %d)", eventIdx,
165 totalEvents, evt.p.x, evt.p.y );
170 bool rv =
m_router->StartDragging( evt.p, ritems, 0 );
179 bool rv =
m_router->FixRoute( evt.p, ritem,
false,
false );
180 printf(
" fix -> (%d, %d) ret %d\n", evt.p.x, evt.p.y, rv ? 1 : 0 );
189 printf(
" unfix\n" );
199 auto msg = wxString::Format(
"event [%d/%d]: move (%d, %d)", eventIdx, totalEvents, evt.p.x, evt.p.y );
204 bool ret =
m_router->Move( evt.p, ritem );
213 auto msg = wxString::Format(
"event [%d/%d]: toggle-via", eventIdx, totalEvents );
233 auto traces =
m_router->Placer()->Traces();
235 for(
const auto& t : traces.CItems() )
237 const LINE *l =
static_cast<LINE*
>(t.item);
238 const auto& sh = l->
CLine();
245 node =
m_router->Placer()->CurrentNode(
true );
249 node =
m_router->GetDragger()->CurrentNode();
258 if( ! added.empty() )
263 for(
auto t : added )
273 wxASSERT_MSG(
m_router->Mode() == aLog->
GetMode(),
"didn't set the router mode correctly?" );
275 if( aUpdateExpectedResult )
277 std::vector<PNS::ITEM*> added, removed, heads;
278 m_router->GetUpdatedItems( removed, added, heads );
280 std::set<KIID> removedKIIDs;
282 for(
auto item : removed )
288 removedKIIDs.insert( item->Parent()->m_Uuid );
291 std::vector<std::unique_ptr<PNS::ITEM>> myOwnedItems;
295 routerCommitState.
m_heads = heads;
298 myOwnedItems.emplace_back( head );
311 printf(
"Comparing %zu added/%zu removed items\n", cstate.m_addedItems.size(), cstate.m_removedIds.size() );
317 m_viewTracker( aViewTracker )
351 return static_cast<NETINFO_ITEM*
>( aNet )->GetNetname();
353 return wxEmptyString;
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
Handle the data for a net.
static REPORTER & GetInstance()
void Add(const LINE &aLine)
Base class for PNS router board items.
const PNS_LAYER_RANGE & Layers() const
virtual ITEM * Clone() const =0
Return a deep copy of the item.
Represents a track on a PCB, connecting two non-trivial joints (that is, vias, pads,...
const SHAPE_LINE_CHAIN & CLine() const
Keep the router "world" - i.e.
std::vector< ITEM * > ITEM_VECTOR
void GetUpdatedItems(ITEM_VECTOR &aRemoved, ITEM_VECTOR &aAdded)
Return the list of items removed and added in this branch with respect to the root branch.
Contain all persistent settings of the router, such as the mode, optimization effort,...
void SetExpectedResult(const COMMIT_STATE &aCommitState, std::vector< std::unique_ptr< PNS::ITEM > > aParsedItems)
const COMMIT_STATE & GetExpectedResult() const
PNS::ROUTING_SETTINGS * GetRoutingSettings() const
PNS::ROUTER_MODE GetMode() const
std::vector< PNS::LOGGER::EVENT_ENTRY > & Events()
std::shared_ptr< BOARD > GetBoard() const
std::vector< BOARD_CONNECTED_ITEM * > ItemsById(const PNS::LOGGER::EVENT_ENTRY &evt)
int GetNetCode(PNS::NET_HANDLE aNet) const override
PNS_LOG_PLAYER_KICAD_IFACE(PNS_LOG_VIEW_TRACKER *aViewTracker)
PNS_LOG_VIEW_TRACKER * m_viewTracker
void HideItem(PNS::ITEM *aItem) override
void DisplayItem(const PNS::ITEM *aItem, int aClearance, bool aEdit=false, int aFlags=0) override
~PNS_LOG_PLAYER_KICAD_IFACE() override
wxString GetNetName(PNS::NET_HANDLE aNet) const override
PNS_TEST_DEBUG_DECORATOR * m_debugDecorator
std::unique_ptr< PNS::ROUTING_SETTINGS > m_routingSettings
std::shared_ptr< BOARD > m_board
const PNS_LOG_FILE::COMMIT_STATE GetRouterUpdatedItems()
bool CompareResults(PNS_LOG_FILE *aLog)
std::unique_ptr< PNS::ROUTER > m_router
void ReplayLog(PNS_LOG_FILE *aLog, int aStartEventIndex=0, int aFrom=0, int aTo=-1, bool aUpdateExpectedResult=false)
std::shared_ptr< PNS_LOG_VIEW_TRACKER > m_viewTracker
std::unique_ptr< PNS_LOG_PLAYER_KICAD_IFACE > m_iface
void SetReporter(REPORTER *aReporter)
std::map< int, VIEW_ENTRIES > m_vitems
void DisplayItem(const PNS::ITEM *aItem)
void HideItem(PNS::ITEM *aItem)
std::vector< ENTRY > VIEW_ENTRIES
void SetStage(int aStage)
int GetStageCount() const
virtual void AddItem(const PNS::ITEM *aItem, const KIGFX::COLOR4D &aColor, int aOverrideWidth=0, const wxString &aName=wxT(""), const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
virtual void Message(const wxString &msg, const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
virtual void BeginGroup(const wxString &name, int aLevel=0, const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
virtual void EndGroup(const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
virtual void NewStage(const wxString &name, int iter, const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
virtual void Clear() override
void SetCurrentStageStatus(bool stat)
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)=0
Report a string with a given severity.
Push and Shove diff pair dimensions (gap) settings dialog.
@ RM_Walkaround
Only walk around.
std::set< KIID > m_removedIds
std::vector< PNS::ITEM * > m_addedItems
std::vector< PNS::ITEM * > m_heads
std::unique_ptr< const PNS::ITEM > m_ownedItem