diff --git a/pcbnew/dialogs/dialog_drc.cpp b/pcbnew/dialogs/dialog_drc.cpp index 520df5e2ab..bcf6b34cda 100644 --- a/pcbnew/dialogs/dialog_drc.cpp +++ b/pcbnew/dialogs/dialog_drc.cpp @@ -46,6 +46,7 @@ // Keywords for read and write config #define TestMissingCourtyardKey wxT( "TestMissingCourtyard" ) #define TestFootprintCourtyardKey wxT( "TestFootprintCourtyard" ) +#define RefillZonesBeforeDrc wxT( "RefillZonesBeforeDrc" ) DIALOG_DRC_CONTROL::DIALOG_DRC_CONTROL( DRC* aTester, PCB_EDIT_FRAME* aEditorFrame, @@ -68,6 +69,8 @@ DIALOG_DRC_CONTROL::~DIALOG_DRC_CONTROL() { m_config->Write( TestMissingCourtyardKey, m_cbCourtyardMissing->GetValue() ); m_config->Write( TestFootprintCourtyardKey, m_cbCourtyardOverlap->GetValue() ); + m_config->Write( RefillZonesBeforeDrc, m_cbRefillZones->GetValue() ); + // Disonnect events m_ClearanceListBox->Disconnect( ID_CLEARANCE_LIST, wxEVT_LEFT_DCLICK, wxMouseEventHandler( @@ -134,7 +137,8 @@ void DIALOG_DRC_CONTROL::InitValues() wxMouseEventHandler( DIALOG_DRC_CONTROL::OnRightUpUnconnected ), NULL, this ); - this->Connect( wxEVT_MENU, wxCommandEventHandler( DIALOG_DRC_CONTROL::OnPopupMenu ), NULL, this ); + this->Connect( wxEVT_MENU, wxCommandEventHandler( DIALOG_DRC_CONTROL::OnPopupMenu ), NULL, + this ); m_DeleteCurrentMarkerButton->Enable( false ); @@ -147,7 +151,8 @@ void DIALOG_DRC_CONTROL::InitValues() m_cbCourtyardMissing->SetValue( value ); m_config->Read( TestFootprintCourtyardKey, &value, false ); m_cbCourtyardOverlap->SetValue( value ); - + m_config->Read( RefillZonesBeforeDrc, &value, false ); + m_cbRefillZones->SetValue( value ); // Set the initial "enabled" status of the browse button and the text // field for report name @@ -179,12 +184,14 @@ void DIALOG_DRC_CONTROL::SetRptSettings( bool aEnable, const wxString& aFileName m_RptFilenameCtrl->SetValue( aFileName ); } + void DIALOG_DRC_CONTROL::GetRptSettings( bool* aEnable, wxString& aFileName ) { *aEnable = m_CreateRptCtrl->GetValue(); aFileName = m_RptFilenameCtrl->GetValue(); } + void DIALOG_DRC_CONTROL::OnStartdrcClick( wxCommandEvent& event ) { wxString reportName; @@ -210,6 +217,7 @@ void DIALOG_DRC_CONTROL::OnStartdrcClick( wxCommandEvent& event ) true, // unconnected pads DRC test enabled true, // DRC test for zones enabled true, // DRC test for keepout areas enabled + m_cbRefillZones->GetValue(), m_cbCourtyardOverlap->GetValue(), m_cbCourtyardMissing->GetValue(), reportName, make_report ); @@ -283,6 +291,7 @@ void DIALOG_DRC_CONTROL::OnListUnconnectedClick( wxCommandEvent& event ) true, // unconnected pads DRC test enabled true, // DRC test for zones enabled true, // DRC test for keepout areas enabled + m_cbRefillZones->GetValue(), m_cbCourtyardOverlap->GetValue(), m_cbCourtyardMissing->GetValue(), reportName, make_report ); @@ -360,10 +369,6 @@ void DIALOG_DRC_CONTROL::OnCancelClick( wxCommandEvent& event ) } -/*! - * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX1 - */ - void DIALOG_DRC_CONTROL::OnReportCheckBoxClicked( wxCommandEvent& event ) { m_RptFilenameCtrl->Enable( m_CreateRptCtrl->IsChecked() ); @@ -541,6 +546,7 @@ void DIALOG_DRC_CONTROL::OnLeftDClickUnconnected( wxMouseEvent& event ) } } + /* called when switching from Error list to Unconnected list * To avoid mistakes, the current marker is selection is cleared */ @@ -593,6 +599,7 @@ void DIALOG_DRC_CONTROL::OnUnconnectedSelectionEvent( wxCommandEvent& event ) // Find the selected DRC_ITEM in the listbox, position cursor there, // at the first of the two pads. const DRC_ITEM* item = m_UnconnectedListBox->GetItem( selection ); + if( item ) { // When selecting a item, center it on GAL and just move the graphic diff --git a/pcbnew/dialogs/dialog_drc_base.cpp b/pcbnew/dialogs/dialog_drc_base.cpp index 23cbd10fe1..5a746642c1 100644 --- a/pcbnew/dialogs/dialog_drc_base.cpp +++ b/pcbnew/dialogs/dialog_drc_base.cpp @@ -1,8 +1,8 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jul 2 2017) +// C++ code generated with wxFormBuilder (version Feb 9 2018) // http://www.wxformbuilder.org/ // -// PLEASE DO "NOT" EDIT THIS FILE! +// PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// #include "dialog_drclistbox.h" @@ -105,8 +105,11 @@ DIALOG_DRC_CONTROL_BASE::DIALOG_DRC_CONTROL_BASE( wxWindow* parent, wxWindowID i bSizerOptSettings->Add( fgMinValuesSizer, 0, wxEXPAND, 5 ); + m_cbRefillZones = new wxCheckBox( this, wxID_ANY, _("Refill all zones before performing DRC"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerOptSettings->Add( m_cbRefillZones, 0, wxLEFT|wxRIGHT, 5 ); + m_cbCourtyardOverlap = new wxCheckBox( this, wxID_ANY, _("Check footprint courtyard overlap"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizerOptSettings->Add( m_cbCourtyardOverlap, 0, wxALL, 5 ); + bSizerOptSettings->Add( m_cbCourtyardOverlap, 0, wxLEFT|wxRIGHT, 5 ); m_cbCourtyardMissing = new wxCheckBox( this, wxID_ANY, _("Check courtyard missing in footprints"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerOptSettings->Add( m_cbCourtyardMissing, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); diff --git a/pcbnew/dialogs/dialog_drc_base.fbp b/pcbnew/dialogs/dialog_drc_base.fbp index daa05ee30f..abb6bc657c 100644 --- a/pcbnew/dialogs/dialog_drc_base.fbp +++ b/pcbnew/dialogs/dialog_drc_base.fbp @@ -14,6 +14,7 @@ dialog_drc_base 1000 none + 1 dialog_drc_base @@ -1197,7 +1198,95 @@ 5 - wxALL + wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Refill all zones before performing DRC + + 0 + + + 0 + + 1 + m_cbRefillZones + 1 + + + protected + 1 + + Resizable + 1 + + + ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxLEFT|wxRIGHT 0 1 diff --git a/pcbnew/dialogs/dialog_drc_base.h b/pcbnew/dialogs/dialog_drc_base.h index 00b47f79ab..871d8551b5 100644 --- a/pcbnew/dialogs/dialog_drc_base.h +++ b/pcbnew/dialogs/dialog_drc_base.h @@ -1,8 +1,8 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jul 2 2017) +// C++ code generated with wxFormBuilder (version Feb 9 2018) // http://www.wxformbuilder.org/ // -// PLEASE DO "NOT" EDIT THIS FILE! +// PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// #ifndef __DIALOG_DRC_BASE_H__ @@ -11,7 +11,6 @@ #include #include #include -class DIALOG_SHIM; class DRCLISTBOX; #include "dialog_shim.h" @@ -63,6 +62,7 @@ class DIALOG_DRC_CONTROL_BASE : public DIALOG_SHIM wxStaticText* m_ViaMinUnit; wxStaticText* m_MicroViaMinTitle; wxStaticText* m_MicroViaMinUnit; + wxCheckBox* m_cbRefillZones; wxCheckBox* m_cbCourtyardOverlap; wxCheckBox* m_cbCourtyardMissing; wxStaticText* m_staticTextRpt; diff --git a/pcbnew/drc.cpp b/pcbnew/drc.cpp index 7c2d6003f7..f1bb551a9c 100644 --- a/pcbnew/drc.cpp +++ b/pcbnew/drc.cpp @@ -3,7 +3,7 @@ * * Copyright (C) 2004-2017 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2014 Dick Hollenbeck, dick@softplc.com - * Copyright (C) 2017 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2017-2018 KiCad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -76,7 +76,7 @@ void DRC::ShowDRCDialog( wxWindow* aParent ) m_drcDialog = new DIALOG_DRC_CONTROL( this, m_pcbEditorFrame, aParent ); updatePointers(); - m_drcDialog->SetRptSettings( m_doCreateRptFile, m_rptFilename); + m_drcDialog->SetRptSettings( m_doCreateRptFile, m_rptFilename ); if( show_dlg_modal ) m_drcDialog->ShowModal(); @@ -130,7 +130,7 @@ DRC::DRC( PCB_EDIT_FRAME* aPcbWindow ) m_doNoCourtyardDefined = true; // enable missing courtyard in footprint warning m_abortDRC = false; m_drcInProgress = false; - + m_refillZones = false; // Only fill zones if requested by user. m_doCreateRptFile = false; // m_rptFilename set to empty by its constructor @@ -252,7 +252,7 @@ int DRC::TestZoneToZoneOutline( ZONE_CONTAINER* aZone, bool aCreateMarkers ) wxString msg1 = zoneRef->GetSelectMenuText(); wxString msg2 = zoneToTest->GetSelectMenuText(); MARKER_PCB* marker = new MARKER_PCB( COPPERAREA_INSIDE_COPPERAREA, - pt, msg1, pt, msg2, pt ); + pt, msg1, pt, msg2, pt ); commit.Add( marker ); } @@ -282,7 +282,6 @@ int DRC::TestZoneToZoneOutline( ZONE_CONTAINER* aZone, bool aCreateMarkers ) } } - // Iterate through all the segments of refSmoothedPoly for( auto refIt = refSmoothedPoly.IterateSegmentsWithHoles(); refIt; refIt++ ) { @@ -323,7 +322,7 @@ int DRC::TestZoneToZoneOutline( ZONE_CONTAINER* aZone, bool aCreateMarkers ) wxString msg1 = zoneRef->GetSelectMenuText(); wxString msg2 = zoneToTest->GetSelectMenuText(); MARKER_PCB* marker = new MARKER_PCB( COPPERAREA_CLOSE_TO_COPPERAREA, - pt, msg1, pt, msg2, pt ); + pt, msg1, pt, msg2, pt ); commit.Add( marker ); } @@ -410,7 +409,12 @@ void DRC::RunTests( wxTextCtrl* aMessages ) // caller (a wxTopLevelFrame) is the wxDialog or the Pcb Editor frame that call DRC: wxWindow* caller = aMessages ? aMessages->GetParent() : m_pcbEditorFrame; - m_pcbEditorFrame->Fill_All_Zones( caller ); + + if( m_refillZones ) + { + aMessages->AppendText( _( "Refilling all zones...\n" ) ); + m_pcbEditorFrame->Fill_All_Zones( caller ); + } // test zone clearances to other zones if( aMessages ) @@ -454,7 +458,7 @@ void DRC::RunTests( wxTextCtrl* aMessages ) testTexts(); - // find overlaping courtyard ares. + // find overlapping courtyard ares. if( m_doFootprintOverlapping || m_doNoCourtyardDefined ) { if( aMessages ) @@ -632,6 +636,7 @@ void DRC::testPad2Pad() // GetBoundingRadius() is the radius of the minimum sized circle fully containing the pad int radius = pad->GetBoundingRadius(); + if( radius > max_size ) max_size = radius; } @@ -662,6 +667,7 @@ void DRC::testTracks( wxWindow *aActiveWindow, bool aShowProgressBar ) const int delta = 500; // This is the number of tests between 2 calls to the // progress bar int count = 0; + for( TRACK* segm = m_pcb->m_Track; segm && segm->Next(); segm = segm->Next() ) count++; @@ -682,7 +688,7 @@ void DRC::testTracks( wxWindow *aActiveWindow, bool aShowProgressBar ) for( TRACK* segm = m_pcb->m_Track; segm; segm = segm->Next() ) { - if ( ii++ > delta ) + if( ii++ > delta ) { ii = 0; count++; @@ -718,7 +724,7 @@ void DRC::testUnconnected() auto connectivity = m_pcb->GetConnectivity(); connectivity->Clear(); - connectivity->Build(m_pcb); // just in case. This really needs to be reliable. + connectivity->Build( m_pcb ); // just in case. This really needs to be reliable. connectivity->RecalculateRatsnest(); std::vector edges; @@ -750,7 +756,7 @@ void DRC::testZones() // This is allowed, but i am not sure this is a good idea // // In recent Pcbnew versions, the netcode is always >= 0, but an internal net name - // is stored, and initalized from the file or the zone properpies editor. + // is stored, and initialized from the file or the zone properties editor. // if it differs from the net name from net code, there is a DRC issue for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ ) { @@ -796,7 +802,7 @@ void DRC::testKeepoutAreas() { if( segm->Type() == PCB_TRACE_T ) { - if( ! area->GetDoNotAllowTracks() ) + if( !area->GetDoNotAllowTracks() ) continue; // Ignore if the keepout zone is not on the same layer @@ -843,7 +849,7 @@ void DRC::testTexts() for( auto item : m_pcb->Drawings() ) { // Drc test only items on copper layers - if( ! IsCopperLayer( item->GetLayer() ) ) + if( !IsCopperLayer( item->GetLayer() ) ) continue; // only texts on copper layers are tested @@ -861,7 +867,7 @@ void DRC::testTexts() for( TRACK* track = m_pcb->m_Track; track != NULL; track = track->Next() ) { - if( ! track->IsOnLayer( item->GetLayer() ) ) + if( !track->IsOnLayer( item->GetLayer() ) ) continue; // Test the distance between each segment and the current track/via @@ -913,7 +919,7 @@ void DRC::testTexts() { D_PAD* pad = padList[ii]; - if( ! pad->IsOnLayer( item->GetLayer() ) ) + if( !pad->IsOnLayer( item->GetLayer() ) ) continue; wxPoint shape_pos = pad->ShapePos(); @@ -970,7 +976,7 @@ bool DRC::doTrackKeepoutDrc( TRACK* aRefSeg ) if( aRefSeg->Type() == PCB_TRACE_T ) { - if( ! area->GetDoNotAllowTracks() ) + if( !area->GetDoNotAllowTracks() ) continue; if( !area->IsOnLayer( aRefSeg->GetLayer() ) ) @@ -986,7 +992,7 @@ bool DRC::doTrackKeepoutDrc( TRACK* aRefSeg ) } else if( aRefSeg->Type() == PCB_VIA_T ) { - if( ! area->GetDoNotAllowVias() ) + if( !area->GetDoNotAllowVias() ) continue; auto viaLayers = aRefSeg->GetLayerSet(); @@ -1203,7 +1209,8 @@ bool DRC::doFootprintOverlappingDrc() courtyard.Append( footprint->GetPolyCourtyardFront() ); // Build the common area between footprint and the candidate: - courtyard.BooleanIntersection( candidate->GetPolyCourtyardFront(), SHAPE_POLY_SET::PM_FAST ); + courtyard.BooleanIntersection( candidate->GetPolyCourtyardFront(), + SHAPE_POLY_SET::PM_FAST ); // If no overlap, courtyard is empty (no common area). // Therefore if a common polygon exists, this is a DRC error @@ -1215,7 +1222,8 @@ bool DRC::doFootprintOverlappingDrc() candidate->GetReference().GetData() ); VECTOR2I& pos = courtyard.Vertex( 0, 0, -1 ); wxPoint loc( pos.x, pos.y ); - m_currentMarker = fillMarker( loc, DRCE_OVERLAPPING_FOOTPRINTS, msg, m_currentMarker ); + m_currentMarker = fillMarker( loc, DRCE_OVERLAPPING_FOOTPRINTS, msg, + m_currentMarker ); addMarkerToPcb( m_currentMarker ); m_currentMarker = nullptr; success = false; @@ -1238,7 +1246,8 @@ bool DRC::doFootprintOverlappingDrc() courtyard.Append( footprint->GetPolyCourtyardBack() ); // Build the common area between footprint and the candidate: - courtyard.BooleanIntersection( candidate->GetPolyCourtyardBack(), SHAPE_POLY_SET::PM_FAST ); + courtyard.BooleanIntersection( candidate->GetPolyCourtyardBack(), + SHAPE_POLY_SET::PM_FAST ); // If no overlap, courtyard is empty (no common area). // Therefore if a common polygon exists, this is a DRC error @@ -1250,7 +1259,8 @@ bool DRC::doFootprintOverlappingDrc() candidate->GetReference().GetData() ); VECTOR2I& pos = courtyard.Vertex( 0, 0, -1 ); wxPoint loc( pos.x, pos.y ); - m_currentMarker = fillMarker( loc, DRCE_OVERLAPPING_FOOTPRINTS, msg, m_currentMarker ); + m_currentMarker = fillMarker( loc, DRCE_OVERLAPPING_FOOTPRINTS, msg, + m_currentMarker ); addMarkerToPcb( m_currentMarker ); m_currentMarker = nullptr; success = false; @@ -1260,4 +1270,3 @@ bool DRC::doFootprintOverlappingDrc() return success; } - diff --git a/pcbnew/drc.h b/pcbnew/drc.h index 7234b1ea7f..663f2a8de6 100644 --- a/pcbnew/drc.h +++ b/pcbnew/drc.h @@ -6,7 +6,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2007-2016 Dick Hollenbeck, dick@softplc.com - * Copyright (C) 2017 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2017-2018 KiCad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -106,8 +106,7 @@ class NETCLASS; /** - * Class DRC_ITEM_LIST - * provides an abstract interface of a DRC_ITEM* list manager. The details + * Provide an abstract interface of a DRC_ITEM* list manager. The details * of the actual list architecture are hidden from the caller. Any class * that implements this interface can then be used by a DRCLISTBOX class without * it knowing the actual architecture of the list. @@ -153,8 +152,7 @@ typedef std::vector DRC_LIST; /** - * Class DRC - * is the Design Rule Checker, and performs all the DRC tests. The output of + * Design Rule Checker object that performs all the DRC tests. The output of * the checking goes to the BOARD file in the form of two MARKER lists. Those * two lists are displayable in the drc dialog box. And they can optionally * be sent to a text file on disk. @@ -168,7 +166,6 @@ class DRC private: // protected or private functions() are lowercase first character. - bool m_doPad2PadTest; bool m_doUnconnectedTest; bool m_doZonesTest; @@ -176,6 +173,7 @@ private: bool m_doCreateRptFile; bool m_doFootprintOverlapping; bool m_doNoCourtyardDefined; + bool m_refillZones; wxString m_rptFilename; @@ -215,18 +213,15 @@ private: /** - * Function updatePointers - * is a private helper function used to update needed pointers from the - * one pointer which is known not to change, m_pcbEditorFrame. + * Update needed pointers from the one pointer which is known not to change. */ void updatePointers(); /** - * Function fillMarker - * optionally creates a marker and fills it in with information, - * but does not add it to the BOARD. Use this to report any kind of - * DRC problem, or unconnected pad problem. + * Creates a marker and fills it in with information but does not add it to the BOARD. + * + * Use this to report any kind of DRC problem or unconnected pad problem. * * @param aTrack The reference track. * @param aItem Another item on the BOARD, such as a VIA, SEGZONE, @@ -236,7 +231,8 @@ private: * @param fillMe A MARKER_PCB* which is to be filled in, or NULL if one is to * first be allocated, then filled. */ - MARKER_PCB* fillMarker( const TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, MARKER_PCB* fillMe ); + MARKER_PCB* fillMarker( const TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, + MARKER_PCB* fillMe ); MARKER_PCB* fillMarker( D_PAD* aPad, BOARD_ITEM* aItem, int aErrorCode, MARKER_PCB* fillMe ); @@ -246,10 +242,9 @@ private: const wxString& aMessage, MARKER_PCB* fillMe ); /** - * Function fillMarker - * optionally creates a marker and fills it in with information, - * but does not add it to the BOARD. Use this to report any kind of - * DRC problem, or unconnected pad problem. + * Create a marker and fills it in with information but do not add it to the BOARD. + * + * Use this to report any kind of DRC problem, or unconnected pad problem. * * @param aArea The zone to test * @param aPos position of error @@ -263,24 +258,21 @@ private: MARKER_PCB* fillMe ); /** - * Function fillMarker - * fills a MARKER which will report on a generic problem with the board which is + * Fill a MARKER which will report on a generic problem with the board which is * not geographically locatable. */ MARKER_PCB* fillMarker( int aErrorCode, const wxString& aMessage, MARKER_PCB* fillMe ); /** - * Function addMarkerToPcb - * Adds a DRC marker to the PCB throught the COMMIT mechanism. + * Adds a DRC marker to the PCB through the COMMIT mechanism. */ void addMarkerToPcb( MARKER_PCB* aMarker ); //---------------------------------------------- /** - * Function testNetClasses - * goes through each NETCLASS and verifies that its clearance, via size, - * track width, and track clearance are larger than those in board.m_designSettings. + * Go through each NETCLASS and verifies that its clearance, via size, track width, and + * track clearance are larger than those in board.m_designSettings. * This is necessary because the actual DRC checks are run against the NETCLASS * limits, so in order enforce global limits, we first check the NETCLASSes against * the global limits. @@ -290,9 +282,9 @@ private: bool testNetClasses(); /** - * Function testTracks - * performs the DRC on all tracks. - * because this test can take a while, a progress bar can be displayed + * Perform the DRC on all tracks. + * + * This test can take a while, a progress bar can be displayed * @param aActiveWindow = the active window ued as parent for the progress bar * @param aShowProgressBar = true to show a progress bar * (Note: it is shown only if there are many tracks) @@ -314,9 +306,10 @@ private: bool doNetClass( const std::shared_ptr& aNetClass, wxString& msg ); /** - * Function doPadToPadsDrc - * tests the clearance between aRefPad and other pads. + * Test the clearance between aRefPad and other pads. + * * The pad list must be sorted by x coordinate. + * * @param aRefPad The pad to test * @param aStart The start of the pad list to test against * @param aEnd Marks the end of the list and is not included @@ -325,31 +318,31 @@ private: bool doPadToPadsDrc( D_PAD* aRefPad, D_PAD** aStart, D_PAD** aEnd, int x_limit ); /** - * Function DoTrackDrc - * tests the current segment. + * Test the current segment. + * * @param aRefSeg The segment to test * @param aStart The head of a list of tracks to test against (usually BOARD::m_Track) * @param doPads true if should do pads test - * @return bool - true if no poblems, else false and m_currentMarker is + * @return bool - true if no problems, else false and m_currentMarker is * filled in with the problem information. */ bool doTrackDrc( TRACK* aRefSeg, TRACK* aStart, bool doPads = true ); /** - * Function doTrackKeepoutDrc - * tests the current segment or via. + * Test the current segment or via. + * * @param aRefSeg The segment to test - * @return bool - true if no poblems, else false and m_currentMarker is + * @return bool - true if no problems, else false and m_currentMarker is * filled in with the problem information. */ bool doTrackKeepoutDrc( TRACK* aRefSeg ); /** - * Function doEdgeZoneDrc - * tests a segment in ZONE_CONTAINER * aArea: + * Test a segment in ZONE_CONTAINER * aArea: * Test Edge inside other areas * Test Edge too close other areas + * * @param aArea The current area. * @param aCornerIndex The first corner of the segment to test. * @return bool - false if DRC error or true if OK @@ -357,8 +350,8 @@ private: bool doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex ); /** - * Function doFootprintOverlappingDrc - * tests for footprint courtyard overlaps + * Test for footprint courtyard overlaps. + * * @return bool - false if DRC error or true if OK */ bool doFootprintOverlappingDrc(); @@ -366,7 +359,6 @@ private: //--------------------------------------------------- /** - * Function checkClearancePadToPad * @param aRefPad The reference pad to check * @param aPad Another pad to check against * @return bool - true if clearance between aRefPad and aPad is >= dist_min, else false @@ -375,8 +367,7 @@ private: /** - * Function checkClearanceSegmToPad - * check the distance from a pad to segment. This function uses several + * Check the distance from a pad to segment. This function uses several * instance variable not passed in: * m_segmLength = length of the segment being tested * m_segmAngle = angle of the segment with the X axis; @@ -393,8 +384,8 @@ private: /** - * Helper function checkMarginToCircle * Check the distance from a point to a segment. + * * The segment is expected starting at 0,0, and on the X axis * (used to test DRC between a segment and a round pad, via or round end of a track * @param aCentre The coordinate of the circle's center @@ -447,9 +438,9 @@ public: int Drc( ZONE_CONTAINER* aArea, int aCornerIndex ); /** - * Function DrcBlind - * tests the current segment and returns the result. Any error is not + * Test the current segment and returns the result. Any error is not * displayed in the status panel. + * * @param aRefSeg The current segment to test. * @param aList The track list to test (usually m_Pcb->m_Track) * @return int - BAD_DRC (1) if DRC error or OK_DRC (0) if OK @@ -475,10 +466,10 @@ public: int TestZoneToZoneOutline( ZONE_CONTAINER* aZone, bool aCreateMarkers ); /** - * Function ShowDRCDialog - * opens a dialog and prompts the user, then if a test run button is + * Open a dialog and prompts the user, then if a test run button is * clicked, runs the test(s) and creates the MARKERS. The dialog is only * created if it is not already in existence. + * * @param aParent is the parent window for wxWidgets. Usually the PCB editor frame * but can be an other dialog * if aParent == NULL (default), the parent will be the PCB editor frame @@ -490,22 +481,23 @@ public: void ShowDRCDialog( wxWindow* aParent = NULL ); /** - * Function DestroyDRCDialog - * deletes this ui dialog box and zeros out its pointer to remember + * Deletes this ui dialog box and zeros out its pointer to remember * the state of the dialog's existence. + * * @param aReason Indication of which button was clicked to cause the destruction. - * if aReason == wxID_OK, design parameters values which can be entered from the dialog will bbe saved - * in design parameters list + * if aReason == wxID_OK, design parameters values which can be entered from the dialog + * will bbe saved in design parameters list */ void DestroyDRCDialog( int aReason ); /** - * Function SetSettings - * saves all the UI or test settings and may be called before running the tests. + * Save all the UI or test settings and may be called before running the tests. + * * @param aPad2PadTest Tells whether to test pad to pad distances. * @param aUnconnectedTest Tells whether to list unconnected pads. * @param aZonesTest Tells whether to test zones. + * @param aRefillZones Refill zones before performing DRC. * @param aKeepoutTest Tells whether to test keepout areas. * @param aCourtyardTest Tells whether to test footprint courtyard overlap. * @param aCourtyardMissingTest Tells whether to test missing courtyard definition in footprint. @@ -513,7 +505,7 @@ public: * @param aSaveReport A boolean telling whether to generate disk file report. */ void SetSettings( bool aPad2PadTest, bool aUnconnectedTest, - bool aZonesTest, bool aKeepoutTest, + bool aZonesTest, bool aKeepoutTest, bool aRefillZones, bool aCourtyardTest, bool aCourtyardMissingTest, const wxString& aReportName, bool aSaveReport ) { @@ -525,20 +517,19 @@ public: m_doCreateRptFile = aSaveReport; m_doFootprintOverlapping = aCourtyardTest; m_doNoCourtyardDefined = aCourtyardMissingTest; + m_refillZones = aRefillZones; } /** - * Function RunTests - * will actually run all the tests specified with a previous call to + * Run all the tests specified with a previous call to * SetSettings() * @param aMessages = a wxTextControl where to display some activity messages. Can be NULL */ void RunTests( wxTextCtrl* aMessages = NULL ); /** - * Function ListUnconnectedPad - * gathers a list of all the unconnected pads and shows them in the + * Gather a list of all the unconnected pads and shows them in the * dialog, and optionally prints a report of such. */ void ListUnconnectedPads(); @@ -555,5 +546,3 @@ public: #endif // DRC_H - -//EOF