From cd8aaee160cda2189ce27522b91cb32a9aac0f7c Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Tue, 13 May 2014 11:22:51 +0200 Subject: [PATCH] Moved most of the board design rules related fields & methods to BOARD_DESIGN_SETTINGS class. --- include/class_board_design_settings.h | 208 ++++++++++++++- pcbnew/autorouter/solve.cpp | 10 +- pcbnew/class_board.cpp | 54 ++-- pcbnew/class_board.h | 241 +----------------- pcbnew/class_board_design_settings.cpp | 33 ++- pcbnew/dialogs/dialog_design_rules.cpp | 8 +- .../dialog_global_edit_tracks_and_vias.cpp | 12 +- pcbnew/edit_track_width.cpp | 6 +- pcbnew/editrack-part2.cpp | 4 +- pcbnew/editrack.cpp | 18 +- pcbnew/event_handlers_tracks_vias_sizes.cpp | 12 +- pcbnew/hotkeys_board_editor.cpp | 12 +- pcbnew/kicad_plugin.cpp | 12 +- pcbnew/legacy_plugin.cpp | 37 +-- pcbnew/muonde.cpp | 10 +- pcbnew/onrightclick.cpp | 23 +- pcbnew/pcb_parser.cpp | 6 +- pcbnew/tool_pcb.cpp | 24 +- pcbnew/toolbars_update_user_interface.cpp | 22 +- pcbnew/tools/pcbnew_control.cpp | 32 +-- 20 files changed, 393 insertions(+), 391 deletions(-) diff --git a/include/class_board_design_settings.h b/include/class_board_design_settings.h index 67e0c73a88..70ba89f4ae 100644 --- a/include/class_board_design_settings.h +++ b/include/class_board_design_settings.h @@ -10,6 +10,41 @@ #include #include +/** + * Struct VIA_DIMENSION + * is a small helper container to handle a stock of specific vias each with + * unique diameter and drill sizes in the BOARD class. + */ +struct VIA_DIMENSION +{ + int m_Diameter; // <= 0 means use Netclass via diameter + int m_Drill; // <= 0 means use Netclass via drill + + VIA_DIMENSION() + { + m_Diameter = 0; + m_Drill = 0; + } + + VIA_DIMENSION( int aDiameter, int aDrill ) + { + m_Diameter = aDiameter; + m_Drill = aDrill; + } + + bool operator==( const VIA_DIMENSION& aOther ) const + { + return ( m_Diameter == aOther.m_Diameter ) && ( m_Drill == aOther.m_Drill ); + } + + bool operator<( const VIA_DIMENSION& aOther ) const + { + if( m_Diameter != aOther.m_Diameter ) + return m_Diameter < aOther.m_Diameter; + + return m_Drill < aOther.m_Drill; + } +}; /** * Class BOARD_DESIGN_SETTINGS @@ -18,6 +53,14 @@ class BOARD_DESIGN_SETTINGS { public: + // The first value is the current netclass via size + /// Vias size and drill list + std::vector m_ViasDimensionsList; + + // The first value is the current netclass track width + /// Track width list + std::vector m_TrackWidthList; + bool m_MicroViasAllowed; ///< true to allow micro vias bool m_BlindBuriedViaAllowed; ///< true to allow blind/buried vias VIATYPE_T m_CurrentViaType; ///< via type (VIA_BLIND_BURIED, VIA_THROUGH VIA_MICROVIA) @@ -52,9 +95,155 @@ public: D_PAD m_Pad_Master; -public: BOARD_DESIGN_SETTINGS(); + /** + * Function GetTrackWidthIndex + * @return the current track width list index. + */ + unsigned GetTrackWidthIndex() const { return m_trackWidthIndex; } + + /** + * Function SetTrackWidthIndex + * sets the current track width list index to \a aIndex. + * + * @param aIndex is the track width list index. + */ + void SetTrackWidthIndex( unsigned aIndex ); + + /** + * Function GetCurrentTrackWidth + * @return the current track width, according to the selected options + * ( using the default netclass value or a preset/custom value ) + * the default netclass is always in m_TrackWidthList[0] + */ + int GetCurrentTrackWidth() const + { + return m_useCustomTrackVia ? m_customTrackWidth : m_TrackWidthList[m_trackWidthIndex]; + } + + /** + * Function SetCustomTrackWidth + * Sets custom width for track (i.e. not available in netclasses or preset list). To have + * it returned with GetCurrentTrackWidth() you need to enable custom track & via sizes + * (UseCustomTrackViaSize()). + * @param aWidth is the new track width. + */ + void SetCustomTrackWidth( int aWidth ) + { + m_customTrackWidth = aWidth; + } + + /** + * Function GetCustomTrackWidth + * @return Current custom width for a track. + */ + int GetCustomTrackWidth() const + { + return m_customTrackWidth; + } + + /** + * Function GetViaSizeIndex + * @return the current via size list index. + */ + unsigned GetViaSizeIndex() const { return m_viaSizeIndex; } + + /** + * Function SetViaSizeIndex + * sets the current via size list index to \a aIndex. + * + * @param aIndex is the via size list index. + */ + void SetViaSizeIndex( unsigned aIndex ); + + /** + * Function GetCurrentViaSize + * @return the current via size, according to the selected options + * ( using the default netclass value or a preset/custom value ) + * the default netclass is always in m_TrackWidthList[0] + */ + int GetCurrentViaSize() const + { + if( m_useCustomTrackVia ) + return m_customViaSize.m_Diameter; + else + return m_ViasDimensionsList[m_viaSizeIndex].m_Diameter; + } + + /** + * Function SetCustomViaSize + * Sets custom size for via diameter (i.e. not available in netclasses or preset list). To have + * it returned with GetCurrentViaSize() you need to enable custom track & via sizes + * (UseCustomTrackViaSize()). + * @param aSize is the new drill diameter. + */ + void SetCustomViaSize( int aSize ) + { + m_customViaSize.m_Diameter = aSize; + } + + /** + * Function GetCustomViaSize + * @return Current custom size for the via diameter. + */ + int GetCustomViaSize() const + { + return m_customViaSize.m_Diameter; + } + + /** + * Function GetCurrentViaDrill + * @return the current via size, according to the selected options + * ( using the default netclass value or a preset/custom value ) + * the default netclass is always in m_TrackWidthList[0] + */ + int GetCurrentViaDrill() const; + + /** + * Function SetCustomViaDrill + * Sets custom size for via drill (i.e. not available in netclasses or preset list). To have + * it returned with GetCurrentViaDrill() you need to enable custom track & via sizes + * (UseCustomTrackViaSize()). + * @param aDrill is the new drill size. + */ + void SetCustomViaDrill( int aDrill ) + { + m_customViaSize.m_Drill = aDrill; + } + + /** + * Function GetCustomViaDrill + * @return Current custom size for the via drill. + */ + int GetCustomViaDrill() const + { + return m_customViaSize.m_Drill; + } + + // TODO microvia methods should go here + + /** + * Function UseCustomTrackViaSize + * Enables/disables custom track/via size settings. If enabled, values set with + * SetCustomTrackWidth()/SetCustomViaSize()/SetCustomViaDrill() are used for newly created + * tracks and vias. + * @param aEnabled decides if custom settings should be used for new tracks/vias. + */ + void UseCustomTrackViaSize( bool aEnabled ) + { + m_useCustomTrackVia = aEnabled; + } + + /** + * Function UseCustomTrackViaSize + * @return True if custom sizes of tracks & vias are enabled, false otherwise. + */ + bool UseCustomTrackViaSize() const + { + return m_useCustomTrackVia; + } + /** * Function GetVisibleLayers * returns a bit-mask of all the layers that are visible @@ -196,6 +385,23 @@ public: void SetBoardThickness( int aThickness ) { m_boardThickness = aThickness; } private: + /// Index for #m_ViasDimensionsList to select the current via size. + /// 0 is the index selection of the default value Netclass + unsigned m_viaSizeIndex; + + // Index for m_TrackWidthList to select the value. + /// 0 is the index selection of the default value Netclass + unsigned m_trackWidthIndex; + + ///> Use custom values for track/via sizes (not specified in net class nor in the size lists). + bool m_useCustomTrackVia; + + ///> Custom track width (used after UseCustomTrackViaSize( true ) was called). + int m_customTrackWidth; + + ///> Custom via size (used after UseCustomTrackViaSize( true ) was called). + VIA_DIMENSION m_customViaSize; + int m_CopperLayerCount; ///< Number of copper layers for this design LAYER_MSK m_EnabledLayers; ///< Bit-mask for layer enabling LAYER_MSK m_VisibleLayers; ///< Bit-mask for layer visibility diff --git a/pcbnew/autorouter/solve.cpp b/pcbnew/autorouter/solve.cpp index 8ddf52f040..9da2804e9f 100644 --- a/pcbnew/autorouter/solve.cpp +++ b/pcbnew/autorouter/solve.cpp @@ -428,7 +428,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe, result = NOSUCCESS; - marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentTrackWidth() / 2 ); + marge = s_Clearance + ( pcbframe->GetDesignSettings().GetCurrentTrackWidth() / 2 ); /* clear direction flags */ i = RoutingMatrix.m_Nrows * RoutingMatrix.m_Ncols * sizeof(DIR_CELL); @@ -1174,7 +1174,7 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, ( RoutingMatrix.m_GridRouting * col ))); g_CurrentTrackSegment->SetEnd( g_CurrentTrackSegment->GetStart() ); - g_CurrentTrackSegment->SetWidth( pcb->GetCurrentViaSize() ); + g_CurrentTrackSegment->SetWidth( pcb->GetDesignSettings().GetCurrentViaSize() ); newVia->SetViaType( pcb->GetDesignSettings().m_CurrentViaType ); g_CurrentTrackSegment->SetNetCode( current_net_code ); @@ -1233,7 +1233,7 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, } } - g_CurrentTrackSegment->SetWidth( pcb->GetCurrentTrackWidth() ); + g_CurrentTrackSegment->SetWidth( pcb->GetDesignSettings().GetCurrentTrackWidth() ); if( g_CurrentTrackSegment->GetStart() != g_CurrentTrackSegment->GetEnd() ) { @@ -1275,8 +1275,8 @@ static void AddNewTrace( PCB_EDIT_FRAME* pcbframe, wxDC* DC ) EDA_DRAW_PANEL* panel = pcbframe->GetCanvas(); PCB_SCREEN* screen = pcbframe->GetScreen(); - marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentTrackWidth() / 2 ); - via_marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentViaSize() / 2 ); + marge = s_Clearance + ( pcbframe->GetDesignSettings().GetCurrentTrackWidth() / 2 ); + via_marge = s_Clearance + ( pcbframe->GetDesignSettings().GetCurrentViaSize() / 2 ); dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x; dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y; diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp index 81399f456f..c5784848d7 100644 --- a/pcbnew/class_board.cpp +++ b/pcbnew/class_board.cpp @@ -94,8 +94,8 @@ BOARD::BOARD() : m_NetClasses.GetDefault()->SetDescription( _( "This is the default net class." ) ); - m_viaSizeIndex = 0; - m_trackWidthIndex = 0; + m_designSettings.SetViaSizeIndex( 0 ); + m_designSettings.SetTrackWidthIndex( 0 ); /* Dick 5-Feb-2012: this seems unnecessary. I don't believe the comment near line 70 of class_netclass.cpp. I stepped through with debugger. @@ -107,10 +107,10 @@ BOARD::BOARD() : SetCurrentNetClass( m_NetClasses.GetDefault()->GetName() ); // Set sensible initial values for custom track width & via size - m_useCustomTrackVia = false; - m_customTrackWidth = GetCurrentTrackWidth(); - m_customViaSize.m_Diameter = GetCurrentViaSize(); - m_customViaSize.m_Drill = GetCurrentViaDrill(); + m_designSettings.UseCustomTrackViaSize( false ); + m_designSettings.SetCustomTrackWidth( m_designSettings.GetCurrentTrackWidth() ); + m_designSettings.SetCustomViaSize( m_designSettings.GetCurrentViaSize() ); + m_designSettings.SetCustomViaDrill( m_designSettings.GetCurrentViaDrill() ); // Initialize ratsnest m_ratsnest = new RN_DATA( this ); @@ -331,37 +331,37 @@ bool BOARD::SetCurrentNetClass( const wxString& aNetClassName ) m_currentNetClassName = netClass->GetName(); // Initialize others values: - if( m_ViasDimensionsList.size() == 0 ) + if( m_designSettings.m_ViasDimensionsList.size() == 0 ) { VIA_DIMENSION viadim; lists_sizes_modified = true; - m_ViasDimensionsList.push_back( viadim ); + m_designSettings.m_ViasDimensionsList.push_back( viadim ); } - if( m_TrackWidthList.size() == 0 ) + if( m_designSettings.m_TrackWidthList.size() == 0 ) { lists_sizes_modified = true; - m_TrackWidthList.push_back( 0 ); + m_designSettings.m_TrackWidthList.push_back( 0 ); } /* note the m_ViasDimensionsList[0] and m_TrackWidthList[0] values * are always the Netclass values */ - if( m_ViasDimensionsList[0].m_Diameter != netClass->GetViaDiameter() ) + if( m_designSettings.m_ViasDimensionsList[0].m_Diameter != netClass->GetViaDiameter() ) lists_sizes_modified = true; - m_ViasDimensionsList[0].m_Diameter = netClass->GetViaDiameter(); + m_designSettings.m_ViasDimensionsList[0].m_Diameter = netClass->GetViaDiameter(); - if( m_TrackWidthList[0] != netClass->GetTrackWidth() ) + if( m_designSettings.m_TrackWidthList[0] != netClass->GetTrackWidth() ) lists_sizes_modified = true; - m_TrackWidthList[0] = netClass->GetTrackWidth(); + m_designSettings.m_TrackWidthList[0] = netClass->GetTrackWidth(); - if( m_viaSizeIndex >= m_ViasDimensionsList.size() ) - m_viaSizeIndex = m_ViasDimensionsList.size(); + if( m_designSettings.GetViaSizeIndex() >= m_designSettings.m_ViasDimensionsList.size() ) + m_designSettings.SetViaSizeIndex( m_designSettings.m_ViasDimensionsList.size() ); - if( m_trackWidthIndex >= m_TrackWidthList.size() ) - m_trackWidthIndex = m_TrackWidthList.size(); + if( m_designSettings.GetTrackWidthIndex() >= m_designSettings.m_TrackWidthList.size() ) + m_designSettings.SetTrackWidthIndex( m_designSettings.m_TrackWidthList.size() ); return lists_sizes_modified; } @@ -2200,24 +2200,6 @@ TRACK* BOARD::CreateLockPoint( wxPoint& aPosition, TRACK* aSegment, PICKED_ITEMS } -void BOARD::SetViaSizeIndex( unsigned aIndex ) -{ - if( aIndex >= m_ViasDimensionsList.size() ) - m_viaSizeIndex = m_ViasDimensionsList.size(); - else - m_viaSizeIndex = aIndex; -} - - -void BOARD::SetTrackWidthIndex( unsigned aIndex ) -{ - if( aIndex >= m_TrackWidthList.size() ) - m_trackWidthIndex = m_TrackWidthList.size(); - else - m_trackWidthIndex = aIndex; -} - - ZONE_CONTAINER* BOARD::AddArea( PICKED_ITEMS_LIST* aNewZonesList, int aNetcode, LAYER_NUM aLayer, wxPoint aStartPointPosition, int aHatch ) { diff --git a/pcbnew/class_board.h b/pcbnew/class_board.h index 7fc8987198..a728061ba0 100644 --- a/pcbnew/class_board.h +++ b/pcbnew/class_board.h @@ -111,8 +111,6 @@ public: /** The type of the layer */ LAYER_T m_Type; -// int m_Color; - /** * Function ShowType * converts a LAYER_T enum to a const char* @@ -136,52 +134,15 @@ private: }; -/** - * Struct VIA_DIMENSION - * is a small helper container to handle a stock of specific vias each with - * unique diameter and drill sizes in the BOARD class. - */ -struct VIA_DIMENSION -{ - int m_Diameter; // <= 0 means use Netclass via diameter - int m_Drill; // <= 0 means use Netclass via drill - - VIA_DIMENSION() - { - m_Diameter = 0; - m_Drill = 0; - } - - VIA_DIMENSION( int aDiameter, int aDrill ) - { - m_Diameter = aDiameter; - m_Drill = aDrill; - } - - bool operator == ( const VIA_DIMENSION& other ) const - { - return (m_Diameter == other.m_Diameter) && (m_Drill == other.m_Drill); - } - - bool operator < ( const VIA_DIMENSION& other ) const - { - if( m_Diameter != other.m_Diameter ) - return m_Diameter < other.m_Diameter; - - return m_Drill < other.m_Drill; - } -}; - - // Helper class to handle high light nets class HIGH_LIGHT_INFO { friend class BOARD; + protected: int m_netCode; // net selected for highlight (-1 when no net selected ) bool m_highLightOn; // highlight active -protected: void Clear() { m_netCode = -1; @@ -251,22 +212,6 @@ private: /// This is also the last used netclass after starting a track. wxString m_currentNetClassName; - /// Index for #m_ViasDimensionsList to select the current via size. - /// 0 is the index selection of the default value Netclass - unsigned m_viaSizeIndex; - - // Index for m_TrackWidthList to select the value. - unsigned m_trackWidthIndex; - - ///> Use custom values for track/via sizes (not specified in net class nor in the size lists). - bool m_useCustomTrackVia; - - ///> Custom track width (used after UseCustomTrackViaSize( true ) was called). - int m_customTrackWidth; - - ///> Custom via size (used after UseCustomTrackViaSize( true ) was called). - VIA_DIMENSION m_customViaSize; - /** * Function chainMarkedSegments * is used by MarkTrace() to set the BUSY flag of connected segments of the trace @@ -308,18 +253,6 @@ public: /// List of current netclasses. There is always the default netclass. NETCLASSES m_NetClasses; - // handling of vias and tracks size: - // the first value is always the value of the current NetClass - // The others values are extra values - - // The first value is the current netclass via size - /// Vias size and drill list - std::vector m_ViasDimensionsList; - - // The first value is the current netclass track width - /// Track width list - std::vector m_TrackWidthList; - BOARD(); ~BOARD(); @@ -647,7 +580,10 @@ public: * Function SetDesignSettings * @param aDesignSettings the new BOARD_DESIGN_SETTINGS to use */ - void SetDesignSettings( const BOARD_DESIGN_SETTINGS& aDesignSettings ) { m_designSettings = aDesignSettings; } + void SetDesignSettings( const BOARD_DESIGN_SETTINGS& aDesignSettings ) + { + m_designSettings = aDesignSettings; + } const PAGE_INFO& GetPageSettings() const { return m_paper; } void SetPageSettings( const PAGE_INFO& aPageSettings ) { m_paper = aPageSettings; } @@ -778,7 +714,6 @@ public: return m_FullRatsnest.size(); } - /** * Function GetNodesCount * @return the number of pads members of nets (i.e. with netcode > 0) @@ -1029,10 +964,9 @@ public: */ int SortedNetnamesList( wxArrayString& aNames, bool aSortbyPadsCount ); - /**************************************/ - /** - * Function relative to NetClasses: **/ - /**************************************/ + /************************************** + * Functions related to NetClasses: + **************************************/ /** * Function SynchronizeNetsAndNetClasses @@ -1065,144 +999,6 @@ public: */ int GetSmallestClearanceValue(); - /** - * Function GetTrackWidthIndex - * @return the current track width list index. - */ - unsigned GetTrackWidthIndex() const { return m_trackWidthIndex; } - - /** - * Function SetTrackWidthIndex - * sets the current track width list index to \a aIndex. - * - * @param aIndex is the track width list index. - */ - void SetTrackWidthIndex( unsigned aIndex ); - - /** - * Function GetCurrentTrackWidth - * @return the current track width, according to the selected options - * ( using the default netclass value or a preset/custom value ) - * the default netclass is always in m_TrackWidthList[0] - */ - int GetCurrentTrackWidth() const - { - if( m_useCustomTrackVia ) - return m_customTrackWidth; - else - return m_TrackWidthList[m_trackWidthIndex]; - } - - /** - * Function SetCustomTrackWidth - * Sets custom width for track (i.e. not available in netclasses or preset list). To have - * it returned with GetCurrentTrackWidth() you need to enable custom track & via sizes - * (UseCustomTrackViaSize()). - * @param aWidth is the new track width. - */ - void SetCustomTrackWidth( int aWidth ) - { - m_customTrackWidth = aWidth; - } - - /** - * Function GetCustomTrackWidth - * @return Current custom width for a track. - */ - int GetCustomTrackWidth() const - { - return m_customTrackWidth; - } - - /** - * Function GetViaSizeIndex - * @return the current via size list index. - */ - unsigned GetViaSizeIndex() const { return m_viaSizeIndex; } - - /** - * Function SetViaSizeIndex - * sets the current via size list index to \a aIndex. - * - * @param aIndex is the via size list index. - */ - void SetViaSizeIndex( unsigned aIndex ); - - /** - * Function GetCurrentViaSize - * @return the current via size, according to the selected options - * ( using the default netclass value or a preset/custom value ) - * the default netclass is always in m_TrackWidthList[0] - */ - int GetCurrentViaSize() - { - if( m_useCustomTrackVia ) - return m_customViaSize.m_Diameter; - else - return m_ViasDimensionsList[m_viaSizeIndex].m_Diameter; - } - - /** - * Function SetCustomViaSize - * Sets custom size for via diameter (i.e. not available in netclasses or preset list). To have - * it returned with GetCurrentViaSize() you need to enable custom track & via sizes - * (UseCustomTrackViaSize()). - * @param aSize is the new drill diameter. - */ - void SetCustomViaSize( int aSize ) - { - m_customViaSize.m_Diameter = aSize; - } - - /** - * Function GetCustomViaSize - * @return Current custom size for the via diameter. - */ - int GetCustomViaSize() const - { - return m_customViaSize.m_Diameter; - } - - - /** - * Function GetCurrentViaDrill - * @return the current via size, according to the selected options - * ( using the default netclass value or a preset/custom value ) - * the default netclass is always in m_TrackWidthList[0] - */ - int GetCurrentViaDrill() - { - int drill; - - if( m_useCustomTrackVia ) - drill = m_customViaSize.m_Drill; - else - drill = m_ViasDimensionsList[m_viaSizeIndex].m_Drill; - - return drill > 0 ? drill : -1; - } - - /** - * Function SetCustomViaDrill - * Sets custom size for via drill (i.e. not available in netclasses or preset list). To have - * it returned with GetCurrentViaDrill() you need to enable custom track & via sizes - * (UseCustomTrackViaSize()). - * @param aDrill is the new drill size. - */ - void SetCustomViaDrill( int aDrill ) - { - m_customViaSize.m_Drill = aDrill; - } - - /** - * Function GetCustomViaDrill - * @return Current custom size for the via drill. - */ - int GetCustomViaDrill() const - { - return m_customViaSize.m_Drill; - } - /** * Function GetCurrentMicroViaSize * @return the current micro via size, @@ -1217,27 +1013,6 @@ public: */ int GetCurrentMicroViaDrill(); - /** - * Function UseCustomTrackViaSize - * Enables/disables custom track/via size settings. If enabled, values set with - * SetCustomTrackWidth()/SetCustomViaSize()/SetCustomViaDrill() are used for newly created - * tracks and vias. - * @param aEnabled decides if custom settings should be used for new tracks/vias. - */ - void UseCustomTrackViaSize( bool aEnabled ) - { - m_useCustomTrackVia = aEnabled; - } - - /** - * Function UseCustomTrackViaSize - * @return True if custom sizes of tracks & vias are enabled, false otherwise. - */ - bool UseCustomTrackViaSize() const - { - return m_useCustomTrackVia; - } - /***************************************************************************/ wxString GetClass() const diff --git a/pcbnew/class_board_design_settings.cpp b/pcbnew/class_board_design_settings.cpp index 31ef22a23f..79fa3ce42f 100644 --- a/pcbnew/class_board_design_settings.cpp +++ b/pcbnew/class_board_design_settings.cpp @@ -81,7 +81,7 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() : m_PcbTextSize = wxSize( DEFAULT_TEXT_PCB_SIZE, DEFAULT_TEXT_PCB_SIZE ); // current Pcb (not module) Text size - m_TrackMinWidth = DMils2iu( 100 ); // track min value for width ((min copper size value + m_TrackMinWidth = DMils2iu( 100 ); // track min value for width (min copper size value) m_ViasMinSize = DMils2iu( 350 ); // vias (not micro vias) min diameter m_ViasMinDrill = DMils2iu( 200 ); // vias (not micro vias) min drill diameter m_MicroViasMinSize = DMils2iu( 200 ); // micro vias (not vias) min diameter @@ -171,6 +171,37 @@ void BOARD_DESIGN_SETTINGS::AppendConfigs( PARAM_CFG_ARRAY* aResult ) } +void BOARD_DESIGN_SETTINGS::SetViaSizeIndex( unsigned aIndex ) +{ + if( aIndex >= m_ViasDimensionsList.size() ) + m_viaSizeIndex = m_ViasDimensionsList.size(); + else + m_viaSizeIndex = aIndex; +} + + +int BOARD_DESIGN_SETTINGS::GetCurrentViaDrill() const +{ + int drill; + + if( m_useCustomTrackVia ) + drill = m_customViaSize.m_Drill; + else + drill = m_ViasDimensionsList[m_viaSizeIndex].m_Drill; + + return drill > 0 ? drill : -1; +} + + +void BOARD_DESIGN_SETTINGS::SetTrackWidthIndex( unsigned aIndex ) +{ + if( aIndex >= m_TrackWidthList.size() ) + m_trackWidthIndex = m_TrackWidthList.size(); + else + m_trackWidthIndex = aIndex; +} + + // see pcbstruct.h LAYER_MSK BOARD_DESIGN_SETTINGS::GetVisibleLayers() const { diff --git a/pcbnew/dialogs/dialog_design_rules.cpp b/pcbnew/dialogs/dialog_design_rules.cpp index f83be84b9e..35b687de13 100644 --- a/pcbnew/dialogs/dialog_design_rules.cpp +++ b/pcbnew/dialogs/dialog_design_rules.cpp @@ -276,9 +276,9 @@ void DIALOG_DESIGN_RULES::InitGlobalRules() // Initialize Vias and Tracks sizes lists. // note we display only extra values, never the current netclass value. // (the first value in history list) - m_TracksWidthList = m_Parent->GetBoard()->m_TrackWidthList; + m_TracksWidthList = m_BrdSettings.m_TrackWidthList; m_TracksWidthList.erase( m_TracksWidthList.begin() ); // remove the netclass value - m_ViasDimensionsList = m_Parent->GetBoard()->m_ViasDimensionsList; + m_ViasDimensionsList = m_BrdSettings.m_ViasDimensionsList; m_ViasDimensionsList.erase( m_ViasDimensionsList.begin() ); // remove the netclass value InitDimensionsLists(); } @@ -634,12 +634,12 @@ void DIALOG_DESIGN_RULES::CopyDimensionsListsToBoard() // Sort new list by by increasing value sort( m_ViasDimensionsList.begin(), m_ViasDimensionsList.end() ); - std::vector * tlist = &m_Parent->GetBoard()->m_TrackWidthList; + std::vector* tlist = &m_BrdSettings.m_TrackWidthList; tlist->erase( tlist->begin() + 1, tlist->end() ); // Remove old "custom" sizes tlist->insert( tlist->end(), m_TracksWidthList.begin(), m_TracksWidthList.end() ); //Add new "custom" sizes // Reinitialize m_ViaSizeList - std::vector * vialist = &m_Parent->GetBoard()->m_ViasDimensionsList; + std::vector* vialist = &m_BrdSettings.m_ViasDimensionsList; vialist->erase( vialist->begin() + 1, vialist->end() ); vialist->insert( vialist->end(), m_ViasDimensionsList.begin(), m_ViasDimensionsList.end() ); } diff --git a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp index 02577075cd..71904a927e 100644 --- a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp +++ b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp @@ -60,7 +60,7 @@ void DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::MyInit() /* Disable the option "copy current to net" if we have only default netclass values * i.e. when m_TrackWidthSelector and m_ViaSizeSelector are set to 0 */ - if( !board->GetTrackWidthIndex() && !board->GetViaSizeIndex() ) + if( !board->GetDesignSettings().GetTrackWidthIndex() && !board->GetDesignSettings().GetViaSizeIndex() ) { m_Net2CurrValueButton->Enable( false ); m_OptionID = ID_NETCLASS_VALUES_TO_CURRENT_NET; @@ -77,9 +77,9 @@ void DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::MyInit() msg = StringFromValue( g_UserUnit, value, true ); m_gridDisplayCurrentSettings->SetCellValue( 0, 0, msg ); - if( board->GetTrackWidthIndex() ) + if( board->GetDesignSettings().GetTrackWidthIndex() ) { - value = board->GetCurrentTrackWidth(); + value = board->GetDesignSettings().GetCurrentTrackWidth(); msg = StringFromValue( g_UserUnit, value, true ); } else @@ -91,9 +91,9 @@ void DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::MyInit() msg = StringFromValue( g_UserUnit, value, true ); m_gridDisplayCurrentSettings->SetCellValue( 0, 1, msg ); - if( board->GetViaSizeIndex() ) + if( board->GetDesignSettings().GetViaSizeIndex() ) { - value = board->GetCurrentViaSize(); + value = board->GetDesignSettings().GetCurrentViaSize(); msg = StringFromValue( g_UserUnit, value, true ); } else @@ -103,7 +103,7 @@ void DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::MyInit() value = netclass->GetViaDrill(); // Display via drill msg = StringFromValue( g_UserUnit, value, true ); m_gridDisplayCurrentSettings->SetCellValue( 0, 2, msg ); - value = board->GetCurrentViaDrill(); + value = board->GetDesignSettings().GetCurrentViaDrill(); if( value >= 0 ) msg = StringFromValue( g_UserUnit, value, true ); else diff --git a/pcbnew/edit_track_width.cpp b/pcbnew/edit_track_width.cpp index c371ee0978..f19c8216e1 100644 --- a/pcbnew/edit_track_width.cpp +++ b/pcbnew/edit_track_width.cpp @@ -43,7 +43,7 @@ bool PCB_EDIT_FRAME::SetTrackSegmentWidth( TRACK* aTrackItem, if( net ) new_width = net->GetTrackWidth(); else - new_width = GetBoard()->GetCurrentTrackWidth(); + new_width = GetDesignSettings().GetCurrentTrackWidth(); if( aTrackItem->Type() == PCB_VIA_T ) { @@ -58,8 +58,8 @@ bool PCB_EDIT_FRAME::SetTrackSegmentWidth( TRACK* aTrackItem, } else { - new_width = GetBoard()->GetCurrentViaSize(); - new_drill = GetBoard()->GetCurrentViaDrill(); + new_width = GetDesignSettings().GetCurrentViaSize(); + new_drill = GetDesignSettings().GetCurrentViaDrill(); } if( via->GetViaType() == VIA_MICROVIA ) diff --git a/pcbnew/editrack-part2.cpp b/pcbnew/editrack-part2.cpp index ef7ed1642f..07967de9c9 100644 --- a/pcbnew/editrack-part2.cpp +++ b/pcbnew/editrack-part2.cpp @@ -98,7 +98,7 @@ bool PCB_EDIT_FRAME::Other_Layer_Route( TRACK* aTrack, wxDC* DC ) VIA* via = new VIA( GetBoard() ); via->SetFlags( IS_NEW ); via->SetViaType( GetDesignSettings().m_CurrentViaType ); - via->SetWidth( GetBoard()->GetCurrentViaSize()); + via->SetWidth( GetDesignSettings().GetCurrentViaSize()); via->SetNetCode( GetBoard()->GetHighLightNetCode() ); via->SetEnd( g_CurrentTrackSegment->GetEnd() ); via->SetStart( g_CurrentTrackSegment->GetEnd() ); @@ -106,7 +106,7 @@ bool PCB_EDIT_FRAME::Other_Layer_Route( TRACK* aTrack, wxDC* DC ) // Usual via is from copper to component. // layer pair is LAYER_N_BACK and LAYER_N_FRONT. via->SetLayerPair( LAYER_N_BACK, LAYER_N_FRONT ); - via->SetDrill( GetBoard()->GetCurrentViaDrill() ); + via->SetDrill( GetDesignSettings().GetCurrentViaDrill() ); LAYER_NUM first_layer = GetActiveLayer(); LAYER_NUM last_layer; diff --git a/pcbnew/editrack.cpp b/pcbnew/editrack.cpp index 220668148c..ddd1356705 100644 --- a/pcbnew/editrack.cpp +++ b/pcbnew/editrack.cpp @@ -170,9 +170,9 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC ) GetBoard()->SetCurrentNetClass( g_CurrentTrackSegment->GetNetClassName() ); g_CurrentTrackSegment->SetLayer( GetScreen()->m_Active_Layer ); - g_CurrentTrackSegment->SetWidth( GetBoard()->GetCurrentTrackWidth() ); + g_CurrentTrackSegment->SetWidth( GetDesignSettings().GetCurrentTrackWidth() ); - if( GetBoard()->GetDesignSettings().m_UseConnectedTrackWidth ) + if( GetDesignSettings().m_UseConnectedTrackWidth ) { if( TrackOnStartPoint && TrackOnStartPoint->Type() == PCB_TRACE_T ) g_CurrentTrackSegment->SetWidth( TrackOnStartPoint->GetWidth()); @@ -282,8 +282,8 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC ) newTrack->SetLayer( GetScreen()->m_Active_Layer ); - if( !GetBoard()->GetDesignSettings().m_UseConnectedTrackWidth ) - newTrack->SetWidth( GetBoard()->GetCurrentTrackWidth() ); + if( !GetDesignSettings().m_UseConnectedTrackWidth ) + newTrack->SetWidth( GetDesignSettings().GetCurrentTrackWidth() ); DBG( g_CurrentTrackList.VerifyListIntegrity(); ); @@ -691,7 +691,7 @@ void ShowNewTrackWhenMovingCursor( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPo DisplayOpt.ShowTrackClearanceMode = SHOW_CLEARANCE_ALWAYS; // Values to Via circle - int boardViaRadius = frame->GetBoard()->GetCurrentViaSize()/2; + int boardViaRadius = frame->GetDesignSettings().GetCurrentViaSize()/2; int viaRadiusWithClearence = boardViaRadius+netclass->GetClearance(); EDA_RECT* panelClipBox=aPanel->GetClipBox(); @@ -718,8 +718,8 @@ void ShowNewTrackWhenMovingCursor( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPo // Set track parameters, that can be modified while creating the track g_CurrentTrackSegment->SetLayer( screen->m_Active_Layer ); - if( !frame->GetBoard()->GetDesignSettings().m_UseConnectedTrackWidth ) - g_CurrentTrackSegment->SetWidth( frame->GetBoard()->GetCurrentTrackWidth() ); + if( !frame->GetDesignSettings().m_UseConnectedTrackWidth ) + g_CurrentTrackSegment->SetWidth( frame->GetDesignSettings().GetCurrentTrackWidth() ); if( g_TwoSegmentTrackBuild ) { @@ -729,8 +729,8 @@ void ShowNewTrackWhenMovingCursor( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPo { previous_track->SetLayer( screen->m_Active_Layer ); - if( !frame->GetBoard()->GetDesignSettings().m_UseConnectedTrackWidth ) - previous_track->SetWidth( frame->GetBoard()->GetCurrentTrackWidth() ); + if( !frame->GetDesignSettings().m_UseConnectedTrackWidth ) + previous_track->SetWidth( frame->GetDesignSettings().GetCurrentTrackWidth() ); } } diff --git a/pcbnew/event_handlers_tracks_vias_sizes.cpp b/pcbnew/event_handlers_tracks_vias_sizes.cpp index 52428a3834..0ccd13a6a5 100644 --- a/pcbnew/event_handlers_tracks_vias_sizes.cpp +++ b/pcbnew/event_handlers_tracks_vias_sizes.cpp @@ -41,8 +41,8 @@ void PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event( wxCommandEvent& event ) case ID_POPUP_PCB_SELECT_USE_NETCLASS_VALUES: GetDesignSettings().m_UseConnectedTrackWidth = false; - GetBoard()->SetTrackWidthIndex( 0 ); - GetBoard()->SetViaSizeIndex( 0 ); + GetDesignSettings().SetTrackWidthIndex( 0 ); + GetDesignSettings().SetViaSizeIndex( 0 ); break; case ID_POPUP_PCB_SELECT_AUTO_WIDTH: @@ -69,7 +69,7 @@ void PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event( wxCommandEvent& event ) m_canvas->MoveCursorToCrossHair(); GetDesignSettings().m_UseConnectedTrackWidth = false; ii = id - ID_POPUP_PCB_SELECT_WIDTH1; - GetBoard()->SetTrackWidthIndex( ii ); + GetDesignSettings().SetTrackWidthIndex( ii ); break; case ID_POPUP_PCB_SELECT_VIASIZE1: // this is the default Netclass selection @@ -91,17 +91,17 @@ void PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event( wxCommandEvent& event ) // select the new current value for via size (via diameter) m_canvas->MoveCursorToCrossHair(); ii = id - ID_POPUP_PCB_SELECT_VIASIZE1; - GetBoard()->SetViaSizeIndex( ii ); + GetDesignSettings().SetViaSizeIndex( ii ); break; case ID_AUX_TOOLBAR_PCB_TRACK_WIDTH: ii = m_SelTrackWidthBox->GetCurrentSelection(); - GetBoard()->SetTrackWidthIndex( ii ); + GetDesignSettings().SetTrackWidthIndex( ii ); break; case ID_AUX_TOOLBAR_PCB_VIA_SIZE: ii = m_SelViaSizeBox->GetCurrentSelection(); - GetBoard()->SetViaSizeIndex( ii ); + GetDesignSettings().SetViaSizeIndex( ii ); break; default: diff --git a/pcbnew/hotkeys_board_editor.cpp b/pcbnew/hotkeys_board_editor.cpp index 14931a0fa4..1cffe09577 100644 --- a/pcbnew/hotkeys_board_editor.cpp +++ b/pcbnew/hotkeys_board_editor.cpp @@ -199,10 +199,10 @@ void PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); - if( GetBoard()->GetTrackWidthIndex() < GetBoard()->m_TrackWidthList.size() - 1 ) - GetBoard()->SetTrackWidthIndex( GetBoard()->GetTrackWidthIndex() + 1 ); + if( GetDesignSettings().GetTrackWidthIndex() < GetDesignSettings().m_TrackWidthList.size() - 1 ) + GetDesignSettings().SetTrackWidthIndex( GetDesignSettings().GetTrackWidthIndex() + 1 ); else - GetBoard()->SetTrackWidthIndex( 0 ); + GetDesignSettings().SetTrackWidthIndex( 0 ); if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); @@ -213,10 +213,10 @@ void PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); - if( GetBoard()->GetTrackWidthIndex() <= 0 ) - GetBoard()->SetTrackWidthIndex( GetBoard()->m_TrackWidthList.size() -1 ); + if( GetDesignSettings().GetTrackWidthIndex() <= 0 ) + GetDesignSettings().SetTrackWidthIndex( GetDesignSettings().m_TrackWidthList.size() -1 ); else - GetBoard()->SetTrackWidthIndex( GetBoard()->GetTrackWidthIndex() - 1 ); + GetDesignSettings().SetTrackWidthIndex( GetDesignSettings().GetTrackWidthIndex() - 1 ); if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp index 5c4b280dda..fd2cf976dc 100644 --- a/pcbnew/kicad_plugin.cpp +++ b/pcbnew/kicad_plugin.cpp @@ -551,12 +551,12 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const // Save current default track width, for compatibility with older Pcbnew version; m_out->Print( aNestLevel+1, "(last_trace_width %s)\n", - FMTIU( aBoard->GetCurrentTrackWidth() ).c_str() ); + FMTIU( aBoard->GetDesignSettings().GetCurrentTrackWidth() ).c_str() ); // Save custom tracks width list (the first is not saved here: this is the netclass value - for( unsigned ii = 1; ii < aBoard->m_TrackWidthList.size(); ii++ ) + for( unsigned ii = 1; ii < aBoard->GetDesignSettings().m_TrackWidthList.size(); ii++ ) m_out->Print( aNestLevel+1, "(user_trace_width %s)\n", - FMTIU( aBoard->m_TrackWidthList[ii] ).c_str() ); + FMTIU( aBoard->GetDesignSettings().m_TrackWidthList[ii] ).c_str() ); m_out->Print( aNestLevel+1, "(trace_clearance %s)\n", FMTIU( aBoard->m_NetClasses.GetDefault()->GetClearance() ).c_str() ); @@ -587,10 +587,10 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const // Save custom vias diameters list (the first is not saved here: this is // the netclass value - for( unsigned ii = 1; ii < aBoard->m_ViasDimensionsList.size(); ii++ ) + for( unsigned ii = 1; ii < aBoard->GetDesignSettings().m_ViasDimensionsList.size(); ii++ ) m_out->Print( aNestLevel+1, "(user_via %s %s)\n", - FMTIU( aBoard->m_ViasDimensionsList[ii].m_Diameter ).c_str(), - FMTIU( aBoard->m_ViasDimensionsList[ii].m_Drill ).c_str() ); + FMTIU( aBoard->GetDesignSettings().m_ViasDimensionsList[ii].m_Diameter ).c_str(), + FMTIU( aBoard->GetDesignSettings().m_ViasDimensionsList[ii].m_Drill ).c_str() ); // for old versions compatibility: if( aBoard->GetDesignSettings().m_BlindBuriedViaAllowed ) diff --git a/pcbnew/legacy_plugin.cpp b/pcbnew/legacy_plugin.cpp index d94852db4c..cf0aca69fe 100644 --- a/pcbnew/legacy_plugin.cpp +++ b/pcbnew/legacy_plugin.cpp @@ -633,6 +633,8 @@ void LEGACY_PLUGIN::loadSHEET() void LEGACY_PLUGIN::loadSETUP() { NETCLASS* netclass_default = m_board->m_NetClasses.GetDefault(); + // TODO Orson: is it really necessary to first operate on a copy and then apply it? + // would not it be better to use reference here and apply all the changes instantly? BOARD_DESIGN_SETTINGS bds = m_board->GetDesignSettings(); ZONE_SETTINGS zs = m_board->GetZoneSettings(); char* line; @@ -692,7 +694,7 @@ void LEGACY_PLUGIN::loadSETUP() else if( TESTLINE( "TrackWidthList" ) ) { BIU tmp = biuParse( line + SZ( "TrackWidthList" ) ); - m_board->m_TrackWidthList.push_back( tmp ); + bds.m_TrackWidthList.push_back( tmp ); } else if( TESTLINE( "TrackClearence" ) ) @@ -754,7 +756,8 @@ void LEGACY_PLUGIN::loadSETUP() if( data ) // DRILL may not be present ? drill = biuParse( data ); - m_board->m_ViasDimensionsList.push_back( VIA_DIMENSION( diameter, drill ) ); + bds.m_ViasDimensionsList.push_back( VIA_DIMENSION( diameter, + drill ) ); } else if( TESTLINE( "ViaDrill" ) ) @@ -907,23 +910,24 @@ void LEGACY_PLUGIN::loadSETUP() * Sort lists by by increasing value and remove duplicates * (the first value is not tested, because it is the netclass value */ - sort( m_board->m_ViasDimensionsList.begin() + 1, m_board->m_ViasDimensionsList.end() ); - sort( m_board->m_TrackWidthList.begin() + 1, m_board->m_TrackWidthList.end() ); + BOARD_DESIGN_SETTINGS& designSettings = m_board->GetDesignSettings(); + sort( designSettings.m_ViasDimensionsList.begin() + 1, designSettings.m_ViasDimensionsList.end() ); + sort( designSettings.m_TrackWidthList.begin() + 1, designSettings.m_TrackWidthList.end() ); - for( unsigned ii = 1; ii < m_board->m_ViasDimensionsList.size() - 1; ii++ ) + for( unsigned ii = 1; ii < designSettings.m_ViasDimensionsList.size() - 1; ii++ ) { - if( m_board->m_ViasDimensionsList[ii] == m_board->m_ViasDimensionsList[ii + 1] ) + if( designSettings.m_ViasDimensionsList[ii] == designSettings.m_ViasDimensionsList[ii + 1] ) { - m_board->m_ViasDimensionsList.erase( m_board->m_ViasDimensionsList.begin() + ii ); + designSettings.m_ViasDimensionsList.erase( designSettings.m_ViasDimensionsList.begin() + ii ); ii--; } } - for( unsigned ii = 1; ii < m_board->m_TrackWidthList.size() - 1; ii++ ) + for( unsigned ii = 1; ii < designSettings.m_TrackWidthList.size() - 1; ii++ ) { - if( m_board->m_TrackWidthList[ii] == m_board->m_TrackWidthList[ii + 1] ) + if( designSettings.m_TrackWidthList[ii] == designSettings.m_TrackWidthList[ii + 1] ) { - m_board->m_TrackWidthList.erase( m_board->m_TrackWidthList.begin() + ii ); + designSettings.m_TrackWidthList.erase( designSettings.m_TrackWidthList.begin() + ii ); ii--; } } @@ -3005,11 +3009,12 @@ void LEGACY_PLUGIN::saveSETUP( const BOARD* aBoard ) const } // Save current default track width, for compatibility with older Pcbnew version; - fprintf( m_fp, "TrackWidth %s\n", fmtBIU( aBoard->GetCurrentTrackWidth() ).c_str() ); + fprintf( m_fp, "TrackWidth %s\n", + fmtBIU( aBoard->GetDesignSettings().GetCurrentTrackWidth() ).c_str() ); // Save custom tracks width list (the first is not saved here: this is the netclass value - for( unsigned ii = 1; ii < aBoard->m_TrackWidthList.size(); ii++ ) - fprintf( m_fp, "TrackWidthList %s\n", fmtBIU( aBoard->m_TrackWidthList[ii] ).c_str() ); + for( unsigned ii = 1; ii < aBoard->GetDesignSettings().m_TrackWidthList.size(); ii++ ) + fprintf( m_fp, "TrackWidthList %s\n", fmtBIU( aBoard->GetDesignSettings().m_TrackWidthList[ii] ).c_str() ); fprintf( m_fp, "TrackClearence %s\n", fmtBIU( netclass_default->GetClearance() ).c_str() ); @@ -3030,10 +3035,10 @@ void LEGACY_PLUGIN::saveSETUP( const BOARD* aBoard ) const // Save custom vias diameters list (the first is not saved here: this is // the netclass value - for( unsigned ii = 1; ii < aBoard->m_ViasDimensionsList.size(); ii++ ) + for( unsigned ii = 1; ii < aBoard->GetDesignSettings().m_ViasDimensionsList.size(); ii++ ) fprintf( m_fp, "ViaSizeList %s %s\n", - fmtBIU( aBoard->m_ViasDimensionsList[ii].m_Diameter ).c_str(), - fmtBIU( aBoard->m_ViasDimensionsList[ii].m_Drill ).c_str() ); + fmtBIU( aBoard->GetDesignSettings().m_ViasDimensionsList[ii].m_Diameter ).c_str(), + fmtBIU( aBoard->GetDesignSettings().m_ViasDimensionsList[ii].m_Drill ).c_str() ); // for old versions compatibility: fprintf( m_fp, "MicroViaSize %s\n", fmtBIU( netclass_default->GetuViaDiameter() ).c_str() ); diff --git a/pcbnew/muonde.cpp b/pcbnew/muonde.cpp index f943b13c42..ba2be9e2b4 100644 --- a/pcbnew/muonde.cpp +++ b/pcbnew/muonde.cpp @@ -215,7 +215,7 @@ MODULE* PCB_EDIT_FRAME::Genere_Self( wxDC* DC ) } // Calculate the elements. - Mself.m_Width = GetBoard()->GetCurrentTrackWidth(); + Mself.m_Width = GetDesignSettings().GetCurrentTrackWidth(); std::vector buffer; ll = BuildCornersList_S_Shape( buffer, Mself.m_Start, Mself.m_End, Mself.lng, Mself.m_Width ); @@ -561,7 +561,7 @@ MODULE* PCB_EDIT_FRAME::Create_MuWaveBasicShape( const wxString& name, int pad_c module->Pads().PushFront( pad ); - int tw = GetBoard()->GetCurrentTrackWidth(); + int tw = GetDesignSettings().GetCurrentTrackWidth(); pad->SetSize( wxSize( tw, tw ) ); pad->SetPosition( module->GetPosition() ); @@ -588,7 +588,7 @@ MODULE* PCB_EDIT_FRAME::Create_MuWaveComponent( int shape_type ) int angle = 0; // Enter the size of the gap or stub - int gap_size = GetBoard()->GetCurrentTrackWidth(); + int gap_size = GetDesignSettings().GetCurrentTrackWidth(); switch( shape_type ) { @@ -1104,7 +1104,7 @@ void PCB_EDIT_FRAME::Edit_Gap( wxDC* DC, MODULE* aModule ) gap_size = ValueFromString( g_UserUnit, msg ); // Updating sizes of pads forming the gap. - int tw = GetBoard()->GetCurrentTrackWidth(); + int tw = GetDesignSettings().GetCurrentTrackWidth(); pad->SetSize( wxSize( tw, tw ) ); pad->SetY0( 0 ); @@ -1118,7 +1118,7 @@ void PCB_EDIT_FRAME::Edit_Gap( wxDC* DC, MODULE* aModule ) pad->SetPosition( padpos ); - tw = GetBoard()->GetCurrentTrackWidth(); + tw = GetDesignSettings().GetCurrentTrackWidth(); next_pad->SetSize( wxSize( tw, tw ) ); next_pad->SetY0( 0 ); diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index 372538c1b1..ec8157d17e 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -532,7 +532,7 @@ void PCB_EDIT_FRAME::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) AddMenuItem( PopMenu, ID_POPUP_PCB_SELECT_CU_LAYER_AND_PLACE_THROUGH_VIA, msg, KiBitmap( select_w_layer_xpm ) ); - if( GetBoard()->GetDesignSettings().m_BlindBuriedViaAllowed ) + if( GetDesignSettings().m_BlindBuriedViaAllowed ) { msg = AddHotkeyName( _( "Place Blind/Buried Via" ), g_Board_Editor_Hokeys_Descr, HK_ADD_BLIND_BURIED_VIA ); @@ -957,17 +957,17 @@ static wxMenu* Append_Track_Width_List( BOARD* aBoard ) if( aBoard->GetDesignSettings().m_UseConnectedTrackWidth ) trackwidth_menu->Check( ID_POPUP_PCB_SELECT_AUTO_WIDTH, true ); - if( aBoard->GetViaSizeIndex() != 0 - || aBoard->GetTrackWidthIndex() != 0 + if( aBoard->GetDesignSettings().GetViaSizeIndex() != 0 + || aBoard->GetDesignSettings().GetTrackWidthIndex() != 0 || aBoard->GetDesignSettings().m_UseConnectedTrackWidth ) trackwidth_menu->Append( ID_POPUP_PCB_SELECT_USE_NETCLASS_VALUES, _( "Use Netclass Values" ), _( "Use track and via sizes from their Netclass values" ), true ); - for( unsigned ii = 0; ii < aBoard->m_TrackWidthList.size(); ii++ ) + for( unsigned ii = 0; ii < aBoard->GetDesignSettings().m_TrackWidthList.size(); ii++ ) { - value = StringFromValue( g_UserUnit, aBoard->m_TrackWidthList[ii], true ); + value = StringFromValue( g_UserUnit, aBoard->GetDesignSettings().m_TrackWidthList[ii], true ); msg.Printf( _( "Track %s" ), GetChars( value ) ); if( ii == 0 ) @@ -978,15 +978,16 @@ static wxMenu* Append_Track_Width_List( BOARD* aBoard ) trackwidth_menu->AppendSeparator(); - for( unsigned ii = 0; ii < aBoard->m_ViasDimensionsList.size(); ii++ ) + for( unsigned ii = 0; ii < aBoard->GetDesignSettings().m_ViasDimensionsList.size(); ii++ ) { - value = StringFromValue( g_UserUnit, aBoard->m_ViasDimensionsList[ii].m_Diameter, - true ); + value = StringFromValue( g_UserUnit, + aBoard->GetDesignSettings().m_ViasDimensionsList[ii].m_Diameter, + true ); wxString drill = StringFromValue( g_UserUnit, - aBoard->m_ViasDimensionsList[ii].m_Drill, - true ); + aBoard->GetDesignSettings().m_ViasDimensionsList[ii].m_Drill, + true ); - if( aBoard->m_ViasDimensionsList[ii].m_Drill <= 0 ) + if( aBoard->GetDesignSettings().m_ViasDimensionsList[ii].m_Drill <= 0 ) { msg.Printf( _( "Via %s" ), GetChars( value ) ); } diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp index bfa1ea337d..59ef3cb88f 100644 --- a/pcbnew/pcb_parser.cpp +++ b/pcbnew/pcb_parser.cpp @@ -809,6 +809,8 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR ) T token; NETCLASS* defaultNetclass = m_board->m_NetClasses.GetDefault(); + // TODO Orson: is it really necessary to first operate on a copy and then apply it? + // would not it be better to use reference here and apply all the changes instantly? BOARD_DESIGN_SETTINGS designSettings = m_board->GetDesignSettings(); ZONE_SETTINGS zoneSettings = m_board->GetZoneSettings(); @@ -827,7 +829,7 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR ) break; case T_user_trace_width: - m_board->m_TrackWidthList.push_back( parseBoardUnits( T_user_trace_width ) ); + designSettings.m_TrackWidthList.push_back( parseBoardUnits( T_user_trace_width ) ); NeedRIGHT(); break; @@ -885,7 +887,7 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR ) { int viaSize = parseBoardUnits( "user via size" ); int viaDrill = parseBoardUnits( "user via drill" ); - m_board->m_ViasDimensionsList.push_back( VIA_DIMENSION( viaSize, viaDrill ) ); + designSettings.m_ViasDimensionsList.push_back( VIA_DIMENSION( viaSize, viaDrill ) ); NeedRIGHT(); } break; diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp index ec4d07df7d..c115cbcc37 100644 --- a/pcbnew/tool_pcb.cpp +++ b/pcbnew/tool_pcb.cpp @@ -620,9 +620,9 @@ void PCB_EDIT_FRAME::updateTraceWidthSelectBox() m_SelTrackWidthBox->Clear(); - for( unsigned ii = 0; ii < GetBoard()->m_TrackWidthList.size(); ii++ ) + for( unsigned ii = 0; ii < GetDesignSettings().m_TrackWidthList.size(); ii++ ) { - msg = _( "Track " ) + CoordinateToString( GetBoard()->m_TrackWidthList[ii], true ); + msg = _( "Track " ) + CoordinateToString( GetDesignSettings().m_TrackWidthList[ii], true ); if( ii == 0 ) msg << _( " *" ); @@ -630,10 +630,10 @@ void PCB_EDIT_FRAME::updateTraceWidthSelectBox() m_SelTrackWidthBox->Append( msg ); } - if( GetBoard()->GetTrackWidthIndex() >= GetBoard()->m_TrackWidthList.size() ) - GetBoard()->SetTrackWidthIndex( 0 ); + if( GetDesignSettings().GetTrackWidthIndex() >= GetDesignSettings().m_TrackWidthList.size() ) + GetDesignSettings().SetTrackWidthIndex( 0 ); - m_SelTrackWidthBox->SetSelection( GetBoard()->GetTrackWidthIndex() ); + m_SelTrackWidthBox->SetSelection( GetDesignSettings().GetTrackWidthIndex() ); } @@ -646,14 +646,14 @@ void PCB_EDIT_FRAME::updateViaSizeSelectBox() m_SelViaSizeBox->Clear(); - for( unsigned ii = 0; ii < GetBoard()->m_ViasDimensionsList.size(); ii++ ) + for( unsigned ii = 0; ii < GetDesignSettings().m_ViasDimensionsList.size(); ii++ ) { msg = _( "Via " ); - msg << CoordinateToString( GetBoard()->m_ViasDimensionsList[ii].m_Diameter, true ); + msg << CoordinateToString( GetDesignSettings().m_ViasDimensionsList[ii].m_Diameter, true ); - if( GetBoard()->m_ViasDimensionsList[ii].m_Drill ) + if( GetDesignSettings().m_ViasDimensionsList[ii].m_Drill ) msg << wxT("/ ") - << CoordinateToString( GetBoard()->m_ViasDimensionsList[ii].m_Drill, true ); + << CoordinateToString( GetDesignSettings().m_ViasDimensionsList[ii].m_Drill, true ); if( ii == 0 ) msg << _( " *" ); @@ -661,10 +661,10 @@ void PCB_EDIT_FRAME::updateViaSizeSelectBox() m_SelViaSizeBox->Append( msg ); } - if( GetBoard()->GetViaSizeIndex() >= GetBoard()->m_ViasDimensionsList.size() ) - GetBoard()->SetViaSizeIndex( 0 ); + if( GetDesignSettings().GetViaSizeIndex() >= GetDesignSettings().m_ViasDimensionsList.size() ) + GetDesignSettings().SetViaSizeIndex( 0 ); - m_SelViaSizeBox->SetSelection( GetBoard()->GetViaSizeIndex() ); + m_SelViaSizeBox->SetSelection( GetDesignSettings().GetViaSizeIndex() ); } diff --git a/pcbnew/toolbars_update_user_interface.cpp b/pcbnew/toolbars_update_user_interface.cpp index 78b44145bb..b94bc75d59 100644 --- a/pcbnew/toolbars_update_user_interface.cpp +++ b/pcbnew/toolbars_update_user_interface.cpp @@ -55,15 +55,15 @@ void PCB_EDIT_FRAME::OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent ) { if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_TRACK_WIDTH ) { - if( m_SelTrackWidthBox->GetSelection() != (int) GetBoard()->GetTrackWidthIndex() ) - m_SelTrackWidthBox->SetSelection( GetBoard()->GetTrackWidthIndex() ); + if( m_SelTrackWidthBox->GetSelection() != (int) GetDesignSettings().GetTrackWidthIndex() ) + m_SelTrackWidthBox->SetSelection( GetDesignSettings().GetTrackWidthIndex() ); } else { bool check = ( ( ( ID_POPUP_PCB_SELECT_WIDTH1 + - (int) GetBoard()->GetTrackWidthIndex() ) == aEvent.GetId() ) && - !GetDesignSettings().m_UseConnectedTrackWidth && - !GetBoard()->UseCustomTrackViaSize() ); + (int) GetDesignSettings().GetTrackWidthIndex() ) == aEvent.GetId() ) && + !GetDesignSettings().m_UseConnectedTrackWidth && + !GetDesignSettings().UseCustomTrackViaSize() ); aEvent.Check( check ); } @@ -73,13 +73,13 @@ void PCB_EDIT_FRAME::OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent ) void PCB_EDIT_FRAME::OnUpdateSelectAutoTrackWidth( wxUpdateUIEvent& aEvent ) { aEvent.Check( GetDesignSettings().m_UseConnectedTrackWidth && - !GetBoard()->UseCustomTrackViaSize() ); + !GetDesignSettings().UseCustomTrackViaSize() ); } void PCB_EDIT_FRAME::OnUpdateSelectCustomTrackWidth( wxUpdateUIEvent& aEvent ) { - aEvent.Check( GetBoard()->UseCustomTrackViaSize() ); + aEvent.Check( GetDesignSettings().UseCustomTrackViaSize() ); } @@ -89,15 +89,15 @@ void PCB_EDIT_FRAME::OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent ) if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_VIA_SIZE ) { - if( m_SelViaSizeBox->GetSelection() != (int) GetBoard()->GetViaSizeIndex() ) - m_SelViaSizeBox->SetSelection( GetBoard()->GetViaSizeIndex() ); + if( m_SelViaSizeBox->GetSelection() != (int) GetDesignSettings().GetViaSizeIndex() ) + m_SelViaSizeBox->SetSelection( GetDesignSettings().GetViaSizeIndex() ); } else { bool check = ( ( ( ID_POPUP_PCB_SELECT_VIASIZE1 + - (int) GetBoard()->GetViaSizeIndex() ) == aEvent.GetId() ) && + (int) GetDesignSettings().GetViaSizeIndex() ) == aEvent.GetId() ) && !GetDesignSettings().m_UseConnectedTrackWidth && - !GetBoard()->UseCustomTrackViaSize() ); + !GetDesignSettings().UseCustomTrackViaSize() ); aEvent.Check( check ); } diff --git a/pcbnew/tools/pcbnew_control.cpp b/pcbnew/tools/pcbnew_control.cpp index 378ae9a580..3fb689e71f 100644 --- a/pcbnew/tools/pcbnew_control.cpp +++ b/pcbnew/tools/pcbnew_control.cpp @@ -416,13 +416,13 @@ int PCBNEW_CONTROL::GridPrev( TOOL_EVENT& aEvent ) int PCBNEW_CONTROL::TrackWidthInc( TOOL_EVENT& aEvent ) { BOARD* board = getModel( PCB_T ); - int widthIndex = board->GetTrackWidthIndex() + 1; + int widthIndex = board->GetDesignSettings().GetTrackWidthIndex() + 1; - if( widthIndex >= (int) board->m_TrackWidthList.size() ) - widthIndex = board->m_TrackWidthList.size() - 1; + if( widthIndex >= (int) board->GetDesignSettings().m_TrackWidthList.size() ) + widthIndex = board->GetDesignSettings().m_TrackWidthList.size() - 1; - board->SetTrackWidthIndex( widthIndex ); - board->UseCustomTrackViaSize( false ); + board->GetDesignSettings().SetTrackWidthIndex( widthIndex ); + board->GetDesignSettings().UseCustomTrackViaSize( false ); wxUpdateUIEvent dummy; getEditFrame()->OnUpdateSelectTrackWidth( dummy ); @@ -437,13 +437,13 @@ int PCBNEW_CONTROL::TrackWidthInc( TOOL_EVENT& aEvent ) int PCBNEW_CONTROL::TrackWidthDec( TOOL_EVENT& aEvent ) { BOARD* board = getModel( PCB_T ); - int widthIndex = board->GetTrackWidthIndex() - 1; + int widthIndex = board->GetDesignSettings().GetTrackWidthIndex() - 1; if( widthIndex < 0 ) widthIndex = 0; - board->SetTrackWidthIndex( widthIndex ); - board->UseCustomTrackViaSize( false ); + board->GetDesignSettings().SetTrackWidthIndex( widthIndex ); + board->GetDesignSettings().UseCustomTrackViaSize( false ); wxUpdateUIEvent dummy; getEditFrame()->OnUpdateSelectTrackWidth( dummy ); @@ -458,13 +458,13 @@ int PCBNEW_CONTROL::TrackWidthDec( TOOL_EVENT& aEvent ) int PCBNEW_CONTROL::ViaSizeInc( TOOL_EVENT& aEvent ) { BOARD* board = getModel( PCB_T ); - int sizeIndex = board->GetViaSizeIndex() + 1; + int sizeIndex = board->GetDesignSettings().GetViaSizeIndex() + 1; - if( sizeIndex >= (int) board->m_ViasDimensionsList.size() ) - sizeIndex = board->m_ViasDimensionsList.size() - 1; + if( sizeIndex >= (int) board->GetDesignSettings().m_ViasDimensionsList.size() ) + sizeIndex = board->GetDesignSettings().m_ViasDimensionsList.size() - 1; - board->SetViaSizeIndex( sizeIndex ); - board->UseCustomTrackViaSize( false ); + board->GetDesignSettings().SetViaSizeIndex( sizeIndex ); + board->GetDesignSettings().UseCustomTrackViaSize( false ); wxUpdateUIEvent dummy; getEditFrame()->OnUpdateSelectViaSize( dummy ); @@ -479,13 +479,13 @@ int PCBNEW_CONTROL::ViaSizeInc( TOOL_EVENT& aEvent ) int PCBNEW_CONTROL::ViaSizeDec( TOOL_EVENT& aEvent ) { BOARD* board = getModel( PCB_T ); - int sizeIndex = board->GetViaSizeIndex() - 1; + int sizeIndex = board->GetDesignSettings().GetViaSizeIndex() - 1; if( sizeIndex < 0 ) sizeIndex = 0; - board->SetViaSizeIndex( sizeIndex ); - board->UseCustomTrackViaSize( false ); + board->GetDesignSettings().SetViaSizeIndex( sizeIndex ); + board->GetDesignSettings().UseCustomTrackViaSize( false ); wxUpdateUIEvent dummy; getEditFrame()->OnUpdateSelectViaSize( dummy );