Pcbnew : refinements for user grig

This commit is contained in:
charras 2009-02-07 14:13:16 +00:00
parent aee56a936e
commit 1d3f2d520c
7 changed files with 50 additions and 106 deletions

View File

@ -12,8 +12,7 @@ email address.
This is mandatory in Pcbnew to handle metric user grids without error
(was unusable before, using integer grid size).
A lot of footprints uses not metric grid.
TODO:
more refinements for user grid (mainly in read/wrire config).
refinements for user grid (mainly in read/write config).
2009-Feb-06 UPDATE Dick Hollenbeck <dick@softplc.com>

View File

@ -11,6 +11,7 @@
#include "base_struct.h"
#include "sch_item_struct.h"
#include "class_base_screen.h"
#include "id.h"
/* Implement wxSize array for grid list implementation. */
#include <wx/arrimpl.cpp>
@ -356,7 +357,7 @@ void BASE_SCREEN::SetGrid( int id )
m_Grid = m_GridList[0].m_Size;
wxLogWarning( _( "Grid ID %d not in grid list, falling back to " \
"grid size( %f, %f )." ), id, m_Grid.x, m_Grid.y );
"grid size( %g, %g )." ), id, m_Grid.x, m_Grid.y );
}
void BASE_SCREEN::AddGrid( const GRID_TYPE& grid )
@ -365,16 +366,17 @@ void BASE_SCREEN::AddGrid( const GRID_TYPE& grid )
for( i = 0; i < m_GridList.GetCount(); i++ )
{
if( m_GridList[i].m_Size == grid.m_Size )
if( m_GridList[i].m_Size == grid.m_Size &&
grid.m_Id != ID_POPUP_GRID_USER)
{
wxLogDebug( wxT( "Discarding duplicate grid size( %d, %d )." ),
wxLogDebug( wxT( "Discarding duplicate grid size( %g, %g )." ),
grid.m_Size.x, grid.m_Size.y );
return;
}
if( m_GridList[i].m_Id == grid.m_Id )
{
wxLogDebug( wxT( "Changing grid ID %d from size( %d, %d ) to " \
"size( %d, %d )." ),
wxLogDebug( wxT( "Changing grid ID %d from size( %g, %g ) to " \
"size( %g, %g )." ),
grid.m_Id, m_GridList[i].m_Size.x,
m_GridList[i].m_Size.y, grid.m_Size.x, grid.m_Size.y );
m_GridList[i].m_Size = grid.m_Size;
@ -418,8 +420,8 @@ void BASE_SCREEN::AddGrid( const wxRealPoint& size, int units, int id )
y = size.y;
}
new_size = wxRealPoint( x * (double) GetInternalUnits(),
y * (double) GetInternalUnits() );
new_size.x = x * GetInternalUnits();
new_size.y = y * GetInternalUnits();
new_grid.m_Id = id;
new_grid.m_Size = new_size;

View File

@ -362,38 +362,6 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum )
continue;
}
if( stricmp( Line, "UserGridSize" ) == 0 )
{
wxString msg;
if( data )
{
msg = CONV_FROM_UTF8( data );
msg.ToDouble( &g_UserGrid.x );
}
else
continue;
data = strtok( NULL, " =\n\r" );
if( data )
{
msg = CONV_FROM_UTF8( data );
msg.ToDouble( &g_UserGrid.y );
}
else
g_UserGrid.y = g_UserGrid.x;
data = strtok( NULL, " =\n\r" );
if( data )
{
if( stricmp( data, "mm" ) == 0 )
g_UserGrid_Unit = MILLIMETRE;
else
g_UserGrid_Unit = INCHES;
GetScreen()->AddGrid( g_UserGrid, g_UserGrid_Unit,
ID_POPUP_GRID_USER );
}
continue;
}
if( stricmp( Line, "DrawSegmWidth" ) == 0 )
{
@ -512,10 +480,6 @@ static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame, BOARD* aBoard )
sprintf( text, "InternalUnit %f INCH\n", 1.0 / PCB_INTERNAL_UNIT );
fprintf( aFile, text );
sprintf( text, "UserGridSize %lf %lf %s\n", g_UserGrid.x, g_UserGrid.y,
( g_UserGrid_Unit == 0 ) ? "INCH" : "mm" );
fprintf( aFile, text );
fprintf( aFile, "ZoneGridSize %d\n", g_GridRoutingSize );
fprintf( aFile, "Layers %d\n", aBoard->GetCopperLayerCount() );

View File

@ -19,8 +19,7 @@
#include "3d_viewer.h"
// Keys used in read/write config
#define MODEDIT_CURR_GRID_X wxT( "ModEditCurrGrid_X" )
#define MODEDIT_CURR_GRID_Y wxT( "ModEditCurrGrid_Y" )
#define MODEDIT_CURR_GRID wxT( "ModEditCurrGrid" )
/********************************/
/* class WinEDA_ModuleEditFrame */
@ -188,23 +187,8 @@ WinEDA_ModuleEditFrame::WinEDA_ModuleEditFrame( wxWindow* father,
GetScreen()->SetCurItem( NULL );
GetSettings();
wxRealPoint GridSize( 500, 500 );
if( config )
{
double SizeX, SizeY;
if( config->Read( MODEDIT_CURR_GRID_X, &SizeX )
&& config->Read( MODEDIT_CURR_GRID_Y, &SizeY ) )
{
GridSize.x = SizeX;
GridSize.y = SizeY;
}
}
GetScreen()->AddGrid( g_UserGrid, g_UserGrid_Unit, ID_POPUP_GRID_USER );
GetScreen()->SetGrid( GridSize );
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
ReCreateMenuBar();
ReCreateHToolbar();
@ -212,6 +196,13 @@ WinEDA_ModuleEditFrame::WinEDA_ModuleEditFrame( wxWindow* father,
ReCreateVToolbar();
ReCreateOptToolbar();
if( config )
{
long gridselection = 1;
config->Read( MODEDIT_CURR_GRID, &gridselection );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + gridselection );
}
if( DrawPanel )
DrawPanel->m_Block_Enable = TRUE;
}
@ -244,9 +235,7 @@ void WinEDA_ModuleEditFrame::OnCloseWindow( wxCloseEvent& Event )
SaveSettings();
if( config )
{
wxRealPoint GridSize = GetScreen()->GetGrid();
config->Write( MODEDIT_CURR_GRID_X, GridSize.x );
config->Write( MODEDIT_CURR_GRID_Y, GridSize.y );
config->Write( MODEDIT_CURR_GRID, m_SelGridBox->GetSelection() );
}
Destroy();
}

