From 55eefbbe340c23a98e269193bed402016e9b0738 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sat, 9 Oct 2010 13:03:03 +0200 Subject: [PATCH] Fixed a bug about Aperture Definition having parameters for an aperture macro. See Changlog for not yet supported RX274X commands. Having still problems with arcs in some gereber files. --- CHANGELOG.txt | 16 + gerbview/CMakeLists.txt | 2 +- gerbview/class_GERBER.cpp | 39 +- gerbview/class_GERBER.h | 79 +- gerbview/class_aperture_macro.cpp | 6 +- gerbview/class_aperture_macro.h | 2 +- ...t.gbx => aperture_macro-no_param-test.gbr} | 0 .../aperture_macro-with_param-test.gbr | 99 ++ gerbview/gerberframe.cpp | 5 +- gerbview/gerbview.cpp | 11 +- gerbview/gerbview.h | 1 - gerbview/gerbview_config.h | 64 +- .../gerbview_dialog_display_options_frame.cpp | 52 +- ...view_dialog_display_options_frame_base.cpp | 209 +-- ...view_dialog_display_options_frame_base.fbp | 1181 ++++++++++------- ...rbview_dialog_display_options_frame_base.h | 122 +- gerbview/gerbview_id.h | 3 +- gerbview/menubar.cpp | 10 +- gerbview/options.cpp | 125 -- gerbview/readgerb.cpp | 9 +- gerbview/rs274d.cpp | 2 +- gerbview/rs274x.cpp | 133 +- gerbview/wxGerberFrame.h | 3 +- 23 files changed, 1214 insertions(+), 959 deletions(-) rename gerbview/gerber_test_files/{aperture_macro-no_param-test.gbx => aperture_macro-no_param-test.gbr} (100%) create mode 100644 gerbview/gerber_test_files/aperture_macro-with_param-test.gbr diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 1e4e07eb5a..fe5f00fdcc 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,22 @@ KiCad ChangeLog 2010 Please add newer entries at the top, list the date and your name with email address. +2010-oct-09, UPDATE Jean-Pierre Charras +================================================================================ +++gerbview: + Fixed some issues: + Now aperture macro with parameters works. + Note: complex parameters (like $1 + 4) are not supported + + other commands not yet supported: + SF (scale factors) + Offsets (image and layer) + Rotations (image and layer) + Axis definition + Mirroring + SR (Step and repeat) + KO + 2010-Oct-5 UPDATE Dick Hollenbeck ================================================================================ ++richio: diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index 4313f77ef7..8e4926cab0 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -15,7 +15,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ### set(GERBVIEW_SRCS block.cpp - class_aperture_macro.cpp + class_aperture_macro.cpp class_GERBER.cpp class_gerber_draw_item.cpp class_gerbview_layer_widget.cpp diff --git a/gerbview/class_GERBER.cpp b/gerbview/class_GERBER.cpp index c5a3e1dd25..db90e9584e 100644 --- a/gerbview/class_GERBER.cpp +++ b/gerbview/class_GERBER.cpp @@ -119,28 +119,27 @@ APERTURE_MACRO* GERBER::FindApertureMacro( const APERTURE_MACRO& aLookup ) void GERBER::ResetDefaultValues() { m_FileName.Empty(); - m_ImageName = wxT( "no image name" ); // Image name from the IN command - m_LayerName = wxT( "no layer name" ); // Layer name from the LN command - m_LayerNegative = FALSE; // TRUE = Negative Layer - m_ImageNegative = FALSE; // TRUE = Negative image - m_GerbMetric = FALSE; // FALSE = Inches, TRUE = metric - m_Relative = FALSE; // FALSE = absolute Coord, RUE = - // relative Coord - m_NoTrailingZeros = FALSE; // True: trailing zeros deleted - m_MirorA = FALSE; // True: miror / axe A (X) - m_MirorB = FALSE; // True: miror / axe B (Y) - m_Has_DCode = FALSE; // TRUE = DCodes in file - // FALSE = no DCode-> - // search for separate DCode file + m_ImageName = wxT( "no image name" ); // Image name from the IN command + m_LayerName = wxT( "no layer name" ); // Layer name from the LN command + m_LayerNegative = false; // true = Negative Layer + m_ImageNegative = false; // true = Negative image + m_GerbMetric = false; // false = Inches, true = metric + m_Relative = false; // false = absolute Coord, + // true = relative Coord + m_NoTrailingZeros = false; // true: trailing zeros deleted + m_MirorA = false; // true: miror / axe A (default = X) + m_MirorB = false; // true: miror / axe B (default = Y) + m_Has_DCode = false; // true = DCodes in file + // false = no DCode-> + // search for separate DCode file - m_FmtScale.x = m_FmtScale.y = g_Default_GERBER_Format % 10; - m_FmtLen.x = m_FmtLen.y = m_FmtScale.x + (g_Default_GERBER_Format / 10); + m_FmtScale.x = m_FmtScale.y = 4; // Initialize default format to 3.4 => 4 + m_FmtLen.x = m_FmtLen.y = 3+4; // Initialize default format len = 3+4 - m_LayerScale.x = m_LayerScale.y = 1.0; // scale (X and Y) this - // layer - m_Rotation = 0; + m_LayerScale.x = m_LayerScale.y = 1.0; // scale (A and B) this layer + m_Rotation = 0; // Allowed 0, 90, 180, 270 m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // Linear, 90 arc, Circ. - m_360Arc_enbl = FALSE; // 360 deg circular + m_360Arc_enbl = false; // 360 deg circular // interpolation disable m_Current_Tool = 0; // Current Tool (Dcode) // number selected @@ -154,7 +153,7 @@ void GERBER::ResetDefaultValues() // plot arcs & circles m_Current_File = NULL; // File to read m_FilesPtr = 0; - m_PolygonFillMode = FALSE; + m_PolygonFillMode = false; m_PolygonFillModeState = 0; } diff --git a/gerbview/class_GERBER.h b/gerbview/class_GERBER.h index 3b46c9501d..6c805483bd 100644 --- a/gerbview/class_GERBER.h +++ b/gerbview/class_GERBER.h @@ -30,44 +30,44 @@ class GERBER BOARD* m_Pcb; public: - wxString m_FileName; // Full File Name for this layer - wxString m_ImageName; // Image name, from IN * command - wxString m_LayerName; // Layer name, from LN * command - int m_Layer; // Layer Number - bool m_LayerNegative; // TRUE = Negative Layer - bool m_GerbMetric; // FALSE = Inches, TRUE = metric - bool m_Relative; // FALSE = absolute Coord, RUE = relative Coord - bool m_NoTrailingZeros; // True: remove tailing zeros. - bool m_MirorA; // True: miror / axe A (X) - bool m_MirorB; // True: miror / axe B (Y) - bool m_Has_DCode; // TRUE = DCodes in file - // (FALSE = no DCode -> separate DCode file - wxPoint m_Offset; // Coord Offset - wxSize m_FmtScale; // Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4 - wxSize m_FmtLen; // Nb chars per coord. ex fmt 2.3, m_FmtLen = 5 - wxRealPoint m_LayerScale; // scale (X and Y) of layer. + wxString m_FileName; // Full File Name for this layer + wxString m_ImageName; // Image name, from IN * command + wxString m_LayerName; // Layer name, from LN * command + int m_Layer; // Layer Number + bool m_LayerNegative; // true = Negative Layer + bool m_GerbMetric; // false = Inches, true = metric + bool m_Relative; // false = absolute Coord, true = relative Coord + bool m_NoTrailingZeros; // true: remove tailing zeros. + bool m_MirorA; // true: miror / axe A (X) + bool m_MirorB; // true: miror / axe B (Y) + bool m_Has_DCode; // true = DCodes in file + // (false = no DCode -> separate DCode file + wxPoint m_Offset; // Coord Offset + wxSize m_FmtScale; // Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4 + wxSize m_FmtLen; // Nb chars per coord. ex fmt 2.3, m_FmtLen = 5 + wxRealPoint m_LayerScale; // scale (X and Y) of layer. int m_Rotation; - int m_Iterpolation; // Linear, 90 arc, Circ. - bool m_ImageNegative; // TRUE = Negative image - int m_Current_Tool; // Current Tool (Dcode) number selected - int m_Last_Pen_Command; // Current or last pen state (0..9, set by Dn option with n <10 - int m_CommandState; // state of gerber analysis command. - wxPoint m_CurrentPos; // current specified coord for plot - wxPoint m_PreviousPos; // old current specified coord for plot - wxPoint m_IJPos; // IJ coord (for arcs & circles ) + int m_Iterpolation; // Linear, 90 arc, Circ. + bool m_ImageNegative; // true = Negative image + int m_Current_Tool; // Current Tool (Dcode) number selected + int m_Last_Pen_Command; // Current or last pen state (0..9, set by Dn option with n <10 + int m_CommandState; // state of gerber analysis command. + wxPoint m_CurrentPos; // current specified coord for plot + wxPoint m_PreviousPos; // old current specified coord for plot + wxPoint m_IJPos; // IJ coord (for arcs & circles ) - FILE* m_Current_File; // Current file to read - #define INCLUDE_FILES_COUNT_MAX 10 - FILE* m_FilesList[INCLUDE_FILES_COUNT_MAX+2]; // Included files list - int m_FilesPtr; // Stack pointer for files list + FILE* m_Current_File; // Current file to read + #define INCLUDE_FILES_CNT_MAX 10 + FILE* m_FilesList[INCLUDE_FILES_CNT_MAX + 2]; // Included files list + int m_FilesPtr; // Stack pointer for files list - int m_Selected_Tool; // Pour editions: Tool (Dcode) selectionn� + int m_Selected_Tool; // For hightlight: current selected Dcode - bool m_360Arc_enbl; // Enbl 360 deg circular interpolation - bool m_PolygonFillMode; // Enbl polygon mode (read coord as a polygon descr) - int m_PolygonFillModeState; // In polygon mode: 0 = first segm, 1 = next segm + bool m_360Arc_enbl; // Enbl 360 deg circular interpolation + bool m_PolygonFillMode; // Enable polygon mode (read coord as a polygon descr) + int m_PolygonFillModeState; // In polygon mode: 0 = first segm, 1 = next segm - APERTURE_MACRO_SET m_aperture_macros; ///< a collection of APERTURE_MACROS, sorted by name + APERTURE_MACRO_SET m_aperture_macros; ///< a collection of APERTURE_MACROS, sorted by name public: GERBER( WinEDA_GerberFrame* aParent, int layer ); @@ -94,10 +94,23 @@ public: */ void InitToolTable(); + /** function ReadXYCoord + * Returns the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm) + */ wxPoint ReadXYCoord( char*& Text ); + + /** function ReadIJCoord + * Returns the current coordinate type pointed to by InnJnn Text (InnnnJmmmm) + * These coordinates are relative, so if coordinate is absent, it's value + * defaults to 0 + */ wxPoint ReadIJCoord( char*& Text ); + + // functions to read G commands or D commands: int ReturnGCodeNumber( char*& Text ); int ReturnDCodeNumber( char*& Text ); + + // functions to execute G commands or D commands: bool Execute_G_Command( char*& text, int G_commande ); bool Execute_DCODE_Command( WinEDA_GerberFrame* frame, char*& text, int D_commande ); diff --git a/gerbview/class_aperture_macro.cpp b/gerbview/class_aperture_macro.cpp index a162d185ac..256038d7e2 100644 --- a/gerbview/class_aperture_macro.cpp +++ b/gerbview/class_aperture_macro.cpp @@ -75,7 +75,7 @@ bool AM_PRIMITIVE::mapExposure( GERBER_DRAW_ITEM* aParent ) case AMP_THERMAL: case AMP_POLYGON: // All have an exposure parameter and can return true or false - switch( GetExposure() ) + switch( GetExposure(aParent) ) { case 0: // exposure always OFF exposure = false; @@ -108,11 +108,11 @@ bool AM_PRIMITIVE::mapExposure( GERBER_DRAW_ITEM* aParent ) * returns the first parameter in integer form. Some but not all primitives * use the first parameter as an exposure control. */ -int AM_PRIMITIVE::GetExposure() const +int AM_PRIMITIVE::GetExposure(GERBER_DRAW_ITEM* aParent) const { // No D_CODE* for GetValue() wxASSERT( params.size() && params[0].IsImmediate() ); - return (int) params[0].GetValue( NULL ); + return (int) params[0].GetValue( aParent->GetDcodeDescr() ); } /** function DrawBasicShape diff --git a/gerbview/class_aperture_macro.h b/gerbview/class_aperture_macro.h index 98fabc7d1c..dde4b72694 100644 --- a/gerbview/class_aperture_macro.h +++ b/gerbview/class_aperture_macro.h @@ -84,7 +84,7 @@ public: * returns the first parameter in integer form. Some but not all primitives * use the first parameter as an exposure control. */ - int GetExposure() const; + int GetExposure( GERBER_DRAW_ITEM* aParent ) const; /** * Function mapExposure diff --git a/gerbview/gerber_test_files/aperture_macro-no_param-test.gbx b/gerbview/gerber_test_files/aperture_macro-no_param-test.gbr similarity index 100% rename from gerbview/gerber_test_files/aperture_macro-no_param-test.gbx rename to gerbview/gerber_test_files/aperture_macro-no_param-test.gbr diff --git a/gerbview/gerber_test_files/aperture_macro-with_param-test.gbr b/gerbview/gerber_test_files/aperture_macro-with_param-test.gbr new file mode 100644 index 0000000000..cadd73c758 --- /dev/null +++ b/gerbview/gerber_test_files/aperture_macro-with_param-test.gbr @@ -0,0 +1,99 @@ +G04 Verification of all aperture macros * +G04 Handcoded by Stefan Petersen * +%MOIN*% +%FSLAX23Y23*% +%OFA0.0000B0.0000*% +G90* +%AMCIRCLE* +1,1,$1,0,0* +% +%AMVECTOR* +2,1,$1,0,0,$2,$3,-135* +% +%AMVECTOR1* +2,1,0.3,0,0,1,1,-15* +% +%AMLINE1* +21,1,$1,$2,0,0,-135* +% +%AMLINE* +21,1,0.3,0.03,0,0,-135* +% +%AMLINE2* +22,1,$1,$2,0,0,-45* +% +%AMLINELOWLEFT* +22,1,0.2,1.5,0,0,-15* +% +%AMOUTLINE* +4,1,3,0.0,0.0,0.0,0.5,0.5,0.5,0.5,0.0,-25* +% +%AMPOLYGON* +5,1,$1,0,0,0.5,$2* +% +%AMMOIRE* +6,0,0,1.0,0.1,0.4,2,0.01,1,20* +% +%AMTHERMAL* +7,0,0,1.0,0.3,0.01,-13* +% +%ADD10C,0.0650*% +%ADD11CIRCLE,.5*% +%ADD12VECTOR,0.05X1X0*% +%ADD13LINE1,0.3X0.05*% +%ADD14LINE2,0.8X0.5*% +%ADD15OUTLINE*% +%ADD16POLYGON,3X-10*% +%ADD17POLYGON,6X0*% +%ADD18MOIRE*% +%ADD19THERMAL*% +%ADD20LINELOWLEFT*% +G04 Outline* +X0Y0D02* +G54D10* +X0Y0D01* +X10000D01* +Y10000D01* +X0D01* +Y0D01* +G04 Dots * +X2000Y5000D03* +X3000D03* +X4000D03* +X5000D03* +X6000D03* +X7000D03* +X8000D03* +X9000D03* +Y6200X9000D03* +G04 Draw circle* +G54D11* +X2000Y5000D03* +G04 Draw line vector * +G54D12* +X3000D03* +G04 Draw line center * +G54D13* +X4000D03* +G04 Draw line lower left * +G54D14* +X5000D03* +G04 Draw outline * +G54D15* +X6000D03* +G04 Draw polygon 1 * +G54D16* +X7000D03* +G04 Draw polygon 1 * +G54D17* +X8000D03* +G04 Draw Moire * +G54D18* +X9000D03* +G04 Draw vector at 0,0* +G54D20* +X00000Y00000D03* +G04 Draw Thermal * +G54D19* +Y6200X9000D03* +M02* diff --git a/gerbview/gerberframe.cpp b/gerbview/gerberframe.cpp index a1d55a618c..c3ec671fc0 100644 --- a/gerbview/gerberframe.cpp +++ b/gerbview/gerberframe.cpp @@ -61,8 +61,7 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) WinEDA_GerberFrame::Process_Config ) EVT_MENU( ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, WinEDA_GerberFrame::OnSelectOptionToolbar ) - EVT_MENU( ID_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberGeneralOptionsFrame ) - EVT_MENU( ID_GERBVIEW_DISPLAY_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog ) + EVT_MENU( ID_GERBVIEW_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberOptionsDialog ) EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, WinEDA_DrawFrame::SetLanguage ) @@ -504,7 +503,7 @@ void WinEDA_GerberFrame::UpdateTitleAndInfo() text = _( "File:" ); text << wxT( " " ) << gerber->m_FileName; SetTitle( text ); - + // Display Image Name and Layer Name (from the current gerber data): text.Printf( _("Image name: \"%s\" Layer name \"%s\""), diff --git a/gerbview/gerbview.cpp b/gerbview/gerbview.cpp index 4e74989dbf..f1a90ed91a 100644 --- a/gerbview/gerbview.cpp +++ b/gerbview/gerbview.cpp @@ -79,6 +79,11 @@ bool WinEDA_App::OnInit() InitEDA_Appl( wxT( "GerbView" ), APP_TYPE_GERBVIEW ); + if( m_Checker && m_Checker->IsAnotherRunning() ) + { + if( !IsOK( NULL, _( "GerbView is already running. Continue?" ) ) ) + return false; + } ScreenPcb = new PCB_SCREEN(); ScreenPcb->m_CurrentSheetDesc = &g_Sheet_GERBER; @@ -92,12 +97,6 @@ bool WinEDA_App::OnInit() extern PARAM_CFG_BASE* ParamCfgList[]; wxGetApp().ReadCurrentSetupValues( ParamCfgList ); - if( m_Checker && m_Checker->IsAnotherRunning() ) - { - if( !IsOK( NULL, _( "GerbView is already running. Continue?" ) ) ) - return false; - } - g_DrawBgColor = BLACK; /* Must be called before creating the main frame in order to diff --git a/gerbview/gerbview.h b/gerbview/gerbview.h index 4b80a3fb4b..e9bf28f703 100644 --- a/gerbview/gerbview.h +++ b/gerbview/gerbview.h @@ -51,7 +51,6 @@ extern wxString g_PhotoFilenameExt; extern wxString g_DrillFilenameExt; extern wxString g_PenFilenameExt; -extern int g_Default_GERBER_Format; extern int g_DisplayPolygonsModeSketch; extern const wxString GerbviewProjectFileExt; diff --git a/gerbview/gerbview_config.h b/gerbview/gerbview_config.h index 064ec9d866..9efbf8d990 100644 --- a/gerbview/gerbview_config.h +++ b/gerbview/gerbview_config.h @@ -6,7 +6,6 @@ #include "colors_selection.h" #define GROUP wxT("/gerbview") -#define GROUPLIB wxT("libraries") #define INSETUP TRUE @@ -17,62 +16,33 @@ static PARAM_CFG_WXSTRING PhotoExtBufCfg ( - wxT("PhoExt"), + INSETUP, + wxT("GerberFileExt"), &g_PhotoFilenameExt ); static PARAM_CFG_WXSTRING PenExtBufCfg ( - wxT("PenExt"), + INSETUP, + wxT("PenFileExt"), &g_PenFilenameExt ); static PARAM_CFG_WXSTRING DrillExtBufCfg ( - wxT("DrilExt"), + INSETUP, + wxT("DrillFileExt"), &g_DrillFilenameExt ); -static PARAM_CFG_INT UnitCfg // Units; 0 inches, 1 mm +static PARAM_CFG_INT UnitsSelectionOptCfg // Units; 0 inches, 1 mm ( + INSETUP, wxT("Units"), (int*)&g_UserUnit, MILLIMETRES ); -static PARAM_CFG_INT GerberScaleCfg // default scale; 0 2.3, 1 3.4 -( - wxT("Def_fmt"), - &g_Default_GERBER_Format, - 23, - 23, 66 -); - -static PARAM_CFG_BOOL SegmFillCfg -( - INSETUP, - wxT("SegFill"), - &DisplayOpt.DisplayPcbTrackFill, - TRUE -); - - -static PARAM_CFG_INT PadFillCfg -( - INSETUP, - wxT("PadFill"), - (int*)&DisplayOpt.DisplayPadFill, - TRUE -); - -static PARAM_CFG_INT ViaFillCfg -( - INSETUP, - wxT("ViaFill"), - (int*)&DisplayOpt.DisplayViaFill, - TRUE -); - static PARAM_CFG_SETCOLOR ColorLayer0Cfg ( INSETUP, @@ -329,18 +299,18 @@ static PARAM_CFG_SETCOLOR ColorLayer31Cfg 7 ); -static PARAM_CFG_SETCOLOR ColorDCodesCfg +static PARAM_CFG_SETCOLOR DCodesDisplayOptCfg ( INSETUP, - wxT("CoDCode"), + wxT("DCodeVisible"), &g_ColorsSettings.m_ItemsColors[DCODES_VISIBLE], WHITE ); -static PARAM_CFG_BOOL DisplPolairCfg +static PARAM_CFG_BOOL DisplayPolairCoordinatesOptCfg ( INSETUP, - wxT("DPolair"), + wxT("DisplayPolairCoordinates"), &DisplayOpt.DisplayPolarCood, FALSE ); @@ -350,11 +320,7 @@ PARAM_CFG_BASE * ParamCfgList[] = & PhotoExtBufCfg, & PenExtBufCfg, & DrillExtBufCfg, - & UnitCfg, - & GerberScaleCfg, - & SegmFillCfg, - & PadFillCfg, - & ViaFillCfg, //TODO: Will adding this line break tha pcbnew file compatibility? + & UnitsSelectionOptCfg, & ColorLayer0Cfg, & ColorLayer1Cfg, & ColorLayer2Cfg, @@ -387,7 +353,7 @@ PARAM_CFG_BASE * ParamCfgList[] = & ColorLayer29Cfg, & ColorLayer30Cfg, & ColorLayer31Cfg, - & ColorDCodesCfg, - & DisplPolairCfg, + & DCodesDisplayOptCfg, + & DisplayPolairCoordinatesOptCfg, NULL }; diff --git a/gerbview/gerbview_dialog_display_options_frame.cpp b/gerbview/gerbview_dialog_display_options_frame.cpp index dc0f191982..814edc8730 100644 --- a/gerbview/gerbview_dialog_display_options_frame.cpp +++ b/gerbview/gerbview_dialog_display_options_frame.cpp @@ -29,10 +29,11 @@ public: private: void OnOKBUttonClick( wxCommandEvent& event ); void OnCancelButtonClick( wxCommandEvent& event ); + void initOptDialog( ); }; -void WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog( wxCommandEvent& event ) +void WinEDA_GerberFrame::InstallGerberOptionsDialog( wxCommandEvent& event ) { DIALOG_DISPLAY_OPTIONS dlg( this ); int opt = dlg.ShowModal(); @@ -45,23 +46,31 @@ DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame *parent) : { m_Parent = parent; SetFocus(); + initOptDialog( ); - // Show Option Draw Lines - if( DisplayOpt.DisplayPcbTrackFill ) // We use DisplayPcbTrackFill as Lines draw option - m_OptDisplayLines->SetSelection( 1 ); - else - m_OptDisplayLines->SetSelection( 0 ); + GetSizer()->Fit( this ); + GetSizer()->SetSizeHints( this ); + Center(); +} - if( DisplayOpt.DisplayPadFill ) - m_OptDisplayFlashedItems->SetSelection( 1 ); - else - m_OptDisplayFlashedItems->SetSelection( 0 ); +void DIALOG_DISPLAY_OPTIONS::OnCancelButtonClick( wxCommandEvent& WXUNUSED(event) ) +{ + EndModal( 0 ); +} + +void DIALOG_DISPLAY_OPTIONS::initOptDialog( ) +{ + + m_PolarDisplay->SetSelection( DisplayOpt.DisplayPolarCood ? 1 : 0 ); + m_BoxUnits->SetSelection( g_UserUnit ? 1 : 0 ); + m_CursorShape->SetSelection( m_Parent->m_CursorShape ? 1 : 0 ); + + // Show Option Draw Lines. We use DisplayPcbTrackFill as Lines draw option + m_OptDisplayLines->SetSelection( DisplayOpt.DisplayPcbTrackFill ? 1 : 0 ); + m_OptDisplayFlashedItems->SetSelection( DisplayOpt.DisplayPadFill ? 1 : 0); // Show Option Draw polygons - if( g_DisplayPolygonsModeSketch == 0 ) - m_OptDisplayPolygons->SetSelection( 1 ); - else - m_OptDisplayPolygons->SetSelection( 0 ); + m_OptDisplayPolygons->SetSelection( g_DisplayPolygonsModeSketch ? 0 : 1 ); m_ShowPageLimits->SetSelection(0); if( m_Parent->m_Draw_Sheet_Ref ) @@ -77,20 +86,15 @@ DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame *parent) : } m_OptDisplayDCodes->SetValue( m_Parent->IsElementVisible( DCODES_VISIBLE ) ); - - GetSizer()->Fit( this ); - GetSizer()->SetSizeHints( this ); } - -void DIALOG_DISPLAY_OPTIONS::OnCancelButtonClick( wxCommandEvent& WXUNUSED(event) ) -{ - EndModal( 0 ); -} - - void DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick( wxCommandEvent& event ) { + DisplayOpt.DisplayPolarCood = + (m_PolarDisplay->GetSelection() == 0) ? FALSE : TRUE; + g_UserUnit = (m_BoxUnits->GetSelection() == 0) ? INCHES : MILLIMETRES; + m_Parent->m_CursorShape = m_CursorShape->GetSelection(); + if( m_OptDisplayLines->GetSelection() == 1 ) DisplayOpt.DisplayPcbTrackFill = TRUE; else diff --git a/gerbview/gerbview_dialog_display_options_frame_base.cpp b/gerbview/gerbview_dialog_display_options_frame_base.cpp index be42271b00..ba6e1bce5f 100644 --- a/gerbview/gerbview_dialog_display_options_frame_base.cpp +++ b/gerbview/gerbview_dialog_display_options_frame_base.cpp @@ -1,93 +1,116 @@ -/////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Apr 16 2008) -// http://www.wxformbuilder.org/ -// -// PLEASE DO "NOT" EDIT THIS FILE! -/////////////////////////////////////////////////////////////////////////// - -#include "gerbview_dialog_display_options_frame_base.h" - -/////////////////////////////////////////////////////////////////////////// - -DIALOG_DISPLAY_OPTIONS_BASE::DIALOG_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) -{ - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - - wxBoxSizer* bDialogSizer; - bDialogSizer = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bUpperSizer; - bUpperSizer = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bLeftSizer; - bLeftSizer = new wxBoxSizer( wxVERTICAL ); - - wxString m_OptDisplayLinesChoices[] = { _("Sketch"), _("Filled") }; - int m_OptDisplayLinesNChoices = sizeof( m_OptDisplayLinesChoices ) / sizeof( wxString ); - m_OptDisplayLines = new wxRadioBox( this, wxID_ANY, _("Lines:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayLinesNChoices, m_OptDisplayLinesChoices, 1, wxRA_SPECIFY_COLS ); - m_OptDisplayLines->SetSelection( 1 ); - bLeftSizer->Add( m_OptDisplayLines, 0, wxALL|wxEXPAND, 5 ); - - wxString m_OptDisplayFlashedItemsChoices[] = { _("Sketch"), _("Filled") }; - int m_OptDisplayFlashedItemsNChoices = sizeof( m_OptDisplayFlashedItemsChoices ) / sizeof( wxString ); - m_OptDisplayFlashedItems = new wxRadioBox( this, wxID_ANY, _("Spots:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayFlashedItemsNChoices, m_OptDisplayFlashedItemsChoices, 1, wxRA_SPECIFY_COLS ); - m_OptDisplayFlashedItems->SetSelection( 1 ); - bLeftSizer->Add( m_OptDisplayFlashedItems, 0, wxALL|wxEXPAND, 5 ); - - wxString m_OptDisplayPolygonsChoices[] = { _("Sketch"), _("Filled") }; - int m_OptDisplayPolygonsNChoices = sizeof( m_OptDisplayPolygonsChoices ) / sizeof( wxString ); - m_OptDisplayPolygons = new wxRadioBox( this, wxID_ANY, _("Polygons:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayPolygonsNChoices, m_OptDisplayPolygonsChoices, 1, wxRA_SPECIFY_COLS ); - m_OptDisplayPolygons->SetSelection( 1 ); - bLeftSizer->Add( m_OptDisplayPolygons, 0, wxALL|wxEXPAND, 5 ); - - bUpperSizer->Add( bLeftSizer, 1, wxEXPAND, 5 ); - - - bUpperSizer->Add( 20, 20, 0, 0, 5 ); - - wxBoxSizer* bRightSizer; - bRightSizer = new wxBoxSizer( wxVERTICAL ); - - wxString m_ShowPageLimitsChoices[] = { _("Full size. Do not show page limits"), _("Full size"), _("Size A4"), _("Size A3"), _("Size A2"), _("Size A"), _("Size B"), _("Size C") }; - int m_ShowPageLimitsNChoices = sizeof( m_ShowPageLimitsChoices ) / sizeof( wxString ); - m_ShowPageLimits = new wxRadioBox( this, wxID_ANY, _("Show Page Limits:"), wxDefaultPosition, wxDefaultSize, m_ShowPageLimitsNChoices, m_ShowPageLimitsChoices, 1, wxRA_SPECIFY_COLS ); - m_ShowPageLimits->SetSelection( 0 ); - bRightSizer->Add( m_ShowPageLimits, 0, wxALL|wxEXPAND, 5 ); - - - bRightSizer->Add( 20, 20, 0, 0, 5 ); - - m_OptDisplayDCodes = new wxCheckBox( this, wxID_ANY, _("Show D codes"), wxDefaultPosition, wxDefaultSize, 0 ); - m_OptDisplayDCodes->SetValue(true); - - bRightSizer->Add( m_OptDisplayDCodes, 0, wxALL, 5 ); - - bUpperSizer->Add( bRightSizer, 1, wxEXPAND, 5 ); - - bDialogSizer->Add( bUpperSizer, 1, wxEXPAND, 5 ); - - m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bDialogSizer->Add( m_staticline1, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - m_sdbSizer1 = new wxStdDialogButtonSizer(); - m_sdbSizer1OK = new wxButton( this, wxID_OK ); - m_sdbSizer1->AddButton( m_sdbSizer1OK ); - m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); - m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); - m_sdbSizer1->Realize(); - bDialogSizer->Add( m_sdbSizer1, 0, wxEXPAND|wxALL, 5 ); - - this->SetSizer( bDialogSizer ); - this->Layout(); - - // Connect Events - m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnCancelButtonClick ), NULL, this ); - m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnOKBUttonClick ), NULL, this ); -} - -DIALOG_DISPLAY_OPTIONS_BASE::~DIALOG_DISPLAY_OPTIONS_BASE() -{ - // Disconnect Events - m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnCancelButtonClick ), NULL, this ); - m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnOKBUttonClick ), NULL, this ); -} +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Sep 8 2010) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "gerbview_dialog_display_options_frame_base.h" + +/////////////////////////////////////////////////////////////////////////// + +DIALOG_DISPLAY_OPTIONS_BASE::DIALOG_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bDialogSizer; + bDialogSizer = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bUpperSizer; + bUpperSizer = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bLeftSizer; + bLeftSizer = new wxBoxSizer( wxVERTICAL ); + + wxString m_PolarDisplayChoices[] = { _("No Display"), _("Display") }; + int m_PolarDisplayNChoices = sizeof( m_PolarDisplayChoices ) / sizeof( wxString ); + m_PolarDisplay = new wxRadioBox( this, wxID_ANY, _("Display Polar Coord"), wxDefaultPosition, wxDefaultSize, m_PolarDisplayNChoices, m_PolarDisplayChoices, 1, wxRA_SPECIFY_COLS ); + m_PolarDisplay->SetSelection( 0 ); + bLeftSizer->Add( m_PolarDisplay, 0, wxALL|wxEXPAND, 5 ); + + wxString m_BoxUnitsChoices[] = { _("Inches"), _("millimeters") }; + int m_BoxUnitsNChoices = sizeof( m_BoxUnitsChoices ) / sizeof( wxString ); + m_BoxUnits = new wxRadioBox( this, wxID_ANY, _("Units"), wxDefaultPosition, wxDefaultSize, m_BoxUnitsNChoices, m_BoxUnitsChoices, 1, wxRA_SPECIFY_COLS ); + m_BoxUnits->SetSelection( 0 ); + bLeftSizer->Add( m_BoxUnits, 0, wxALL|wxEXPAND, 5 ); + + wxString m_CursorShapeChoices[] = { _("Small"), _("Big") }; + int m_CursorShapeNChoices = sizeof( m_CursorShapeChoices ) / sizeof( wxString ); + m_CursorShape = new wxRadioBox( this, wxID_ANY, _("Cursor"), wxDefaultPosition, wxDefaultSize, m_CursorShapeNChoices, m_CursorShapeChoices, 1, wxRA_SPECIFY_COLS ); + m_CursorShape->SetSelection( 0 ); + bLeftSizer->Add( m_CursorShape, 0, wxALL|wxEXPAND, 5 ); + + bUpperSizer->Add( bLeftSizer, 0, wxEXPAND, 5 ); + + wxBoxSizer* bMiddleSizer; + bMiddleSizer = new wxBoxSizer( wxVERTICAL ); + + wxString m_OptDisplayLinesChoices[] = { _("Sketch"), _("Filled") }; + int m_OptDisplayLinesNChoices = sizeof( m_OptDisplayLinesChoices ) / sizeof( wxString ); + m_OptDisplayLines = new wxRadioBox( this, wxID_ANY, _("Lines:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayLinesNChoices, m_OptDisplayLinesChoices, 1, wxRA_SPECIFY_COLS ); + m_OptDisplayLines->SetSelection( 1 ); + bMiddleSizer->Add( m_OptDisplayLines, 0, wxALL|wxEXPAND, 5 ); + + wxString m_OptDisplayFlashedItemsChoices[] = { _("Sketch"), _("Filled") }; + int m_OptDisplayFlashedItemsNChoices = sizeof( m_OptDisplayFlashedItemsChoices ) / sizeof( wxString ); + m_OptDisplayFlashedItems = new wxRadioBox( this, wxID_ANY, _("Spots:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayFlashedItemsNChoices, m_OptDisplayFlashedItemsChoices, 1, wxRA_SPECIFY_COLS ); + m_OptDisplayFlashedItems->SetSelection( 1 ); + bMiddleSizer->Add( m_OptDisplayFlashedItems, 0, wxALL|wxEXPAND, 5 ); + + wxString m_OptDisplayPolygonsChoices[] = { _("Sketch"), _("Filled") }; + int m_OptDisplayPolygonsNChoices = sizeof( m_OptDisplayPolygonsChoices ) / sizeof( wxString ); + m_OptDisplayPolygons = new wxRadioBox( this, wxID_ANY, _("Polygons:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayPolygonsNChoices, m_OptDisplayPolygonsChoices, 1, wxRA_SPECIFY_COLS ); + m_OptDisplayPolygons->SetSelection( 1 ); + bMiddleSizer->Add( m_OptDisplayPolygons, 0, wxALL|wxEXPAND, 5 ); + + bUpperSizer->Add( bMiddleSizer, 0, wxEXPAND, 5 ); + + + bUpperSizer->Add( 20, 20, 0, 0, 5 ); + + wxBoxSizer* bRightSizer; + bRightSizer = new wxBoxSizer( wxVERTICAL ); + + wxString m_ShowPageLimitsChoices[] = { _("Full size. Do not show page limits"), _("Full size"), _("Size A4"), _("Size A3"), _("Size A2"), _("Size A"), _("Size B"), _("Size C") }; + int m_ShowPageLimitsNChoices = sizeof( m_ShowPageLimitsChoices ) / sizeof( wxString ); + m_ShowPageLimits = new wxRadioBox( this, wxID_ANY, _("Show Page Limits:"), wxDefaultPosition, wxDefaultSize, m_ShowPageLimitsNChoices, m_ShowPageLimitsChoices, 1, wxRA_SPECIFY_COLS ); + m_ShowPageLimits->SetSelection( 0 ); + bRightSizer->Add( m_ShowPageLimits, 0, wxALL|wxEXPAND, 5 ); + + + bRightSizer->Add( 20, 20, 0, 0, 5 ); + + m_OptDisplayDCodes = new wxCheckBox( this, wxID_ANY, _("Show D codes"), wxDefaultPosition, wxDefaultSize, 0 ); + m_OptDisplayDCodes->SetValue(true); + bRightSizer->Add( m_OptDisplayDCodes, 0, wxALL, 5 ); + + bUpperSizer->Add( bRightSizer, 1, wxEXPAND, 5 ); + + bDialogSizer->Add( bUpperSizer, 1, wxEXPAND, 5 ); + + m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bDialogSizer->Add( m_staticline1, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_sdbSizer1 = new wxStdDialogButtonSizer(); + m_sdbSizer1OK = new wxButton( this, wxID_OK ); + m_sdbSizer1->AddButton( m_sdbSizer1OK ); + m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); + m_sdbSizer1->Realize(); + bDialogSizer->Add( m_sdbSizer1, 0, wxEXPAND|wxALL, 5 ); + + this->SetSizer( bDialogSizer ); + this->Layout(); + + // Connect Events + m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnCancelButtonClick ), NULL, this ); + m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnOKBUttonClick ), NULL, this ); +} + +DIALOG_DISPLAY_OPTIONS_BASE::~DIALOG_DISPLAY_OPTIONS_BASE() +{ + // Disconnect Events + m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnCancelButtonClick ), NULL, this ); + m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_OPTIONS_BASE::OnOKBUttonClick ), NULL, this ); + +} diff --git a/gerbview/gerbview_dialog_display_options_frame_base.fbp b/gerbview/gerbview_dialog_display_options_frame_base.fbp index 63ca6fb7d2..db2b625dd3 100644 --- a/gerbview/gerbview_dialog_display_options_frame_base.fbp +++ b/gerbview/gerbview_dialog_display_options_frame_base.fbp @@ -1,477 +1,704 @@ - - - - - - C++ - 1 - UTF-8 - connect - gerbview_dialog_display_options_frame_base - 1000 - none - 1 - gerbview_dialog_display_options_frame_base - - . - - 1 - 0 - 0 - - - - - 1 - - - - 0 - wxID_ANY - - - DIALOG_DISPLAY_OPTIONS_BASE - - 413,299 - wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER - - Gerbview Draw Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bDialogSizer - wxVERTICAL - none - - 5 - wxEXPAND - 1 - - - bUpperSizer - wxHORIZONTAL - none - - 5 - wxEXPAND - 1 - - - bLeftSizer - wxVERTICAL - none - - 5 - wxALL|wxEXPAND - 0 - - - "Sketch" "Filled" - - 1 - - - 0 - wxID_ANY - Lines: - 1 - - - m_OptDisplayLines - protected - - 1 - - wxRA_SPECIFY_COLS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 0 - - - "Sketch" "Filled" - - 1 - - - 0 - wxID_ANY - Spots: - 1 - - - m_OptDisplayFlashedItems - protected - - 1 - - wxRA_SPECIFY_COLS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 0 - - - "Sketch" "Filled" - - 1 - - - 0 - wxID_ANY - Polygons: - 1 - - - m_OptDisplayPolygons - protected - - 1 - - wxRA_SPECIFY_COLS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - - 0 - - 20 - protected - 20 - - - - 5 - wxEXPAND - 1 - - - bRightSizer - wxVERTICAL - none - - 5 - wxALL|wxEXPAND - 0 - - - "Full size. Do not show page limits" "Full size" "Size A4" "Size A3" "Size A2" "Size A" "Size B" "Size C" - - 1 - - - 0 - wxID_ANY - Show Page Limits: - 1 - - - m_ShowPageLimits - protected - - 0 - - wxRA_SPECIFY_COLS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - - 0 - - 20 - protected - 20 - - - - 5 - wxALL - 0 - - - 1 - - 1 - - - 0 - wxID_ANY - Show D codes - - - m_OptDisplayDCodes - protected - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT - 0 - - - - 1 - - - 0 - wxID_ANY - - - m_staticline1 - protected - - - wxLI_HORIZONTAL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxALL - 0 - - 0 - 1 - 0 - 0 - 0 - 1 - 0 - 0 - - m_sdbSizer1 - protected - - OnCancelButtonClick - - - - OnOKBUttonClick - - - - - - - - + + + + + + C++ + 1 + source_name + 0 + UTF-8 + connect + gerbview_dialog_display_options_frame_base + 1000 + none + 1 + gerbview_dialog_display_options_frame_base + + . + + 1 + 1 + 0 + 0 + + + + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + DIALOG_DISPLAY_OPTIONS_BASE + + 446,299 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + + Gerbview Options + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bDialogSizer + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bUpperSizer + wxHORIZONTAL + none + + 5 + wxEXPAND + 0 + + + bLeftSizer + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + + "No Display" "Display" + + 1 + 1 + + + 0 + wxID_ANY + Display Polar Coord + 1 + + + m_PolarDisplay + protected + + 0 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "Inches" "millimeters" + + 1 + 1 + + + 0 + wxID_ANY + Units + 1 + + + m_BoxUnits + protected + + 0 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "Small" "Big" + + 1 + 1 + + + 0 + wxID_ANY + Cursor + 1 + + + m_CursorShape + protected + + 0 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bMiddleSizer + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + + "Sketch" "Filled" + + 1 + 1 + + + 0 + wxID_ANY + Lines: + 1 + + + m_OptDisplayLines + protected + + 1 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "Sketch" "Filled" + + 1 + 1 + + + 0 + wxID_ANY + Spots: + 1 + + + m_OptDisplayFlashedItems + protected + + 1 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "Sketch" "Filled" + + 1 + 1 + + + 0 + wxID_ANY + Polygons: + 1 + + + m_OptDisplayPolygons + protected + + 1 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + 20 + protected + 20 + + + + 5 + wxEXPAND + 1 + + + bRightSizer + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + + "Full size. Do not show page limits" "Full size" "Size A4" "Size A3" "Size A2" "Size A" "Size B" "Size C" + + 1 + 1 + + + 0 + wxID_ANY + Show Page Limits: + 1 + + + m_ShowPageLimits + protected + + 0 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + 20 + protected + 20 + + + + 5 + wxALL + 0 + + + 1 + + 1 + 1 + + + 0 + wxID_ANY + Show D codes + + + m_OptDisplayDCodes + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + m_staticline1 + protected + + + wxLI_HORIZONTAL + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 0 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_sdbSizer1 + protected + + OnCancelButtonClick + + + + OnOKBUttonClick + + + + + + + + diff --git a/gerbview/gerbview_dialog_display_options_frame_base.h b/gerbview/gerbview_dialog_display_options_frame_base.h index 4dbb293bdf..188efbd9fd 100644 --- a/gerbview/gerbview_dialog_display_options_frame_base.h +++ b/gerbview/gerbview_dialog_display_options_frame_base.h @@ -1,59 +1,63 @@ -/////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Apr 16 2008) -// http://www.wxformbuilder.org/ -// -// PLEASE DO "NOT" EDIT THIS FILE! -/////////////////////////////////////////////////////////////////////////// - -#ifndef __gerbview_dialog_display_options_frame_base__ -#define __gerbview_dialog_display_options_frame_base__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/////////////////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////////////////////// -/// Class DIALOG_DISPLAY_OPTIONS_BASE -/////////////////////////////////////////////////////////////////////////////// -class DIALOG_DISPLAY_OPTIONS_BASE : public wxDialog -{ - private: - - protected: - wxRadioBox* m_OptDisplayLines; - wxRadioBox* m_OptDisplayFlashedItems; - wxRadioBox* m_OptDisplayPolygons; - - wxRadioBox* m_ShowPageLimits; - - wxCheckBox* m_OptDisplayDCodes; - wxStaticLine* m_staticline1; - wxStdDialogButtonSizer* m_sdbSizer1; - wxButton* m_sdbSizer1OK; - wxButton* m_sdbSizer1Cancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnCancelButtonClick( wxCommandEvent& event ){ event.Skip(); } - virtual void OnOKBUttonClick( wxCommandEvent& event ){ event.Skip(); } - - - public: - DIALOG_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Gerbview Draw Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 413,299 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~DIALOG_DISPLAY_OPTIONS_BASE(); - -}; - -#endif //__gerbview_dialog_display_options_frame_base__ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Sep 8 2010) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __gerbview_dialog_display_options_frame_base__ +#define __gerbview_dialog_display_options_frame_base__ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class DIALOG_DISPLAY_OPTIONS_BASE +/////////////////////////////////////////////////////////////////////////////// +class DIALOG_DISPLAY_OPTIONS_BASE : public wxDialog +{ + private: + + protected: + wxRadioBox* m_PolarDisplay; + wxRadioBox* m_BoxUnits; + wxRadioBox* m_CursorShape; + wxRadioBox* m_OptDisplayLines; + wxRadioBox* m_OptDisplayFlashedItems; + wxRadioBox* m_OptDisplayPolygons; + + wxRadioBox* m_ShowPageLimits; + + wxCheckBox* m_OptDisplayDCodes; + wxStaticLine* m_staticline1; + wxStdDialogButtonSizer* m_sdbSizer1; + wxButton* m_sdbSizer1OK; + wxButton* m_sdbSizer1Cancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnCancelButtonClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOKBUttonClick( wxCommandEvent& event ) { event.Skip(); } + + + public: + + DIALOG_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Gerbview Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 446,299 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~DIALOG_DISPLAY_OPTIONS_BASE(); + +}; + +#endif //__gerbview_dialog_display_options_frame_base__ diff --git a/gerbview/gerbview_id.h b/gerbview/gerbview_id.h index 12cc8b4267..7bbda7fd52 100644 --- a/gerbview/gerbview_id.h +++ b/gerbview/gerbview_id.h @@ -20,8 +20,7 @@ enum gerbview_ids ID_TOOLBARH_GERBVIEW_SELECT_LAYER, ID_GERBVIEW_DELETE_ITEM_BUTT, ID_GERBVIEW_GLOBAL_DELETE, - ID_POPUP_GERBVIEW_DELETE_TRACKSEG, - ID_GERBVIEW_DISPLAY_OPTIONS_SETUP, + ID_GERBVIEW_OPTIONS_SETUP, ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, ID_TB_OPTIONS_SHOW_DCODES, ID_TB_OPTIONS_SHOW_FLASHED_ITEMS_SKETCH, diff --git a/gerbview/menubar.cpp b/gerbview/menubar.cpp index 346a1d3612..dcb5718cdf 100644 --- a/gerbview/menubar.cpp +++ b/gerbview/menubar.cpp @@ -71,13 +71,11 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void ) _( "Hide &Layers Manager" ), _( "Show/hide the layers manager toolbar" ), layers_manager_xpm ); - ADD_MENUITEM_WITH_HELP( configmenu, ID_OPTIONS_SETUP, _( "&Options" ), - _( "Select general options" ), preference_xpm ); - ADD_MENUITEM_WITH_HELP( configmenu, ID_GERBVIEW_DISPLAY_OPTIONS_SETUP, - _( "Display" ), - _( "Select how items are displayed" ), - display_options_xpm ); + ADD_MENUITEM_WITH_HELP( configmenu, ID_GERBVIEW_OPTIONS_SETUP, + _( "&Options" ), + _( "Set options to draw items" ), + preference_xpm ); wxGetApp().AddMenuLanguageList( configmenu ); diff --git a/gerbview/options.cpp b/gerbview/options.cpp index 317ba02ea5..e07f369662 100644 --- a/gerbview/options.cpp +++ b/gerbview/options.cpp @@ -12,9 +12,7 @@ #include "class_drawpanel.h" #include "confirm.h" -#include "pcbplot.h" #include "gerbview.h" - #include "gerbview_id.h" @@ -120,126 +118,3 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event ) SetToolbars(); } - -class WinEDA_GerberGeneralOptionsFrame : public wxDialog -{ -private: - - WinEDA_BasePcbFrame* m_Parent; - wxRadioBox* m_PolarDisplay; - wxRadioBox* m_BoxUnits; - wxRadioBox* m_CursorShape; - wxRadioBox* m_GerberDefaultScale; - -public: - WinEDA_GerberGeneralOptionsFrame( WinEDA_BasePcbFrame* parent ); - ~WinEDA_GerberGeneralOptionsFrame() {}; - -private: - void OnOkClick( wxCommandEvent& event ); - void OnCancelClick( wxCommandEvent& event ); - - DECLARE_EVENT_TABLE() -}; - - -BEGIN_EVENT_TABLE( WinEDA_GerberGeneralOptionsFrame, wxDialog ) - EVT_BUTTON( wxID_OK, WinEDA_GerberGeneralOptionsFrame::OnOkClick ) - EVT_BUTTON( wxID_CANCEL, WinEDA_GerberGeneralOptionsFrame::OnCancelClick ) -END_EVENT_TABLE() - - -WinEDA_GerberGeneralOptionsFrame::WinEDA_GerberGeneralOptionsFrame( - WinEDA_BasePcbFrame* parent ) : - wxDialog( parent, -1, _( "Gerbview Options" ), - wxDefaultPosition, wxSize( 300, 240 ), - wxDEFAULT_DIALOG_STYLE | wxFRAME_FLOAT_ON_PARENT ) -{ - m_Parent = parent; - - wxBoxSizer* MainBoxSizer = new wxBoxSizer( wxHORIZONTAL ); - SetSizer( MainBoxSizer ); - wxBoxSizer* RightBoxSizer = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* MiddleBoxSizer = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* LeftBoxSizer = new wxBoxSizer( wxVERTICAL ); - MainBoxSizer->Add( LeftBoxSizer, 0, wxGROW | wxALL, 5 ); - MainBoxSizer->Add( MiddleBoxSizer, 0, wxGROW | wxALL, 5 ); - MainBoxSizer->Add( RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); - - wxButton* Button = new wxButton( this, wxID_OK, _( "OK" ) ); - RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); - - Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ) ); - RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); - - /* Display / not display polar coordinates: */ - wxString list_coord[2] = - { - _( "No Display" ), - _( "Display" ) - }; - m_PolarDisplay = new wxRadioBox( this, -1, _( "Display Polar Coord" ), - wxDefaultPosition, wxDefaultSize, - 2, list_coord, 1 ); - m_PolarDisplay->SetSelection( DisplayOpt.DisplayPolarCood ? 1 : 0 ); - LeftBoxSizer->Add( m_PolarDisplay, 0, wxGROW | wxALL, 5 ); - - /* Selection of units */ - wxString list_units[2] = - { - _( "Inches" ), - _( "millimeters" ) - }; - m_BoxUnits = new wxRadioBox( this, -1, _( "Units" ), wxDefaultPosition, - wxDefaultSize, - 2, list_units, 1 ); - m_BoxUnits->SetSelection( g_UserUnit ? 1 : 0 ); - LeftBoxSizer->Add( m_BoxUnits, 0, wxGROW | wxALL, 5 ); - - /* Selection of cursor shape */ - wxString list_cursors[2] = { _( "Small" ), _( "Big" ) }; - m_CursorShape = new wxRadioBox( this, -1, _( "Cursor" ), wxDefaultPosition, - wxDefaultSize, - 2, list_cursors, 1 ); - m_CursorShape->SetSelection( parent->m_CursorShape ? 1 : 0 ); - MiddleBoxSizer->Add( m_CursorShape, 0, wxGROW | wxALL, 5 ); - - /* Selection Default Scale (i.e. format 2.3 ou 3.4) */ - wxString list_scales[2] = { _( "format: 2.3" ), _( "format 3.4" ) }; - m_GerberDefaultScale = new wxRadioBox( this, -1, _( "Default format" ), - wxDefaultPosition, wxDefaultSize, - 2, list_scales, 1 ); - m_GerberDefaultScale->SetSelection( - (g_Default_GERBER_Format == 23) ? 0 : 1 ); - MiddleBoxSizer->Add( m_GerberDefaultScale, 0, wxGROW | wxALL, 5 ); - - GetSizer()->Fit( this ); - GetSizer()->SetSizeHints( this ); -} - - -void WinEDA_GerberGeneralOptionsFrame::OnCancelClick( - wxCommandEvent& WXUNUSED(event) ) -{ - EndModal( -1 ); -} - - -void WinEDA_GerberGeneralOptionsFrame::OnOkClick( wxCommandEvent& event ) -{ - DisplayOpt.DisplayPolarCood = - (m_PolarDisplay->GetSelection() == 0) ? FALSE : TRUE; - g_UserUnit = (m_BoxUnits->GetSelection() == 0) ? INCHES : MILLIMETRES; - m_Parent->m_CursorShape = m_CursorShape->GetSelection(); - g_Default_GERBER_Format = - (m_GerberDefaultScale->GetSelection() == 0) ? 23 : 34; - - EndModal( 1 ); -} - - -void WinEDA_GerberFrame::InstallGerberGeneralOptionsFrame( wxCommandEvent& event ) -{ - WinEDA_GerberGeneralOptionsFrame dlg( this ); - dlg.ShowModal(); -} diff --git a/gerbview/readgerb.cpp b/gerbview/readgerb.cpp index a4f420247f..6298205fe9 100644 --- a/gerbview/readgerb.cpp +++ b/gerbview/readgerb.cpp @@ -111,7 +111,7 @@ bool WinEDA_GerberFrame::Read_GERBER_File( const wxString& GERBER_FullFileName, case 'X': case 'Y': /* Move or draw command */ - gerber->m_CurrentPos = gerber->ReadXYCoord( text ); + gerber->m_CurrentPos = gerber->ReadXYCoord( text ); if( *text == '*' ) // command like X12550Y19250* { gerber->Execute_DCODE_Command( this, text, @@ -121,7 +121,12 @@ bool WinEDA_GerberFrame::Read_GERBER_File( const wxString& GERBER_FullFileName, case 'I': case 'J': /* Auxiliary Move command */ - gerber->m_IJPos = gerber->ReadIJCoord( text ); + gerber->m_IJPos = gerber->ReadIJCoord( text ); + if( *text == '*' ) // command like X35142Y15945J504* + { + gerber->Execute_DCODE_Command( this, text, + gerber->m_Last_Pen_Command ); + } break; case '%': diff --git a/gerbview/rs274d.cpp b/gerbview/rs274d.cpp index e0f7b30734..ed9c1d7d52 100644 --- a/gerbview/rs274d.cpp +++ b/gerbview/rs274d.cpp @@ -452,7 +452,7 @@ static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem, */ wxPoint GERBER::ReadXYCoord( char*& Text ) { - wxPoint pos = m_CurrentPos; + wxPoint pos; int type_coord = 0, current_coord, nbdigits; bool is_float = false; char* text; diff --git a/gerbview/rs274x.cpp b/gerbview/rs274x.cpp index afebc39e59..c82b943d39 100644 --- a/gerbview/rs274x.cpp +++ b/gerbview/rs274x.cpp @@ -4,38 +4,59 @@ #include "fctsys.h" #include "common.h" + //#include "macros.h" #include "gerbview.h" #include "class_GERBER.h" #define CODE( x, y ) ( ( (x) << 8 ) + (y) ) +// See rs274xrevd_e.pdf, table 1: RS-274X parameters order of entry +// in gerber files, when a coordinate is given (like X78Y600 or I0J80): +// Y and Y are logical coordinates +// A and B are plotter coordiantes +// Usually A = X, B = Y +// But we can have A = Y, B = X and/or offset, mirror, scale; +// Also: +// Image is what you must plot (the entire data of the file). +// Layer is just a set of data blocks with their parameters. An image can have more than one layer +// So a gerber layer is not like a board layer or the graphic layers used in Gerbview to show a file. enum RS274X_PARAMETERS { - FORMAT_STATEMENT = CODE( 'F', 'S' ), - AXIS_SELECT = CODE( 'A', 'S' ), - MIRROR_IMAGE = CODE( 'M', 'I' ), - MODE_OF_UNITS = CODE( 'M', 'O' ), + // Directive parameters: single usage recommended + AXIS_SELECT = CODE( 'A', 'S' ), // Default: A=X, B=Y + FORMAT_STATEMENT = CODE( 'F', 'S' ), // no default: this command must exists + MIRROR_IMAGE = CODE( 'M', 'I' ), // Default: mo mirror + MODE_OF_UNITS = CODE( 'M', 'O' ), // Default: inch INCH = CODE( 'I', 'N' ), MILLIMETER = CODE( 'M', 'M' ), - OFFSET = CODE( 'O', 'F' ), - SCALE_FACTOR = CODE( 'S', 'F' ), + OFFSET = CODE( 'O', 'F' ), // Default: A = 0, B = 0 + SCALE_FACTOR = CODE( 'S', 'F' ), // Default: A = 1.0, B = 1.0 - IMAGE_NAME = CODE( 'I', 'N' ), - IMAGE_JUSTIFY = CODE( 'I', 'J' ), - IMAGE_OFFSET = CODE( 'I', 'O' ), - IMAGE_POLARITY = CODE( 'I', 'P' ), - IMAGE_ROTATION = CODE( 'I', 'R' ), - PLOTTER_FILM = CODE( 'P', 'M' ), - INCLUDE_FILE = CODE( 'I', 'F' ), + // Image parameters: + // commands used only once at the beginning of the file + IMAGE_JUSTIFY = CODE( 'I', 'J' ), // Default: no justification + IMAGE_NAME = CODE( 'I', 'N' ), // Default: void + IMAGE_OFFSET = CODE( 'I', 'O' ), // Default: A = 0, B = 0 + IMAGE_POLARITY = CODE( 'I', 'P' ), // Default: Positive + IMAGE_ROTATION = CODE( 'I', 'R' ), // Default: 0 + PLOTTER_FILM = CODE( 'P', 'M' ), + // Aperture parameters: + // Usually for the whole file AP_DEFINITION = CODE( 'A', 'D' ), - AP_MACRO = CODE( 'A', 'M' ), - LAYER_NAME = CODE( 'L', 'N' ), + + // Layer specific parameters + // May be used singly or may be layer specfic + // theses parameters are at the beginning of the file or layer + LAYER_NAME = CODE( 'L', 'N' ), // Default: Positive LAYER_POLARITY = CODE( 'L', 'P' ), - KNOCKOUT = CODE( 'K', 'O' ), - STEP_AND_REPEAT = CODE( 'S', 'P' ), - ROTATE = CODE( 'R', 'O' ) + KNOCKOUT = CODE( 'K', 'O' ), // Default: off + STEP_AND_REPEAT = CODE( 'S', 'P' ), // Default: A = 1, B = 1 + ROTATE = CODE( 'R', 'O' ), // Default: 0 + + // Miscellaneous parameters: + INCLUDE_FILE = CODE( 'I', 'F' ) }; @@ -158,9 +179,9 @@ exit: } -bool GERBER::ExecuteRS274XCommand( int command, - char buff[GERBER_BUFZ], - char*& text ) +bool GERBER::ExecuteRS274XCommand( int command, + char buff[GERBER_BUFZ], + char*& text ) { int code; int xy_seq_len, xy_seq_char; @@ -168,8 +189,7 @@ bool GERBER::ExecuteRS274XCommand( int command, char line[GERBER_BUFZ]; wxString msg; double fcoord; - double conv_scale = m_GerbMetric ? PCB_INTERNAL_UNIT / - 25.4 : PCB_INTERNAL_UNIT; + double conv_scale = m_GerbMetric ? PCB_INTERNAL_UNIT / 25.4 : PCB_INTERNAL_UNIT; // D( printf( "%22s: Command <%c%c>\n", __func__, (command >> 8) & 0xFF, command & 0xFF ); ) @@ -222,14 +242,15 @@ bool GERBER::ExecuteRS274XCommand( int command, char ctmp = *(text++) - '0'; if( code == 'X' ) { - // number of digits after the decimal point + // number of digits after the decimal point (0 to 6 allowed) m_FmtScale.x = *text - '0'; m_FmtLen.x = ctmp + m_FmtScale.x; - // m_FmtScale is 0 to 9 + + // m_FmtScale is 0 to 6 if( m_FmtScale.x < 0 ) m_FmtScale.x = 0; - if( m_FmtScale.x > 9 ) - m_FmtScale.x = 9; + if( m_FmtScale.x > 6 ) + m_FmtScale.x = 6; } else { @@ -237,8 +258,8 @@ bool GERBER::ExecuteRS274XCommand( int command, m_FmtLen.y = ctmp + m_FmtScale.y; if( m_FmtScale.y < 0 ) m_FmtScale.y = 0; - if( m_FmtScale.y > 9 ) - m_FmtScale.y = 9; + if( m_FmtScale.y > 6 ) + m_FmtScale.y = 6; } text++; } @@ -267,8 +288,7 @@ bool GERBER::ExecuteRS274XCommand( int command, m_GerbMetric = FALSE; else if( code == MILLIMETER ) m_GerbMetric = TRUE; - conv_scale = m_GerbMetric ? PCB_INTERNAL_UNIT / - 25.4 : PCB_INTERNAL_UNIT; + conv_scale = m_GerbMetric ? PCB_INTERNAL_UNIT / 25.4 : PCB_INTERNAL_UNIT; break; case OFFSET: // command: OFAnnBnn (nn = float number) @@ -301,7 +321,7 @@ bool GERBER::ExecuteRS274XCommand( int command, { case 'A': // A axis scale text++; - m_LayerScale.x = ReadDouble( text ); + m_LayerScale.x = ReadDouble( text ); break; case 'B': // B axis scale @@ -310,9 +330,10 @@ bool GERBER::ExecuteRS274XCommand( int command, break; } } + if( m_LayerScale.x != 1.0 || m_LayerScale.y != 1.0 ) { - msg.Printf( _( "RS274X: FS command: Gerbview uses 1.0 only scale factor") ); + msg.Printf( _( "RS274X: FS command: Gerbview uses 1.0 only scale factor" ) ); ReportMessage( msg ); } break; @@ -335,6 +356,7 @@ bool GERBER::ExecuteRS274XCommand( int command, { m_ImageName.Append( *text++ ); } + break; case LAYER_NAME: @@ -343,6 +365,7 @@ bool GERBER::ExecuteRS274XCommand( int command, { m_LayerName.Append( *text++ ); } + break; case IMAGE_POLARITY: @@ -364,7 +387,7 @@ bool GERBER::ExecuteRS274XCommand( int command, break; case INCLUDE_FILE: - if( m_FilesPtr >= INCLUDE_FILES_COUNT_MAX ) + if( m_FilesPtr >= INCLUDE_FILES_CNT_MAX ) { ok = FALSE; ReportMessage( _( "Too many include files!!" ) ); @@ -393,6 +416,7 @@ bool GERBER::ExecuteRS274XCommand( int command, break; case AP_DEFINITION: + /* input example: %ADD30R,0.081800X0.101500*% * Aperture definition has 4 options: C, R, O, P * (Circle, Rect, Oval, regular Polygon) @@ -425,7 +449,7 @@ bool GERBER::ExecuteRS274XCommand( int command, text += 2; // skip "C," for example dcode->m_Size.x = dcode->m_Size.y = - wxRound( ReadDouble( text ) * conv_scale ); + wxRound( ReadDouble( text ) * conv_scale ); switch( stdAperture ) // Aperture desceiption has optional parameters. Read them { @@ -438,7 +462,7 @@ bool GERBER::ExecuteRS274XCommand( int command, { text++; dcode->m_Drill.x = dcode->m_Drill.y = - wxRound( ReadDouble( text ) * conv_scale ); + wxRound( ReadDouble( text ) * conv_scale ); dcode->m_DrillShape = APT_DEF_ROUND_HOLE; } @@ -477,7 +501,7 @@ bool GERBER::ExecuteRS274XCommand( int command, { text++; dcode->m_Drill.x = dcode->m_Drill.y = - wxRound( ReadDouble( text ) * conv_scale ); + wxRound( ReadDouble( text ) * conv_scale ); dcode->m_DrillShape = APT_DEF_ROUND_HOLE; } @@ -495,6 +519,7 @@ bool GERBER::ExecuteRS274XCommand( int command, break; case 'P': + /* Regular polygon: a command line like %ADD12P,0.040X10X25X0.025X0.025X0.0150*% * params are: , X, X, X, X */ @@ -524,7 +549,7 @@ bool GERBER::ExecuteRS274XCommand( int command, { text++; dcode->m_Drill.x = dcode->m_Drill.y = - wxRound( ReadDouble( text ) * conv_scale ); + wxRound( ReadDouble( text ) * conv_scale ); dcode->m_DrillShape = APT_DEF_ROUND_HOLE; } @@ -538,7 +563,7 @@ bool GERBER::ExecuteRS274XCommand( int command, wxRound( ReadDouble( text ) * conv_scale ); dcode->m_DrillShape = APT_DEF_RECT_HOLE; } - dcode->m_Defined = TRUE; + dcode->m_Defined = TRUE; break; } } @@ -549,15 +574,18 @@ bool GERBER::ExecuteRS274XCommand( int command, while( *text && *text != '*' && *text != ',' ) am_lookup.name.Append( *text++ ); - if( *text && *text == ',' ) - { + // When an aperture definition is like %AMLINE2* 22,1,$1,$2,0,0,-45* + // the ADDxx command has parameters, like %ADD14LINE2,0.8X0.5*% + if( *text == ',' ) + { // Read aperture macro parameters and store them + text++; // text points the first parameter while( *text && *text != '*' ) { double param = ReadDouble( text ); - if( *text == 'X' || isspace( *text ) ) - ++text; - dcode->AppendParam( param ); + while( isspace( *text ) ) text++; + if( *text == 'X' ) + ++text; } } @@ -566,7 +594,7 @@ bool GERBER::ExecuteRS274XCommand( int command, if( !pam ) { msg.Printf( wxT( "RS274X: aperture macro %s not found\n" ), - CONV_TO_UTF8( am_lookup.name ) ); + CONV_TO_UTF8( am_lookup.name ) ); ReportMessage( msg ); ok = false; break; @@ -633,11 +661,11 @@ static bool CheckForLineEnd( char buff[GERBER_BUFZ], char*& text, FILE* fp ) } -bool GERBER::ReadApertureMacro( char buff[GERBER_BUFZ], - char*& text, - FILE* gerber_file ) +bool GERBER::ReadApertureMacro( char buff[GERBER_BUFZ], + char*& text, + FILE* gerber_file ) { - wxString msg; + wxString msg; APERTURE_MACRO am; // read macro name @@ -709,6 +737,7 @@ bool GERBER::ReadApertureMacro( char buff[GERBER_BUFZ], break; default: + // @todo, there needs to be a way of reporting the line number msg.Printf( wxT( "RS274X: Invalid primitive id code %d\n" ), prim.primitive_id ); ReportMessage( msg ); @@ -735,8 +764,10 @@ bool GERBER::ReadApertureMacro( char buff[GERBER_BUFZ], } if( i < paramCount ) - { // maybe some day we can throw an exception and track a line number - msg.Printf( wxT( "RS274X: read macro descr type %d: read %d parameters, insufficient parameters\n" ), + { + // maybe some day we can throw an exception and track a line number + msg.Printf( wxT( + "RS274X: read macro descr type %d: read %d parameters, insufficient parameters\n" ), prim.primitive_id, i ); ReportMessage( msg ); } diff --git a/gerbview/wxGerberFrame.h b/gerbview/wxGerberFrame.h index d50f64bbdc..18e8e6dccf 100644 --- a/gerbview/wxGerberFrame.h +++ b/gerbview/wxGerberFrame.h @@ -236,8 +236,7 @@ public: void Process_Settings( wxCommandEvent& event ); void Process_Config( wxCommandEvent& event ); void InstallConfigFrame( const wxPoint& pos ); - void InstallGerberGeneralOptionsFrame( wxCommandEvent& event ); - void InstallGerberDisplayOptionsDialog( wxCommandEvent& event ); + void InstallGerberOptionsDialog( wxCommandEvent& event ); void InstallPcbGlobalDeleteFrame( const wxPoint& pos ); /* handlers for block commands */