From a0e4e23c141d8d0f366cea8696cf2a0339e2118a Mon Sep 17 00:00:00 2001 From: Seth Hillbrand Date: Wed, 24 Oct 2018 07:40:59 -0700 Subject: [PATCH] Ratsnest: Keep connectivity data local The dynamic ratsnest did not need to have a smart pointer to the temporary connectivity data. --- pcbnew/connectivity/connectivity_data.cpp | 27 +++++++++++++---------- pcbnew/connectivity/connectivity_data.h | 2 +- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/pcbnew/connectivity/connectivity_data.cpp b/pcbnew/connectivity/connectivity_data.cpp index 6a41878ec6..bac3568c2e 100644 --- a/pcbnew/connectivity/connectivity_data.cpp +++ b/pcbnew/connectivity/connectivity_data.cpp @@ -40,6 +40,13 @@ CONNECTIVITY_DATA::CONNECTIVITY_DATA() } +CONNECTIVITY_DATA::CONNECTIVITY_DATA( const std::vector& aItems ) +{ + Build( aItems ); + m_progressReporter = nullptr; +} + + CONNECTIVITY_DATA::~CONNECTIVITY_DATA() { Clear(); @@ -241,25 +248,22 @@ void CONNECTIVITY_DATA::FindIsolatedCopperIslands( std::vector& aItems ) { + m_dynamicRatsnest.clear(); + if( std::none_of( aItems.begin(), aItems.end(), []( const BOARD_ITEM* aItem ) { return( aItem->Type() == PCB_TRACE_T || aItem->Type() == PCB_PAD_T || - aItem->Type() == PCB_ZONE_AREA_T || aItem->Type() == PCB_MODULE_T || - aItem->Type() == PCB_VIA_T ); } ) ) + aItem->Type() == PCB_ZONE_AREA_T || aItem->Type() == PCB_MODULE_T || + aItem->Type() == PCB_VIA_T ); } ) ) { - m_dynamicRatsnest.clear(); return ; } - m_dynamicConnectivity.reset( new CONNECTIVITY_DATA ); - m_dynamicConnectivity->Build( aItems ); - - m_dynamicRatsnest.clear(); - + CONNECTIVITY_DATA connData( aItems ); BlockRatsnestItems( aItems ); - for( unsigned int nc = 1; nc < m_dynamicConnectivity->m_nets.size(); nc++ ) + for( unsigned int nc = 1; nc < connData.m_nets.size(); nc++ ) { - auto dynNet = m_dynamicConnectivity->m_nets[nc]; + auto dynNet = connData.m_nets[nc]; if( dynNet->GetNodeCount() != 0 ) { @@ -278,7 +282,7 @@ void CONNECTIVITY_DATA::ComputeDynamicRatsnest( const std::vector& } } - for( auto net : m_dynamicConnectivity->m_nets ) + for( auto net : connData.m_nets ) { if( !net ) continue; @@ -312,7 +316,6 @@ void CONNECTIVITY_DATA::ClearDynamicRatsnest() void CONNECTIVITY_DATA::HideDynamicRatsnest() { - m_dynamicConnectivity.reset(); m_dynamicRatsnest.clear(); } diff --git a/pcbnew/connectivity/connectivity_data.h b/pcbnew/connectivity/connectivity_data.h index 041861ff51..772387caf3 100644 --- a/pcbnew/connectivity/connectivity_data.h +++ b/pcbnew/connectivity/connectivity_data.h @@ -83,6 +83,7 @@ public: CONNECTIVITY_DATA(); ~CONNECTIVITY_DATA(); + CONNECTIVITY_DATA( const std::vector& aItems ); /** * Function Build() @@ -246,7 +247,6 @@ private: void updateRatsnest(); void addRatsnestCluster( const std::shared_ptr& aCluster ); - std::unique_ptr m_dynamicConnectivity; std::shared_ptr m_connAlgo; std::vector m_dynamicRatsnest;