View File

@ -719,31 +719,6 @@ static PARAM_CFG_INT WTraitSerigraphiePlotCfg
1, 10000 /* Min and max values*/
);
static PARAM_CFG_DOUBLE UserGrilleXCfg
(
wxT( "UserGrX" ), /* Keyword */
&g_UserGrid.x, /* Parameter address */
0.01, /* Default value */
0.0001, 100.0 /* Min and max values(inches)*/
);
static PARAM_CFG_DOUBLE UserGrilleYCfg
(
wxT( "UserGrY" ), /* Keyword */
&g_UserGrid.y, /* Parameter address */
0.01, /* Default value */
0.0001, 100.0 /* Min and max values (inches)*/
);
static PARAM_CFG_INT UserGrilleUnitCfg
(
wxT( "UserGrU" ), /* Keyword */
&g_UserGrid_Unit, /* Parameter address */
1, /* Default value */
0, 1 /* Min and max values*/
);
static PARAM_CFG_INT TimeOutCfg //Duree entre Sauvegardes auto en secondes
(
INSETUP,
@ -803,6 +778,9 @@ static PARAM_CFG_BOOL TwoSegmentTrackBuildCfg
TRUE /* Default value */
);
/* parameters in this list will be saved on request (when saving config).
*/
PARAM_CFG_BASE* ParamCfgList[] =
{
&UserLibDirBufCfg,
@ -893,9 +871,6 @@ PARAM_CFG_BASE* ParamCfgList[] =
&TexteSegmLargeurCfg,
&ModuleSegmWidthCfg,
&WTraitSerigraphiePlotCfg,
&UserGrilleXCfg,
&UserGrilleYCfg,
&UserGrilleUnitCfg,
&TimeOutCfg,
&DisplPolairCfg,
&CursorShapeCfg,

View File

@ -17,12 +17,15 @@
#include "kbool/include/kbool/booleng.h"
// Keys used in read/write config
#define PCB_CURR_GRID_X wxT( "PcbCurrGrid_X" )
#define PCB_CURR_GRID_Y wxT( "PcbCurrGrid_Y" )
#define PCB_CURR_GRID wxT( "PcbCurrGrid" )
#define PCB_MAGNETIC_PADS_OPT wxT( "PcbMagPadOpt" )
#define PCB_MAGNETIC_TRACKS_OPT wxT( "PcbMagTrackOpt" )
#define SHOW_MICROWAVE_TOOLS wxT( "ShowMicrowaveTools" )
#define PCB_USER_GRID_X wxT( "PcbUserGrid_X" )
#define PCB_USER_GRID_Y wxT( "PcbUserGrid_Y" )
#define PCB_USER_GRID_UNIT wxT( "PcbUserGrid_Unit" )
/*******************************/
/* class WinEDA_PcbFrame */
/*******************************/
@ -238,21 +241,30 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
GetSettings();
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
wxRealPoint GridSize( 500, 500 );
// Read some parameters from config
g_UserGrid.x = g_UserGrid.y = 0.5; // Default user grid size
g_UserGrid_Unit = 1; // Default user grid unit (0 = inch, 1 = mm)
wxRealPoint GridSize( 500, 500 ); // Default current grid size
if( config )
{
double SizeX, SizeY;
if( config->Read( PCB_CURR_GRID_X, &SizeX )
&& config->Read( PCB_CURR_GRID_Y, &SizeY ) )
if( config->Read( PCB_USER_GRID_X, &SizeX )
&& config->Read( PCB_USER_GRID_Y, &SizeY ) )
{
GridSize.x = SizeX;
GridSize.y = SizeY;
g_UserGrid.x = SizeX;
g_UserGrid.y = SizeY;
}
config->Read( PCB_USER_GRID_UNIT, &g_UserGrid_Unit );
config->Read( PCB_MAGNETIC_PADS_OPT, &g_MagneticPadOption );
config->Read( PCB_MAGNETIC_TRACKS_OPT, &g_MagneticTrackOption );
}
GetScreen()->AddGrid( g_UserGrid, g_UserGrid_Unit, ID_POPUP_GRID_USER );
GetScreen()->SetGrid( GridSize );
if( DrawPanel )
@ -263,6 +275,9 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
ReCreateVToolbar();
if( config )
{
long gridselection = 1;
config->Read( PCB_CURR_GRID, &gridselection );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + gridselection );
long display_microwave_tools = 0;
config->Read( SHOW_MICROWAVE_TOOLS, &display_microwave_tools );
if ( display_microwave_tools )
@ -328,7 +343,7 @@ void WinEDA_PcbFrame::OnCloseWindow( wxCloseEvent& Event )
}
}
while( screen ) // suppression flag modify pour eviter d'autres message
while( screen ) // Remove modify flag, to avoi others messages
{
screen->ClrModify();
screen = screen->Next();
@ -342,8 +357,11 @@ void WinEDA_PcbFrame::OnCloseWindow( wxCloseEvent& Event )
if( config )
{
wxRealPoint GridSize = GetScreen()->GetGrid();
config->Write( PCB_CURR_GRID_X, GridSize.x );
config->Write( PCB_CURR_GRID_Y, GridSize.y );
config->Write( PCB_USER_GRID_X, g_UserGrid.x );
config->Write( PCB_USER_GRID_Y, g_UserGrid.y );
config->Write( PCB_USER_GRID_UNIT, g_UserGrid_Unit );
config->Write( PCB_CURR_GRID, m_SelGridBox->GetSelection() );
config->Write( PCB_MAGNETIC_PADS_OPT, (long) g_MagneticPadOption );
config->Write( PCB_MAGNETIC_TRACKS_OPT, (long) g_MagneticTrackOption );
config->Write( SHOW_MICROWAVE_TOOLS, (long) m_AuxVToolBar ? 1 : 0 );

View File

@ -631,10 +631,7 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar()
msg.Printf( format.GetData(), value );
}
else
{
msg = _( "User Grid" );
}
m_SelGridBox->Append( msg );
}