diff --git a/pcbnew/teardrop/dialog_teardrop.cpp b/pcbnew/teardrop/dialog_teardrop.cpp index 49d1448402..663b8b190c 100644 --- a/pcbnew/teardrop/dialog_teardrop.cpp +++ b/pcbnew/teardrop/dialog_teardrop.cpp @@ -94,6 +94,14 @@ public: } ~TEARDROP_DIALOG() + { + TransferToParamList(); + } + + /** + * Copy the settings from dialog to the current board settings + */ + void TransferToParamList() { int shape_seg_count = GetCurvePointCount(); TEARDROP_PARAMETERS_LIST* prmsList = m_brdSettings->GetTeadropParamsList(); @@ -195,34 +203,10 @@ void PCB_EDIT_FRAME::OnRunTeardropTool( wxCommandEvent& event ) BOARD_COMMIT committer( this ); + dlg.TransferToParamList(); TEARDROP_MANAGER trdm( GetBoard(), this ); - int shape_seg_count = dlg.GetCurvePointCount(); - - trdm.SetTeardropMaxSize( TARGET_ROUND, dlg.GetTeardropMaxLenRound(), - dlg.GetTeardropMaxHeightRound() ); - trdm.SetTeardropSizeRatio( TARGET_ROUND, dlg.GetTeardropLenPercentRound(), - dlg.GetTeardropSizePercentRound() ); - trdm.SetTeardropCurvedPrm( TARGET_ROUND, (dlg.CurvedShapeOption() & CURVED_OPTION_ROUND) - ? shape_seg_count : 0 ); - - trdm.SetTeardropMaxSize( TARGET_RECT, dlg.GetTeardropMaxLenRect(), - dlg.GetTeardropMaxHeightRect() ); - trdm.SetTeardropSizeRatio( TARGET_RECT, dlg.GetTeardropLenPercentRect(), - dlg.GetTeardropSizePercentRect() ); - trdm.SetTeardropCurvedPrm( TARGET_RECT, (dlg.CurvedShapeOption() & CURVED_OPTION_RECT) - ? shape_seg_count : 0 ); - - trdm.SetTeardropMaxSize( TARGET_TRACK, dlg.GetTeardropMaxLenTrack(), - dlg.GetTeardropMaxHeightTrack() ); - trdm.SetTeardropSizeRatio( TARGET_TRACK, dlg.GetTeardropLenPercentTrack(), - dlg.GetTeardropSizePercentTrack() ); - trdm.SetTeardropCurvedPrm( TARGET_TRACK, (dlg.CurvedShapeOption() & CURVED_OPTION_TRACK) - ? shape_seg_count : 0 ); - const bool discardTeardropInSameZone = true; - trdm.SetTargets( dlg.TeardropOnPadVia(), dlg.RoundShapesOnly(), - dlg.IncludeNotPTH(), dlg.TeardropOnTracks() ); int added_count = trdm.SetTeardrops( &committer, discardTeardropInSameZone, diff --git a/pcbnew/teardrop/teardrop.cpp b/pcbnew/teardrop/teardrop.cpp index 854b7b60fc..83d8ec3ff8 100644 --- a/pcbnew/teardrop/teardrop.cpp +++ b/pcbnew/teardrop/teardrop.cpp @@ -43,13 +43,11 @@ #define MAGIC_TEARDROP_ZONE_ID 30000 -void TEARDROP_MANAGER::SetTargets( bool aApplyToPadVias, bool aApplyToRoundShapesOnly, - bool aApplyToSurfacePads, bool aApplyToTracks ) +TEARDROP_MANAGER::TEARDROP_MANAGER( BOARD* aBoard, PCB_EDIT_FRAME* aFrame ) { - m_applyToViaPads = aApplyToPadVias; - m_applyToRoundShapesOnly = aApplyToRoundShapesOnly; - m_applyToSurfacePads = aApplyToSurfacePads; - m_applyToTracks = aApplyToTracks; + m_board = aBoard; + m_prmsList = m_board->GetDesignSettings().GetTeadropParamsList(); + m_tolerance = 0; } @@ -101,10 +99,11 @@ int TEARDROP_MANAGER::SetTeardrops( BOARD_COMMIT* aCommitter, // (custom pads are not collected) std::vector< VIAPAD > viapad_list; - if( m_applyToViaPads ) + if( m_prmsList->m_TargetViasPads ) collectVias( viapad_list ); - collectPadsCandidate( viapad_list, m_applyToViaPads, m_applyToRoundShapesOnly, m_applyToSurfacePads ); + collectPadsCandidate( viapad_list, m_prmsList->m_TargetViasPads, + m_prmsList->m_UseRoundShapesOnly, m_prmsList->m_TargetPadsWithNoHole ); TRACK_BUFFER trackLookupList; @@ -150,9 +149,9 @@ int TEARDROP_MANAGER::SetTeardrops( BOARD_COMMIT* aCommitter, TEARDROP_PARAMETERS* currParams; if( viapad.m_IsRound ) - currParams = m_Parameters.GetParameters( TARGET_ROUND ); + currParams = m_prmsList->GetParameters( TARGET_ROUND ); else - currParams = m_Parameters.GetParameters( TARGET_RECT ); + currParams = m_prmsList->GetParameters( TARGET_RECT ); // Ensure a teardrop shape can be built: // The track width must be < teardrop height @@ -185,7 +184,7 @@ int TEARDROP_MANAGER::SetTeardrops( BOARD_COMMIT* aCommitter, int track2trackCount = 0; - if( m_applyToTracks ) + if( m_prmsList->m_TargetTrack2Track ) track2trackCount = addTeardropsOnTracks( aCommitter ); // Now set priority of teardrops now all teardrops are added @@ -263,7 +262,7 @@ int TEARDROP_MANAGER::addTeardropsOnTracks( BOARD_COMMIT* aCommitter ) collectVias( viapad_list ); collectPadsCandidate( viapad_list, true, true, true ); - TEARDROP_PARAMETERS* currParams = m_Parameters.GetParameters( TARGET_TRACK ); + TEARDROP_PARAMETERS* currParams = m_prmsList->GetParameters( TARGET_TRACK ); // Explore groups (a group is a set of tracks on the same layer and the same net): for( auto grp : trackLookupList.GetBuffer() ) diff --git a/pcbnew/teardrop/teardrop.h b/pcbnew/teardrop/teardrop.h index b76802a836..9747a721d3 100644 --- a/pcbnew/teardrop/teardrop.h +++ b/pcbnew/teardrop/teardrop.h @@ -87,14 +87,7 @@ public: TD_TYPE_TRACKEND // specify a teardrop on a rond end of a wide track }; - TEARDROP_MANAGER( BOARD* aBoard, PCB_EDIT_FRAME* aFrame ) : - m_tolerance( 0 ), - m_applyToViaPads( true ), - m_applyToRoundShapesOnly( false ), - m_applyToSurfacePads( true ), - m_board( aBoard ) - { - } + TEARDROP_MANAGER( BOARD* aBoard, PCB_EDIT_FRAME* aFrame ); /** * Set teardrops on a teardrop free board @@ -119,52 +112,6 @@ public: */ int RemoveTeardrops( BOARD_COMMIT* aCommitter, bool aCommitAfterRemove ); - /** - * Set max allowed length and height for teardrops in IU. - * a value <= 0 disable the constraint - */ - void SetTeardropMaxSize( TARGET_TD aTdType, int aMaxLen, int aMaxHeight ) - { - m_Parameters.GetParameters( aTdType )->SetTeardropMaxSize( aMaxLen, aMaxHeight ); - } - - - /** - * Set prefered length and height ratio for teardrops - * the prefered length and height are VIAPAD width * aLenghtRatio and - * VIAPAD width * aHeightRatio - */ - void SetTeardropSizeRatio( TARGET_TD aTdType, double aLenghtRatio = 0.5, double aHeightRatio = 1.0 ) - { - m_Parameters.GetParameters( aTdType )->SetTeardropSizeRatio( aLenghtRatio, aHeightRatio ); - } - - - /** - * Set the params for teardrop using curved shape - * note: if aSegCount is < 3, the shape uses a straight line - */ - void SetTeardropCurvedPrm( TARGET_TD aTdType, int aCurveSegCount = 0 ) - { - m_Parameters.GetParameters( aTdType )->SetTeardropCurvedPrm( aCurveSegCount ); - } - - /** - * Define the items used to add a teardrop - * @param aApplyToPadVias = true to add Td to vias and PTH - * @param aApplyToRoundShapesOnly = true to restrict Td on round PTH - * @param aApplyToSurfacePads = true to add Td to not drilled pads (like SMD) - * @param aApplyToTracks = true to add Td to tracks connected point when having - * different sizes - */ - void SetTargets( bool aApplyToPadVias, bool aApplyToRoundShapesOnly, - bool aApplyToSurfacePads, bool aApplyToTracks ); - - /** - * the list of available TEARDROP_PARAMETERS items - * at least for round, rect PADVIA shapes and tracks - */ - TEARDROP_PARAMETERS_LIST m_Parameters; private: /** @@ -301,12 +248,8 @@ private: private: int m_tolerance; // max distance between a track end point and a pad/via center to // see them connected to ut a teardrop - bool m_applyToViaPads; // true to add a teardrop to vias and PTH pads - bool m_applyToRoundShapesOnly; // true to add a teardrop to round pads only - bool m_applyToSurfacePads; // true to add a teardrop not drilled pads (like SMD) - bool m_applyToTracks; // true to add a teardrop to connected point of 2 tracks - // having different width BOARD* m_board; + TEARDROP_PARAMETERS_LIST* m_prmsList; // the teardrop parameters list, from the board desing settings std::vector m_createdTdList; // list of new created teardrops };