From f03b9048fe89f504df52192b1e23fad3e2a08553 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Wed, 17 Oct 2012 12:57:21 +0200 Subject: [PATCH] Fix a minor compatibility issue in .pro file for new boards, between decimils and nanometers versions of Pcbnew. --- common/projet_config.cpp | 47 ++++++++++ include/param_config.h | 31 +++++++ pcbnew/class_board_design_settings.cpp | 105 +++++++++++++++-------- pcbnew/class_pad.cpp | 22 +++-- template/raspberrypi-gpio/meta/brd.png | Bin 0 -> 13711 bytes template/raspberrypi-gpio/meta/info.html | 45 +++++----- 6 files changed, 187 insertions(+), 63 deletions(-) create mode 100644 template/raspberrypi-gpio/meta/brd.png diff --git a/common/projet_config.cpp b/common/projet_config.cpp index 1e91b2dcfc..fce2668a30 100644 --- a/common/projet_config.cpp +++ b/common/projet_config.cpp @@ -463,6 +463,53 @@ void PARAM_CFG_INT::SaveParam( wxConfigBase* aConfig ) const } +PARAM_CFG_INT_WITH_SCALE::PARAM_CFG_INT_WITH_SCALE( const wxChar* ident, int* ptparam, + int default_val, int min, int max, + const wxChar* group, double aBiu2cfgunit ) : + PARAM_CFG_INT( ident, ptparam, default_val, min, max, group ) +{ + m_Type = PARAM_INT_WITH_SCALE; + m_BIU_to_cfgunit = aBiu2cfgunit; +} + + +PARAM_CFG_INT_WITH_SCALE::PARAM_CFG_INT_WITH_SCALE( bool Insetup, + const wxChar* ident, int* ptparam, + int default_val, int min, int max, + const wxChar* group, double aBiu2cfgunit ) : + PARAM_CFG_INT( Insetup, ident, ptparam, default_val, min, max, group ) +{ + m_Type = PARAM_INT_WITH_SCALE; + m_BIU_to_cfgunit = aBiu2cfgunit; +} + + +void PARAM_CFG_INT_WITH_SCALE::ReadParam( wxConfigBase* aConfig ) const +{ + if( m_Pt_param == NULL || aConfig == NULL ) + return; + + double default_value = m_Default * m_BIU_to_cfgunit; + double dtmp = aConfig->Read( m_Ident, default_value ); + + int itmp = KiROUND( dtmp / m_BIU_to_cfgunit ); + + if( (itmp < m_Min) || (itmp > m_Max) ) + itmp = m_Default; + + *m_Pt_param = itmp; +} + + +void PARAM_CFG_INT_WITH_SCALE::SaveParam( wxConfigBase* aConfig ) const +{ + if( m_Pt_param == NULL || aConfig == NULL ) + return; + + aConfig->Write( m_Ident, *m_Pt_param * m_BIU_to_cfgunit ); +} + + PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR( const wxChar* ident, EDA_COLOR_T* ptparam, EDA_COLOR_T default_val, const wxChar* group ) : diff --git a/include/param_config.h b/include/param_config.h index a98ca1c607..1868cf9afb 100644 --- a/include/param_config.h +++ b/include/param_config.h @@ -17,6 +17,7 @@ /** Type of parameter in the configuration file */ enum paramcfg_id { PARAM_INT, + PARAM_INT_WITH_SCALE, PARAM_SETCOLOR, PARAM_DOUBLE, PARAM_BOOL, @@ -92,6 +93,36 @@ public: virtual void SaveParam( wxConfigBase* aConfig ) const; }; +/** + * Configuration parameter - Integer Class + * with unit conversion. + * Mainly used to store an integer value in millimeters (or inches) + * and retrieve it in internal units + * the stored value is a floating number + */ +class PARAM_CFG_INT_WITH_SCALE : public PARAM_CFG_INT +{ +public: + double m_BIU_to_cfgunit; ///< the factor to convert the saved value in internal value + +public: + PARAM_CFG_INT_WITH_SCALE( const wxChar* ident, int* ptparam, + int default_val = 0, + int min = std::numeric_limits::min(), + int max = std::numeric_limits::max(), + const wxChar* group = NULL, + double aBiu2cfgunit = 1.0); + PARAM_CFG_INT_WITH_SCALE( bool Insetup, const wxChar* ident, int* ptparam, + int default_val = 0, + int min = std::numeric_limits::min(), + int max = std::numeric_limits::max(), + const wxChar* group = NULL, + double aBiu2cfgunit = 1.0 ); + + virtual void ReadParam( wxConfigBase* aConfig ) const; + virtual void SaveParam( wxConfigBase* aConfig ) const; +}; + /** * Configuration parameter - SetColor Class diff --git a/pcbnew/class_board_design_settings.cpp b/pcbnew/class_board_design_settings.cpp index 8fcdeae7ed..58aadfbcc9 100644 --- a/pcbnew/class_board_design_settings.cpp +++ b/pcbnew/class_board_design_settings.cpp @@ -11,8 +11,20 @@ #include #include +#include -#define DEFAULT_BOARD_THICKNESS_DMILS 620 +// Board thickness, mainly for 3D view: +#define DEFAULT_BOARD_THICKNESS_MM 1.6 + +// Default values for some board items +#define DEFAULT_TEXT_PCB_SIZE Millimeter2iu( 1.5 ) +#define DEFAULT_TEXT_PCB_THICKNESS Millimeter2iu( 0.3 ) +#define DEFAULT_PCB_EDGE_THICKNESS Millimeter2iu( 0.15 ) +#define DEFAULT_GRAPHIC_THICKNESS Millimeter2iu( 0.2 ) +#define DEFAULT_TEXT_MODULE_SIZE Millimeter2iu( 1.5 ) +#define DEFAULT_GR_MODULE_THICKNESS Millimeter2iu( 0.15 ) + +#define DEFAULT_SOLDERMASK_CLEARANCE Millimeter2iu( 0.1 ) BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() : @@ -36,13 +48,13 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() : m_MicroViasAllowed = false; // true to allow micro vias - m_DrawSegmentWidth = DMils2iu( 100 ); // current graphic line width (not EDGE layer) + m_DrawSegmentWidth = DEFAULT_GRAPHIC_THICKNESS; // current graphic line width (not EDGE layer) - m_EdgeSegmentWidth = DMils2iu( 100 ); // current graphic line width (EDGE layer only) - m_PcbTextWidth = DMils2iu( 100 ); // current Pcb (not module) Text width + m_EdgeSegmentWidth = DEFAULT_PCB_EDGE_THICKNESS; // current graphic line width (EDGE layer only) + m_PcbTextWidth = DEFAULT_TEXT_PCB_THICKNESS; // current Pcb (not module) Text width - m_PcbTextSize = wxSize( DMils2iu( 500 ), DMils2iu( 500 ) ); - // current Pcb (not module) Text size + 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_ViasMinSize = DMils2iu( 350 ); // vias (not micro vias) min diameter @@ -51,57 +63,80 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() : m_MicroViasMinDrill = DMils2iu( 50 ); // micro vias (not vias) min drill diameter // Global mask margins: - m_SolderMaskMargin = DMils2iu( 150 ); // Solder mask margin + m_SolderMaskMargin = DEFAULT_SOLDERMASK_CLEARANCE; // Solder mask margin m_SolderPasteMargin = 0; // Solder paste margin absolute value m_SolderPasteMarginRatio = 0.0; // Solder pask margin ratio value of pad size // The final margin is the sum of these 2 values // Usually < 0 because the mask is smaller than pad - m_ModuleTextSize = wxSize( DMils2iu( 500 ), DMils2iu( 500 ) ); - m_ModuleTextWidth = DMils2iu( 100 ); - m_ModuleSegmentWidth = DMils2iu( 100 ); + m_ModuleTextSize = wxSize( DEFAULT_TEXT_MODULE_SIZE, + DEFAULT_TEXT_MODULE_SIZE ); + m_ModuleTextWidth = DEFAULT_GR_MODULE_THICKNESS; + m_ModuleSegmentWidth = DEFAULT_GR_MODULE_THICKNESS; // Layer thickness for 3D viewer - m_boardThickness = DMils2iu( DEFAULT_BOARD_THICKNESS_DMILS ); + m_boardThickness = Millimeter2iu( DEFAULT_BOARD_THICKNESS_MM ); } - +// Add parameters to save in project config. +// values are saved in mm void BOARD_DESIGN_SETTINGS::AppendConfigs( PARAM_CFG_ARRAY* aResult ) { m_Pad_Master.AppendConfigs( aResult ); - aResult->push_back( new PARAM_CFG_INT( wxT( "BoardThickness" ), &m_boardThickness, - DMils2iu( DEFAULT_BOARD_THICKNESS_DMILS ), 0, 0xFFFF ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeV" ), + &m_PcbTextSize.y, + DEFAULT_TEXT_PCB_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "TxtPcbV" ), &m_PcbTextSize.y, - DMils2iu( 600 ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeH" ), + &m_PcbTextSize.x, + DEFAULT_TEXT_PCB_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "TxtPcbH" ), &m_PcbTextSize.x, - DMils2iu( 600 ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextThickness" ), + &m_PcbTextWidth, + DEFAULT_TEXT_PCB_THICKNESS, + Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "TxtModV" ), &m_ModuleTextSize.y, - DMils2iu( 500 ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeV" ), + &m_ModuleTextSize.y, + DEFAULT_TEXT_MODULE_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "TxtModH" ), &m_ModuleTextSize.x, - DMils2iu( 500 ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeH" ), + &m_ModuleTextSize.x, + DEFAULT_TEXT_MODULE_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "TxtModW" ), &m_ModuleTextWidth, - DMils2iu( 100 ), 1, TEXTS_MAX_WIDTH ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeThickness" ), + &m_ModuleTextWidth, + DEFAULT_GR_MODULE_THICKNESS, 1, TEXTS_MAX_WIDTH, + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "VEgarde" ), &m_SolderMaskMargin, - DMils2iu( 100 ), 0, DMils2iu( 10000 ) ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskClearance" ), + &m_SolderMaskMargin, + DEFAULT_SOLDERMASK_CLEARANCE, 0, Millimeter2iu( 1.0 ), + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "DrawLar" ), &m_DrawSegmentWidth, - DMils2iu( 120 ), 0, 0xFFFF ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "DrawSegmentWidth" ), + &m_DrawSegmentWidth, + DEFAULT_GRAPHIC_THICKNESS, + Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "EdgeLar" ), &m_EdgeSegmentWidth, - DMils2iu( 120 ), 0, 0xFFFF ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "BoardOutlineThickness" ), + &m_EdgeSegmentWidth, + DEFAULT_PCB_EDGE_THICKNESS, + Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "TxtLar" ), &m_PcbTextWidth, - DMils2iu( 120 ), 0, 0xFFFF ) ); - - aResult->push_back( new PARAM_CFG_INT( wxT( "MSegLar" ), &m_ModuleSegmentWidth, - DMils2iu( 120 ), 0, 0xFFFF ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleOutlineThickness" ), + &m_ModuleSegmentWidth, + DEFAULT_GR_MODULE_THICKNESS, + Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), + NULL, MM_PER_IU ) ); } diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp index 47eace8b8d..29d8ad4747 100644 --- a/pcbnew/class_pad.cpp +++ b/pcbnew/class_pad.cpp @@ -45,6 +45,7 @@ #include #include #include +#include int D_PAD::m_PadSketchModePenSize = 0; // Pen size used to draw pads in sketch mode @@ -165,14 +166,23 @@ void D_PAD::Flip( int aTranslationY ) void D_PAD::AppendConfigs( PARAM_CFG_ARRAY* aResult ) { - aResult->push_back( new PARAM_CFG_INT( wxT( "PadDrlX" ), &m_Drill.x, - 320, 0, 0x7FFF ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadDrill" ), + &m_Drill.x, + Millimeter2iu( 0.6 ), + Millimeter2iu( 0.1 ), Millimeter2iu( 10.0 ), + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "PadDimH" ), &m_Size.x, - 550, 0, 0x7FFF ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeH" ), + &m_Size.x, + Millimeter2iu( 1.4 ), + Millimeter2iu( 0.1 ), Millimeter2iu( 20.0 ), + NULL, MM_PER_IU ) ); - aResult->push_back( new PARAM_CFG_INT( wxT( "PadDimV" ), &m_Size.y, - 550, 0, 0x7FFF ) ); + aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeV" ), + &m_Size.y, + Millimeter2iu( 1.4 ), + Millimeter2iu( 0.1 ), Millimeter2iu( 20.0 ), + NULL, MM_PER_IU ) ); } diff --git a/template/raspberrypi-gpio/meta/brd.png b/template/raspberrypi-gpio/meta/brd.png new file mode 100644 index 0000000000000000000000000000000000000000..f464b7fc8eaacbd71672cbd15bdd77312434a72d GIT binary patch literal 13711 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 KW}b#^=>Gu;PyTrT literal 0 HcmV?d00001 diff --git a/template/raspberrypi-gpio/meta/info.html b/template/raspberrypi-gpio/meta/info.html index bfb19c4a45..9991a528af 100644 --- a/template/raspberrypi-gpio/meta/info.html +++ b/template/raspberrypi-gpio/meta/info.html @@ -1,22 +1,23 @@ - - -Raspberry Pi - Expansion Board - - -

Raspberry Pi

-

Expansion Board

-This project template is the basis of an expansion board for the -Raspberry Pi $25 ARM -board. -

-This base project includes a PCB edge defined as the same size as the -Raspberry-Pi PCB with the connectors placed correctly to align the two boards. -All IO present on the Raspberry-Pi board is connected to the project through the -0.1" expansion headers. -

-The board outline looks like the following: -

-(c)2012 Brian Sidebotham
-(c)2012 Kicad Developers
- - + + +Raspberry Pi - Expansion Board + + +

Raspberry Pi

+

Expansion Board

+This project template is the basis of an expansion board for the +Raspberry Pi $25 ARM +board. +

+This base project includes a PCB edge defined as the same size as the +Raspberry-Pi PCB with the connectors placed correctly to align the two boards. +All IO present on the Raspberry-Pi board is connected to the project through the +0.1" expansion headers. +

+The board outline looks like the following: +



(c)2012 +

+(c)2012 Brian Sidebotham
+(c)2012 Kicad Developers
+ +