moving objects into BOARD which are saved in a *.brd file, for PLUGIN access

This commit is contained in:
Dick Hollenbeck 2011-12-30 23:44:00 -06:00
parent 929d5c7a3f
commit 697f912307
57 changed files with 2735 additions and 1884 deletions

View File

@ -114,6 +114,10 @@ else()
set( PCB_COMMON_SRCS ${PCB_COMMON_SRCS} ../pcbnew/item_io.cpp ) set( PCB_COMMON_SRCS ${PCB_COMMON_SRCS} ../pcbnew/item_io.cpp )
endif() endif()
# add -DPCBNEW to compilation of these PCBNEW sources
set_source_files_properties( ${PCB_COMMON_SRCS} PROPERTIES
COMPILE_DEFINITIONS "PCBNEW"
)
add_library(pcbcommon ${PCB_COMMON_SRCS}) add_library(pcbcommon ${PCB_COMMON_SRCS})

View File

@ -35,22 +35,28 @@
#include "id.h" #include "id.h"
#define CURSOR_SIZE 12 /* size of the cross cursor. */ #define CURSOR_SIZE 12 /// size of the cross cursor.
BASE_SCREEN::BASE_SCREEN( KICAD_T aType ) : EDA_ITEM( aType ) BASE_SCREEN::BASE_SCREEN( KICAD_T aType ) :
EDA_ITEM( aType )
{ {
m_UndoRedoCountMax = 10; /* undo/Redo command Max depth, 10 is a reasonable value */ m_UndoRedoCountMax = 10; // undo/Redo command Max depth, 10 is a reasonable value
m_FirstRedraw = true; m_FirstRedraw = true;
m_ScreenNumber = 1; m_ScreenNumber = 1;
m_NumberOfScreen = 1; /* Hierarchy: Root: ScreenNumber = 1 */ m_NumberOfScreen = 1; // Hierarchy: Root: ScreenNumber = 1
m_Zoom = 32.0; m_Zoom = 32.0;
m_Grid.m_Size = wxRealPoint( 50, 50 ); /* Default grid size */ m_Grid.m_Size = wxRealPoint( 50, 50 ); // Default grid size
m_Grid.m_Id = ID_POPUP_GRID_LEVEL_50; m_Grid.m_Id = ID_POPUP_GRID_LEVEL_50;
m_Center = true; m_Center = true;
m_IsPrinting = false; m_IsPrinting = false;
m_ScrollPixelsPerUnitX = 1; m_ScrollPixelsPerUnitX = 1;
m_ScrollPixelsPerUnitY = 1; m_ScrollPixelsPerUnitY = 1;
m_FlagModified = false; // Set when any change is made on board.
m_FlagSave = false; // Used in auto save set when an auto save is required.
SetCurItem( NULL );
} }
@ -59,50 +65,24 @@ BASE_SCREEN::~BASE_SCREEN()
} }
/* void BASE_SCREEN::InitDataPoints( const wxSize& aPageSizeIU )
wxSize BASE_SCREEN::ReturnPageSize( void )
{
int internal_units = GetInternalUnits();
wxSize size = m_CurrentSheetDesc->m_Size;
size.x = (int)( (double)size.x * internal_units / 1000 );
size.y = (int)( (double)size.y * internal_units / 1000 );
return size;
}
void BASE_SCREEN::SetPageSize( wxSize& aPageSize )
{
int internal_units = GetInternalUnits();
m_CurrentSheetDesc->m_Size.x = (int) ((double)aPageSize.x * 1000 / internal_units);
m_CurrentSheetDesc->m_Size.y = (int) ((double)aPageSize.y * 1000 / internal_units);
}
*/
void BASE_SCREEN::InitDataPoints( const wxSize& aPageSizeInternalUnits )
{ {
if( m_Center ) if( m_Center )
{ {
m_crossHairPosition.x = m_crossHairPosition.y = 0; m_crossHairPosition.x = m_crossHairPosition.y = 0;
m_DrawOrg.x = -aPageSizeInternalUnits.x / 2; m_DrawOrg.x = -aPageSizeIU.x / 2;
m_DrawOrg.y = -aPageSizeInternalUnits.y / 2; m_DrawOrg.y = -aPageSizeIU.y / 2;
} }
else else
{ {
m_DrawOrg.x = m_DrawOrg.y = 0; m_DrawOrg.x = m_DrawOrg.y = 0;
m_crossHairPosition.x = aPageSizeInternalUnits.x / 2; m_crossHairPosition.x = aPageSizeIU.x / 2;
m_crossHairPosition.y = aPageSizeInternalUnits.y / 2; m_crossHairPosition.y = aPageSizeIU.y / 2;
} }
m_O_Curseur.x = m_O_Curseur.y = 0; m_O_Curseur.x = m_O_Curseur.y = 0;
SetCurItem( NULL );
m_FlagModified = false; // Set when any change is made on board.
m_FlagSave = false; // Used in auto save set when an auto save is required.
} }
@ -124,12 +104,12 @@ void BASE_SCREEN::SetScalingFactor(double aScale )
double zoom = aScale; double zoom = aScale;
// Limit zoom to max and min allowed values: // Limit zoom to max and min allowed values:
if (zoom < m_ZoomList[0]) if( zoom < m_ZoomList[0] )
zoom = m_ZoomList[0]; zoom = m_ZoomList[0];
int idxmax = m_ZoomList.GetCount() - 1; int idxmax = m_ZoomList.GetCount() - 1;
if (zoom > m_ZoomList[idxmax]) if( zoom > m_ZoomList[idxmax] )
zoom = m_ZoomList[idxmax]; zoom = m_ZoomList[idxmax];
SetZoom( zoom ); SetZoom( zoom );
@ -151,13 +131,13 @@ bool BASE_SCREEN::SetFirstZoom()
{ {
if( m_Zoom != 1.0 ) if( m_Zoom != 1.0 )
{ {
m_Zoom = 1.0; SetZoom( 1.0 );
return true; return true;
} }
} }
else if( m_Zoom != m_ZoomList[0] ) else if( m_Zoom != m_ZoomList[0] )
{ {
m_Zoom = m_ZoomList[0]; SetZoom( m_ZoomList[0] );
return true; return true;
} }
@ -193,7 +173,7 @@ bool BASE_SCREEN::SetNextZoom()
{ {
if( m_Zoom < m_ZoomList[i] ) if( m_Zoom < m_ZoomList[i] )
{ {
m_Zoom = m_ZoomList[i]; SetZoom( m_ZoomList[i] );
return true; return true;
} }
} }
@ -213,7 +193,7 @@ bool BASE_SCREEN::SetPreviousZoom()
{ {
if( m_Zoom > m_ZoomList[i - 1] ) if( m_Zoom > m_ZoomList[i - 1] )
{ {
m_Zoom = m_ZoomList[i - 1]; SetZoom( m_ZoomList[i - 1] );
return true; return true;
} }
} }
@ -227,7 +207,7 @@ bool BASE_SCREEN::SetLastZoom()
if( m_ZoomList.IsEmpty() || m_Zoom == m_ZoomList.Last() ) if( m_ZoomList.IsEmpty() || m_Zoom == m_ZoomList.Last() )
return false; return false;
m_Zoom = m_ZoomList.Last(); SetZoom( m_ZoomList.Last() );
return true; return true;
} }
@ -466,7 +446,7 @@ void BASE_SCREEN::PushCommandToUndoList( PICKED_ITEMS_LIST* aNewitem )
{ {
m_UndoList.PushCommand( aNewitem ); m_UndoList.PushCommand( aNewitem );
/* Delete the extra items, if count max reached */ // Delete the extra items, if count max reached
int extraitems = GetUndoCommandCount() - m_UndoRedoCountMax; int extraitems = GetUndoCommandCount() - m_UndoRedoCountMax;
if( extraitems > 0 ) // Delete the extra items if( extraitems > 0 ) // Delete the extra items
@ -478,7 +458,7 @@ void BASE_SCREEN::PushCommandToRedoList( PICKED_ITEMS_LIST* aNewitem )
{ {
m_RedoList.PushCommand( aNewitem ); m_RedoList.PushCommand( aNewitem );
/* Delete the extra items, if count max reached */ // Delete the extra items, if count max reached
int extraitems = GetRedoCommandCount() - m_UndoRedoCountMax; int extraitems = GetRedoCommandCount() - m_UndoRedoCountMax;
if( extraitems > 0 ) // Delete the extra items if( extraitems > 0 ) // Delete the extra items

View File

@ -84,8 +84,10 @@ EDA_BASE_FRAME::EDA_BASE_FRAME( wxWindow* father,
SetSize( 0, 0, minsize.x, minsize.y ); SetSize( 0, 0, minsize.x, minsize.y );
// Create child subwindows. // Create child subwindows.
GetClientSize( &m_FrameSize.x, &m_FrameSize.y ); /* dimensions of the user area of the main
* window */ // Dimensions of the user area of the main window.
GetClientSize( &m_FrameSize.x, &m_FrameSize.y );
m_FramePos.x = m_FramePos.y = 0; m_FramePos.x = m_FramePos.y = 0;
m_FrameSize.y -= m_MsgFrameHeight; m_FrameSize.y -= m_MsgFrameHeight;
@ -180,12 +182,16 @@ void EDA_BASE_FRAME::LoadSettings()
{ {
text = m_FrameName + wxT( "Pos_x" ); text = m_FrameName + wxT( "Pos_x" );
config->Read( text, &m_FramePos.x ); config->Read( text, &m_FramePos.x );
text = m_FrameName + wxT( "Pos_y" ); text = m_FrameName + wxT( "Pos_y" );
config->Read( text, &m_FramePos.y ); config->Read( text, &m_FramePos.y );
text = m_FrameName + wxT( "Size_x" ); text = m_FrameName + wxT( "Size_x" );
config->Read( text, &m_FrameSize.x, 600 ); config->Read( text, &m_FrameSize.x, 600 );
text = m_FrameName + wxT( "Size_y" ); text = m_FrameName + wxT( "Size_y" );
config->Read( text, &m_FrameSize.y, 400 ); config->Read( text, &m_FrameSize.y, 400 );
text = m_FrameName + wxT( "Maximized" ); text = m_FrameName + wxT( "Maximized" );
config->Read( text, &maximized, 0 ); config->Read( text, &maximized, 0 );
@ -214,10 +220,8 @@ void EDA_BASE_FRAME::LoadSettings()
void EDA_BASE_FRAME::SaveSettings() void EDA_BASE_FRAME::SaveSettings()
{ {
wxString text; wxString text;
wxConfig* config; wxConfig* config = wxGetApp().GetSettings();
config = wxGetApp().GetSettings();
if( ( config == NULL ) || IsIconized() ) if( ( config == NULL ) || IsIconized() )
return; return;
@ -227,12 +231,16 @@ void EDA_BASE_FRAME::SaveSettings()
text = m_FrameName + wxT( "Pos_x" ); text = m_FrameName + wxT( "Pos_x" );
config->Write( text, (long) m_FramePos.x ); config->Write( text, (long) m_FramePos.x );
text = m_FrameName + wxT( "Pos_y" ); text = m_FrameName + wxT( "Pos_y" );
config->Write( text, (long) m_FramePos.y ); config->Write( text, (long) m_FramePos.y );
text = m_FrameName + wxT( "Size_x" ); text = m_FrameName + wxT( "Size_x" );
config->Write( text, (long) m_FrameSize.x ); config->Write( text, (long) m_FrameSize.x );
text = m_FrameName + wxT( "Size_y" ); text = m_FrameName + wxT( "Size_y" );
config->Write( text, (long) m_FrameSize.y ); config->Write( text, (long) m_FrameSize.y );
text = m_FrameName + wxT( "Maximized" ); text = m_FrameName + wxT( "Maximized" );
config->Write( text, IsMaximized() ); config->Write( text, IsMaximized() );
@ -270,7 +278,7 @@ void EDA_BASE_FRAME::DisplayActivity( int PerCent, const wxString& Text )
void EDA_BASE_FRAME::UpdateFileHistory( const wxString& FullFileName, void EDA_BASE_FRAME::UpdateFileHistory( const wxString& FullFileName,
wxFileHistory * aFileHistory ) wxFileHistory * aFileHistory )
{ {
wxFileHistory * fileHistory = aFileHistory; wxFileHistory* fileHistory = aFileHistory;
if( fileHistory == NULL ) if( fileHistory == NULL )
fileHistory = & wxGetApp().GetFileHistory(); fileHistory = & wxGetApp().GetFileHistory();
@ -284,7 +292,7 @@ wxString EDA_BASE_FRAME::GetFileFromHistory( int cmdId, const wxString& type,
{ {
wxString fn, msg; wxString fn, msg;
size_t i; size_t i;
wxFileHistory * fileHistory = aFileHistory; wxFileHistory* fileHistory = aFileHistory;
if( fileHistory == NULL ) if( fileHistory == NULL )
fileHistory = & wxGetApp().GetFileHistory(); fileHistory = & wxGetApp().GetFileHistory();

View File

@ -119,7 +119,6 @@ void PLOTTER::center_square( const wxPoint& position, int diametre, FILL_T fill
corner_list.push_back( corner ); corner_list.push_back( corner );
PlotPoly( corner_list, fill ); PlotPoly( corner_list, fill );
} }
@ -428,7 +427,7 @@ void PLOTTER::SetPageSettings( const PAGE_INFO& aPageSettings )
wxASSERT( !output_file ); wxASSERT( !output_file );
pageInfo = aPageSettings; pageInfo = aPageSettings;
// PAGE_INFO is in mils, plotter works with decimals // PAGE_INFO is in mils, plotter works with deci-mils
paper_size = pageInfo.GetSizeMils() * 10; paper_size = pageInfo.GetSizeMils() * 10;
} }

View File

@ -197,19 +197,32 @@ double PAGE_INFO::s_user_width = 17.0;
double PAGE_INFO::s_user_height = 11.0; double PAGE_INFO::s_user_height = 11.0;
static const PAGE_INFO pageUser( wxSize( 17000, 11000 ), wxPoint( 0, 0 ), wxT( "User" ) ); static const PAGE_INFO pageUser( wxSize( 17000, 11000 ), wxPoint( 0, 0 ), wxT( "User" ) );
/* static const PAGE_INFO* stdPageSizes[] = {
static const PAGE_INFO* pageSizes[] = &pageA4,
{ &pageA3,
&pageA4, &pageA3, &pageA2, &pageA1, &pageA0, &pageA2,
&pageA, &pageB, &pageC, &pageD, &pageE, &pageUser, &pageA1,
&pageA0,
&pageA,
&pageB,
&pageC,
&pageD,
&pageE,
// &pageGERBER, omitted, not standard
&pageUser,
}; };
PAGE_INFOS PAGE_INFO::GetStandardSizes() wxArrayString PAGE_INFO::GetStandardSizes()
{ {
return PAGE_INFOS( pageSizes, pageSizes + DIM( pageSizes ) ); wxArrayString ret;
for( unsigned i=0; i < DIM( stdPageSizes ); ++i )
ret.Add( stdPageSizes[i]->GetType() );
return ret;
} }
*/
bool PAGE_INFO::SetType( const wxString& aType ) bool PAGE_INFO::SetType( const wxString& aType )
{ {
@ -235,6 +248,8 @@ bool PAGE_INFO::SetType( const wxString& aType )
*this = pageD; *this = pageD;
else if( aType == pageE.GetType() ) else if( aType == pageE.GetType() )
*this = pageE; *this = pageE;
else if( aType == pageGERBER.GetType() )
*this = pageGERBER;
else if( aType == pageUser.GetType() ) else if( aType == pageUser.GetType() )
{ {
*this = pageUser; *this = pageUser;
@ -278,14 +293,18 @@ PAGE_INFO::PAGE_INFO( const wxString& aType )
void PAGE_INFO::SetWidthInches( double aWidthInInches ) void PAGE_INFO::SetWidthInches( double aWidthInInches )
{ {
// limit resolution to 1/1000th of an inch // limit resolution to 1/1000th of an inch
m_widthInches = double( int( aWidthInInches * 1000 + 500 ) / 1000 ); int mils = aWidthInInches * 1000 + 0.5;
m_widthInches = mils / 1000.0;
} }
void PAGE_INFO::SetHeightInches( double aHeightInInches ) void PAGE_INFO::SetHeightInches( double aHeightInInches )
{ {
// limit resolution to 1/1000th of an inch // limit resolution to 1/1000th of an inch
m_heightInches = double( int( aHeightInInches * 1000 + 500 ) / 1000 ); int mils = aHeightInInches * 1000 + 0.5;
m_heightInches = mils / 1000.0;
} }

View File

@ -12,19 +12,17 @@
#include "macros.h" #include "macros.h"
#include "kicad_string.h" #include "kicad_string.h"
/* HPGL scale factor. */ // HPGL scale factor.
const double SCALE_HPGL = 0.102041; const double SCALE_HPGL = 0.102041;
/* Set the plot offset for the current plotting
*/
void HPGL_PLOTTER::set_viewport( wxPoint aOffset, double aScale, bool aMirror ) void HPGL_PLOTTER::set_viewport( wxPoint aOffset, double aScale, bool aMirror )
{ {
wxASSERT( !output_file ); wxASSERT( !output_file );
plot_offset = aOffset; plot_offset = aOffset;
plot_scale = aScale; plot_scale = aScale;
device_scale = SCALE_HPGL; device_scale = SCALE_HPGL;
set_default_line_width( 100 ); /* default line width in 1 / 1000 inch */ set_default_line_width( 100 ); // default line width in 1 / 1000 inch
plotMirror = aMirror; plotMirror = aMirror;
} }
@ -88,7 +86,7 @@ void HPGL_PLOTTER::PlotPoly( std::vector< wxPoint >& aCornerList, FILL_T aFill,
for( unsigned ii = 1; ii < aCornerList.size(); ii++ ) for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
line_to( aCornerList[ii] ); line_to( aCornerList[ii] );
/* Close polygon if filled. */ // Close polygon if filled.
if( aFill ) if( aFill )
{ {
int ii = aCornerList.size() - 1; int ii = aCornerList.size() - 1;
@ -172,16 +170,19 @@ void HPGL_PLOTTER::pen_control( int plume )
void HPGL_PLOTTER::pen_to( wxPoint pos, char plume ) void HPGL_PLOTTER::pen_to( wxPoint pos, char plume )
{ {
wxASSERT( output_file ); wxASSERT( output_file );
if( plume == 'Z' ) if( plume == 'Z' )
{ {
pen_control( 'Z' ); pen_control( 'Z' );
return; return;
} }
pen_control( plume ); pen_control( plume );
user_to_device_coordinates( pos ); user_to_device_coordinates( pos );
if( pen_lastpos != pos ) if( pen_lastpos != pos )
fprintf( output_file, "PA %d,%d;\n", pos.x, pos.y ); fprintf( output_file, "PA %d,%d;\n", pos.x, pos.y );
pen_lastpos = pos; pen_lastpos = pos;
} }
@ -246,7 +247,7 @@ void HPGL_PLOTTER::arc( wxPoint centre, int StAngle, int EndAngle, int rayon,
angle = (StAngle - EndAngle) / 10.0; angle = (StAngle - EndAngle) / 10.0;
else else
angle = (EndAngle - StAngle) / 10.0; angle = (EndAngle - StAngle) / 10.0;
/* Calculate start point, */ // Calculate start point,
cmap.x = (int) ( centre.x + ( rayon * cos( StAngle * M_PI / 1800 ) ) ); cmap.x = (int) ( centre.x + ( rayon * cos( StAngle * M_PI / 1800 ) ) );
cmap.y = (int) ( centre.y - ( rayon * sin( StAngle * M_PI / 1800 ) ) ); cmap.y = (int) ( centre.y - ( rayon * sin( StAngle * M_PI / 1800 ) ) );
user_to_device_coordinates( cmap ); user_to_device_coordinates( cmap );
@ -280,7 +281,7 @@ void HPGL_PLOTTER::flash_pad_oval( wxPoint pos, wxSize size, int orient,
if( orient >= 3600 ) if( orient >= 3600 )
orient -= 3600; orient -= 3600;
} }
deltaxy = size.y - size.x; /* distance between centers of the oval */ deltaxy = size.y - size.x; // distance between centers of the oval
if( trace_mode == FILLED ) if( trace_mode == FILLED )
{ {
@ -295,7 +296,7 @@ void HPGL_PLOTTER::flash_pad_oval( wxPoint pos, wxSize size, int orient,
flash_pad_circle( wxPoint( cx + pos.x, flash_pad_circle( wxPoint( cx + pos.x,
cy + pos.y ), size.x, trace_mode ); cy + pos.y ), size.x, trace_mode );
} }
else /* Plot in SKETCH mode. */ else // Plot in SKETCH mode.
{ {
sketch_oval( pos, size, orient, wxRound( pen_diameter ) ); sketch_oval( pos, size, orient, wxRound( pen_diameter ) );
} }
@ -329,7 +330,7 @@ void HPGL_PLOTTER::flash_pad_circle( wxPoint pos, int diametre,
fprintf( output_file, "PA %d,%d;CI %d;\n", pos.x, pos.y, rsize.x ); fprintf( output_file, "PA %d,%d;CI %d;\n", pos.x, pos.y, rsize.x );
if( trace_mode == FILLED ) /* Plot in filled mode. */ if( trace_mode == FILLED ) // Plot in filled mode.
{ {
if( delta > 0 ) if( delta > 0 )
{ {
@ -377,7 +378,7 @@ void HPGL_PLOTTER::flash_pad_rect( wxPoint pos, wxSize padsize,
if( size.y < 0 ) if( size.y < 0 )
size.y = 0; size.y = 0;
/* If a dimension is zero, the trace is reduced to 1 line. */ // If a dimension is zero, the trace is reduced to 1 line.
if( size.x == 0 ) if( size.x == 0 )
{ {
ox = pos.x; ox = pos.x;
@ -427,7 +428,7 @@ void HPGL_PLOTTER::flash_pad_rect( wxPoint pos, wxSize padsize,
if( trace_mode == FILLED ) if( trace_mode == FILLED )
{ {
/* Plot in filled mode. */ // Plot in filled mode.
delta = (int) (pen_diameter - pen_overlap); delta = (int) (pen_diameter - pen_overlap);
if( delta > 0 ) if( delta > 0 )
@ -509,11 +510,11 @@ void HPGL_PLOTTER::flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4],
{ {
// TODO: replace this par the HPGL plot polygon. // TODO: replace this par the HPGL plot polygon.
int jj; int jj;
/* Fill the shape */ // Fill the shape
move = wxRound( pen_diameter - pen_overlap ); move = wxRound( pen_diameter - pen_overlap );
/* Calculate fill height. */ // Calculate fill height.
if( polygone[0].y == polygone[3].y ) /* Horizontal */ if( polygone[0].y == polygone[3].y ) // Horizontal
{ {
jj = polygone[3].y - (int) ( pen_diameter + ( 2 * pen_overlap ) ); jj = polygone[3].y - (int) ( pen_diameter + ( 2 * pen_overlap ) );
} }
@ -522,10 +523,10 @@ void HPGL_PLOTTER::flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4],
jj = polygone[3].x - (int) ( pen_diameter + ( 2 * pen_overlap ) ); jj = polygone[3].x - (int) ( pen_diameter + ( 2 * pen_overlap ) );
} }
/* Calculation of dd = number of segments was traced to fill. */ // Calculation of dd = number of segments was traced to fill.
jj = jj / (int) ( pen_diameter - pen_overlap ); jj = jj / (int) ( pen_diameter - pen_overlap );
/* Trace the outline. */ // Trace the outline.
for( ; jj > 0; jj-- ) for( ; jj > 0; jj-- )
{ {
polygone[0].x += move; polygone[0].x += move;
@ -537,7 +538,7 @@ void HPGL_PLOTTER::flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4],
polygone[3].x -= move; polygone[3].x -= move;
polygone[3].y -= move; polygone[3].y -= move;
/* Test for crossed vertexes. */ // Test for crossed vertexes.
if( polygone[0].x > polygone[3].x ) /* X axis intersection on if( polygone[0].x > polygone[3].x ) /* X axis intersection on
*vertexes 0 and 3 */ *vertexes 0 and 3 */
{ {

View File

@ -21,7 +21,8 @@
*/ */
void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen ) void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
{ {
#define WSTEXTSIZE 50 // Text size in mils #define WSTEXTSIZE 50 // Text size in mils
const PAGE_INFO& pageInfo = GetPageSettings(); const PAGE_INFO& pageInfo = GetPageSettings();
wxSize pageSize = pageInfo.GetSizeMils(); // mils wxSize pageSize = pageInfo.GetSizeMils(); // mils
int xg, yg; int xg, yg;
@ -29,12 +30,13 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
wxPoint pos, ref; wxPoint pos, ref;
EDA_Colors color; EDA_Colors color;
/* Scale to convert dimension in 1/1000 in into internal units // paper is sized in mils. Here is a conversion factor to
* (1/1000 inc for Eeschema, 1/10000 for Pcbnew. */ // scale mils to internal units.
int conv_unit = screen->GetInternalUnits() / 1000; int conv_unit = screen->GetInternalUnits() / 1000;
wxString msg; wxString msg;
wxSize text_size; wxSize text_size;
#if defined(KICAD_GOST) #if defined(KICAD_GOST)
wxSize text_size2; wxSize text_size2;
wxSize text_size3; wxSize text_size3;
@ -43,16 +45,18 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
int UpperLimit = VARIABLE_BLOCK_START_POSITION; int UpperLimit = VARIABLE_BLOCK_START_POSITION;
bool bold = false; bool bold = false;
#endif #endif
bool italic = false;
bool italic = false;
bool thickness = 0; //@todo : use current pen bool thickness = 0; //@todo : use current pen
color = BLACK; color = BLACK;
plotter->set_color( color ); plotter->set_color( color );
/* Plot edge. */ // Plot edge.
ref.x = pageInfo.GetLeftMarginMils() * conv_unit; ref.x = pageInfo.GetLeftMarginMils() * conv_unit;
ref.y = pageInfo.GetTopMarginMils() * conv_unit; ref.y = pageInfo.GetTopMarginMils() * conv_unit;
xg = ( pageSize.x - pageInfo.GetRightMarginMils() ) * conv_unit;
xg = ( pageSize.x - pageInfo.GetRightMarginMils() ) * conv_unit;
yg = ( pageSize.y - pageInfo.GetBottomMarginMils() ) * conv_unit; yg = ( pageSize.y - pageInfo.GetBottomMarginMils() ) * conv_unit;
#if defined(KICAD_GOST) #if defined(KICAD_GOST)
@ -67,22 +71,30 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
pos.y = yg; pos.y = yg;
plotter->line_to( pos ); plotter->line_to( pos );
plotter->finish_to( ref ); plotter->finish_to( ref );
#else #else
for( unsigned ii = 0; ii < 2; ii++ ) for( unsigned ii = 0; ii < 2; ii++ )
{ {
plotter->move_to( ref ); plotter->move_to( ref );
pos.x = xg; pos.x = xg;
pos.y = ref.y; pos.y = ref.y;
plotter->line_to( pos ); plotter->line_to( pos );
pos.x = xg; pos.x = xg;
pos.y = yg; pos.y = yg;
plotter->line_to( pos ); plotter->line_to( pos );
pos.x = ref.x; pos.x = ref.x;
pos.y = yg; pos.y = yg;
plotter->line_to( pos ); plotter->line_to( pos );
plotter->finish_to( ref ); plotter->finish_to( ref );
ref.x += GRID_REF_W * conv_unit; ref.x += GRID_REF_W * conv_unit;
ref.y += GRID_REF_W * conv_unit; ref.y += GRID_REF_W * conv_unit;
xg -= GRID_REF_W * conv_unit; xg -= GRID_REF_W * conv_unit;
yg -= GRID_REF_W * conv_unit; yg -= GRID_REF_W * conv_unit;
} }
@ -151,7 +163,7 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
#else #else
/* Plot legend along the X axis. */ // Plot legend along the X axis.
int ipas = ( xg - ref.x ) / PAS_REF; int ipas = ( xg - ref.x ) / PAS_REF;
int gxpas = ( xg - ref.x ) / ipas; int gxpas = ( xg - ref.x ) / ipas;
for( int ii = ref.x + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- ) for( int ii = ref.x + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- )
@ -193,7 +205,7 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
thickness, italic, false ); thickness, italic, false );
} }
/* Plot legend along the Y axis. */ // Plot legend along the Y axis.
ipas = ( yg - ref.y ) / PAS_REF; ipas = ( yg - ref.y ) / PAS_REF;
int gypas = ( yg - ref.y ) / ipas; int gypas = ( yg - ref.y ) / ipas;
for( int ii = ref.y + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- ) for( int ii = ref.y + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- )
@ -237,7 +249,7 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
#endif #endif
/* Plot the worksheet. */ // Plot the worksheet.
text_size.x = SIZETEXT * conv_unit; text_size.x = SIZETEXT * conv_unit;
text_size.y = SIZETEXT * conv_unit; text_size.y = SIZETEXT * conv_unit;
@ -248,6 +260,7 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
text_size3.y = SIZETEXT * conv_unit * 3; text_size3.y = SIZETEXT * conv_unit * 3;
text_size1_5.x = SIZETEXT * conv_unit * 1.5; text_size1_5.x = SIZETEXT * conv_unit * 1.5;
text_size1_5.y = SIZETEXT * conv_unit * 1.5; text_size1_5.y = SIZETEXT * conv_unit * 1.5;
ref.x = pageSize.x - pageInfo.GetRightMarginMils(); ref.x = pageSize.x - pageInfo.GetRightMarginMils();
ref.y = pageSize.y - pageInfo.GetBottomMarginMils(); ref.y = pageSize.y - pageInfo.GetBottomMarginMils();
@ -401,7 +414,7 @@ void EDA_DRAW_FRAME::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
switch( WsItem->m_Type ) switch( WsItem->m_Type )
{ {
case WS_CADRE: case WS_CADRE:
/* Begin list number > 1 */ // Begin list number > 1
msg = screen->m_Commentaire1; msg = screen->m_Commentaire1;
if( !msg.IsEmpty() ) if( !msg.IsEmpty() )
{ {

View File

@ -16,6 +16,7 @@
#include "wxstruct.h" #include "wxstruct.h"
#include "wx/valgen.h" #include "wx/valgen.h"
#include <wx/tokenzr.h>
#ifdef EESCHEMA #ifdef EESCHEMA
#include "general.h" #include "general.h"
@ -66,6 +67,7 @@ void DIALOG_PAGES_SETTINGS::initDialog()
wxString format = m_TextSheetCount->GetLabel(); wxString format = m_TextSheetCount->GetLabel();
msg.Printf( format, m_Screen->m_NumberOfScreen ); msg.Printf( format, m_Screen->m_NumberOfScreen );
m_TextSheetCount->SetLabel( msg ); m_TextSheetCount->SetLabel( msg );
format = m_TextSheetNumber->GetLabel(); format = m_TextSheetNumber->GetLabel();
msg.Printf( format, m_Screen->m_ScreenNumber ); msg.Printf( format, m_Screen->m_ScreenNumber );
m_TextSheetNumber->SetLabel( msg ); m_TextSheetNumber->SetLabel( msg );
@ -192,6 +194,7 @@ void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event )
if( radioSelection < 0 ) if( radioSelection < 0 )
radioSelection = 0; radioSelection = 0;
// wxFormBuilder must use "A4", "A3", etc for choices, in all languages/translations
wxString paperType = m_PageSizeBox->GetString( radioSelection ); wxString paperType = m_PageSizeBox->GetString( radioSelection );
m_page.SetType( paperType ); m_page.SetType( paperType );
@ -220,13 +223,13 @@ void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event )
} }
#ifdef EESCHEMA #ifdef EESCHEMA
/* Exports settings to other sheets if requested: */ // Exports settings to other sheets if requested:
SCH_SCREEN* screen; SCH_SCREEN* screen;
/* Build the screen list */ // Build the screen list
SCH_SCREENS ScreenList; SCH_SCREENS ScreenList;
/* Update the datas */ // Update the datas
for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
{ {
if( screen == m_Screen ) if( screen == m_Screen )
@ -265,12 +268,24 @@ void DIALOG_PAGES_SETTINGS::setCurrentPageSizeSelection()
{ {
wxString curPaperType = m_page.GetType(); wxString curPaperType = m_page.GetType();
// use wxFormBuilder to store the sheet type in the wxRadioButton's label
// i.e. "A4", "A3", etc, anywhere within the text of the label.
D(printf("m_PageSizeBox->GetCount() = %d\n", (int) m_PageSizeBox->GetCount() );)
// search all the child wxRadioButtons for a label containing our paper type
for( unsigned i = 0; i < m_PageSizeBox->GetCount(); ++i ) for( unsigned i = 0; i < m_PageSizeBox->GetCount(); ++i )
{ {
if( m_PageSizeBox->GetString( i ) == curPaperType ) // parse each label looking for curPaperType within it
wxStringTokenizer st( m_PageSizeBox->GetString( i ) );
while( st.HasMoreTokens() )
{ {
m_PageSizeBox->SetSelection( i ); if( st.GetNextToken() == curPaperType )
return; {
m_PageSizeBox->SetSelection( i );
return;
}
} }
} }

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Jun 6 2011)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -28,7 +28,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
LeftColumnSizer->SetFlexibleDirection( wxBOTH ); LeftColumnSizer->SetFlexibleDirection( wxBOTH );
LeftColumnSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); LeftColumnSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
wxString m_PageSizeBoxChoices[] = { _("Size A4"), _("Size A3"), _("Size A2"), _("Size A1"), _("Size A0"), _("Size A"), _("Size B"), _("Size C"), _("Size D"), _("Size E"), _("User size") }; wxString m_PageSizeBoxChoices[] = { _("A4"), _("A3"), _("A2"), _("A1"), _("A0"), _("A"), _("B"), _("C"), _("D"), _("E"), _("User") };
int m_PageSizeBoxNChoices = sizeof( m_PageSizeBoxChoices ) / sizeof( wxString ); int m_PageSizeBoxNChoices = sizeof( m_PageSizeBoxChoices ) / sizeof( wxString );
m_PageSizeBox = new wxRadioBox( this, wxID_ANY, _("Page Size:"), wxDefaultPosition, wxDefaultSize, m_PageSizeBoxNChoices, m_PageSizeBoxChoices, 1, wxRA_SPECIFY_COLS ); m_PageSizeBox = new wxRadioBox( this, wxID_ANY, _("Page Size:"), wxDefaultPosition, wxDefaultSize, m_PageSizeBoxNChoices, m_PageSizeBoxChoices, 1, wxRA_SPECIFY_COLS );
m_PageSizeBox->SetSelection( 1 ); m_PageSizeBox->SetSelection( 1 );
@ -108,7 +108,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
RevisionSizer->Add( m_TextRevision, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); RevisionSizer->Add( m_TextRevision, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_RevisionExport = new wxCheckBox( this, ID_CHECKBOX_REVISION, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); m_RevisionExport = new wxCheckBox( this, ID_CHECKBOX_REVISION, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
RevisionSizer->Add( m_RevisionExport, 0, wxALL, 5 ); RevisionSizer->Add( m_RevisionExport, 0, wxALL, 5 );
RightColumnSizer->Add( RevisionSizer, 1, wxEXPAND, 5 ); RightColumnSizer->Add( RevisionSizer, 1, wxEXPAND, 5 );
@ -122,7 +121,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
TitleSizer->Add( m_TextTitle, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); TitleSizer->Add( m_TextTitle, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_TitleExport = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); m_TitleExport = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
TitleSizer->Add( m_TitleExport, 0, wxALL, 5 ); TitleSizer->Add( m_TitleExport, 0, wxALL, 5 );
RightColumnSizer->Add( TitleSizer, 1, wxEXPAND, 5 ); RightColumnSizer->Add( TitleSizer, 1, wxEXPAND, 5 );
@ -136,7 +134,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
CompanySizer->Add( m_TextCompany, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); CompanySizer->Add( m_TextCompany, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_CompanyExport = new wxCheckBox( this, ID_CHECKBOX_COMPANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); m_CompanyExport = new wxCheckBox( this, ID_CHECKBOX_COMPANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
CompanySizer->Add( m_CompanyExport, 0, wxALL, 5 ); CompanySizer->Add( m_CompanyExport, 0, wxALL, 5 );
RightColumnSizer->Add( CompanySizer, 1, wxEXPAND, 5 ); RightColumnSizer->Add( CompanySizer, 1, wxEXPAND, 5 );
@ -150,7 +147,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
Comment1Sizer->Add( m_TextComment1, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); Comment1Sizer->Add( m_TextComment1, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_Comment1Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT1, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); m_Comment1Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT1, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
Comment1Sizer->Add( m_Comment1Export, 0, wxALL, 5 ); Comment1Sizer->Add( m_Comment1Export, 0, wxALL, 5 );
RightColumnSizer->Add( Comment1Sizer, 1, wxEXPAND, 5 ); RightColumnSizer->Add( Comment1Sizer, 1, wxEXPAND, 5 );
@ -164,7 +160,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
Comment2Sizer->Add( m_TextComment2, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); Comment2Sizer->Add( m_TextComment2, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_Comment2Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT2, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); m_Comment2Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT2, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
Comment2Sizer->Add( m_Comment2Export, 0, wxALL, 5 ); Comment2Sizer->Add( m_Comment2Export, 0, wxALL, 5 );
RightColumnSizer->Add( Comment2Sizer, 1, wxEXPAND, 5 ); RightColumnSizer->Add( Comment2Sizer, 1, wxEXPAND, 5 );
@ -178,7 +173,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
Comment3Sizer->Add( m_TextComment3, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); Comment3Sizer->Add( m_TextComment3, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_Comment3Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT3, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); m_Comment3Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT3, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
Comment3Sizer->Add( m_Comment3Export, 0, wxALL, 5 ); Comment3Sizer->Add( m_Comment3Export, 0, wxALL, 5 );
RightColumnSizer->Add( Comment3Sizer, 1, wxEXPAND, 5 ); RightColumnSizer->Add( Comment3Sizer, 1, wxEXPAND, 5 );
@ -192,7 +186,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
Comment4Sizer->Add( m_TextComment4, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); Comment4Sizer->Add( m_TextComment4, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_Comment4Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT4, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); m_Comment4Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT4, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
Comment4Sizer->Add( m_Comment4Export, 0, wxALL, 5 ); Comment4Sizer->Add( m_Comment4Export, 0, wxALL, 5 );
RightColumnSizer->Add( Comment4Sizer, 1, wxEXPAND, 5 ); RightColumnSizer->Add( Comment4Sizer, 1, wxEXPAND, 5 );
@ -230,4 +223,5 @@ DIALOG_PAGES_SETTINGS_BASE::~DIALOG_PAGES_SETTINGS_BASE()
m_TitleExport->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCheckboxTitleClick ), NULL, this ); m_TitleExport->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCheckboxTitleClick ), NULL, this );
m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCancelClick ), NULL, this ); m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCancelClick ), NULL, this );
m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this ); m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this );
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Jun 6 2011)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -80,16 +80,17 @@ class DIALOG_PAGES_SETTINGS_BASE : public wxDialog
wxButton* m_sdbSizer1Cancel; wxButton* m_sdbSizer1Cancel;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnCloseWindow( wxCloseEvent& event ){ event.Skip(); } virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }
virtual void OnTextctrlUserPageSizeXTextUpdated( wxCommandEvent& event ){ event.Skip(); } virtual void OnTextctrlUserPageSizeXTextUpdated( wxCommandEvent& event ) { event.Skip(); }
virtual void OnTextctrlUserPageSizeYTextUpdated( wxCommandEvent& event ){ event.Skip(); } virtual void OnTextctrlUserPageSizeYTextUpdated( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCheckboxTitleClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckboxTitleClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
public: public:
DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Page Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 439,497 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Page Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 439,497 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_PAGES_SETTINGS_BASE(); ~DIALOG_PAGES_SETTINGS_BASE();
}; };

View File

@ -51,7 +51,7 @@
static const wxString traceScrollSettings( wxT( "KicadScrollSettings" ) ); static const wxString traceScrollSettings( wxT( "KicadScrollSettings" ) );
/* Configuration entry names. */ // Configuration entry names.
static const wxString CursorShapeEntryKeyword( wxT( "CursorShape" ) ); static const wxString CursorShapeEntryKeyword( wxT( "CursorShape" ) );
static const wxString ShowGridEntryKeyword( wxT( "ShowGrid" ) ); static const wxString ShowGridEntryKeyword( wxT( "ShowGrid" ) );
static const wxString GridColorEntryKeyword( wxT( "GridColor" ) ); static const wxString GridColorEntryKeyword( wxT( "GridColor" ) );
@ -115,7 +115,7 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* father, int idtype, const wxString& ti
SetSizeHints( minsize.x, minsize.y, -1, -1, -1, -1 ); SetSizeHints( minsize.x, minsize.y, -1, -1, -1, -1 );
/* Make sure window has a sane minimum size. */ // Make sure window has a sane minimum size.
if( ( size.x < minsize.x ) || ( size.y < minsize.y ) ) if( ( size.x < minsize.x ) || ( size.y < minsize.y ) )
SetSize( 0, 0, minsize.x, minsize.y ); SetSize( 0, 0, minsize.x, minsize.y );
@ -748,12 +748,12 @@ void EDA_DRAW_FRAME::UpdateStatusBar()
if( !screen ) if( !screen )
return; return;
/* Display Zoom level: zoom = zoom_coeff/ZoomScalar */ // Display Zoom level: zoom = zoom_coeff/ZoomScalar
Line.Printf( wxT( "Z %g" ), screen->GetZoom() ); Line.Printf( wxT( "Z %g" ), screen->GetZoom() );
SetStatusText( Line, 1 ); SetStatusText( Line, 1 );
/* Display absolute coordinates: */ // Display absolute coordinates:
double dXpos = To_User_Unit( g_UserUnit, screen->GetCrossHairPosition().x, m_internalUnits ); double dXpos = To_User_Unit( g_UserUnit, screen->GetCrossHairPosition().x, m_internalUnits );
double dYpos = To_User_Unit( g_UserUnit, screen->GetCrossHairPosition().y, m_internalUnits ); double dYpos = To_User_Unit( g_UserUnit, screen->GetCrossHairPosition().y, m_internalUnits );
@ -768,7 +768,7 @@ void EDA_DRAW_FRAME::UpdateStatusBar()
dYpos = RoundTo0( dYpos, (double)( m_internalUnits / 10 ) ); dYpos = RoundTo0( dYpos, (double)( m_internalUnits / 10 ) );
} }
/* The following sadly is an if Eeschema/if Pcbnew */ // The following sadly is an if Eeschema/if Pcbnew
wxString absformatter; wxString absformatter;
wxString locformatter; wxString locformatter;
switch( g_UserUnit ) switch( g_UserUnit )
@ -808,7 +808,7 @@ void EDA_DRAW_FRAME::UpdateStatusBar()
Line.Printf( absformatter, dXpos, dYpos ); Line.Printf( absformatter, dXpos, dYpos );
SetStatusText( Line, 2 ); SetStatusText( Line, 2 );
/* Display relative coordinates: */ // Display relative coordinates:
dx = screen->GetCrossHairPosition().x - screen->m_O_Curseur.x; dx = screen->GetCrossHairPosition().x - screen->m_O_Curseur.x;
dy = screen->GetCrossHairPosition().y - screen->m_O_Curseur.y; dy = screen->GetCrossHairPosition().y - screen->m_O_Curseur.y;
dXpos = To_User_Unit( g_UserUnit, dx, m_internalUnits ); dXpos = To_User_Unit( g_UserUnit, dx, m_internalUnits );
@ -820,7 +820,7 @@ void EDA_DRAW_FRAME::UpdateStatusBar()
dYpos = RoundTo0( dYpos, (double) ( m_internalUnits / 10 ) ); dYpos = RoundTo0( dYpos, (double) ( m_internalUnits / 10 ) );
} }
/* We already decided the formatter above */ // We already decided the formatter above
Line.Printf( locformatter, dXpos, dYpos ); Line.Printf( locformatter, dXpos, dYpos );
SetStatusText( Line, 3 ); SetStatusText( Line, 3 );
} }

View File

@ -677,7 +677,9 @@ void EDA_DRAW_PANEL::DrawGrid( wxDC* aDC )
void EDA_DRAW_PANEL::DrawAuxiliaryAxis( wxDC* aDC, int aDrawMode ) void EDA_DRAW_PANEL::DrawAuxiliaryAxis( wxDC* aDC, int aDrawMode )
{ {
if( GetParent()->m_originAxisPosition == wxPoint( 0, 0 ) ) wxPoint origin = GetParent()->GetOriginAxisPosition();
if( origin == wxPoint( 0, 0 ) )
return; return;
int color = DARKRED; int color = DARKRED;
@ -687,18 +689,18 @@ void EDA_DRAW_PANEL::DrawAuxiliaryAxis( wxDC* aDC, int aDrawMode )
// Draw the Y axis // Draw the Y axis
GRDashedLine( &m_ClipBox, aDC, GRDashedLine( &m_ClipBox, aDC,
GetParent()->m_originAxisPosition.x, origin.x,
-pageSize.y, -pageSize.y,
GetParent()->m_originAxisPosition.x, origin.x,
pageSize.y, pageSize.y,
0, color ); 0, color );
// Draw the X axis // Draw the X axis
GRDashedLine( &m_ClipBox, aDC, GRDashedLine( &m_ClipBox, aDC,
-pageSize.x, -pageSize.x,
GetParent()->m_originAxisPosition.y, origin.y,
pageSize.x, pageSize.x,
GetParent()->m_originAxisPosition.y, origin.y,
0, color ); 0, color );
} }
@ -1118,7 +1120,7 @@ void EDA_DRAW_PANEL::OnKeyEvent( wxKeyEvent& event )
int localkey; int localkey;
wxPoint pos; wxPoint pos;
localkey = event.GetKeyCode(); localkey = event.GetKeyCode();
switch( localkey ) switch( localkey )
{ {

View File

@ -47,6 +47,9 @@ class MODULE;
*/ */
int GetLayerMask( int aLayerNumber ) int GetLayerMask( int aLayerNumber )
{ {
wxASSERT( aLayerNumber < LAYER_COUNT && aLayerNumber >= 0 );
#if 0
// Look up Table for conversion one layer number -> one bit layer mask: // Look up Table for conversion one layer number -> one bit layer mask:
static int tabOneLayerMask[LAYER_COUNT] = static int tabOneLayerMask[LAYER_COUNT] =
{ {
@ -60,8 +63,10 @@ int GetLayerMask( int aLayerNumber )
0x10000000, 0x20000000, 0x40000000, 0x80000000 0x10000000, 0x20000000, 0x40000000, 0x80000000
}; };
wxASSERT( aLayerNumber < LAYER_COUNT && aLayerNumber >= 0 );
return( tabOneLayerMask[aLayerNumber] ); return( tabOneLayerMask[aLayerNumber] );
#else
return 1 << aLayerNumber;
#endif
} }
/* Look up Table for conversion copper layer count -> general copper layer /* Look up Table for conversion copper layer count -> general copper layer

View File

@ -216,12 +216,6 @@ void EDA_APP::WriteProjectConfig( const wxString& fileName,
} }
/**
* Function SaveCurrentSetupValues
* Save the current setup values in m_settings
* saved parameters are parameters that have the .m_Setup member set to true
* @param aList = array of PARAM_CFG_BASE pointers
*/
void EDA_APP::SaveCurrentSetupValues( PARAM_CFG_BASE** aList ) void EDA_APP::SaveCurrentSetupValues( PARAM_CFG_BASE** aList )
{ {
PARAM_CFG_BASE* pt_cfg; PARAM_CFG_BASE* pt_cfg;
@ -253,12 +247,15 @@ void EDA_APP::SaveCurrentSetupValues( const PARAM_CFG_ARRAY& List )
if( m_settings == NULL ) if( m_settings == NULL )
return; return;
BOOST_FOREACH( const PARAM_CFG_BASE& param, List ) unsigned count = List.size();
for( unsigned i=0; i<count; ++i )
{ {
const PARAM_CFG_BASE& param = List[i];
if( param.m_Setup == false ) if( param.m_Setup == false )
continue; continue;
if ( param.m_Type == PARAM_COMMAND_ERASE ) // Erase all data if( param.m_Type == PARAM_COMMAND_ERASE ) // Erase all data
{ {
if( param.m_Ident ) if( param.m_Ident )
m_settings->DeleteGroup( param.m_Ident ); m_settings->DeleteGroup( param.m_Ident );
@ -441,10 +438,6 @@ PARAM_CFG_INT::PARAM_CFG_INT( bool Insetup, const wxChar* ident, int* ptparam,
} }
/** ReadParam
* read the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that store the parameter
*/
void PARAM_CFG_INT::ReadParam( wxConfigBase* aConfig ) const void PARAM_CFG_INT::ReadParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -459,10 +452,6 @@ void PARAM_CFG_INT::ReadParam( wxConfigBase* aConfig ) const
} }
/** SaveParam
* save the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that can store the parameter
*/
void PARAM_CFG_INT::SaveParam( wxConfigBase* aConfig ) const void PARAM_CFG_INT::SaveParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -495,10 +484,6 @@ PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR( bool Insetup,
} }
/** ReadParam
* read the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that store the parameter
*/
void PARAM_CFG_SETCOLOR::ReadParam( wxConfigBase* aConfig ) const void PARAM_CFG_SETCOLOR::ReadParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -511,10 +496,6 @@ void PARAM_CFG_SETCOLOR::ReadParam( wxConfigBase* aConfig ) const
} }
/** SaveParam
* save the the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that can store the parameter
*/
void PARAM_CFG_SETCOLOR::SaveParam( wxConfigBase* aConfig ) const void PARAM_CFG_SETCOLOR::SaveParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -553,10 +534,6 @@ PARAM_CFG_DOUBLE::PARAM_CFG_DOUBLE( bool Insetup,
} }
/** ReadParam
* read the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that store the parameter
*/
void PARAM_CFG_DOUBLE::ReadParam( wxConfigBase* aConfig ) const void PARAM_CFG_DOUBLE::ReadParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -582,10 +559,6 @@ void PARAM_CFG_DOUBLE::ReadParam( wxConfigBase* aConfig ) const
} }
/** SaveParam
* save the the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that can store the parameter
*/
void PARAM_CFG_DOUBLE::SaveParam( wxConfigBase* aConfig ) const void PARAM_CFG_DOUBLE::SaveParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -617,10 +590,6 @@ PARAM_CFG_BOOL::PARAM_CFG_BOOL( bool Insetup,
} }
/** ReadParam
* read the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that store the parameter
*/
void PARAM_CFG_BOOL::ReadParam( wxConfigBase* aConfig ) const void PARAM_CFG_BOOL::ReadParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -632,10 +601,6 @@ void PARAM_CFG_BOOL::ReadParam( wxConfigBase* aConfig ) const
} }
/** SaveParam
* save the the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that can store the parameter
*/
void PARAM_CFG_BOOL::SaveParam( wxConfigBase* aConfig ) const void PARAM_CFG_BOOL::SaveParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -666,10 +631,6 @@ PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( bool Insetup, const wxChar* ident,
} }
/** ReadParam
* read the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that store the parameter
*/
void PARAM_CFG_WXSTRING::ReadParam( wxConfigBase* aConfig ) const void PARAM_CFG_WXSTRING::ReadParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -678,10 +639,6 @@ void PARAM_CFG_WXSTRING::ReadParam( wxConfigBase* aConfig ) const
} }
/** SaveParam
* save the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that can store the parameter
*/
void PARAM_CFG_WXSTRING::SaveParam( wxConfigBase* aConfig ) const void PARAM_CFG_WXSTRING::SaveParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -701,10 +658,6 @@ PARAM_CFG_FILENAME::PARAM_CFG_FILENAME( const wxChar* ident,
} }
/** ReadParam
* read the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that store the parameter
*/
void PARAM_CFG_FILENAME::ReadParam( wxConfigBase* aConfig ) const void PARAM_CFG_FILENAME::ReadParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -720,10 +673,6 @@ void PARAM_CFG_FILENAME::ReadParam( wxConfigBase* aConfig ) const
} }
/** SaveParam
* save the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that can store the parameter
*/
void PARAM_CFG_FILENAME::SaveParam( wxConfigBase* aConfig ) const void PARAM_CFG_FILENAME::SaveParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -745,10 +694,6 @@ PARAM_CFG_LIBNAME_LIST::PARAM_CFG_LIBNAME_LIST( const wxChar* ident,
} }
/** ReadParam
* read the value of parameter this stored in aConfig
* @param aConfig = the wxConfigBase that store the parameter
*/
void PARAM_CFG_LIBNAME_LIST::ReadParam( wxConfigBase* aConfig ) const void PARAM_CFG_LIBNAME_LIST::ReadParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -778,10 +723,6 @@ void PARAM_CFG_LIBNAME_LIST::ReadParam( wxConfigBase* aConfig ) const
} }
/** SaveParam
* save the value of parameter this in aConfig (list of parameters)
* @param aConfig = the wxConfigBase that can store the parameter
*/
void PARAM_CFG_LIBNAME_LIST::SaveParam( wxConfigBase* aConfig ) const void PARAM_CFG_LIBNAME_LIST::SaveParam( wxConfigBase* aConfig ) const
{ {
if( m_Pt_param == NULL || aConfig == NULL ) if( m_Pt_param == NULL || aConfig == NULL )
@ -799,6 +740,7 @@ void PARAM_CFG_LIBNAME_LIST::SaveParam( wxConfigBase* aConfig ) const
// We use indexlib+1 because first lib name is LibName1 // We use indexlib+1 because first lib name is LibName1
configkey << (indexlib + 1); configkey << (indexlib + 1);
libname = libname_list->Item( indexlib ); libname = libname_list->Item( indexlib );
// filenames are stored using Unix notation // filenames are stored using Unix notation
libname.Replace(wxT("\\"), wxT("/") ); libname.Replace(wxT("\\"), wxT("/") );
aConfig->Write( configkey, libname ); aConfig->Write( configkey, libname );

View File

@ -87,7 +87,7 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( CVPCB_MAINFRAME* father,
SetIcon( icon ); SetIcon( icon );
SetBoard( new BOARD() ); SetBoard( new BOARD() );
SetScreen( new PCB_SCREEN() ); SetScreen( new PCB_SCREEN( GetPageSettings().GetSizeIU() ) );
LoadSettings(); LoadSettings();

View File

@ -209,8 +209,10 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( SCH_EDIT_FRAME* aParent,
SetIcon( icon ); SetIcon( icon );
SetScreen( new SCH_SCREEN() ); SetScreen( new SCH_SCREEN( GetPageSettings().GetSizeIU() ) );
GetScreen()->m_Center = true; GetScreen()->m_Center = true;
GetScreen()->SetCrossHairPosition( wxPoint( 0, 0 ) ); GetScreen()->SetCrossHairPosition( wxPoint( 0, 0 ) );
LoadSettings(); LoadSettings();

View File

@ -97,7 +97,8 @@ static GRID_TYPE SchematicGridList[] = {
#define SCHEMATIC_GRID_LIST_CNT ( sizeof( SchematicGridList ) / sizeof( GRID_TYPE ) ) #define SCHEMATIC_GRID_LIST_CNT ( sizeof( SchematicGridList ) / sizeof( GRID_TYPE ) )
SCH_SCREEN::SCH_SCREEN( KICAD_T type ) : BASE_SCREEN( type ) SCH_SCREEN::SCH_SCREEN( const wxSize& aPageSizeIU ) :
BASE_SCREEN( SCH_SCREEN_T )
{ {
size_t i; size_t i;
@ -114,9 +115,10 @@ SCH_SCREEN::SCH_SCREEN( KICAD_T type ) : BASE_SCREEN( type )
SetGrid( wxRealPoint( 50, 50 ) ); // Default grid size. SetGrid( wxRealPoint( 50, 50 ) ); // Default grid size.
m_refCount = 0; m_refCount = 0;
m_Center = false; // Suitable for schematic only. For // Suitable for schematic only. For libedit and viewlib, must be set to true
// libedit and viewlib, must be set m_Center = false;
// to true
InitDataPoints( aPageSizeIU );
} }

View File

@ -794,7 +794,7 @@ bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
} }
else else
{ {
SetScreen( new SCH_SCREEN() ); SetScreen( new SCH_SCREEN( GetPageSettings().GetSizeIU() ) );
success = aFrame->LoadOneEEFile( m_screen, m_fileName ); success = aFrame->LoadOneEEFile( m_screen, m_fileName );
if( success ) if( success )

View File

@ -345,7 +345,7 @@ void SCH_EDIT_FRAME::CreateScreens()
if( g_RootSheet->GetScreen() == NULL ) if( g_RootSheet->GetScreen() == NULL )
{ {
g_RootSheet->SetScreen( new SCH_SCREEN() ); g_RootSheet->SetScreen( new SCH_SCREEN( GetPageSettings().GetSizeIU() ) );
SetScreen( g_RootSheet->GetScreen() ); SetScreen( g_RootSheet->GetScreen() );
} }
@ -355,7 +355,7 @@ void SCH_EDIT_FRAME::CreateScreens()
m_CurrentSheet->Push( g_RootSheet ); m_CurrentSheet->Push( g_RootSheet );
if( GetScreen() == NULL ) if( GetScreen() == NULL )
SetScreen( new SCH_SCREEN() ); SetScreen( new SCH_SCREEN( GetPageSettings().GetSizeIU() ) );
GetScreen()->SetZoom( 32.0 ); GetScreen()->SetZoom( 32.0 );
GetScreen()->m_UndoRedoCountMax = 10; GetScreen()->m_UndoRedoCountMax = 10;

View File

@ -116,7 +116,7 @@ bool SCH_EDIT_FRAME::EditSheet( SCH_SHEET* aSheet, wxDC* aDC )
} }
else // New file. else // New file.
{ {
aSheet->SetScreen( new SCH_SCREEN() ); aSheet->SetScreen( new SCH_SCREEN( GetPageSettings().GetSizeIU() ) );
aSheet->GetScreen()->SetFileName( fileName.GetFullPath() ); aSheet->GetScreen()->SetFileName( fileName.GetFullPath() );
} }
} }

View File

@ -125,7 +125,7 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( wxWindow* father, CMP_LIBRARY* Library, wxSemaph
if( m_Semaphore ) if( m_Semaphore )
MakeModal(true); MakeModal(true);
SetScreen( new SCH_SCREEN() ); SetScreen( new SCH_SCREEN( GetPageSettings().GetSizeIU() ) );
GetScreen()->m_Center = true; // Center coordinate origins on screen. GetScreen()->m_Center = true; // Center coordinate origins on screen.
LoadSettings(); LoadSettings();

View File

@ -29,10 +29,12 @@
#include "fctsys.h" #include "fctsys.h"
#include "common.h" #include "common.h"
#include "macros.h"
#include "gerbview.h" #include "gerbview.h"
#include "dialog_show_page_borders.h" #include "dialog_show_page_borders.h"
DIALOG_PAGE_SHOW_PAGE_BORDERS::DIALOG_PAGE_SHOW_PAGE_BORDERS( GERBVIEW_FRAME *parent) : DIALOG_PAGE_SHOW_PAGE_BORDERS::DIALOG_PAGE_SHOW_PAGE_BORDERS( GERBVIEW_FRAME *parent) :
DIALOG_PAGE_SHOW_PAGE_BORDERS_BASE( parent, wxID_ANY ) DIALOG_PAGE_SHOW_PAGE_BORDERS_BASE( parent, wxID_ANY )
{ {
@ -43,11 +45,13 @@ DIALOG_PAGE_SHOW_PAGE_BORDERS::DIALOG_PAGE_SHOW_PAGE_BORDERS( GERBVIEW_FRAME *pa
if( m_Parent->GetShowBorderAndTitleBlock() ) if( m_Parent->GetShowBorderAndTitleBlock() )
{ {
for( int ii = 1; g_GerberPageSizeList[ii] != NULL; ii++ ) wxString curPaperType = m_Parent->GetPageSettings().GetType();
for( unsigned i = 1; i<DIM( g_GerberPageSizeList ); ++i )
{ {
if( m_Parent->GetScreen()->m_CurrentSheetDesc == g_GerberPageSizeList[ii] ) if( curPaperType == g_GerberPageSizeList[i] )
{ {
m_ShowPageLimits->SetSelection(ii); m_ShowPageLimits->SetSelection( i );
break; break;
} }
} }
@ -73,8 +77,9 @@ void DIALOG_PAGE_SHOW_PAGE_BORDERS::OnOKBUttonClick( wxCommandEvent& event )
int idx = m_ShowPageLimits->GetSelection(); int idx = m_ShowPageLimits->GetSelection();
m_Parent->SetShowBorderAndTitleBlock( (idx > 0) ? true : false ); m_Parent->SetShowBorderAndTitleBlock( idx > 0 ? true : false );
m_Parent->GetScreen()->m_CurrentSheetDesc = g_GerberPageSizeList[idx];
m_Parent->SetPageSettings( PAGE_INFO( g_GerberPageSizeList[idx] ) );
EndModal( wxID_OK ); EndModal( wxID_OK );
} }

View File

@ -6,6 +6,7 @@
#include "fctsys.h" #include "fctsys.h"
#include "common.h" #include "common.h"
#include "macros.h"
#include "class_drawpanel.h" #include "class_drawpanel.h"
#include "pcbplot.h" #include "pcbplot.h"
@ -35,11 +36,11 @@ private:
void GERBVIEW_FRAME::InstallGerberOptionsDialog( wxCommandEvent& event ) void GERBVIEW_FRAME::InstallGerberOptionsDialog( wxCommandEvent& event )
{ {
DIALOG_DISPLAY_OPTIONS dlg( this ); DIALOG_DISPLAY_OPTIONS dlg( this );
int opt = dlg.ShowModal(); int opt = dlg.ShowModal();
if (opt > 0 ) if( opt > 0 )
m_canvas->Refresh(); m_canvas->Refresh();
} }
DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( GERBVIEW_FRAME *parent) : DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( GERBVIEW_FRAME *parent) :
@ -61,9 +62,9 @@ void DIALOG_DISPLAY_OPTIONS::OnCancelButtonClick( wxCommandEvent& event )
EndModal( 0 ); EndModal( 0 );
} }
void DIALOG_DISPLAY_OPTIONS::initOptDialog( ) void DIALOG_DISPLAY_OPTIONS::initOptDialog( )
{ {
m_PolarDisplay->SetSelection( DisplayOpt.DisplayPolarCood ? 1 : 0 ); m_PolarDisplay->SetSelection( DisplayOpt.DisplayPolarCood ? 1 : 0 );
m_BoxUnits->SetSelection( g_UserUnit ? 1 : 0 ); m_BoxUnits->SetSelection( g_UserUnit ? 1 : 0 );
m_CursorShape->SetSelection( m_Parent->GetCursorShape() ? 1 : 0 ); m_CursorShape->SetSelection( m_Parent->GetCursorShape() ? 1 : 0 );
@ -71,6 +72,7 @@ void DIALOG_DISPLAY_OPTIONS::initOptDialog( )
// Show Option Draw Lines. We use DisplayPcbTrackFill as Lines draw option // Show Option Draw Lines. We use DisplayPcbTrackFill as Lines draw option
m_OptDisplayLines->SetSelection( DisplayOpt.DisplayPcbTrackFill ? 1 : 0 ); m_OptDisplayLines->SetSelection( DisplayOpt.DisplayPcbTrackFill ? 1 : 0 );
m_OptDisplayFlashedItems->SetSelection( DisplayOpt.DisplayPadFill ? 1 : 0); m_OptDisplayFlashedItems->SetSelection( DisplayOpt.DisplayPadFill ? 1 : 0);
// Show Option Draw polygons // Show Option Draw polygons
m_OptDisplayPolygons->SetSelection( g_DisplayPolygonsModeSketch ? 0 : 1 ); m_OptDisplayPolygons->SetSelection( g_DisplayPolygonsModeSketch ? 0 : 1 );
@ -78,11 +80,13 @@ void DIALOG_DISPLAY_OPTIONS::initOptDialog( )
if( m_Parent->GetShowBorderAndTitleBlock() ) if( m_Parent->GetShowBorderAndTitleBlock() )
{ {
for( int ii = 1; g_GerberPageSizeList[ii] != NULL; ii++ ) wxString curPaperType = m_Parent->GetPageSettings().GetType();
for( unsigned i = 1; i < DIM( g_GerberPageSizeList ); ++i )
{ {
if( m_Parent->GetScreen()->m_CurrentSheetDesc == g_GerberPageSizeList[ii] ) if( g_GerberPageSizeList[i] == curPaperType )
{ {
m_ShowPageLimits->SetSelection(ii); m_ShowPageLimits->SetSelection( i );
break; break;
} }
} }
@ -91,6 +95,7 @@ void DIALOG_DISPLAY_OPTIONS::initOptDialog( )
m_OptDisplayDCodes->SetValue( m_Parent->IsElementVisible( DCODES_VISIBLE ) ); m_OptDisplayDCodes->SetValue( m_Parent->IsElementVisible( DCODES_VISIBLE ) );
} }
void DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick( wxCommandEvent& event ) void DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick( wxCommandEvent& event )
{ {
DisplayOpt.DisplayPolarCood = DisplayOpt.DisplayPolarCood =
@ -127,8 +132,11 @@ void DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick( wxCommandEvent& event )
int idx = m_ShowPageLimits->GetSelection(); int idx = m_ShowPageLimits->GetSelection();
m_Parent->SetShowBorderAndTitleBlock( ( idx > 0 ) ? true : false ); m_Parent->SetShowBorderAndTitleBlock( idx > 0 ? true : false );
m_Parent->GetScreen()->m_CurrentSheetDesc = g_GerberPageSizeList[idx];
PAGE_INFO pageInfo( g_GerberPageSizeList[idx] );
m_Parent->SetPageSettings( pageInfo );
EndModal( 1 ); EndModal( 1 );
} }

View File

@ -154,12 +154,11 @@ void GERBVIEW_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
case ID_GERBVIEW_SET_PAGE_BORDER: case ID_GERBVIEW_SET_PAGE_BORDER:
{ {
DIALOG_PAGE_SHOW_PAGE_BORDERS dlg( this ); DIALOG_PAGE_SHOW_PAGE_BORDERS dlg( this );
if (dlg.ShowModal() == wxID_OK ) if( dlg.ShowModal() == wxID_OK )
m_canvas->Refresh(); m_canvas->Refresh();
} }
break; break;
case ID_GERBVIEW_GLOBAL_DELETE: case ID_GERBVIEW_GLOBAL_DELETE:

View File

@ -29,17 +29,20 @@ COLORS_DESIGN_SETTINGS g_ColorsSettings;
int g_Default_GERBER_Format; int g_Default_GERBER_Format;
int g_DisplayPolygonsModeSketch; int g_DisplayPolygonsModeSketch;
GERBER_IMAGE* g_GERBER_List[32];
// List of page sizes const wxChar* g_GerberPageSizeList[] = {
PAGE_INFO* g_GerberPageSizeList[] = wxT( "GERBER" ), // index 0: full size page selection, and do not show page limits
{ wxT( "GERBER" ), // index 1: full size page selection, and show page limits
&g_Sheet_GERBER, // Full size page selection, and do not show page limits wxT( "A4" ),
&g_Sheet_GERBER, // Full size page selection, and show page limits wxT( "A3" ),
&g_Sheet_A4, &g_Sheet_A3, &g_Sheet_A2, wxT( "A2" ),
&g_Sheet_A, &g_Sheet_B, &g_Sheet_C, wxT( "A" ),
NULL // End of list wxT( "B" ),
}; wxT( "C" ),
};
GERBER_IMAGE* g_GERBER_List[32];
IMPLEMENT_APP( EDA_APP ) IMPLEMENT_APP( EDA_APP )

View File

@ -21,6 +21,8 @@ class GERBVIEW_FRAME;
class GERBER_IMAGE; class GERBER_IMAGE;
class PAGE_INFO; class PAGE_INFO;
/// List of page sizes
extern const wxChar* g_GerberPageSizeList[8];
// Type of photoplotter action: // Type of photoplotter action:
#define GERB_ACTIVE_DRAW 1 // Activate light (lower pen) #define GERB_ACTIVE_DRAW 1 // Activate light (lower pen)
@ -28,12 +30,13 @@ class PAGE_INFO;
#define GERB_FLASH 3 // Flash #define GERB_FLASH 3 // Flash
typedef enum enum PlotFormat
{ {
FORMAT_HPGL, FORMAT_HPGL,
FORMAT_GERBER, FORMAT_GERBER,
FORMAT_POST FORMAT_POST
} PlotFormat; };
/** /**
* Enum ITEM_VISIBLE * Enum ITEM_VISIBLE

View File

@ -29,6 +29,7 @@
*/ */
#include "fctsys.h" #include "fctsys.h"
#include "macros.h"
#include "id.h" #include "id.h"
#include "common.h" #include "common.h"
#include "class_drawpanel.h" #include "class_drawpanel.h"
@ -55,7 +56,7 @@ void GERBVIEW_FRAME::Process_Config( wxCommandEvent& event )
switch( id ) switch( id )
{ {
/* Hotkey IDs */ // Hotkey IDs
case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG: case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
ExportHotkeyConfigToFile( s_Gerbview_Hokeys_Descr ); ExportHotkeyConfigToFile( s_Gerbview_Hokeys_Descr );
break; break;
@ -81,7 +82,7 @@ void GERBVIEW_FRAME::Process_Config( wxCommandEvent& event )
} }
PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings( void ) PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings()
{ {
if( !m_configSettings.empty() ) if( !m_configSettings.empty() )
return m_configSettings; return m_configSettings;
@ -102,9 +103,8 @@ PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings( void )
&DisplayOpt.DisplayPolarCood, &DisplayOpt.DisplayPolarCood,
false ) ); false ) );
// Color select parameters: // Default colors for layers 0 to 31
static const int color_default[32] = // Default values for color layers 0 to 31 static const int color_default[] = {
{
GREEN, BLUE, LIGHTGRAY, MAGENTA, GREEN, BLUE, LIGHTGRAY, MAGENTA,
RED, DARKGREEN, BROWN, MAGENTA, RED, DARKGREEN, BROWN, MAGENTA,
LIGHTGRAY, BLUE, GREEN, CYAN, LIGHTGRAY, BLUE, GREEN, CYAN,
@ -112,26 +112,35 @@ PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings( void )
BLUE, BROWN, LIGHTCYAN, RED, BLUE, BROWN, LIGHTCYAN, RED,
MAGENTA, CYAN, BROWN, MAGENTA, MAGENTA, CYAN, BROWN, MAGENTA,
LIGHTGRAY, BLUE, GREEN, DARKCYAN, LIGHTGRAY, BLUE, GREEN, DARKCYAN,
YELLOW, LIGHTMAGENTA, YELLOW, LIGHTGRAY YELLOW, LIGHTMAGENTA, YELLOW, LIGHTGRAY,
}; };
// List of keywords used as identifiers in config // List of keywords used as identifiers in config.
// they *must* be static const and not temporary created, // They *must* be static const and not temporarily created,
// because the parameter list that use these keywords does not store them, // because the parameter list that use these keywords does not store them,
// just points on them // just points to them.
static const wxChar * keys[32] = static const wxChar* keys[] = {
{ wxT("ColorLayer0"), wxT("ColorLayer1"), wxT("ColorLayer2"), wxT("ColorLayer3"),
wxT("ColorLayer0"), wxT("ColorLayer1"), wxT("ColorLayer2"), wxT("ColorLayer3"), wxT("ColorLayer4"), wxT("ColorLayer5"), wxT("ColorLayer6"), wxT("ColorLayer7"),
wxT("ColorLayer4"), wxT("ColorLayer5"), wxT("ColorLayer6"), wxT("ColorLayer7"), wxT("ColorLayer8"), wxT("ColorLayer9"), wxT("ColorLayer10"), wxT("ColorLayer11"),
wxT("ColorLayer8"), wxT("ColorLayer9"), wxT("ColorLayer10"), wxT("ColorLayer11"), wxT("ColorLayer12"), wxT("ColorLayer13"), wxT("ColorLayer14"), wxT("ColorLayer15"),
wxT("ColorLayer12"), wxT("ColorLaye13"), wxT("ColorLayer14"), wxT("ColorLayer15")
wxT("ColorLayer16"), wxT("ColorLayer17"), wxT("ColorLayer18"), wxT("ColorLayer19"),
wxT("ColorLayer20"), wxT("ColorLayer21"), wxT("ColorLayer22"), wxT("ColorLayer23"),
wxT("ColorLayer24"), wxT("ColorLayer25"), wxT("ColorLayer26"), wxT("ColorLayer27"),
wxT("ColorLayer28"), wxT("ColorLayer29"), wxT("ColorLayer30"), wxT("ColorLayer31"),
}; };
for( unsigned ii = 0; ii < 32; ii++ ) wxASSERT( DIM(keys) == DIM(color_default) );
wxASSERT( DIM(keys) <= DIM(g_ColorsSettings.m_LayersColors) && DIM(keys) <= DIM(color_default) );
for( unsigned i = 0; i < DIM(keys); ++i )
{ {
int * prm = &g_ColorsSettings.m_LayersColors[1]; int* prm = &g_ColorsSettings.m_LayersColors[i];
PARAM_CFG_SETCOLOR * prm_entry =
new PARAM_CFG_SETCOLOR( true, keys[ii], prm, color_default[1] ); PARAM_CFG_SETCOLOR* prm_entry =
new PARAM_CFG_SETCOLOR( true, keys[i], prm, color_default[i] );
m_configSettings.push_back( prm_entry ); m_configSettings.push_back( prm_entry );
} }

View File

@ -48,8 +48,9 @@
// Config keywords // Config keywords
const wxString GerbviewShowPageSizeOption( wxT( "ShowPageSizeOpt" ) ); static const wxString cfgShowPageSizeOption( wxT( "ShowPageSizeOpt" ) );
const wxString GerbviewShowDCodes( wxT( "ShowDCodesOpt" ) ); static const wxString cfgShowDCodes( wxT( "ShowDCodesOpt" ) );
static const wxString cfgShowBorderAndTitleBlock( wxT( "ShowBorderAndTitleBlock" ) );
/*************************************/ /*************************************/
@ -84,11 +85,15 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( wxWindow* father,
SetIcon( icon ); SetIcon( icon );
SetBoard( new BOARD() ); SetBoard( new BOARD() );
GetBoard()->SetEnabledLayers( FULL_LAYERS ); // All 32 layers enabled at first. GetBoard()->SetEnabledLayers( FULL_LAYERS ); // All 32 layers enabled at first.
GetBoard()->SetVisibleLayers( FULL_LAYERS ); // All 32 layers visible. GetBoard()->SetVisibleLayers( FULL_LAYERS ); // All 32 layers visible.
SetScreen( new PCB_SCREEN() ); // BOARD was constructed with "A3", change to "GERBER"
GetScreen()->m_CurrentSheetDesc = &g_Sheet_GERBER; PAGE_INFO pageInfo( wxT( "GERBER" ) );
GetBoard()->SetPageSettings( pageInfo );
SetScreen( new PCB_SCREEN( pageInfo.GetSizeIU() ) );
// Create the PCB_LAYER_WIDGET *after* SetBoard(): // Create the PCB_LAYER_WIDGET *after* SetBoard():
wxFont font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); wxFont font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
@ -209,23 +214,25 @@ void GERBVIEW_FRAME::LoadSettings()
wxGetApp().ReadCurrentSetupValues( GetConfigurationSettings() ); wxGetApp().ReadCurrentSetupValues( GetConfigurationSettings() );
wxString pageType; PAGE_INFO pageInfo( wxT( "GERBER" ) );
config->Read( GerbviewShowPageSizeOption, &pageType, wxT( "GERBER" ) ); config->Read( cfgShowBorderAndTitleBlock, &m_showBorderAndTitleBlock, false );
PAGE_INFO pageInfo( pageType ); if( m_showBorderAndTitleBlock )
{
wxString pageType;
config->Read( cfgShowPageSizeOption, &pageType, wxT( "GERBER" ) );
pageInfo.SetType( pageType );
}
SetPageSettings( pageInfo ); SetPageSettings( pageInfo );
GetScreen()->InitDataPoints( pageInfo.GetSizeIU() ); GetScreen()->InitDataPoints( pageInfo.GetSizeIU() );
if( pageSize_opt > 0 )
{
m_showBorderAndTitleBlock = true;
}
long tmp; long tmp;
config->Read( GerbviewShowDCodes, &tmp, 1 ); config->Read( cfgShowDCodes, &tmp, 1 );
SetElementVisibility( DCODES_VISIBLE, tmp ); SetElementVisibility( DCODES_VISIBLE, tmp );
// because we have 2 file historues, we must read this one // because we have 2 file historues, we must read this one
@ -252,22 +259,10 @@ void GERBVIEW_FRAME::SaveSettings()
wxGetApp().SaveCurrentSetupValues( GetConfigurationSettings() ); wxGetApp().SaveCurrentSetupValues( GetConfigurationSettings() );
long pageSize_opt = 0; config->Write( cfgShowPageSizeOption, GetPageSettings().GetType() );
config->Write( cfgShowBorderAndTitleBlock, m_showBorderAndTitleBlock );
config->Write( cfgShowDCodes, IsElementVisible( DCODES_VISIBLE ) );
if( m_showBorderAndTitleBlock )
{
for( int ii = 1; g_GerberPageSizeList[ii] != NULL; ii++ )
{
if( GetScreen()->m_CurrentSheetDesc == g_GerberPageSizeList[ii] )
{
pageSize_opt = ii;
break;
}
}
}
config->Write( GerbviewShowPageSizeOption, GetPageSettings().GetType() );
config->Write( GerbviewShowDCodes, IsElementVisible( DCODES_VISIBLE ) );
// Save the drill file history list. // Save the drill file history list.
// Because we have 2 file histories, we must save this one // Because we have 2 file histories, we must save this one
// in a specific path // in a specific path

View File

@ -68,8 +68,7 @@ bool GERBVIEW_FRAME::Clear_Pcb( bool query )
GetBoard()->m_NbNodes = 0; GetBoard()->m_NbNodes = 0;
GetBoard()->m_NbNoconnect = 0; GetBoard()->m_NbNoconnect = 0;
SetScreen( new PCB_SCREEN() ); SetScreen( new PCB_SCREEN( GetPageSettings().GetSizeIU() ) );
GetScreen()->Init();
setActiveLayer(FIRST_COPPER_LAYER); setActiveLayer(FIRST_COPPER_LAYER);
m_LayersManager->UpdateLayerIcons(); m_LayersManager->UpdateLayerIcons();

View File

@ -254,9 +254,9 @@ public:
/** /**
* Function SaveCurrentSetupValues * Function SaveCurrentSetupValues
* Save the current setup values in m_settings * saves the current setup values in m_settings.
* saved parameters are parameters that have the .m_Setup member set to * Saved parameters are parameters that have the .m_Setup member set to
* true * true.
* @param aList = array of PARAM_CFG_BASE pointers * @param aList = array of PARAM_CFG_BASE pointers
*/ */
void SaveCurrentSetupValues( PARAM_CFG_BASE** aList ); void SaveCurrentSetupValues( PARAM_CFG_BASE** aList );
@ -264,9 +264,9 @@ public:
/** /**
* Function ReadCurrentSetupValues * Function ReadCurrentSetupValues
* Read the current setup values previously saved, from m_settings * reads the current setup values previously saved, from m_settings.
* saved parameters are parameters that have the .m_Setup member set to * Saved parameters are parameters that have the .m_Setup member set to
* true * true.
* @param aList = array of PARAM_CFG_BASE pointers * @param aList = array of PARAM_CFG_BASE pointers
*/ */
void ReadCurrentSetupValues( PARAM_CFG_BASE** aList ); void ReadCurrentSetupValues( PARAM_CFG_BASE** aList );

View File

@ -92,6 +92,9 @@ class BASE_SCREEN : public EDA_ITEM
*/ */
wxPoint m_crossHairPosition; wxPoint m_crossHairPosition;
double m_Zoom; ///< Current zoom coefficient.
public: public:
wxPoint m_DrawOrg; ///< offsets for drawing the circuit on the screen wxPoint m_DrawOrg; ///< offsets for drawing the circuit on the screen
@ -101,6 +104,7 @@ public:
// Scrollbars management: // Scrollbars management:
int m_ScrollPixelsPerUnitX; ///< Pixels per scroll unit in the horizontal direction. int m_ScrollPixelsPerUnitX; ///< Pixels per scroll unit in the horizontal direction.
int m_ScrollPixelsPerUnitY; ///< Pixels per scroll unit in the vertical direction. int m_ScrollPixelsPerUnitY; ///< Pixels per scroll unit in the vertical direction.
wxSize m_ScrollbarNumber; /* Current virtual draw area size in scroll units. wxSize m_ScrollbarNumber; /* Current virtual draw area size in scroll units.
* m_ScrollbarNumber * m_ScrollPixelsPerUnit = * m_ScrollbarNumber * m_ScrollPixelsPerUnit =
* virtual draw area size in pixels */ * virtual draw area size in pixels */
@ -142,7 +146,6 @@ public:
wxPoint m_GridOrigin; wxPoint m_GridOrigin;
wxArrayDouble m_ZoomList; ///< Array of standard zoom (i.e. scale) coefficients. wxArrayDouble m_ZoomList; ///< Array of standard zoom (i.e. scale) coefficients.
double m_Zoom; ///< Current zoom coefficient.
bool m_IsPrinting; bool m_IsPrinting;
public: public:

View File

@ -9,7 +9,9 @@
#define LAYERSCOLORSBUFFERSIZE 32 #define LAYERSCOLORSBUFFERSIZE 32
#define ITEMSCOLORSBUFFERSIZE 32 #define ITEMSCOLORSBUFFERSIZE 32
/* Class for handle list of color settings for designs in Eeschema, Pcbnew and GerbView /**
* Class COLORS_DESIGN_SETTINGS
* is a list of color settings for designs in Eeschema, Pcbnew and GerbView
*/ */
class COLORS_DESIGN_SETTINGS class COLORS_DESIGN_SETTINGS
{ {

View File

@ -22,7 +22,13 @@ public:
int m_Route_Layer_BOTTOM; int m_Route_Layer_BOTTOM;
public: public:
PCB_SCREEN();
/**
* Constructor
* @param aPageSizeIU is the size of the initial paper page in internal units.
*/
PCB_SCREEN( const wxSize& aPageSizeIU );
~PCB_SCREEN(); ~PCB_SCREEN();
PCB_SCREEN* Next() { return (PCB_SCREEN*) Pnext; } PCB_SCREEN* Next() { return (PCB_SCREEN*) Pnext; }

View File

@ -83,7 +83,13 @@ class SCH_SCREEN : public BASE_SCREEN
void addConnectedItemsToBlock( const wxPoint& aPosition ); void addConnectedItemsToBlock( const wxPoint& aPosition );
public: public:
SCH_SCREEN( KICAD_T aType = SCH_SCREEN_T );
/**
* Constructor
* @param aPageSizeIU is the size of the initial paper page in internal units.
*/
SCH_SCREEN( const wxSize& aPageSizeIU );
~SCH_SCREEN(); ~SCH_SCREEN();
virtual wxString GetClass() const virtual wxString GetClass() const

View File

@ -134,6 +134,8 @@ class PAGE_INFO;
* eventually print or plot. Since paper is often described in inches, * eventually print or plot. Since paper is often described in inches,
* (and due to legacy code), inches, mils, and internal units (IU) are supported * (and due to legacy code), inches, mils, and internal units (IU) are supported
* in the accessors. Again, we are describing paper in this class. * in the accessors. Again, we are describing paper in this class.
*
* @author Dick Hollenbeck
*/ */
class PAGE_INFO class PAGE_INFO
{ {
@ -168,7 +170,8 @@ public:
int GetHeightMils() const { return int( 1000 * m_heightInches ); } int GetHeightMils() const { return int( 1000 * m_heightInches ); }
const wxSize GetSizeMils() const { return wxSize( GetWidthMils(), GetHeightMils() ); } const wxSize GetSizeMils() const { return wxSize( GetWidthMils(), GetHeightMils() ); }
// accessors returning Internal Units // Accessors returning "Internal Units (IU)". IUs are mils in EESCHEMA,
// and either deci-mils or nanometers in PCBNew.
#if defined(PCBNEW) #if defined(PCBNEW)
# if defined(KICAD_NANOMETRE) # if defined(KICAD_NANOMETRE)
int GetWidthIU() const { return int( 2.54e7 * m_widthInches ); } int GetWidthIU() const { return int( 2.54e7 * m_widthInches ); }
@ -203,7 +206,11 @@ public:
*/ */
static void SetUserHeightInches( double aHeightInInches ); static void SetUserHeightInches( double aHeightInInches );
#define PAGE_INFO_COUNT 11 ///< count of standard page sizes /**
* Function GetStandardSizes
* returns the standard page types, such as "A4", "A3", etc.
*/
static wxArrayString GetStandardSizes();
private: private:
wxString m_Type; ///< paper type: A4, A3, etc. wxString m_Type; ///< paper type: A4, A3, etc.

View File

@ -12,7 +12,7 @@
#define FOOTPRINT_LIBRARY_HEADER_CNT 18 #define FOOTPRINT_LIBRARY_HEADER_CNT 18
// Values for m_DisplayViaMode member: /// Values for m_DisplayViaMode member:
enum VIA_DISPLAY_MODE_T { enum VIA_DISPLAY_MODE_T {
VIA_HOLE_NOT_SHOW = 0, VIA_HOLE_NOT_SHOW = 0,
VIA_SPECIAL_HOLE_SHOW, VIA_SPECIAL_HOLE_SHOW,
@ -21,8 +21,10 @@ enum VIA_DISPLAY_MODE_T {
}; };
/* Values for DISPLAY_OPTIONS.ShowTrackClearanceMode parameter option /**
* This parameter controls how to show tracks and vias clearance area * Enum TRACE_CLEARANCE_DISPLAY_MODE_T
* is the set of values for DISPLAY_OPTIONS.ShowTrackClearanceMode parameter option.
* This parameter controls how to show tracks and vias clearance area.
*/ */
enum TRACE_CLEARANCE_DISPLAY_MODE_T { enum TRACE_CLEARANCE_DISPLAY_MODE_T {
DO_NOT_SHOW_CLEARANCE = 0, // Do not show clearance areas DO_NOT_SHOW_CLEARANCE = 0, // Do not show clearance areas
@ -43,6 +45,10 @@ enum TRACE_CLEARANCE_DISPLAY_MODE_T {
}; };
/**
* Class DISPLAY_OPTIONS
* handles display options like enable/disable some optional drawings.
*/
class DISPLAY_OPTIONS class DISPLAY_OPTIONS
{ {
public: public:
@ -77,5 +83,4 @@ public:
DISPLAY_OPTIONS(); DISPLAY_OPTIONS();
}; };
#endif // PCBSTRUCT_H #endif // PCBSTRUCT_H

View File

@ -5,8 +5,8 @@
* @file plot_common.h * @file plot_common.h
*/ */
#ifndef __INCLUDE__PLOT_COMMON_H__ #ifndef PLOT_COMMON_H_
#define __INCLUDE__PLOT_COMMON_H__ 1 #define PLOT_COMMON_H_
#include <vector> #include <vector>
#include "drawtxt.h" #include "drawtxt.h"
@ -28,8 +28,7 @@ enum PlotFormat {
class PLOTTER class PLOTTER
{ {
public: public:
PlotFormat m_PlotType; // type of plot PLOTTER( PlotFormat aPlotType );
public: PLOTTER( PlotFormat aPlotType );
virtual ~PLOTTER() virtual ~PLOTTER()
{ {
@ -45,8 +44,7 @@ public: PLOTTER( PlotFormat aPlotType );
* Function GetPlotterType * Function GetPlotterType
* @return the format of the plot file * @return the format of the plot file
*/ */
PlotFormat GetPlotterType() PlotFormat GetPlotterType() { return m_PlotType; }
{ return m_PlotType; }
virtual bool start_plot( FILE* fout ) = 0; virtual bool start_plot( FILE* fout ) = 0;
virtual bool end_plot() = 0; virtual bool end_plot() = 0;
@ -56,13 +54,11 @@ public: PLOTTER( PlotFormat aPlotType );
negative_mode = _negative; negative_mode = _negative;
} }
virtual void set_color_mode( bool _color_mode ) virtual void set_color_mode( bool _color_mode )
{ {
color_mode = _color_mode; color_mode = _color_mode;
} }
bool get_color_mode() const bool get_color_mode() const
{ {
return color_mode; return color_mode;
@ -80,13 +76,12 @@ public: PLOTTER( PlotFormat aPlotType );
creator = _creator; creator = _creator;
} }
virtual void set_filename( const wxString& _filename ) virtual void set_filename( const wxString& _filename )
{ {
filename = _filename; filename = _filename;
} }
/// Set the plot offset for the current plotting
virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror ) = 0; virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror ) = 0;
// Standard primitives // Standard primitives
@ -152,27 +147,23 @@ public: PLOTTER( PlotFormat aPlotType );
pen_to( pos, 'U' ); pen_to( pos, 'U' );
} }
void line_to( wxPoint pos ) void line_to( wxPoint pos )
{ {
pen_to( pos, 'D' ); pen_to( pos, 'D' );
} }
void finish_to( wxPoint pos ) void finish_to( wxPoint pos )
{ {
pen_to( pos, 'D' ); pen_to( pos, 'D' );
pen_to( pos, 'Z' ); pen_to( pos, 'Z' );
} }
void pen_finish() void pen_finish()
{ {
// Shortcut // Shortcut
pen_to( wxPoint( 0, 0 ), 'Z' ); pen_to( wxPoint( 0, 0 ), 'Z' );
} }
void text( const wxPoint& aPos, void text( const wxPoint& aPos,
enum EDA_Colors aColor, enum EDA_Colors aColor,
const wxString& aText, const wxString& aText,
@ -183,7 +174,8 @@ public: PLOTTER( PlotFormat aPlotType );
int aWidth, int aWidth,
bool aItalic, bool aItalic,
bool aBold ); bool aBold );
void marker( const wxPoint& position, int diametre, int aShapeId );
void marker( const wxPoint& position, int diametre, int aShapeId );
/** /**
* Function SetLayerPolarity * Function SetLayerPolarity
@ -207,14 +199,20 @@ protected:
virtual void user_to_device_size( wxSize& size ); virtual void user_to_device_size( wxSize& size );
virtual double user_to_device_size( double size ); virtual double user_to_device_size( double size );
// Plot scale PlotFormat m_PlotType;
/// Plot scale
double plot_scale; double plot_scale;
// Device scale (from decimils to device units)
/// Device scale (from decimils to device units)
double device_scale; double device_scale;
// Plot offset (in decimils)
/// Plot offset (in decimils)
wxPoint plot_offset; wxPoint plot_offset;
// Output file
/// Output file
FILE* output_file; FILE* output_file;
// Pen handling // Pen handling
bool color_mode, negative_mode; bool color_mode, negative_mode;
int default_pen_width; int default_pen_width;
@ -228,13 +226,15 @@ protected:
wxSize paper_size; wxSize paper_size;
}; };
class HPGL_PLOTTER : public PLOTTER class HPGL_PLOTTER : public PLOTTER
{ {
public: HPGL_PLOTTER() : PLOTTER( PLOT_FORMAT_HPGL ) public:
HPGL_PLOTTER() :
PLOTTER( PLOT_FORMAT_HPGL )
{ {
} }
virtual bool start_plot( FILE* fout ); virtual bool start_plot( FILE* fout );
virtual bool end_plot(); virtual bool end_plot();
@ -243,42 +243,41 @@ public: HPGL_PLOTTER() : PLOTTER( PLOT_FORMAT_HPGL )
{ {
// Handy override // Handy override
current_pen_width = wxRound( pen_diameter ); current_pen_width = wxRound( pen_diameter );
}; }
virtual void set_default_line_width( int width ) {}; virtual void set_default_line_width( int width ) {};
virtual void set_dash( bool dashed ); virtual void set_dash( bool dashed );
virtual void set_color( int color ) {}; virtual void set_color( int color ) {};
virtual void set_pen_speed( int speed ) virtual void set_pen_speed( int speed )
{ {
wxASSERT( output_file == 0 ); wxASSERT( output_file == 0 );
pen_speed = speed; pen_speed = speed;
} }
virtual void set_pen_number( int number ) virtual void set_pen_number( int number )
{ {
wxASSERT( output_file == 0 ); wxASSERT( output_file == 0 );
pen_number = number; pen_number = number;
} }
virtual void set_pen_diameter( double diameter ) virtual void set_pen_diameter( double diameter )
{ {
wxASSERT( output_file == 0 ); wxASSERT( output_file == 0 );
pen_diameter = diameter; pen_diameter = diameter;
} }
virtual void set_pen_overlap( double overlap ) virtual void set_pen_overlap( double overlap )
{ {
wxASSERT( output_file == 0 ); wxASSERT( output_file == 0 );
pen_overlap = overlap; pen_overlap = overlap;
} }
virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror ); virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror );
virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ); virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 );
virtual void circle( wxPoint pos, int diametre, FILL_T fill, int width = -1 ); virtual void circle( wxPoint pos, int diametre, FILL_T fill, int width = -1 );
/* /*
* Function PlotPoly * Function PlotPoly
* Draw a polygon (filled or not) in HPGL format * Draw a polygon (filled or not) in HPGL format
@ -329,13 +328,14 @@ protected:
class PS_PLOTTER : public PLOTTER class PS_PLOTTER : public PLOTTER
{ {
public: PS_PLOTTER() : PLOTTER( PLOT_FORMAT_POST ) public:
PS_PLOTTER() :
PLOTTER( PLOT_FORMAT_POST )
{ {
plot_scale_adjX = 1; plot_scale_adjX = 1;
plot_scale_adjY = 1; plot_scale_adjY = 1;
} }
virtual bool start_plot( FILE* fout ); virtual bool start_plot( FILE* fout );
virtual bool end_plot(); virtual bool end_plot();
virtual void set_current_line_width( int width ); virtual void set_current_line_width( int width );
@ -349,7 +349,6 @@ public: PS_PLOTTER() : PLOTTER( PLOT_FORMAT_POST )
plot_scale_adjY = scaleY; plot_scale_adjY = scaleY;
} }
virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror ); virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror );
virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ); virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 );
virtual void circle( wxPoint pos, int diametre, FILL_T fill, int width = -1 ); virtual void circle( wxPoint pos, int diametre, FILL_T fill, int width = -1 );
@ -416,7 +415,9 @@ struct APERTURE
class GERBER_PLOTTER : public PLOTTER class GERBER_PLOTTER : public PLOTTER
{ {
public: GERBER_PLOTTER() : PLOTTER( PLOT_FORMAT_GERBER ) public:
GERBER_PLOTTER() :
PLOTTER( PLOT_FORMAT_GERBER )
{ {
work_file = 0; work_file = 0;
final_file = 0; final_file = 0;
@ -428,7 +429,7 @@ public: GERBER_PLOTTER() : PLOTTER( PLOT_FORMAT_GERBER )
virtual void set_current_line_width( int width ); virtual void set_current_line_width( int width );
virtual void set_default_line_width( int width ); virtual void set_default_line_width( int width );
/* RS274X has no dashing, nor colours */ // RS274X has no dashing, nor colours
virtual void set_dash( bool dashed ) {}; virtual void set_dash( bool dashed ) {};
virtual void set_color( int color ) {}; virtual void set_color( int color ) {};
virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror ); virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror );
@ -469,8 +470,7 @@ public: GERBER_PLOTTER() : PLOTTER( PLOT_FORMAT_GERBER )
virtual void SetLayerPolarity( bool aPositive ); virtual void SetLayerPolarity( bool aPositive );
protected: protected:
void select_aperture( const wxSize& size, void select_aperture( const wxSize& size, APERTURE::Aperture_Type type );
APERTURE::Aperture_Type type );
std::vector<APERTURE>::iterator std::vector<APERTURE>::iterator
get_aperture( const wxSize& size, APERTURE::Aperture_Type type ); get_aperture( const wxSize& size, APERTURE::Aperture_Type type );
@ -484,9 +484,12 @@ protected:
std::vector<APERTURE>::iterator current_aperture; std::vector<APERTURE>::iterator current_aperture;
}; };
class DXF_PLOTTER : public PLOTTER class DXF_PLOTTER : public PLOTTER
{ {
public: DXF_PLOTTER() : PLOTTER( PLOT_FORMAT_DXF ) public:
DXF_PLOTTER() :
PLOTTER( PLOT_FORMAT_DXF )
{ {
} }
@ -556,4 +559,4 @@ protected:
int current_color; int current_color;
}; };
#endif // __INCLUDE__PLOT_COMMON_H__ #endif // PLOT_COMMON_H_

View File

@ -116,6 +116,9 @@ public:
const PAGE_INFO& GetPageSettings() const; // overload const PAGE_INFO& GetPageSettings() const; // overload
const wxSize GetPageSizeIU() const; // overload const wxSize GetPageSizeIU() const; // overload
const wxPoint& GetOriginAxisPosition() const; // overload
void SetOriginAxisPosition( const wxPoint& aPosition ); // overload
/** /**
* Function SetBoard * Function SetBoard
* sets the m_Pcb member in such as way as to ensure deleting any previous * sets the m_Pcb member in such as way as to ensure deleting any previous

View File

@ -397,9 +397,6 @@ protected:
/// drill, gerber, and component position files. /// drill, gerber, and component position files.
bool m_showOriginAxis; bool m_showOriginAxis;
/// Position of the origin axis.
wxPoint m_originAxisPosition;
/// True shows the drawing border and title block. /// True shows the drawing border and title block.
bool m_showBorderAndTitleBlock; bool m_showBorderAndTitleBlock;
@ -459,9 +456,8 @@ public:
*/ */
virtual const wxSize GetPageSizeIU() const = 0; virtual const wxSize GetPageSizeIU() const = 0;
wxPoint GetOriginAxisPosition() const { return m_originAxisPosition; } virtual const wxPoint& GetOriginAxisPosition() const = 0;
virtual void SetOriginAxisPosition( const wxPoint& aPosition ) = 0;
void SetOriginAxisPosition( const wxPoint& aPosition ) { m_originAxisPosition = aPosition; }
int GetCursorShape() const { return m_cursorShape; } int GetCursorShape() const { return m_cursorShape; }
@ -666,7 +662,6 @@ public:
/** /**
* Function GetXYSheetReferences * Function GetXYSheetReferences
* returns the X,Y sheet references where the point position is located * returns the X,Y sheet references where the point position is located
* @param aScreen = screen to use
* @param aPosition = position to identify by YX ref * @param aPosition = position to identify by YX ref
* @return a wxString containing the message locator like A3 or B6 * @return a wxString containing the message locator like A3 or B6
* (or ?? if out of page limits) * (or ?? if out of page limits)

View File

@ -125,10 +125,14 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard )
m_Pcb = aBoard; m_Pcb = aBoard;
} }
void PCB_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings ) void PCB_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
{ {
wxASSERT( m_Pcb ); wxASSERT( m_Pcb );
m_Pcb->SetPageSettings( aPageSettings ); m_Pcb->SetPageSettings( aPageSettings );
if( GetScreen() )
GetScreen()->InitDataPoints( aPageSettings.GetSizeIU() );
} }
@ -142,14 +146,25 @@ const PAGE_INFO& PCB_BASE_FRAME::GetPageSettings() const
const wxSize PCB_BASE_FRAME::GetPageSizeIU() const const wxSize PCB_BASE_FRAME::GetPageSizeIU() const
{ {
wxASSERT( m_Pcb ); wxASSERT( m_Pcb );
const PAGE_INFO& page = m_Pcb->GetPageSettings();
// convert paper size into internal units. // this function is only needed because EDA_DRAW_FRAME is not compiled
#if defined( KICAD_NANOMETRE ) // with either -DPCBNEW or -DEESCHEMA, so the virtual is used to route
return page.GetSizeMils() * 25400; // nanometers // into an application specific source file.
#else return m_Pcb->GetPageSettings().GetSizeIU();
return page.GetSizeMils() * 10; // deci-mils }
#endif
const wxPoint& PCB_BASE_FRAME::GetOriginAxisPosition() const
{
wxASSERT( m_Pcb );
return m_Pcb->GetOriginAxisPosition();
}
void PCB_BASE_FRAME::SetOriginAxisPosition( const wxPoint& aPosition )
{
wxASSERT( m_Pcb );
m_Pcb->SetOriginAxisPosition( aPosition );
} }

View File

@ -176,6 +176,9 @@ private:
COLORS_DESIGN_SETTINGS* m_colorsSettings; // Link to current colors settings COLORS_DESIGN_SETTINGS* m_colorsSettings; // Link to current colors settings
PAGE_INFO m_paper; PAGE_INFO m_paper;
/// Position of the origin axis.
wxPoint m_originAxisPosition;
/** /**
* Function chainMarkedSegments * Function chainMarkedSegments
* is used by MarkTrace() to set the BUSY flag of connected segments of the trace * is used by MarkTrace() to set the BUSY flag of connected segments of the trace
@ -538,6 +541,9 @@ public:
const PAGE_INFO& GetPageSettings() const { return m_paper; } const PAGE_INFO& GetPageSettings() const { return m_paper; }
void SetPageSettings( const PAGE_INFO& aPageSettings ) { m_paper = aPageSettings; } void SetPageSettings( const PAGE_INFO& aPageSettings ) { m_paper = aPageSettings; }
const wxPoint& GetOriginAxisPosition() const { return m_originAxisPosition; }
void SetOriginAxisPosition( const wxPoint& aPosition ) { m_originAxisPosition = aPosition; }
/** /**
* Function SetBoardSettings * Function SetBoardSettings
* @return the current COLORS_DESIGN_SETTINGS in use * @return the current COLORS_DESIGN_SETTINGS in use

View File

@ -119,7 +119,7 @@ public:
int m_ShapeMaxRadius; // radius of the circle containing the pad shape int m_ShapeMaxRadius; // radius of the circle containing the pad shape
int m_Attribut; // NORMAL, PAD_SMD, PAD_CONN, PAD_HOLE_NOT_PLATED int m_Attribut; // NORMAL, PAD_SMD, PAD_CONN, PAD_HOLE_NOT_PLATED
int m_Orient; // in 1/10 degrees double m_Orient; // in 1/10 degrees
static int m_PadSketchModePenSize; // Pen size used to draw pads in sketch mode static int m_PadSketchModePenSize; // Pen size used to draw pads in sketch mode
// (mode used to print pads on silkscreen layer) // (mode used to print pads on silkscreen layer)
@ -205,11 +205,11 @@ public:
* sets the rotation angle of the pad. * sets the rotation angle of the pad.
* @param aAngle is tenths of degrees, but will soon be degrees. * @param aAngle is tenths of degrees, but will soon be degrees.
*/ */
void SetOrientation( double aAngle ) { m_Orient = (int) aAngle; } // manage migration to degrees void SetOrientation( double aAngle ) { m_Orient = aAngle; } // manage migration to degrees
/** /**
* Function GetOrientation * Function GetOrientation
* returns the rotation angle of the pad in tenths of degress, but soon degress. * returns the rotation angle of the pad in tenths of degress, but soon degrees.
*/ */
double GetOrientation() const { return m_Orient; } double GetOrientation() const { return m_Orient; }

View File

@ -6,6 +6,7 @@
#include "fctsys.h" #include "fctsys.h"
#include "common.h" #include "common.h"
#include "macros.h"
#include "trigo.h" #include "trigo.h"
#include "class_pcb_screen.h" #include "class_pcb_screen.h"
#include "pcbnew.h" #include "pcbnew.h"
@ -25,19 +26,18 @@
* Zoom 5 and 10 can create artefacts when drawing (integer overflow in low level graphic * Zoom 5 and 10 can create artefacts when drawing (integer overflow in low level graphic
* functions ) * functions )
*/ */
static const double PcbZoomList[] = static const double pcbZoomList[] =
{ {
0.5, 1.0, 1.5, 2.0, 3.0, 4.5, 7.0, 0.5, 1.0, 1.5, 2.0, 3.0, 4.5, 7.0,
10.0, 15.0, 22.0, 35.0, 50.0, 80.0, 120.0, 10.0, 15.0, 22.0, 35.0, 50.0, 80.0, 120.0,
200.0, 350.0, 500.0, 1000.0, 2000.0 200.0, 350.0, 500.0, 1000.0, 2000.0
}; };
#define PCB_ZOOM_LIST_CNT ( sizeof( PcbZoomList ) / sizeof( PcbZoomList[0] ) )
#define MM_TO_PCB_UNITS (10000.0 / 25.4) #define MM_TO_PCB_UNITS (10000.0 / 25.4)
/* Default grid sizes for PCB editor screens. */ // Default grid sizes for PCB editor screens.
static GRID_TYPE PcbGridList[] = static GRID_TYPE pcbGridList[] =
{ {
// predefined grid list in 0.0001 inches // predefined grid list in 0.0001 inches
{ ID_POPUP_GRID_LEVEL_1000, wxRealPoint( 1000, 1000 ) }, { ID_POPUP_GRID_LEVEL_1000, wxRealPoint( 1000, 1000 ) },
@ -66,21 +66,15 @@ static GRID_TYPE PcbGridList[] =
{ ID_POPUP_GRID_LEVEL_0_0_1MM, wxRealPoint( MM_TO_PCB_UNITS * 0.01, MM_TO_PCB_UNITS * 0.01 ) } { ID_POPUP_GRID_LEVEL_0_0_1MM, wxRealPoint( MM_TO_PCB_UNITS * 0.01, MM_TO_PCB_UNITS * 0.01 ) }
}; };
#define PCB_GRID_LIST_CNT ( sizeof( PcbGridList ) / sizeof( GRID_TYPE ) )
PCB_SCREEN::PCB_SCREEN( const wxSize& aPageSizeIU ) :
/*******************************************************************/ BASE_SCREEN( SCREEN_T )
/* Class PCB_SCREEN: class to handle parametres to display a board */
/********************************************************************/
PCB_SCREEN::PCB_SCREEN() : BASE_SCREEN( SCREEN_T )
{ {
size_t i; for( unsigned i = 0; i < DIM( pcbZoomList ); ++i )
m_ZoomList.Add( pcbZoomList[i] );
for( i = 0; i < PCB_ZOOM_LIST_CNT; i++ ) for( unsigned i = 0; i < DIM( pcbGridList ); ++i )
m_ZoomList.Add( PcbZoomList[i] ); AddGrid( pcbGridList[i] );
for( i = 0; i < PCB_GRID_LIST_CNT; i++ )
AddGrid( PcbGridList[i] );
// Set the working grid size to a reasonnable value (in 1/10000 inch) // Set the working grid size to a reasonnable value (in 1/10000 inch)
SetGrid( wxRealPoint( 500, 500 ) ); SetGrid( wxRealPoint( 500, 500 ) );
@ -88,7 +82,10 @@ PCB_SCREEN::PCB_SCREEN() : BASE_SCREEN( SCREEN_T )
m_Active_Layer = LAYER_N_BACK; // default active layer = bottom layer m_Active_Layer = LAYER_N_BACK; // default active layer = bottom layer
m_Route_Layer_TOP = LAYER_N_FRONT; // default layers pair for vias (bottom to top) m_Route_Layer_TOP = LAYER_N_FRONT; // default layers pair for vias (bottom to top)
m_Route_Layer_BOTTOM = LAYER_N_BACK; m_Route_Layer_BOTTOM = LAYER_N_BACK;
m_Zoom = 150; // a default value for zoom
SetZoom( 150 ); // a default value for zoom
InitDataPoints( aPageSizeIU );
} }
@ -104,14 +101,6 @@ int PCB_SCREEN::GetInternalUnits()
} }
/*************************/
/* class DISPLAY_OPTIONS */
/*************************/
/*
* Handle display options like enable/disable some optional drawings:
*/
DISPLAY_OPTIONS::DISPLAY_OPTIONS() DISPLAY_OPTIONS::DISPLAY_OPTIONS()
{ {
DisplayPadFill = FILLED; DisplayPadFill = FILLED;
@ -121,7 +110,7 @@ DISPLAY_OPTIONS::DISPLAY_OPTIONS()
DisplayModEdge = true; DisplayModEdge = true;
DisplayModText = true; DisplayModText = true;
DisplayPcbTrackFill = true; /* false = sketch , true = filled */ DisplayPcbTrackFill = true; // false = sketch , true = filled
ShowTrackClearanceMode = SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS; ShowTrackClearanceMode = SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS;
m_DisplayViaMode = VIA_HOLE_NOT_SHOW; m_DisplayViaMode = VIA_HOLE_NOT_SHOW;

View File

@ -299,7 +299,7 @@ void DIALOG_PAD_PROPERTIES::initValues()
m_PadOrientCtrl->SetValue( msg ); m_PadOrientCtrl->SetValue( msg );
// Pad Orient // Pad Orient
switch( m_dummyPad->m_Orient ) switch( int( m_dummyPad->GetOrientation() ) )
{ {
case 0: case 0:
m_PadOrient->SetSelection( 0 ); m_PadOrient->SetSelection( 0 );
@ -314,7 +314,7 @@ void DIALOG_PAD_PROPERTIES::initValues()
break; break;
case 1800: case 1800:
case - 1800: case -1800:
m_PadOrient->SetSelection( 3 ); m_PadOrient->SetSelection( 3 );
break; break;

View File

@ -145,8 +145,8 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent )
GetBoard()->ComputeBoundingBox(); GetBoard()->ComputeBoundingBox();
// Save the auxiliary origin for the rest of the module // Save the auxiliary origin for the rest of the module
GencadOffsetX = m_originAxisPosition.x; GencadOffsetX = GetOriginAxisPosition().x;
GencadOffsetY = m_originAxisPosition.y; GencadOffsetY = GetOriginAxisPosition().y;
// No idea on *why* this should be needed... maybe to fix net names? // No idea on *why* this should be needed... maybe to fix net names?
Compile_Ratsnest( NULL, true ); Compile_Ratsnest( NULL, true );

View File

@ -93,7 +93,7 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event )
FILE* fpBack = 0; FILE* fpBack = 0;
bool switchedLocale = false; bool switchedLocale = false;
File_Place_Offset = m_originAxisPosition; File_Place_Offset = GetOriginAxisPosition();
/* Calculating the number of useful modules (CMS attribute, not VIRTUAL) */ /* Calculating the number of useful modules (CMS attribute, not VIRTUAL) */
int moduleCount = 0; int moduleCount = 0;

View File

@ -52,7 +52,7 @@ static void TraceFilledCircle( BOARD* Pcb,
static void TraceCircle( int ux0, int uy0, int ux1, int uy1, int lg, int layer, static void TraceCircle( int ux0, int uy0, int ux1, int uy1, int lg, int layer,
int color, int op_logic ); int color, int op_logic );
/* Macro call to update cell. */ // Macro call to update cell.
#define OP_CELL( layer, dy, dx ) \ #define OP_CELL( layer, dy, dx ) \
{ \ { \
if( layer < 0 ) \ if( layer < 0 ) \
@ -109,10 +109,10 @@ void PlacePad( BOARD* Pcb, D_PAD* pt_pad, int color, int marge, int op_logic )
dy += abs( pt_pad->m_DeltaSize.x ) / 2; dy += abs( pt_pad->m_DeltaSize.x ) / 2;
} }
if( ( pt_pad->m_Orient % 900 ) == 0 ) /* The pad is a rectangle // The pad is a rectangle horizontally or vertically.
* horizontally or vertically. */ if( int( pt_pad->GetOrientation() ) % 900 == 0 )
{ {
/* Orientation turned 90 deg. */ // Orientation turned 90 deg.
if( ( pt_pad->m_Orient == 900 ) || ( pt_pad->m_Orient == 2700 ) ) if( ( pt_pad->m_Orient == 900 ) || ( pt_pad->m_Orient == 2700 ) )
{ {
EXCHG( dx, dy ); EXCHG( dx, dy );
@ -158,17 +158,17 @@ void TraceFilledCircle( BOARD* Pcb,
int tstwrite = 0; int tstwrite = 0;
int distmin; int distmin;
/* Determine occupied layer. */ // Determine occupied layer.
/* Single routing layer on bitmap and BOTTOM /* Single routing layer on bitmap and BOTTOM
* Route_Layer_B = Route_Layer_A */ * Route_Layer_B = Route_Layer_A */
if( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) ) if( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) )
trace = 1; /* Trace on BOTTOM */ trace = 1; // Trace on BOTTOM
if( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) if( aLayerMask & GetLayerMask( Route_Layer_TOP ) )
if( Nb_Sides ) if( Nb_Sides )
trace |= 2; /* Trace on TOP */ trace |= 2; // Trace on TOP
if( trace == 0 ) if( trace == 0 )
return; return;
@ -202,13 +202,13 @@ void TraceFilledCircle( BOARD* Pcb,
distmin = radius; distmin = radius;
/* Calculate the bounding rectangle of the circle. */ // Calculate the bounding rectangle of the circle.
ux0 = cx - radius; ux0 = cx - radius;
uy0 = cy - radius; uy0 = cy - radius;
ux1 = cx + radius; ux1 = cx + radius;
uy1 = cy + radius; uy1 = cy + radius;
/* Calculate limit coordinates of cells belonging to the rectangle. */ // Calculate limit coordinates of cells belonging to the rectangle.
row_max = uy1 / Board.m_GridRouting; row_max = uy1 / Board.m_GridRouting;
col_max = ux1 / Board.m_GridRouting; col_max = ux1 / Board.m_GridRouting;
row_min = uy0 / Board.m_GridRouting; // if (uy0 > row_min*Board.m_GridRouting) row_min++; row_min = uy0 / Board.m_GridRouting; // if (uy0 > row_min*Board.m_GridRouting) row_min++;
@ -226,7 +226,7 @@ void TraceFilledCircle( BOARD* Pcb,
if( col_max >= (Ncols - 1) ) if( col_max >= (Ncols - 1) )
col_max = Ncols - 1; col_max = Ncols - 1;
/* Calculate coordinate limits of cell belonging to the rectangle. */ // Calculate coordinate limits of cell belonging to the rectangle.
if( row_min > row_max ) if( row_min > row_max )
row_max = row_min; row_max = row_min;
@ -265,7 +265,7 @@ void TraceFilledCircle( BOARD* Pcb,
* (Adverse event: pad off grid in the center of the 4 neighboring * (Adverse event: pad off grid in the center of the 4 neighboring
* diagonal) */ * diagonal) */
distmin = Board.m_GridRouting / 2 + 1; distmin = Board.m_GridRouting / 2 + 1;
fdistmin = ( (float) distmin * distmin ) * 2; /* Distance to center point diagonally */ fdistmin = ( (float) distmin * distmin ) * 2; // Distance to center point diagonally
for( row = row_min; row <= row_max; row++ ) for( row = row_min; row <= row_max; row++ )
{ {
@ -297,13 +297,13 @@ void TraceSegmentPcb( BOARD* Pcb, TRACK* pt_segm, int color, int marge, int op_l
half_width = ( pt_segm->m_Width / 2 ) + marge; half_width = ( pt_segm->m_Width / 2 ) + marge;
/* Calculate the bounding rectangle of the segment (if H, V or Via) */ // Calculate the bounding rectangle of the segment (if H, V or Via)
ux0 = pt_segm->m_Start.x - Pcb->GetBoundingBox().GetX(); ux0 = pt_segm->m_Start.x - Pcb->GetBoundingBox().GetX();
uy0 = pt_segm->m_Start.y - Pcb->GetBoundingBox().GetY(); uy0 = pt_segm->m_Start.y - Pcb->GetBoundingBox().GetY();
ux1 = pt_segm->m_End.x - Pcb->GetBoundingBox().GetX(); ux1 = pt_segm->m_End.x - Pcb->GetBoundingBox().GetX();
uy1 = pt_segm->m_End.y - Pcb->GetBoundingBox().GetY(); uy1 = pt_segm->m_End.y - Pcb->GetBoundingBox().GetY();
/* Test if VIA (filled circle was drawn) */ // Test if VIA (filled circle was drawn)
if( pt_segm->Type() == PCB_VIA_T ) if( pt_segm->Type() == PCB_VIA_T )
{ {
int mask_layer = 0; int mask_layer = 0;
@ -333,7 +333,7 @@ void TraceSegmentPcb( BOARD* Pcb, TRACK* pt_segm, int color, int marge, int op_l
if( color == VIA_IMPOSSIBLE ) if( color == VIA_IMPOSSIBLE )
layer = -1; layer = -1;
/* The segment is here a straight line or a circle or an arc.: */ // The segment is here a straight line or a circle or an arc.:
if( pt_segm->m_Shape == S_CIRCLE ) if( pt_segm->m_Shape == S_CIRCLE )
{ {
TraceCircle( ux0, uy0, ux1, uy1, half_width, layer, color, op_logic ); TraceCircle( ux0, uy0, ux1, uy1, half_width, layer, color, op_logic );
@ -346,7 +346,7 @@ void TraceSegmentPcb( BOARD* Pcb, TRACK* pt_segm, int color, int marge, int op_l
return; return;
} }
/* The segment is here a line segment. */ // The segment is here a line segment.
if( ( ux0 != ux1 ) && ( uy0 != uy1 ) ) // Segment tilts. if( ( ux0 != ux1 ) && ( uy0 != uy1 ) ) // Segment tilts.
{ {
DrawSegmentQcq( ux0, uy0, ux1, uy1, half_width, layer, color, op_logic ); DrawSegmentQcq( ux0, uy0, ux1, uy1, half_width, layer, color, op_logic );
@ -396,7 +396,7 @@ void TracePcbLine( int x0, int y0, int x1, int y1, int layer, int color, int op_
lim = y1 / Board.m_GridRouting; lim = y1 / Board.m_GridRouting;
dx = x0 / Board.m_GridRouting; dx = x0 / Board.m_GridRouting;
/* Clipping limits of board. */ // Clipping limits of board.
if( ( dx < 0 ) || ( dx >= Ncols ) ) if( ( dx < 0 ) || ( dx >= Ncols ) )
return; return;
@ -423,7 +423,7 @@ void TracePcbLine( int x0, int y0, int x1, int y1, int layer, int color, int op_
lim = x1 / Board.m_GridRouting; lim = x1 / Board.m_GridRouting;
dy = y0 / Board.m_GridRouting; dy = y0 / Board.m_GridRouting;
/* Clipping limits of board. */ // Clipping limits of board.
if( ( dy < 0 ) || ( dy >= Nrows ) ) if( ( dy < 0 ) || ( dy >= Nrows ) )
return; return;
@ -441,8 +441,8 @@ void TracePcbLine( int x0, int y0, int x1, int y1, int layer, int color, int op_
return; return;
} }
/* Here is some perspective: using the algorithm LUCAS. */ // Here is some perspective: using the algorithm LUCAS.
if( abs( x1 - x0 ) >= abs( y1 - y0 ) ) /* segment slightly inclined/ */ if( abs( x1 - x0 ) >= abs( y1 - y0 ) ) // segment slightly inclined/
{ {
if( x1 < x0 ) if( x1 < x0 )
{ {
@ -526,10 +526,10 @@ void TraceFilledRectangle( BOARD* Pcb, int ux0, int uy0, int ux1, int uy1,
void (* WriteCell)( int, int, int, MATRIX_CELL ); void (* WriteCell)( int, int, int, MATRIX_CELL );
if( ( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) ) ) if( ( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) ) )
trace = 1; /* Trace on BOTTOM */ trace = 1; // Trace on BOTTOM
if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && Nb_Sides ) if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && Nb_Sides )
trace |= 2; /* Trace on TOP */ trace |= 2; // Trace on TOP
if( trace == 0 ) if( trace == 0 )
return; return;
@ -563,7 +563,7 @@ void TraceFilledRectangle( BOARD* Pcb, int ux0, int uy0, int ux1, int uy1,
ux1 -= Pcb->GetBoundingBox().GetX(); ux1 -= Pcb->GetBoundingBox().GetX();
uy1 -= Pcb->GetBoundingBox().GetY(); uy1 -= Pcb->GetBoundingBox().GetY();
/* Calculating limits coord cells belonging to the rectangle. */ // Calculating limits coord cells belonging to the rectangle.
row_max = uy1 / Board.m_GridRouting; row_max = uy1 / Board.m_GridRouting;
col_max = ux1 / Board.m_GridRouting; col_max = ux1 / Board.m_GridRouting;
row_min = uy0 / Board.m_GridRouting; row_min = uy0 / Board.m_GridRouting;
@ -606,8 +606,8 @@ void TraceFilledRectangle( BOARD* Pcb, int ux0, int uy0, int ux1, int uy1,
int angle, int aLayerMask, int color, int op_logic ) int angle, int aLayerMask, int color, int op_logic )
{ {
int row, col; int row, col;
int cx, cy; /* Center of rectangle */ int cx, cy; // Center of rectangle
int radius; /* Radius of the circle */ int radius; // Radius of the circle
int row_min, row_max, col_min, col_max; int row_min, row_max, col_min, col_max;
int rotrow, rotcol; int rotrow, rotcol;
int trace = 0; int trace = 0;
@ -615,12 +615,12 @@ void TraceFilledRectangle( BOARD* Pcb, int ux0, int uy0, int ux1, int uy1,
void (* WriteCell)( int, int, int, MATRIX_CELL ); void (* WriteCell)( int, int, int, MATRIX_CELL );
if( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) ) if( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) )
trace = 1; /* Trace on BOTTOM */ trace = 1; // Trace on BOTTOM
if( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) if( aLayerMask & GetLayerMask( Route_Layer_TOP ) )
{ {
if( Nb_Sides ) if( Nb_Sides )
trace |= 2; /* Trace on TOP */ trace |= 2; // Trace on TOP
} }
if( trace == 0 ) if( trace == 0 )
@ -660,7 +660,7 @@ void TraceFilledRectangle( BOARD* Pcb, int ux0, int uy0, int ux1, int uy1,
radius = (int) sqrt( (double) ( cx - ux0 ) * ( cx - ux0 ) radius = (int) sqrt( (double) ( cx - ux0 ) * ( cx - ux0 )
+ (double) ( cy - uy0 ) * ( cy - uy0 ) ); + (double) ( cy - uy0 ) * ( cy - uy0 ) );
/* Calculating coordinate limits belonging to the rectangle. */ // Calculating coordinate limits belonging to the rectangle.
row_max = ( cy + radius ) / Board.m_GridRouting; row_max = ( cy + radius ) / Board.m_GridRouting;
col_max = ( cx + radius ) / Board.m_GridRouting; col_max = ( cx + radius ) / Board.m_GridRouting;
row_min = ( cy - radius ) / Board.m_GridRouting; row_min = ( cy - radius ) / Board.m_GridRouting;
@ -756,14 +756,14 @@ void DrawSegmentQcq( int ux0, int uy0, int ux1, int uy1, int lg, int layer,
break; break;
} }
/* Make coordinate ux1 tj > ux0 to simplify calculations */ // Make coordinate ux1 tj > ux0 to simplify calculations
if( ux1 < ux0 ) if( ux1 < ux0 )
{ {
EXCHG( ux1, ux0 ); EXCHG( ux1, ux0 );
EXCHG( uy1, uy0 ); EXCHG( uy1, uy0 );
} }
/* Calculating the incrementing the Y axis */ // Calculating the incrementing the Y axis
inc = 1; inc = 1;
if( uy1 < uy0 ) if( uy1 < uy0 )
@ -819,7 +819,7 @@ void DrawSegmentQcq( int ux0, int uy0, int ux1, int uy1, int lg, int layer,
angle = -900; angle = -900;
} }
RotatePoint( &dx, &dy, angle ); /* dx = length, dy = 0 */ RotatePoint( &dx, &dy, angle ); // dx = length, dy = 0
for( col = col_min; col <= col_max; col++ ) for( col = col_min; col <= col_max; col++ )
{ {
@ -833,7 +833,7 @@ void DrawSegmentQcq( int ux0, int uy0, int ux1, int uy1, int lg, int layer,
RotatePoint( &cx, &cy, angle ); RotatePoint( &cx, &cy, angle );
if( abs( cy ) > lg ) if( abs( cy ) > lg )
continue; /* The point is too far on the Y axis. */ continue; // The point is too far on the Y axis.
/* This point a test is close to the segment: the position /* This point a test is close to the segment: the position
* along the X axis must be tested. * along the X axis must be tested.
@ -844,7 +844,7 @@ void DrawSegmentQcq( int ux0, int uy0, int ux1, int uy1, int lg, int layer,
continue; continue;
} }
/* Examination of extremities are rounded. */ // Examination of extremities are rounded.
if( ( cx < 0 ) && ( cx >= -lg ) ) if( ( cx < 0 ) && ( cx >= -lg ) )
{ {
if( ( ( cx * cx ) + ( cy * cy ) ) <= ( lg * lg ) ) if( ( ( cx * cx ) + ( cy * cy ) ) <= ( lg * lg ) )

View File

@ -389,8 +389,7 @@ int PCB_BASE_FRAME::ReadSetup( LINE_READER* aReader )
if( data ) if( data )
gy = atoi( data ); gy = atoi( data );
m_originAxisPosition.x = gx; SetOriginAxisPosition( wxPoint( gx, gy ) );
m_originAxisPosition.y = gy;
continue; continue;
} }

View File

@ -666,7 +666,7 @@ bool D_PAD::Save( FILE* aFile ) const
break; break;
} }
fprintf( aFile, "Sh \"%.4s\" %c %d %d %d %d %d\n", fprintf( aFile, "Sh \"%.4s\" %c %d %d %d %d %g\n",
m_Padname, cshape, m_Size.x, m_Size.y, m_Padname, cshape, m_Size.x, m_Size.y,
m_DeltaSize.x, m_DeltaSize.y, m_Orient ); m_DeltaSize.x, m_DeltaSize.y, m_Orient );
@ -938,7 +938,7 @@ int D_PAD::ReadDescr( LINE_READER* aReader )
if( *PtLine == '"' ) if( *PtLine == '"' )
PtLine++; PtLine++;
nn = sscanf( PtLine, " %s %d %d %d %d %d", nn = sscanf( PtLine, " %s %d %d %d %d %lf",
BufCar, &m_Size.x, &m_Size.y, BufCar, &m_Size.x, &m_Size.y,
&m_DeltaSize.x, &m_DeltaSize.y, &m_DeltaSize.x, &m_DeltaSize.y,
&m_Orient ); &m_Orient );

View File

@ -564,10 +564,7 @@ void KICAD_PLUGIN::loadSETUP()
BIU gx = biuParse( line + SZ( "AuxiliaryAxisOrg" ), &data ); BIU gx = biuParse( line + SZ( "AuxiliaryAxisOrg" ), &data );
BIU gy = biuParse( data ); BIU gy = biuParse( data );
/* @todo m_board->SetOriginAxisPosition( wxPoint( gx, gy ) );
m_originAxisPosition.x = gx;
m_originAxisPosition.y = gy;
*/
} }
#if 1 // defined(PCBNEW) #if 1 // defined(PCBNEW)

View File

@ -160,7 +160,7 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( wxWindow* father,
SetBoard( g_ModuleEditor_Pcb ); SetBoard( g_ModuleEditor_Pcb );
if( s_screenModule == NULL ) if( s_screenModule == NULL )
s_screenModule = new PCB_SCREEN(); s_screenModule = new PCB_SCREEN( GetPageSettings().GetSizeIU() );
SetScreen( s_screenModule ); SetScreen( s_screenModule );
GetBoard()->SetDesignSettings( s_ModuleEditorDesignSetting ); GetBoard()->SetDesignSettings( s_ModuleEditorDesignSetting );

View File

@ -423,7 +423,7 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
case ID_PCB_PLACE_OFFSET_COORD_BUTT: case ID_PCB_PLACE_OFFSET_COORD_BUTT:
m_canvas->DrawAuxiliaryAxis( aDC, GR_XOR ); m_canvas->DrawAuxiliaryAxis( aDC, GR_XOR );
m_originAxisPosition = GetScreen()->GetCrossHairPosition(); SetOriginAxisPosition( GetScreen()->GetCrossHairPosition() );
m_canvas->DrawAuxiliaryAxis( aDC, GR_COPY ); m_canvas->DrawAuxiliaryAxis( aDC, GR_COPY );
OnModify(); OnModify();
break; break;

View File

@ -317,8 +317,11 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title,
SetIcon( icon ); SetIcon( icon );
m_internalUnits = PCB_INTERNAL_UNIT; // Unites internes = 1/10000 inch m_internalUnits = PCB_INTERNAL_UNIT; // Unites internes = 1/10000 inch
SetScreen( new PCB_SCREEN() );
GetScreen()->m_Center = false; // PCB drawings start in the upper left corner. SetScreen( new PCB_SCREEN( GetPageSettings().GetSizeIU() ) );
// PCB drawings start in the upper left corner.
GetScreen()->m_Center = false;
// LoadSettings() *after* creating m_LayersManager, because LoadSettings() // LoadSettings() *after* creating m_LayersManager, because LoadSettings()
// initialize parameters in m_LayersManager // initialize parameters in m_LayersManager
@ -403,7 +406,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title,
m_Layers->ReFillRender(); // Update colors in Render after the config is read m_Layers->ReFillRender(); // Update colors in Render after the config is read
syncLayerWidget(); syncLayerWidget();
m_auimgr.Update(); m_auimgr.Update();
} }

View File

@ -17,7 +17,7 @@ class PCB_TARGET;
class ZONE_CONTAINER; class ZONE_CONTAINER;
/* Shared Config keys for plot and print */ // Shared Config keys for plot and print
#define OPTKEY_LAYERBASE wxT( "PlotLayer_%d" ) #define OPTKEY_LAYERBASE wxT( "PlotLayer_%d" )
#define OPTKEY_PRINT_X_FINESCALE_ADJ wxT( "PrintXFineScaleAdj" ) #define OPTKEY_PRINT_X_FINESCALE_ADJ wxT( "PrintXFineScaleAdj" )
#define OPTKEY_PRINT_Y_FINESCALE_ADJ wxT( "PrintYFineScaleAdj" ) #define OPTKEY_PRINT_Y_FINESCALE_ADJ wxT( "PrintYFineScaleAdj" )
@ -27,10 +27,10 @@ class ZONE_CONTAINER;
#define OPTKEY_PRINT_MONOCHROME_MODE wxT( "PrintMonochrome" ) #define OPTKEY_PRINT_MONOCHROME_MODE wxT( "PrintMonochrome" )
#define OPTKEY_PRINT_PADS_DRILL wxT( "PrintPadsDrillOpt" ) #define OPTKEY_PRINT_PADS_DRILL wxT( "PrintPadsDrillOpt" )
/* Conversion unit constants. */ // Conversion unit constants.
/* Convert pcb dimension of 0.1 mil to PS units of inches. */ // Convert pcb dimension of 0.1 mil to PS units of inches.
#define SCALE_PS .0001 #define SCALE_PS .0001
/* Convert dimension 0.1 mil -> HPGL units: */ // Convert dimension 0.1 mil -> HPGL units:
#define SCALE_HPGL 0.102041 #define SCALE_HPGL 0.102041
// Small drill marks diameter value (in internal value = 1/10000 inch) // Small drill marks diameter value (in internal value = 1/10000 inch)
@ -57,8 +57,8 @@ void Plot_1_EdgeModule( PLOTTER* plotter, EDGE_MODULE* PtEdge,
void PlotFilledAreas( PLOTTER* plotter, ZONE_CONTAINER* aZone, void PlotFilledAreas( PLOTTER* plotter, ZONE_CONTAINER* aZone,
GRTraceMode trace_mode ); GRTraceMode trace_mode );
/* PLOTGERB.CPP */ // PLOTGERB.CPP
void SelectD_CODE_For_LineDraw( PLOTTER* plotter, int aSize ); void SelectD_CODE_For_LineDraw( PLOTTER* plotter, int aSize );
#endif /* #define PCBPLOT_H */ #endif // #define PCBPLOT_H

View File

@ -35,12 +35,12 @@ bool PCB_BASE_FRAME::ExportToGerberFile( const wxString& aFullFileName, int aLay
wxPoint offset; wxPoint offset;
/* Calculate scaling from Pcbnew units (in 0.1 mil or 0.0001 inch) to gerber units */ // Calculate scaling from Pcbnew units (in 0.1 mil or 0.0001 inch) to gerber units
double scale = g_PcbPlotOptions.m_PlotScale; double scale = g_PcbPlotOptions.m_PlotScale;
if( aPlotOriginIsAuxAxis ) if( aPlotOriginIsAuxAxis )
{ {
offset = m_originAxisPosition; offset = GetOriginAxisPosition();
} }
else else
{ {
@ -48,9 +48,11 @@ bool PCB_BASE_FRAME::ExportToGerberFile( const wxString& aFullFileName, int aLay
offset.y = 0; offset.y = 0;
} }
SetLocaleTo_C_standard(); LOCALE_IO toggle;
PLOTTER* plotter = new GERBER_PLOTTER(); PLOTTER* plotter = new GERBER_PLOTTER();
/* No mirror and scaling for gerbers! */
// No mirror and scaling for gerbers!
plotter->set_viewport( offset, scale, 0 ); plotter->set_viewport( offset, scale, 0 );
plotter->set_default_line_width( g_PcbPlotOptions.m_PlotLineWidth ); plotter->set_default_line_width( g_PcbPlotOptions.m_PlotLineWidth );
plotter->set_creator( wxT( "PCBNEW-RS274X" ) ); plotter->set_creator( wxT( "PCBNEW-RS274X" ) );
@ -78,7 +80,6 @@ bool PCB_BASE_FRAME::ExportToGerberFile( const wxString& aFullFileName, int aLay
} }
delete plotter; delete plotter;
SetLocaleTo_Default();
return true; return true;
} }

View File

@ -477,7 +477,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
int px = pt_cur_ch->m_PadStart->GetPosition().x; int px = pt_cur_ch->m_PadStart->GetPosition().x;
int py = pt_cur_ch->m_PadStart->GetPosition().y; int py = pt_cur_ch->m_PadStart->GetPosition().y;
if( ( ( pt_cur_ch->m_PadStart->m_Orient / 900 ) & 1 ) != 0 ) if( ( ( int( pt_cur_ch->m_PadStart->m_Orient ) / 900 ) & 1 ) != 0 )
EXCHG( dx, dy ); EXCHG( dx, dy );
if( ( abs( cX - px ) > dx ) || ( abs( cY - py ) > dy ) ) if( ( abs( cX - px ) > dx ) || ( abs( cY - py ) > dy ) )
@ -492,7 +492,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
px = pt_cur_ch->m_PadEnd->GetPosition().x; px = pt_cur_ch->m_PadEnd->GetPosition().x;
py = pt_cur_ch->m_PadEnd->GetPosition().y; py = pt_cur_ch->m_PadEnd->GetPosition().y;
if( ( (pt_cur_ch->m_PadEnd->m_Orient / 900) & 1 ) != 0 ) if( ( ( int( pt_cur_ch->m_PadEnd->m_Orient ) / 900) & 1 ) != 0 )
EXCHG( dx, dy ); EXCHG( dx, dy );
if( ( abs( cX - px ) > dx ) || ( abs( cY - py ) > dy ) ) if( ( abs( cX - px ) > dx ) || ( abs( cY - py ) > dy ) )