mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-13 17:53:11 +02:00
113 lines
3.5 KiB
C++
113 lines
3.5 KiB
C++
/*
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
*
|
|
* Copyright The KiCad Developers, see AUTHORS.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 as published by the
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef PCBNEW_BOARD_STATISTICS_H
|
|
#define PCBNEW_BOARD_STATISTICS_H
|
|
|
|
#include <layer_ids.h>
|
|
#include <padstack.h>
|
|
|
|
class BOARD;
|
|
|
|
struct DRILL_LINE_ITEM
|
|
{
|
|
enum COL_ID
|
|
{
|
|
COL_COUNT,
|
|
COL_SHAPE,
|
|
COL_X_SIZE,
|
|
COL_Y_SIZE,
|
|
COL_PLATED,
|
|
COL_VIA_PAD,
|
|
COL_START_LAYER,
|
|
COL_STOP_LAYER
|
|
};
|
|
|
|
DRILL_LINE_ITEM( int aXSize, int aYSize, PAD_DRILL_SHAPE aShape, bool aIsPlated,
|
|
bool aIsPad, PCB_LAYER_ID aStartLayer, PCB_LAYER_ID aStopLayer ) :
|
|
xSize( aXSize ),
|
|
ySize( aYSize ),
|
|
shape( aShape ),
|
|
isPlated( aIsPlated ),
|
|
isPad( aIsPad ),
|
|
startLayer( aStartLayer ),
|
|
stopLayer( aStopLayer ),
|
|
m_Qty( 0 )
|
|
{
|
|
}
|
|
|
|
bool operator==( const DRILL_LINE_ITEM& other ) const
|
|
{
|
|
return xSize == other.xSize && ySize == other.ySize && shape == other.shape
|
|
&& isPlated == other.isPlated && isPad == other.isPad && startLayer == other.startLayer
|
|
&& stopLayer == other.stopLayer;
|
|
}
|
|
|
|
struct COMPARE
|
|
{
|
|
COMPARE( COL_ID aColId, bool aAscending ) : colId( aColId ), ascending( aAscending ) {}
|
|
|
|
bool operator()( const DRILL_LINE_ITEM& aLeft, const DRILL_LINE_ITEM& aRight )
|
|
{
|
|
switch( colId )
|
|
{
|
|
case COL_COUNT:
|
|
return compareDrillParameters( aLeft.m_Qty, aRight.m_Qty );
|
|
case COL_SHAPE:
|
|
return compareDrillParameters( static_cast<int>( aLeft.shape ), static_cast<int>( aRight.shape ) );
|
|
case COL_X_SIZE:
|
|
return compareDrillParameters( aLeft.xSize, aRight.xSize );
|
|
case COL_Y_SIZE:
|
|
return compareDrillParameters( aLeft.ySize, aRight.ySize );
|
|
case COL_PLATED:
|
|
return ascending ? aLeft.isPlated : aRight.isPlated;
|
|
case COL_VIA_PAD:
|
|
return ascending ? aLeft.isPad : aRight.isPad;
|
|
case COL_START_LAYER:
|
|
return compareDrillParameters( aLeft.startLayer, aRight.startLayer );
|
|
case COL_STOP_LAYER:
|
|
return compareDrillParameters( aLeft.stopLayer, aRight.stopLayer );
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool compareDrillParameters( int aLeft, int aRight )
|
|
{
|
|
return ascending ? aLeft < aRight : aLeft > aRight;
|
|
}
|
|
|
|
COL_ID colId;
|
|
bool ascending;
|
|
};
|
|
|
|
int xSize;
|
|
int ySize;
|
|
PAD_DRILL_SHAPE shape;
|
|
bool isPlated;
|
|
bool isPad;
|
|
PCB_LAYER_ID startLayer;
|
|
PCB_LAYER_ID stopLayer;
|
|
int m_Qty;
|
|
};
|
|
|
|
void CollectDrillLineItems( BOARD* board, std::vector<DRILL_LINE_ITEM>& out );
|
|
|
|
#endif
|