From f7a804e23dd8c6abc69c58fce0224c4ce84ad834 Mon Sep 17 00:00:00 2001 From: charras Date: Tue, 30 Jun 2009 10:43:20 +0000 Subject: [PATCH] Bugfix for plotting --- common/CMakeLists.txt | 1 + common/common_plotDXF_functions.cpp | 374 ++++++ eeschema/CMakeLists.txt | 1 + eeschema/menubar.cpp | 6 + eeschema/plot.cpp | 31 +- eeschema/schframe.cpp | 1 + include/colors.h | 2 +- include/id.h | 1 + include/plot_common.h | 47 +- include/wxEeschemaStruct.h | 1 + include/wxPcbStruct.h | 2 + internat/fr/kicad.mo | Bin 187420 -> 187620 bytes internat/fr/kicad.po | 1663 ++++++++++++++------------- pcbnew/CMakeLists.txt | 1 + pcbnew/dialog_gendrill.cpp | 21 +- pcbnew/dialog_gendrill.pjd | 5 +- pcbnew/gen_drill_report_files.cpp | 17 +- pcbnew/gendrill.cpp | 22 +- pcbnew/pcbplot.cpp | 51 +- 19 files changed, 1385 insertions(+), 862 deletions(-) create mode 100644 common/common_plotDXF_functions.cpp diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 4bd23620ee..c157dff9b8 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -18,6 +18,7 @@ set(COMMON_SRCS common_plotHPGL_functions.cpp common_plotPS_functions.cpp common_plotGERBER_functions.cpp + common_plotDXF_functions.cpp confirm.cpp copy_to_clipboard.cpp dcsvg.cpp diff --git a/common/common_plotDXF_functions.cpp b/common/common_plotDXF_functions.cpp new file mode 100644 index 0000000000..3644d9a301 --- /dev/null +++ b/common/common_plotDXF_functions.cpp @@ -0,0 +1,374 @@ +/******************************************/ +/* Kicad: Common plot DXF Routines */ +/******************************************/ + +#include "fctsys.h" +#include "gr_basic.h" +#include "trigo.h" +#include "wxstruct.h" +#include "base_struct.h" +#include "plot_common.h" +#include "macros.h" +#include "kicad_string.h" + +/***********************************************************************************/ +void DXF_Plotter::set_viewport( wxPoint offset, + double aScale, int orient ) +/***********************************************************************************/ + +/* Set the plot offset for the current plotting + */ +{ + wxASSERT( !output_file ); + plot_offset = offset; + plot_scale = aScale; + device_scale = 1; + set_default_line_width( 0 ); /* No line width on DXF */ + plot_orient_options = 0; /* No mirroring on DXF */ + current_color = BLACK; +} + + +/*****************************************************************/ +void DXF_Plotter::start_plot( FILE* fout ) +/*****************************************************************/ +{ + wxASSERT( !output_file ); + output_file = fout; + /* DXF HEADER - Boilerplate */ + fputs( + "0\nSECTION\n2\nHEADER\n9\n$ANGBASE\n50\n0.0\n9\n$ANGDIR\n70\n0\n0\nENDSEC\n0\nSECTION\n2\nTABLES\n0\nTABLE\n2\nLTYPE\n70\n1\n0\nLTYPE\n2\nCONTINUOUS\n70\n0\n3\nSolid line\n72\n65\n73\n0\n40\n0.0\n0\nENDTAB\n", + output_file ); + /* Layer table - one layer per color */ + fprintf( output_file, "0\nTABLE\n2\nLAYER\n70\n%d\n", NBCOLOR ); + for( int i = 0; i= 0 && color_mode) + || (color == BLACK) + || (color == WHITE) ) + { + current_color = color; + } +} + + +/************************************************************/ +void DXF_Plotter::rect( wxPoint p1, wxPoint p2, FILL_T fill, int width ) +/************************************************************/ +{ + wxASSERT( output_file ); + move_to( p1 ); + line_to( wxPoint( p1.x, p2.y ) ); + line_to( wxPoint( p2.x, p2.y ) ); + line_to( wxPoint( p2.x, p1.y ) ); + finish_to( wxPoint( p1.x, p1.y ) ); +} + + +/************************************************************/ +void DXF_Plotter::circle( wxPoint centre, int diameter, FILL_T fill, int width ) +/************************************************************/ +{ + wxASSERT( output_file ); + double rayon = user_to_device_size( diameter / 2 ); + user_to_device_coordinates( centre ); + if( rayon > 0 ) + { + fprintf( output_file, "0\nCIRCLE\n8\n%s\n10\n%d.0\n20\n%d.0\n40\n%g\n", + CONV_TO_UTF8( ColorRefs[current_color].m_Name ), + centre.x, centre.y, rayon ); + } +} + + +/*****************************************************/ +void DXF_Plotter::poly( int nb, int* coord, FILL_T fill, int width ) +/*****************************************************/ + +/* Trace un polygone (ferme si rempli) en format DXF + * coord = tableau des coord des sommets + * nb = nombre de coord ( 1 coord = 2 elements: X et Y du tableau ) + * fill : si != 0 polygone rempli + */ +{ + wxASSERT( output_file ); + if( nb <= 1 ) + return; + + move_to( wxPoint( coord[0], coord[1] ) ); + for( int ii = 1; ii < nb; ii++ ) + line_to( wxPoint( coord[ii * 2], coord[(ii * 2) + 1] ) ); + + /* Fermeture eventuelle du polygone */ + if( fill ) + { + int ii = (nb - 1) * 2; + if( (coord[ii] != coord[0] ) || (coord[ii + 1] != coord[1]) ) + line_to( wxPoint( coord[0], coord[1] ) ); + } + pen_finish(); +} + + +/**********************************************/ +void DXF_Plotter::pen_to( wxPoint pos, char plume ) +/**********************************************/ + +/* + * deplace la plume levee (plume = 'U') ou baissee (plume = 'D') + * en position x,y + * Unites en Unites DESSIN + * Si plume = 'Z' lever de plume sans deplacement + */ +{ + wxASSERT( output_file ); + if( plume == 'Z' ) + { + return; + } + user_to_device_coordinates( pos ); + + if( pen_lastpos != pos && plume == 'D' ) + { + /* DXF LINE */ + fprintf( output_file, "0\nLINE\n8\n%s\n10\n%d.0\n20\n%d.0\n11\n%d.0\n21\n%d.0\n", + CONV_TO_UTF8( ColorRefs[current_color].m_Name ), + pen_lastpos.x, pen_lastpos.y, pos.x, pos.y ); + } + pen_lastpos = pos; +} + + +void DXF_Plotter::set_dash( bool dashed ) +{ + /* NOP for now */ + wxASSERT( output_file ); +} + + +void DXF_Plotter::thick_segment( wxPoint start, wxPoint end, int width, + GRTraceMode tracemode ) + +/** Function Plot a filled segment (track) + * @param start = starting point + * @param end = ending point + * @param aWidth = segment width (thickness) + * @param aPlotMode = FILLED, SKETCH .. + */ +{ + wxASSERT( output_file ); + + if( tracemode == FILAIRE ) /* just a line is Ok */ + { + move_to( start ); + finish_to( end ); + } + else + segment_as_oval( start, end, width, tracemode ); +} + + +/********************************************************************/ +void DXF_Plotter::arc( wxPoint centre, int StAngle, int EndAngle, int rayon, + FILL_T fill, int width ) +/********************************************************************/ + +/* trace d'un arc de cercle: + * centre = coord du centre + * StAngle, EndAngle = angle de debut et fin + * rayon = rayon de l'arc + */ +{ + wxASSERT( output_file ); + + if( rayon <= 0 ) + return; + + user_to_device_coordinates( centre ); + rayon = user_to_device_size( rayon ); + + /* DXF ARC */ + fprintf( output_file, "0\nARC\n8\n%s\n10\n%d.0\n20\n%d.0\n40\n%d.0\n50\n%d.0\n51\n%d.0\n", + CONV_TO_UTF8( ColorRefs[current_color].m_Name ), + centre.x, centre.y, rayon, + StAngle / 10, EndAngle / 10 ); +} + + +/***********************************************************************************/ +void DXF_Plotter::flash_pad_oval( wxPoint pos, wxSize size, int orient, + GRTraceMode trace_mode ) +/************************************************************************************/ +/* Trace 1 pastille PAD_OVAL en position pos_X,Y , de dim size.x, size.y */ +{ + wxASSERT( output_file ); + + /* la pastille est ramenee a une pastille ovale avec size.y > size.x + * ( ovale vertical en orientation 0 ) */ + if( size.x > size.y ) + { + EXCHG( size.x, size.y ); orient += 900; + if( orient >= 3600 ) + orient -= 3600; + } + sketch_oval( pos, size, orient, -1 ); +} + + +/*******************************************************************************/ +void DXF_Plotter::flash_pad_circle( wxPoint pos, int diametre, + GRTraceMode trace_mode ) +/*******************************************************************************/ +/* Trace 1 pastille RONDE (via,pad rond) en position pos */ +{ + wxASSERT( output_file ); + circle( pos, diametre, NO_FILL ); +} + + +/**************************************************************************/ +void DXF_Plotter::flash_pad_rect( wxPoint pos, wxSize padsize, + int orient, GRTraceMode trace_mode ) +/**************************************************************************/ + +/* + * Trace 1 pad rectangulaire vertical ou horizontal ( Pad rectangulaire ) + * donne par son centre et ses dimensions X et Y + * Units are user units + */ +{ + wxASSERT( output_file ); + wxSize size; + int ox, oy, fx, fy; + + size.x = padsize.x / 2; size.y = padsize.y / 2; + + if( size.x < 0 ) + size.x = 0; + if( size.y < 0 ) + size.y = 0; + + /* Si une des dimensions est nulle, le trace se reduit a 1 trait */ + if( size.x == 0 ) + { + ox = pos.x; oy = pos.y - size.y; + RotatePoint( &ox, &oy, pos.x, pos.y, orient ); + fx = pos.x; fy = pos.y + size.y; + RotatePoint( &fx, &fy, pos.x, pos.y, orient ); + move_to( wxPoint( ox, oy ) ); + finish_to( wxPoint( fx, fy ) ); + return; + } + if( size.y == 0 ) + { + ox = pos.x - size.x; oy = pos.y; + RotatePoint( &ox, &oy, pos.x, pos.y, orient ); + fx = pos.x + size.x; fy = pos.y; + RotatePoint( &fx, &fy, pos.x, pos.y, orient ); + move_to( wxPoint( ox, oy ) ); + finish_to( wxPoint( fx, fy ) ); + return; + } + + ox = pos.x - size.x; oy = pos.y - size.y; + RotatePoint( &ox, &oy, pos.x, pos.y, orient ); + move_to( wxPoint( ox, oy ) ); + + fx = pos.x - size.x; fy = pos.y + size.y; + RotatePoint( &fx, &fy, pos.x, pos.y, orient ); + line_to( wxPoint( fx, fy ) ); + + fx = pos.x + size.x; fy = pos.y + size.y; + RotatePoint( &fx, &fy, pos.x, pos.y, orient ); + line_to( wxPoint( fx, fy ) ); + + fx = pos.x + size.x; fy = pos.y - size.y; + RotatePoint( &fx, &fy, pos.x, pos.y, orient ); + line_to( wxPoint( fx, fy ) ); + + finish_to( wxPoint( ox, oy ) ); +} + + +/*******************************************************************/ +void DXF_Plotter::flash_pad_trapez( wxPoint pos, wxSize size, wxSize delta, + int orient, GRTraceMode trace_mode ) +/*******************************************************************/ + +/* + * Trace 1 pad trapezoidal donne par : + * son centre pos.x,pos.y + * ses dimensions dimX et dimY + * les variations deltaX et deltaY + * son orientation orient et 0.1 degres + * le mode de trace (FILLED, SKETCH, FILAIRE) + * Le trace n'est fait que pour un trapeze, c.a.d que deltaX ou deltaY + * = 0. + * + * les notation des sommets sont ( vis a vis de la table tracante ) + * 0 ------------- 3 + * . . + * . . + * . . + * 1 --- 2 + */ +{ + wxASSERT( output_file ); + wxPoint polygone[4]; /* coord des sommets / centre du pad */ + wxPoint coord[4]; /* coord reelles des sommets du trapeze a tracer */ + int moveX, moveY; /* variation de position plume selon axe X et Y , lors + * du remplissage du trapeze */ + moveX = moveY = 0; + + size.x /= 2; size.y /= 2; + delta.x /= 2; delta.y /= 2; + + polygone[0].x = -size.x - delta.y; polygone[0].y = +size.y + delta.x; + polygone[1].x = -size.x + delta.y; polygone[1].y = -size.y - delta.x; + polygone[2].x = +size.x - delta.y; polygone[2].y = -size.y + delta.x; + polygone[3].x = +size.x + delta.y; polygone[3].y = +size.y - delta.x; + + for( int ii = 0; ii < 4; ii++ ) + { + coord[ii].x = polygone[ii].x + pos.x; + coord[ii].y = polygone[ii].y + pos.y; + RotatePoint( &coord[ii], pos, orient ); + } + + // Plot edge: + move_to( coord[0] ); + line_to( coord[1] ); + line_to( coord[2] ); + line_to( coord[3] ); + finish_to( coord[0] ); +} diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 07ff890f0d..0977c67348 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -95,6 +95,7 @@ set(EESCHEMA_SRCS plot.cpp plothpgl.cpp plotps.cpp + plotdxf.cpp priorque.cpp read_from_file_schematic_items_descriptions.cpp savelib.cpp diff --git a/eeschema/menubar.cpp b/eeschema/menubar.cpp index 079c819dbd..97c5d0fbb3 100644 --- a/eeschema/menubar.cpp +++ b/eeschema/menubar.cpp @@ -91,6 +91,12 @@ void WinEDA_SchematicFrame::ReCreateMenuBar() item->SetBitmap( plot_xpm ); choice_plot_fmt->Append( item ); + item = new wxMenuItem( choice_plot_fmt, ID_GEN_PLOT_DXF, _( "Plot DXF" ), + _( "Plot schematic sheet in DXF format" ) ); + item->SetBitmap( plot_xpm ); + choice_plot_fmt->Append( item ); + + #ifdef __WINDOWS__ /* Under windows, one can draw to the clipboard */ item = new wxMenuItem( choice_plot_fmt, ID_GEN_COPY_SHEET_TO_CLIPBOARD, diff --git a/eeschema/plot.cpp b/eeschema/plot.cpp index 3d7d271a76..5dd9208713 100644 --- a/eeschema/plot.cpp +++ b/eeschema/plot.cpp @@ -65,6 +65,7 @@ static void PlotLibPart( Plotter* plotter, SCH_COMPONENT* DrawLibItem ) Multi = DrawLibItem->m_Multi; convert = DrawLibItem->m_Convert; + plotter->set_current_line_width( g_DrawDefaultLineThickness ); for( LibEDA_BaseStruct* DEntry = Entry->m_Drawings; DEntry != NULL; DEntry = DEntry->Next() ) { @@ -88,12 +89,12 @@ static void PlotLibPart( Plotter* plotter, SCH_COMPONENT* DrawLibItem ) if( draw_bgfill && Arc->m_Fill == FILLED_WITH_BG_BODYCOLOR ) { plotter->set_color( ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); - plotter->arc( pos, t1, t2, Arc->m_Rayon, FILLED_SHAPE, 0 ); + plotter->arc( pos, -t1, -t2, Arc->m_Rayon, FILLED_SHAPE, 0 ); } plotter->set_color( ReturnLayerColor( LAYER_DEVICE ) ); plotter->arc( pos, - t1, - t2, + -t1, + -t2, Arc->m_Rayon, Arc->m_Fill, Arc->m_Width ); @@ -713,19 +714,25 @@ void PlotDrawlist( Plotter* plotter, SCH_ITEM* drawlist ) switch( drawlist->Type() ) { case DRAW_BUSENTRY_STRUCT_TYPE: /* Struct Raccord et Segment sont identiques */ + case DRAW_SEGMENT_STRUCT_TYPE: + if( drawlist->Type() == DRAW_BUSENTRY_STRUCT_TYPE ) + { #undef STRUCT #define STRUCT ( (DrawBusEntryStruct*) drawlist ) - StartPos = STRUCT->m_Pos; - EndPos = STRUCT->m_End(); - layer = STRUCT->GetLayer(); - - case DRAW_SEGMENT_STRUCT_TYPE: + StartPos = STRUCT->m_Pos; + EndPos = STRUCT->m_End(); + layer = STRUCT->GetLayer(); + plotter->set_color( ReturnLayerColor( layer ) ); + } + else + { #undef STRUCT #define STRUCT ( (EDA_DrawLineStruct*) drawlist ) - StartPos = STRUCT->m_Start; - EndPos = STRUCT->m_End; - layer = STRUCT->GetLayer(); - plotter->set_color( ReturnLayerColor( layer ) ); + StartPos = STRUCT->m_Start; + EndPos = STRUCT->m_End; + layer = STRUCT->GetLayer(); + plotter->set_color( ReturnLayerColor( layer ) ); + } switch( layer ) { diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index 7c235aacc7..4194e50c84 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -59,6 +59,7 @@ BEGIN_EVENT_TABLE( WinEDA_SchematicFrame, WinEDA_DrawFrame ) EVT_MENU( ID_GEN_PLOT_PS, WinEDA_SchematicFrame::ToPlot_PS ) EVT_MENU( ID_GEN_PLOT_HPGL, WinEDA_SchematicFrame::ToPlot_HPGL ) EVT_MENU( ID_GEN_PLOT_SVG, WinEDA_DrawFrame::SVG_Print ) + EVT_MENU( ID_GEN_PLOT_DXF, WinEDA_SchematicFrame::ToPlot_DXF ) EVT_MENU( ID_GEN_COPY_SHEET_TO_CLIPBOARD, WinEDA_DrawFrame::CopyToClipboard ) EVT_MENU( ID_GEN_COPY_BLOCK_TO_CLIPBOARD, WinEDA_DrawFrame::CopyToClipboard ) EVT_MENU( ID_EXIT, WinEDA_SchematicFrame::OnExit ) diff --git a/include/colors.h b/include/colors.h index f3341c2b59..e295c29e6a 100644 --- a/include/colors.h +++ b/include/colors.h @@ -6,7 +6,7 @@ #define _COLORS_H /* Definitions des Numeros des Couleurs ( palette de 32) */ -#define NBCOLOR 32 +#define NBCOLOR 24 #define MASKCOLOR 31 ///< mask for color index into ColorRefs[] diff --git a/include/id.h b/include/id.h index de6297e4d2..2a7d85fcea 100644 --- a/include/id.h +++ b/include/id.h @@ -72,6 +72,7 @@ enum main_id { ID_GEN_PLOT_HPGL, ID_GEN_PLOT_GERBER, ID_GEN_PLOT_SVG, + ID_GEN_PLOT_DXF, ID_GEN_COPY_SHEET_TO_CLIPBOARD, ID_GEN_COPY_BLOCK_TO_CLIPBOARD, ID_GEN_UNUSED0, diff --git a/include/plot_common.h b/include/plot_common.h index e5a339914d..a2daccd64e 100644 --- a/include/plot_common.h +++ b/include/plot_common.h @@ -19,7 +19,8 @@ using namespace std; enum PlotFormat { PLOT_FORMAT_HPGL, PLOT_FORMAT_GERBER, - PLOT_FORMAT_POST + PLOT_FORMAT_POST, + PLOT_FORMAT_DXF }; const int PLOT_MIROIR = 1; @@ -381,4 +382,48 @@ protected: vector::iterator current_aperture; }; +class DXF_Plotter : public Plotter +{ +public: + virtual void start_plot( FILE* fout ); + virtual void end_plot(); + +/* For now we don't use 'thick' primitives, so no line width */ + virtual void set_current_line_width( int width ) + { + /* Handy override */ + current_pen_width = 0; + }; + virtual void set_default_line_width( int width ) + { + /* DXF lines are infinitesimal */ + default_pen_width = 0; + }; + virtual void set_dash( bool dashed ); + + virtual void set_color( int color ); + + virtual void set_viewport( wxPoint offset, + double scale, int orient ); + 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 poly( int nb_segm, int* coord, FILL_T fill, int width = -1 ); + virtual void thick_segment( wxPoint start, wxPoint end, int width, + GRTraceMode tracemode ); + virtual void arc( wxPoint centre, int StAngle, int EndAngle, int rayon, + FILL_T fill, int width = -1 ); + virtual void pen_to( wxPoint pos, char plume ); + virtual void flash_pad_circle( wxPoint pos, int diametre, + GRTraceMode trace_mode ); + virtual void flash_pad_oval( wxPoint pos, wxSize size, int orient, + GRTraceMode trace_mode ); + virtual void flash_pad_rect( wxPoint pos, wxSize size, + int orient, GRTraceMode trace_mode ); + virtual void flash_pad_trapez( wxPoint pos, wxSize size, wxSize delta, + int orient, GRTraceMode trace_mode ); + +protected: + int current_color; +}; + #endif /* __INCLUDE__PLOT_COMMON_H__ */ diff --git a/include/wxEeschemaStruct.h b/include/wxEeschemaStruct.h index 77325c365c..a4490d91a7 100644 --- a/include/wxEeschemaStruct.h +++ b/include/wxEeschemaStruct.h @@ -202,6 +202,7 @@ public: // Plot functions: void ToPlot_PS( wxCommandEvent& event ); void ToPlot_HPGL( wxCommandEvent& event ); + void ToPlot_DXF( wxCommandEvent& event ); void ToPostProcess( wxCommandEvent& event ); // read and save files diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 54f912f870..6dd476e738 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -302,6 +302,8 @@ public: GRTraceMode trace_mode); void Genere_PS( const wxString& FullFileName, int Layer, bool useA4, GRTraceMode trace_mode ); + void Genere_DXF( const wxString& FullFileName, int Layer, + GRTraceMode trace_mode); void Plot_Layer(Plotter *plotter, int Layer, GRTraceMode trace_mode ); void Plot_Standard_Layer( Plotter *plotter, int masque_layer, int garde, bool trace_via, diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 4882d306335403b9ca437b82a0263864c5886432..bc7c8165065a40debd1f662d695def16be892904 100644 GIT binary patch delta 57954 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

MWs=q9=V4PZiCzXhG~QgnbP(HGLI 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 M?$~@~yi>XV0K~BQa{vGU diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 43c2a1c54c..eee38765fc 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-27 09:08+0100\n" -"PO-Revision-Date: 2009-06-27 09:08+0100\n" +"POT-Creation-Date: 2009-06-29 20:56+0100\n" +"PO-Revision-Date: 2009-06-29 20:58+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -67,317 +67,454 @@ msgstr "Sauver Fichier Composant" msgid "Unable to create file " msgstr "Impossible de créer le fichier " -#: pcbnew/pcbplot.cpp:153 -#: pcbnew/pcbplot.cpp:302 -msgid "Plot" -msgstr "Tracer" - -#: pcbnew/pcbplot.cpp:200 -msgid "Plot Format" -msgstr "Format de tracé" - -#: pcbnew/pcbplot.cpp:215 -msgid "HPGL Options:" -msgstr "Options HPGL:" - -#: pcbnew/pcbplot.cpp:220 -msgid "Pen Size" -msgstr "Diam Plume" - -#: pcbnew/pcbplot.cpp:227 -msgid "Pen Speed (cm/s)" -msgstr "Vitesse Plume ( cm/s )" - -#: pcbnew/pcbplot.cpp:231 -msgid "Set pen speed in cm/s" -msgstr "Ajuster Vitesse plume en centimètres par seconde" - -#: pcbnew/pcbplot.cpp:233 -msgid "Pen ovr" -msgstr "Recouvrement" - -#: pcbnew/pcbplot.cpp:239 -msgid "Set plot overlay for filling" -msgstr "Ajuste recouvrement des tracés pour les remplissages" - -#: pcbnew/pcbplot.cpp:241 -msgid "Lines Width" -msgstr "Epaiss. Lignes" - -#: pcbnew/pcbplot.cpp:247 -msgid "Set lines width used to plot in sketch mode and plot pads outlines on silk screen layers" -msgstr "Ajuste l'épaisseur des lignes utilisées pour tracer en mode contour et pour les contours des pads sur les couches de sérigraphie" - -#: pcbnew/pcbplot.cpp:252 -msgid "Absolute" -msgstr "Absolu" - -#: pcbnew/pcbplot.cpp:252 -msgid "Auxiliary axis" -msgstr "Axe Auxiliaire" - -#: pcbnew/pcbplot.cpp:255 -msgid "Plot Origin" -msgstr "Origine des Coord de Tracé" - -#: pcbnew/pcbplot.cpp:283 -msgid "X scale adjust" -msgstr "Ajustage Echelle X" - -#: pcbnew/pcbplot.cpp:286 -msgid "Set X scale adjust for exact scale plotting" -msgstr "Ajuster échelle X pour traçage à l'échelle exacte" - -#: pcbnew/pcbplot.cpp:290 -msgid "Y scale adjust" -msgstr "Ajustage Echelle Y" - -#: pcbnew/pcbplot.cpp:293 -msgid "Set Y scale adjust for exact scale plotting" -msgstr "Ajuster échelle Y pour traçage à l'échelle exacte" - -#: pcbnew/pcbplot.cpp:296 -msgid "Plot negative" -msgstr "Tracé en Négatif" - -#: pcbnew/pcbplot.cpp:305 -msgid "Save Options" -msgstr "Sauver Options" - -#: pcbnew/pcbplot.cpp:309 -msgid "Generate drill file" -msgstr "Créer Fichier de perçage" - -#: pcbnew/pcbplot.cpp:312 -msgid "Close" -msgstr "Fermer" - -#: pcbnew/pcbplot.cpp:358 -msgid "Exclude Edges_Pcb layer" -msgstr "Exclure Couche Contours PCB" - -#: pcbnew/pcbplot.cpp:362 -msgid "Exclude contents of Edges_Pcb layer from all other layers" -msgstr "Exclure les tracés contour PCB des autres couches" - -#: pcbnew/pcbplot.cpp:369 -msgid "Print sheet ref" -msgstr "Imprimer cartouche" - -#: pcbnew/pcbplot.cpp:380 -msgid "Print pads on silkscreen" -msgstr "Pads sur Sérigraphie" - -#: pcbnew/pcbplot.cpp:387 -msgid "Enable/disable print/plot pads on silkscreen layers" -msgstr "Active/désactive tracé des pastilles sur les couches de sérigraphie" - -#: pcbnew/pcbplot.cpp:391 -msgid "Always print pads" -msgstr "Toujours tracer pads" - -#: pcbnew/pcbplot.cpp:396 -msgid "Force print/plot pads on ALL layers" -msgstr "Force le tracé des pastilles sur TOUTES les couches" - -#: pcbnew/pcbplot.cpp:401 -msgid "Print module value" -msgstr "Imprimer Valeur Module" - -#: pcbnew/pcbplot.cpp:405 -msgid "Enable/disable print/plot module value on silkscreen layers" -msgstr "Active/désactive le tracé des textes valeurs des modules sur couches de sérigraphie" - -#: pcbnew/pcbplot.cpp:409 -msgid "Print module reference" -msgstr "Imprimer Référence Module" - -#: pcbnew/pcbplot.cpp:413 -msgid "Enable/disable print/plot module reference on silkscreen layers" -msgstr "Active/désactive le tracé des textes référence des modules sur couches de sérigraphie" - -#: pcbnew/pcbplot.cpp:417 -msgid "Print other module texts" -msgstr "Imprimer autres textes module" - -#: pcbnew/pcbplot.cpp:421 -msgid "Enable/disable print/plot module field texts on silkscreen layers" -msgstr "Active/désactive le tracé des textes des champs des modules sur couches de sérigraphie" - -#: pcbnew/pcbplot.cpp:426 -msgid "Force print invisible texts" -msgstr "Force tracé textes invisibles" - -#: pcbnew/pcbplot.cpp:430 -msgid "Force print/plot module invisible texts on silkscreen layers" -msgstr "Force le tracé des textes invisibles sur couches de sérigraphie" - -#: pcbnew/pcbplot.cpp:435 -msgid "No drill mark" -msgstr "Pas de marque" - -#: pcbnew/pcbplot.cpp:436 -msgid "Small mark" -msgstr "Petite marque" - -#: pcbnew/pcbplot.cpp:437 -msgid "Real drill" -msgstr "Perçage réel" - -#: pcbnew/pcbplot.cpp:441 -msgid "Pads Drill Opt" -msgstr "Options Perçage Pads" - -#: pcbnew/pcbplot.cpp:450 -msgid "Auto scale" -msgstr "Ech. auto" - -#: pcbnew/pcbplot.cpp:451 -msgid "Scale 1" -msgstr "Echelle 1" - -#: pcbnew/pcbplot.cpp:452 -msgid "Scale 1.5" -msgstr "Echelle 1,5" - -#: pcbnew/pcbplot.cpp:453 -msgid "Scale 2" -msgstr "Echelle 2" - -#: pcbnew/pcbplot.cpp:454 -msgid "Scale 3" -msgstr "Echelle 3" - -#: pcbnew/pcbplot.cpp:458 -msgid "Scale Opt" -msgstr "Echelle" - -#: pcbnew/pcbplot.cpp:465 -msgid "Line" -msgstr "Ligne" - -#: pcbnew/pcbplot.cpp:465 -msgid "Filled" -msgstr "Plein" - -#: pcbnew/pcbplot.cpp:466 -msgid "Sketch" -msgstr "Contour" - -#: pcbnew/pcbplot.cpp:468 -msgid "Plot Mode" -msgstr "Mode de Tracé" - -#: pcbnew/pcbplot.cpp:476 -msgid "Plot mirror" -msgstr "Tracé Miroir" - -#: pcbnew/pcbplot.cpp:482 -msgid "Vias on mask" -msgstr "Vias sur masque" - -#: pcbnew/pcbplot.cpp:486 -msgid "Print/plot vias on mask layers. They are in this case not protected" -msgstr "Trace vias sur vernis épargne. Elles seront non protégées" - -#: pcbnew/pcbplot.cpp:490 -msgid "Org = Centre" -msgstr "Org = Centre" - -#: pcbnew/pcbplot.cpp:493 -msgid "Draw origin ( 0,0 ) in sheet center" -msgstr "Origine des tracés au centre de la feuille" - -#: pcbnew/pcbplot.cpp:707 -msgid "Adobe post script files (.ps)|*.ps" -msgstr "Fichiers Adobe post script (.ps)|*.ps" - -#: pcbnew/pcbplot.cpp:714 -msgid "GERBER photo plot files (.pho)|*.pho" -msgstr "Fichiers phottraçage GERBER (.pho)|*.pho" - -#: pcbnew/pcbplot.cpp:719 -msgid "HPGL plot files (.plt)|*.plt" -msgstr "Fichiers Tracé HPGL (.plt)|*.plt" - -#: pcbnew/pcbplot.cpp:726 -msgid "Warning: Scale option set to a very small value" -msgstr "Attention: option d'échelle ajustée à une valeur très petite" - -#: pcbnew/pcbplot.cpp:729 -msgid "Warning: Scale option set to a very large value" -msgstr "Attention: option d'échelle ajustée à une valeur très grande" - -#: pcbnew/pcbplot.cpp:771 -msgid "No layer selected" -msgstr "Pas de couche sélectionnée" +#: pcbnew/pcbnew.cpp:81 +msgid "Pcbnew is already running, Continue?" +msgstr "Pcbnew est en cours d'exécution. Continuer ?" #: pcbnew/via_edit.cpp:54 msgid "Incorrect value for Via drill. No via drill change" msgstr "Valeur incorrecte pour perçage. Pas de changement pour la via" -#: pcbnew/class_pcb_text.cpp:234 -msgid "COTATION" -msgstr "COTATION" +#: pcbnew/dialog_gendrill.cpp:165 +msgid "Millimeters" +msgstr "Millimètres" -#: pcbnew/class_pcb_text.cpp:236 -msgid "PCB Text" -msgstr "Texte PCB" +#: pcbnew/dialog_gendrill.cpp:166 +msgid "Inches" +msgstr "Pouces" -#: pcbnew/class_pcb_text.cpp:238 -msgid "Layer" -msgstr "Couche" +#: pcbnew/dialog_gendrill.cpp:167 +msgid "Drill Units:" +msgstr "Unités perçage:" -#: pcbnew/class_pcb_text.cpp:242 -#: pcbnew/cotation.cpp:109 -msgid "Mirror" -msgstr "Miroir" +#: pcbnew/dialog_gendrill.cpp:172 +msgid "decimal format" +msgstr "Format décimal" -#: pcbnew/class_pcb_text.cpp:244 -msgid "No" -msgstr "Non" +#: pcbnew/dialog_gendrill.cpp:173 +msgid "suppress leading zeros" +msgstr "Suppression zeros de tête" -#: pcbnew/class_pcb_text.cpp:246 -msgid "Yes" -msgstr "Oui" +#: pcbnew/dialog_gendrill.cpp:174 +msgid "suppress trailing zeros" +msgstr "Suppression zeros de fin" -#: pcbnew/class_pcb_text.cpp:249 -msgid "Orient" -msgstr "Orient" +#: pcbnew/dialog_gendrill.cpp:175 +msgid "keep zeros" +msgstr "Garder les zéros" -#: pcbnew/class_pcb_text.cpp:252 -#: pcbnew/cotation.cpp:125 -msgid "Width" -msgstr "Epaisseur" +#: pcbnew/dialog_gendrill.cpp:176 +msgid "Zeros Format" +msgstr "Format des zéros" -#: pcbnew/class_pcb_text.cpp:255 -msgid "H Size" -msgstr "Taille H" +#: pcbnew/dialog_gendrill.cpp:179 +msgid "Choose EXCELLON numbers notation" +msgstr "Choisir la notation des nombres en format EXCELLON" -#: pcbnew/class_pcb_text.cpp:258 -msgid "V Size" -msgstr "Taille V" +#: pcbnew/dialog_gendrill.cpp:183 +msgid "2:3" +msgstr "2:3" -#: pcbnew/pcbnew.cpp:107 -msgid "Pcbnew is already running, Continue?" -msgstr "Pcbnew est en cours d'exécution. Continuer ?" +#: pcbnew/dialog_gendrill.cpp:184 +msgid "2:4" +msgstr "2:4" + +#: pcbnew/dialog_gendrill.cpp:185 +msgid "Precision" +msgstr "Précision" + +#: pcbnew/dialog_gendrill.cpp:188 +msgid "Choose EXCELLON numbers precision" +msgstr "Choisir la précision des nombres en format EXCELLON" + +#: pcbnew/dialog_gendrill.cpp:192 +msgid "absolute" +msgstr "Absolu" + +#: pcbnew/dialog_gendrill.cpp:193 +msgid "auxiliary axis" +msgstr "Axe Auxiliaire" + +#: pcbnew/dialog_gendrill.cpp:194 +msgid "Drill Origin:" +msgstr "Origine des coord de perçage:" + +#: pcbnew/dialog_gendrill.cpp:197 +msgid "Choose the coordinate origin: absolute or relative to the auxiliray axis" +msgstr "Choisir l'origine des coordonnées: absolue ou relative à l'axe auxiliaire" + +#: pcbnew/dialog_gendrill.cpp:204 +#: pcbnew/dialog_gendrill.cpp:216 +msgid "None" +msgstr "Aucun" + +#: pcbnew/dialog_gendrill.cpp:205 +msgid "drill sheet (HPGL)" +msgstr "Plan de perçage (HPGL)" + +#: pcbnew/dialog_gendrill.cpp:206 +msgid "drill sheet (PostScript)" +msgstr "Plan de perçage (Postscript)" + +#: pcbnew/dialog_gendrill.cpp:207 +msgid "Drill sheet (Gerber)" +msgstr "Plan de perçage (Gerber)" + +#: pcbnew/dialog_gendrill.cpp:208 +msgid "Drill sheet (DXF)" +msgstr "Plan de perçage (DXF)" + +#: pcbnew/dialog_gendrill.cpp:209 +msgid "Drill Sheet:" +msgstr "Plan de perçage:" + +#: pcbnew/dialog_gendrill.cpp:212 +msgid "Creates a drill map in PS or HPGL format" +msgstr "Créer un plan de perçage en format PS ou HPGL" + +#: pcbnew/dialog_gendrill.cpp:217 +msgid "Drill report" +msgstr "Rapport de perçage" + +#: pcbnew/dialog_gendrill.cpp:218 +msgid "Drill Report:" +msgstr "Rapport de perçage:" + +#: pcbnew/dialog_gendrill.cpp:221 +msgid "Creates a plain text report" +msgstr "Créer un fichier rapport ascii" + +#: pcbnew/dialog_gendrill.cpp:224 +msgid "HPGL plotter Options:" +msgstr "Options de Tracé HPGL:" + +#: pcbnew/dialog_gendrill.cpp:228 +msgid "Speed (cm/s)" +msgstr "Vitesse plume ( cm/s )" + +#: pcbnew/dialog_gendrill.cpp:234 +msgid "Pen Number" +msgstr "Numéro de plume" + +#: pcbnew/dialog_gendrill.cpp:240 +msgid "Options:" +msgstr "Options :" + +#: pcbnew/dialog_gendrill.cpp:244 +msgid "mirror y axis" +msgstr "Miroir sur axe Y" + +#: pcbnew/dialog_gendrill.cpp:248 +msgid "minimal header" +msgstr "Entête minimal" + +#: pcbnew/dialog_gendrill.cpp:251 +msgid "If checked, the EXCELLON header is minimal" +msgstr "Si activé, l'entête du fichier EXELLON est minimale" + +#: pcbnew/dialog_gendrill.cpp:257 +msgid "Info:" +msgstr "Infos:" + +#: pcbnew/dialog_gendrill.cpp:261 +msgid "Default Vias Drill:" +msgstr "Perçage vias par Défaut" + +#: pcbnew/dialog_gendrill.cpp:265 +msgid "Via Drill Value" +msgstr "Perçage des Vias" + +#: pcbnew/dialog_gendrill.cpp:268 +msgid "Micro Vias Drill:" +msgstr "Perçage Micro Via:" + +#: pcbnew/dialog_gendrill.cpp:272 +msgid "Micro Via Drill Value" +msgstr "Valeur Perçage Micro Via" + +#: pcbnew/dialog_gendrill.cpp:275 +msgid "Holes Count:" +msgstr "Nb Trous" + +#: pcbnew/dialog_gendrill.cpp:279 +msgid "Pads:" +msgstr "Pastilles:" + +#: pcbnew/dialog_gendrill.cpp:282 +msgid "Through Vias:" +msgstr "Via Traversantes:" + +#: pcbnew/dialog_gendrill.cpp:285 +msgid "Micro Vias:" +msgstr "Micro Vias:" + +#: pcbnew/dialog_gendrill.cpp:288 +msgid "Buried Vias:" +msgstr "Via Enterrées:" + +#: pcbnew/dialog_gendrill.cpp:293 +#: pcbnew/cotation.cpp:103 +msgid "OK" +msgstr "OK" + +#: pcbnew/dialog_gendrill.cpp:297 +#: pcbnew/cotation.cpp:106 +msgid "Cancel" +msgstr "Annuler" + +#: pcbnew/pcbplot.cpp:164 +#: pcbnew/pcbplot.cpp:314 +msgid "Plot" +msgstr "Tracer" + +#: pcbnew/pcbplot.cpp:212 +msgid "Plot Format" +msgstr "Format de tracé" + +#: pcbnew/pcbplot.cpp:227 +msgid "HPGL Options:" +msgstr "Options HPGL:" + +#: pcbnew/pcbplot.cpp:232 +msgid "Pen Size" +msgstr "Diam Plume" + +#: pcbnew/pcbplot.cpp:239 +msgid "Pen Speed (cm/s)" +msgstr "Vitesse Plume ( cm/s )" + +#: pcbnew/pcbplot.cpp:243 +msgid "Set pen speed in cm/s" +msgstr "Ajuster Vitesse plume en centimètres par seconde" + +#: pcbnew/pcbplot.cpp:245 +msgid "Pen ovr" +msgstr "Recouvrement" + +#: pcbnew/pcbplot.cpp:251 +msgid "Set plot overlay for filling" +msgstr "Ajuste recouvrement des tracés pour les remplissages" + +#: pcbnew/pcbplot.cpp:253 +msgid "Lines Width" +msgstr "Epaiss. Lignes" + +#: pcbnew/pcbplot.cpp:259 +msgid "Set lines width used to plot in sketch mode and plot pads outlines on silk screen layers" +msgstr "Ajuste l'épaisseur des lignes utilisées pour tracer en mode contour et pour les contours des pads sur les couches de sérigraphie" + +#: pcbnew/pcbplot.cpp:264 +msgid "Absolute" +msgstr "Absolu" + +#: pcbnew/pcbplot.cpp:264 +msgid "Auxiliary axis" +msgstr "Axe Auxiliaire" + +#: pcbnew/pcbplot.cpp:267 +msgid "Plot Origin" +msgstr "Origine des Coord de Tracé" + +#: pcbnew/pcbplot.cpp:295 +msgid "X scale adjust" +msgstr "Ajustage Echelle X" + +#: pcbnew/pcbplot.cpp:298 +msgid "Set X scale adjust for exact scale plotting" +msgstr "Ajuster échelle X pour traçage à l'échelle exacte" + +#: pcbnew/pcbplot.cpp:302 +msgid "Y scale adjust" +msgstr "Ajustage Echelle Y" + +#: pcbnew/pcbplot.cpp:305 +msgid "Set Y scale adjust for exact scale plotting" +msgstr "Ajuster échelle Y pour traçage à l'échelle exacte" + +#: pcbnew/pcbplot.cpp:308 +msgid "Plot negative" +msgstr "Tracé en Négatif" + +#: pcbnew/pcbplot.cpp:317 +msgid "Save Options" +msgstr "Sauver Options" + +#: pcbnew/pcbplot.cpp:321 +msgid "Generate drill file" +msgstr "Créer Fichier de perçage" + +#: pcbnew/pcbplot.cpp:324 +msgid "Close" +msgstr "Fermer" + +#: pcbnew/pcbplot.cpp:370 +msgid "Exclude Edges_Pcb layer" +msgstr "Exclure Couche Contours PCB" + +#: pcbnew/pcbplot.cpp:374 +msgid "Exclude contents of Edges_Pcb layer from all other layers" +msgstr "Exclure les tracés contour PCB des autres couches" + +#: pcbnew/pcbplot.cpp:381 +msgid "Print sheet ref" +msgstr "Imprimer cartouche" + +#: pcbnew/pcbplot.cpp:392 +msgid "Print pads on silkscreen" +msgstr "Pads sur Sérigraphie" + +#: pcbnew/pcbplot.cpp:399 +msgid "Enable/disable print/plot pads on silkscreen layers" +msgstr "Active/désactive tracé des pastilles sur les couches de sérigraphie" + +#: pcbnew/pcbplot.cpp:403 +msgid "Always print pads" +msgstr "Toujours tracer pads" + +#: pcbnew/pcbplot.cpp:408 +msgid "Force print/plot pads on ALL layers" +msgstr "Force le tracé des pastilles sur TOUTES les couches" + +#: pcbnew/pcbplot.cpp:413 +msgid "Print module value" +msgstr "Imprimer Valeur Module" + +#: pcbnew/pcbplot.cpp:417 +msgid "Enable/disable print/plot module value on silkscreen layers" +msgstr "Active/désactive le tracé des textes valeurs des modules sur couches de sérigraphie" + +#: pcbnew/pcbplot.cpp:421 +msgid "Print module reference" +msgstr "Imprimer Référence Module" + +#: pcbnew/pcbplot.cpp:425 +msgid "Enable/disable print/plot module reference on silkscreen layers" +msgstr "Active/désactive le tracé des textes référence des modules sur couches de sérigraphie" + +#: pcbnew/pcbplot.cpp:429 +msgid "Print other module texts" +msgstr "Imprimer autres textes module" + +#: pcbnew/pcbplot.cpp:433 +msgid "Enable/disable print/plot module field texts on silkscreen layers" +msgstr "Active/désactive le tracé des textes des champs des modules sur couches de sérigraphie" + +#: pcbnew/pcbplot.cpp:438 +msgid "Force print invisible texts" +msgstr "Force tracé textes invisibles" + +#: pcbnew/pcbplot.cpp:442 +msgid "Force print/plot module invisible texts on silkscreen layers" +msgstr "Force le tracé des textes invisibles sur couches de sérigraphie" + +#: pcbnew/pcbplot.cpp:447 +msgid "No drill mark" +msgstr "Pas de marque" + +#: pcbnew/pcbplot.cpp:448 +msgid "Small mark" +msgstr "Petite marque" + +#: pcbnew/pcbplot.cpp:449 +msgid "Real drill" +msgstr "Perçage réel" + +#: pcbnew/pcbplot.cpp:453 +msgid "Pads Drill Opt" +msgstr "Options Perçage Pads" + +#: pcbnew/pcbplot.cpp:462 +msgid "Auto scale" +msgstr "Ech. auto" + +#: pcbnew/pcbplot.cpp:463 +msgid "Scale 1" +msgstr "Echelle 1" + +#: pcbnew/pcbplot.cpp:464 +msgid "Scale 1.5" +msgstr "Echelle 1,5" + +#: pcbnew/pcbplot.cpp:465 +msgid "Scale 2" +msgstr "Echelle 2" + +#: pcbnew/pcbplot.cpp:466 +msgid "Scale 3" +msgstr "Echelle 3" + +#: pcbnew/pcbplot.cpp:470 +msgid "Scale Opt" +msgstr "Echelle" + +#: pcbnew/pcbplot.cpp:477 +msgid "Line" +msgstr "Ligne" + +#: pcbnew/pcbplot.cpp:477 +msgid "Filled" +msgstr "Plein" + +#: pcbnew/pcbplot.cpp:478 +msgid "Sketch" +msgstr "Contour" + +#: pcbnew/pcbplot.cpp:480 +msgid "Plot Mode" +msgstr "Mode de Tracé" + +#: pcbnew/pcbplot.cpp:488 +msgid "Plot mirror" +msgstr "Tracé Miroir" + +#: pcbnew/pcbplot.cpp:494 +msgid "Vias on mask" +msgstr "Vias sur masque" + +#: pcbnew/pcbplot.cpp:498 +msgid "Print/plot vias on mask layers. They are in this case not protected" +msgstr "Trace vias sur vernis épargne. Elles seront non protégées" + +#: pcbnew/pcbplot.cpp:745 +msgid "Adobe post script files (.ps)|*.ps" +msgstr "Fichiers Adobe post script (.ps)|*.ps" + +#: pcbnew/pcbplot.cpp:751 +msgid "GERBER photo plot files (.pho)|*.pho" +msgstr "Fichiers phottraçage GERBER (.pho)|*.pho" + +#: pcbnew/pcbplot.cpp:756 +msgid "HPGL plot files (.plt)|*.plt" +msgstr "Fichiers Tracé HPGL (.plt)|*.plt" + +#: pcbnew/pcbplot.cpp:762 +msgid "DXF files (.dxf)|*.dxf" +msgstr "Fichiers DXF (.dxf)|*.dxf" + +#: pcbnew/pcbplot.cpp:769 +msgid "Warning: Scale option set to a very small value" +msgstr "Attention: option d'échelle ajustée à une valeur très petite" + +#: pcbnew/pcbplot.cpp:772 +msgid "Warning: Scale option set to a very large value" +msgstr "Attention: option d'échelle ajustée à une valeur très grande" + +#: pcbnew/pcbplot.cpp:821 +msgid "No layer selected" +msgstr "Pas de couche sélectionnée" #: pcbnew/cotation.cpp:84 msgid "Dimension properties" msgstr "Propriétés des Cotes" -#: pcbnew/cotation.cpp:103 -msgid "OK" -msgstr "OK" - -#: pcbnew/cotation.cpp:106 -msgid "Cancel" -msgstr "Annuler" - #: pcbnew/cotation.cpp:109 msgid "Normal" msgstr "Normal" +#: pcbnew/cotation.cpp:109 +msgid "Mirror" +msgstr "Miroir" + #: pcbnew/cotation.cpp:110 msgid "Display" msgstr "Affichage" @@ -386,6 +523,10 @@ msgstr "Affichage" msgid "Size" msgstr "Taille " +#: pcbnew/cotation.cpp:125 +msgid "Width" +msgstr "Epaisseur" + #: pcbnew/cotation.cpp:129 msgid "Layer:" msgstr "Couche:" @@ -508,78 +649,13 @@ msgstr "Créer Gap MicroOnde " msgid "Gap (inch):" msgstr "Gap (inch):" -#: pcbnew/plot_rtn.cpp:207 -#, c-format -msgid "" -"Your BOARD has a bad layer number of %u for module\n" -" %s's \"reference\" text." -msgstr "" -"Votre PCB a un mauvais numero de couche %u pour le module\n" -" %s's \"référence\"." +#: pcbnew/plotgerb.cpp:55 +msgid "unable to create file " +msgstr "Impossible de créer fichier " -#: pcbnew/plot_rtn.cpp:227 -#, c-format -msgid "" -"Your BOARD has a bad layer number of %u for module\n" -" %s's \"value\" text." -msgstr "" -"Votre PCB a un mauvais numero de couche %u pour le module\n" -" %s's \"valeur\"." - -#: pcbnew/plot_rtn.cpp:268 -#, c-format -msgid "" -"Your BOARD has a bad layer number of %u for module\n" -" %s's \"module text\" text of %s." -msgstr "" -"Votre PCB a un mauvais numero de couche %u pour le module\n" -" %s's \"texte module\" de %s." - -#: pcbnew/gendrill.cpp:27 -msgid "Drill files (*.drl)|*.drl" -msgstr "Fichiers de Perçage (*.drl)|*.drl" - -#: pcbnew/gendrill.cpp:319 -msgid "Save Drill File" -msgstr "Sauver Fichier de Perçage" - -#: pcbnew/gendrill.cpp:389 -#: pcbnew/dialog_gendrill.cpp:183 -msgid "2:3" -msgstr "2:3" - -#: pcbnew/gendrill.cpp:390 -#: pcbnew/dialog_gendrill.cpp:184 -msgid "2:4" -msgstr "2:4" - -#: pcbnew/gendrill.cpp:395 -msgid "3:2" -msgstr "3:2" - -#: pcbnew/gendrill.cpp:396 -msgid "3:3" -msgstr "3:3" - -#: pcbnew/gendrill.cpp:750 -msgid "PostScript files (.ps)|*.ps" -msgstr "Fichiers PostScript (.ps)|*.ps" - -#: pcbnew/gendrill.cpp:763 -msgid "Save Drill Plot File" -msgstr "Sauver Plan de Perçage" - -#: pcbnew/gendrill.cpp:774 -msgid "Unable to create file" -msgstr "Impossible de créer le fichier" - -#: pcbnew/gendrill.cpp:801 -msgid "Drill report files (.rpt)|*.rpt" -msgstr "Fichiers rapport de perçage (.rpt)*.rpt" - -#: pcbnew/gendrill.cpp:807 -msgid "Save Drill Report File" -msgstr "Sauver Fichier Rapport de Perçage" +#: pcbnew/plotgerb.cpp:68 +msgid "File" +msgstr "Fichier" #: pcbnew/hotkeys.cpp:477 #, c-format @@ -769,6 +845,10 @@ msgstr "Last Change" msgid "Netlist path" msgstr "Chemin Netliste " +#: pcbnew/class_module.cpp:941 +msgid "Layer" +msgstr "Couche" + #: pcbnew/class_module.cpp:954 msgid "Pads" msgstr "Pads" @@ -777,6 +857,10 @@ msgstr "Pads" msgid "Stat" msgstr "Stat" +#: pcbnew/class_module.cpp:966 +msgid "Orient" +msgstr "Orient" + #: pcbnew/class_module.cpp:969 msgid "Module" msgstr "Module" @@ -793,167 +877,6 @@ msgstr "Doc: " msgid "KeyW: " msgstr "KeyW: " -#: pcbnew/dialog_gendrill.cpp:165 -msgid "Millimeters" -msgstr "Millimètres" - -#: pcbnew/dialog_gendrill.cpp:166 -msgid "Inches" -msgstr "Pouces" - -#: pcbnew/dialog_gendrill.cpp:167 -msgid "Drill Units:" -msgstr "Unités perçage:" - -#: pcbnew/dialog_gendrill.cpp:172 -msgid "decimal format" -msgstr "Format décimal" - -#: pcbnew/dialog_gendrill.cpp:173 -msgid "suppress leading zeros" -msgstr "Suppression zeros de tête" - -#: pcbnew/dialog_gendrill.cpp:174 -msgid "suppress trailing zeros" -msgstr "Suppression zeros de fin" - -#: pcbnew/dialog_gendrill.cpp:175 -msgid "keep zeros" -msgstr "Garder les zéros" - -#: pcbnew/dialog_gendrill.cpp:176 -msgid "Zeros Format" -msgstr "Format des zéros" - -#: pcbnew/dialog_gendrill.cpp:179 -msgid "Choose EXCELLON numbers notation" -msgstr "Choisir la notation des nombres en format EXCELLON" - -#: pcbnew/dialog_gendrill.cpp:185 -msgid "Precision" -msgstr "Précision" - -#: pcbnew/dialog_gendrill.cpp:188 -msgid "Choose EXCELLON numbers precision" -msgstr "Choisir la précision des nombres en format EXCELLON" - -#: pcbnew/dialog_gendrill.cpp:192 -msgid "absolute" -msgstr "Absolu" - -#: pcbnew/dialog_gendrill.cpp:193 -msgid "auxiliary axis" -msgstr "Axe Auxiliaire" - -#: pcbnew/dialog_gendrill.cpp:194 -msgid "Drill Origin:" -msgstr "Origine des coord de perçage:" - -#: pcbnew/dialog_gendrill.cpp:197 -msgid "Choose the coordinate origin: absolute or relative to the auxiliray axis" -msgstr "Choisir l'origine des coordonnées: absolue ou relative à l'axe auxiliaire" - -#: pcbnew/dialog_gendrill.cpp:204 -#: pcbnew/dialog_gendrill.cpp:214 -msgid "None" -msgstr "Aucun" - -#: pcbnew/dialog_gendrill.cpp:205 -msgid "drill sheet (HPGL)" -msgstr "Plan de perçage (HPGL)" - -#: pcbnew/dialog_gendrill.cpp:206 -msgid "drill sheet (PostScript)" -msgstr "Plan de perçage (Postscript)" - -#: pcbnew/dialog_gendrill.cpp:207 -msgid "Drill Sheet:" -msgstr "Plan de perçage:" - -#: pcbnew/dialog_gendrill.cpp:210 -msgid "Creates a drill map in PS or HPGL format" -msgstr "Créer un plan de perçage en format PS ou HPGL" - -#: pcbnew/dialog_gendrill.cpp:215 -msgid "Drill report" -msgstr "Rapport de perçage" - -#: pcbnew/dialog_gendrill.cpp:216 -msgid "Drill Report:" -msgstr "Rapport de perçage:" - -#: pcbnew/dialog_gendrill.cpp:219 -msgid "Creates a plain text report" -msgstr "Créer un fichier rapport ascii" - -#: pcbnew/dialog_gendrill.cpp:222 -msgid "HPGL plotter Options:" -msgstr "Options de Tracé HPGL:" - -#: pcbnew/dialog_gendrill.cpp:226 -msgid "Speed (cm/s)" -msgstr "Vitesse plume ( cm/s )" - -#: pcbnew/dialog_gendrill.cpp:232 -msgid "Pen Number" -msgstr "Numéro de plume" - -#: pcbnew/dialog_gendrill.cpp:238 -msgid "Options:" -msgstr "Options :" - -#: pcbnew/dialog_gendrill.cpp:242 -msgid "mirror y axis" -msgstr "Miroir sur axe Y" - -#: pcbnew/dialog_gendrill.cpp:246 -msgid "minimal header" -msgstr "Entête minimal" - -#: pcbnew/dialog_gendrill.cpp:249 -msgid "If checked, the EXCELLON header is minimal" -msgstr "Si activé, l'entête du fichier EXELLON est minimale" - -#: pcbnew/dialog_gendrill.cpp:255 -msgid "Info:" -msgstr "Infos:" - -#: pcbnew/dialog_gendrill.cpp:259 -msgid "Default Vias Drill:" -msgstr "Perçage vias par Défaut" - -#: pcbnew/dialog_gendrill.cpp:263 -msgid "Via Drill Value" -msgstr "Perçage des Vias" - -#: pcbnew/dialog_gendrill.cpp:266 -msgid "Micro Vias Drill:" -msgstr "Perçage Micro Via:" - -#: pcbnew/dialog_gendrill.cpp:270 -msgid "Micro Via Drill Value" -msgstr "Valeur Perçage Micro Via" - -#: pcbnew/dialog_gendrill.cpp:273 -msgid "Holes Count:" -msgstr "Nb Trous" - -#: pcbnew/dialog_gendrill.cpp:277 -msgid "Pads:" -msgstr "Pastilles:" - -#: pcbnew/dialog_gendrill.cpp:280 -msgid "Through Vias:" -msgstr "Via Traversantes:" - -#: pcbnew/dialog_gendrill.cpp:283 -msgid "Micro Vias:" -msgstr "Micro Vias:" - -#: pcbnew/dialog_gendrill.cpp:286 -msgid "Buried Vias:" -msgstr "Via Enterrées:" - #: pcbnew/tool_pcb.cpp:30 msgid "" "Show active layer selections\n" @@ -1476,14 +1399,6 @@ msgstr "Liste pads non connectés" msgid "Finished\n" msgstr "Fini\n" -#: pcbnew/plothpgl.cpp:68 -msgid "Unable to create " -msgstr "Impossible de créer " - -#: pcbnew/plothpgl.cpp:75 -msgid "File" -msgstr "Fichier" - #: pcbnew/cleaningoptions_dialog.cpp:146 msgid "Static" msgstr "Statique" @@ -1573,10 +1488,12 @@ msgid "User Grid Size Y" msgstr "Grille perso dim Y" #: pcbnew/set_grid.cpp:142 +#: pcbnew/dialog_initpcb.cpp:159 msgid "&OK" msgstr "&OK" #: pcbnew/set_grid.cpp:146 +#: pcbnew/dialog_initpcb.cpp:162 msgid "&Cancel" msgstr "&Annuler" @@ -1781,6 +1698,14 @@ msgstr "Sauver Fichier C.I." msgid "Warning: unable to create backup file " msgstr "Attention: impossible de créer un fichier backup " +#: pcbnew/files.cpp:364 +#: pcbnew/librairi.cpp:296 +#: pcbnew/librairi.cpp:445 +#: pcbnew/librairi.cpp:600 +#: pcbnew/librairi.cpp:803 +msgid "Unable to create " +msgstr "Impossible de créer " + #: pcbnew/files.cpp:383 msgid "Backup file: " msgstr "Fichier backup: " @@ -1963,6 +1888,33 @@ msgstr "N'affiche pas les couches cuivre" msgid "Apply" msgstr "Appliquer" +#: pcbnew/plot_rtn.cpp:145 +#, c-format +msgid "" +"Your BOARD has a bad layer number of %u for module\n" +" %s's \"reference\" text." +msgstr "" +"Votre PCB a un mauvais numero de couche %u pour le module\n" +" %s's \"référence\"." + +#: pcbnew/plot_rtn.cpp:165 +#, c-format +msgid "" +"Your BOARD has a bad layer number of %u for module\n" +" %s's \"value\" text." +msgstr "" +"Votre PCB a un mauvais numero de couche %u pour le module\n" +" %s's \"valeur\"." + +#: pcbnew/plot_rtn.cpp:203 +#, c-format +msgid "" +"Your BOARD has a bad layer number of %u for module\n" +" %s's \"module text\" text of %s." +msgstr "" +"Votre PCB a un mauvais numero de couche %u pour le module\n" +" %s's \"texte module\" de %s." + #: pcbnew/dialog_edit_module.cpp:50 msgid "Module properties" msgstr "Propriétés du Module" @@ -2556,15 +2508,6 @@ msgstr "&3D Visu" msgid "&Help" msgstr "&Aide" -#: pcbnew/plotgerb.cpp:102 -msgid "unable to create file " -msgstr "Impossible de créer fichier " - -#: pcbnew/plotgerb.cpp:800 -#, c-format -msgid "unable to reopen file <%s>" -msgstr "Ne peut pas réouvrir fichier <%s>" - #: pcbnew/netlist.cpp:116 #, c-format msgid "Netlist file %s not found" @@ -2753,7 +2696,6 @@ msgid "Track" msgstr "Piste" #: pcbnew/pcbframe.cpp:531 -#: pcbnew/dialog_drc_base.cpp:35 msgid "Clearance" msgstr "Isolation" @@ -2857,13 +2799,45 @@ msgstr "Itération" msgid "Ok to abort ?" msgstr "Ok pour arrêter ?" -#: pcbnew/gen_drill_report_files.cpp:392 -msgid "" -" Drill map: Too many diameter values to draw to draw one symbol per drill value (max 13)\n" -"Plot uses circle shape for some drill values" -msgstr "" -"Plan de perçage: trop de diamètres différents pour tracer 1 symbole par diamètre (max 13)\n" -"Le tracé utilise des cercles pour quelques valeurs " +#: pcbnew/gendrill.cpp:27 +msgid "Drill files (*.drl)|*.drl" +msgstr "Fichiers de Perçage (*.drl)|*.drl" + +#: pcbnew/gendrill.cpp:319 +msgid "Save Drill File" +msgstr "Sauver Fichier de Perçage" + +#: pcbnew/gendrill.cpp:404 +msgid "3:2" +msgstr "3:2" + +#: pcbnew/gendrill.cpp:405 +msgid "3:3" +msgstr "3:3" + +#: pcbnew/gendrill.cpp:756 +msgid "PostScript files (.ps)|*.ps" +msgstr "Fichiers PostScript (.ps)|*.ps" + +#: pcbnew/gendrill.cpp:761 +msgid "Gerber files (.pho)|*.pho" +msgstr "Fichiers Gerber (*.pho)|*.pho" + +#: pcbnew/gendrill.cpp:779 +msgid "Save Drill Plot File" +msgstr "Sauver Plan de Perçage" + +#: pcbnew/gendrill.cpp:790 +msgid "Unable to create file" +msgstr "Impossible de créer le fichier" + +#: pcbnew/gendrill.cpp:817 +msgid "Drill report files (.rpt)|*.rpt" +msgstr "Fichiers rapport de perçage (.rpt)*.rpt" + +#: pcbnew/gendrill.cpp:823 +msgid "Save Drill Report File" +msgstr "Sauver Fichier Rapport de Perçage" #: pcbnew/ioascii.cpp:174 msgid "Error: Unexpected end of file !" @@ -3277,34 +3251,13 @@ msgstr "Fichier rapport DRC (.rpt)|*.rpt" msgid "Save DRC Report File" msgstr "Sauver Fichier Rapport DRC:" -#: pcbnew/dialog_print_using_printer.cpp:129 -msgid "Error Init Printer info" -msgstr "Erreur Init info imprimante" - -#: pcbnew/dialog_print_using_printer.cpp:163 -msgid "Layers:" -msgstr "Couches:" - -#: pcbnew/dialog_print_using_printer.cpp:374 -msgid "Printer Problem!" -msgstr "Problème d'imprimante" - -#: pcbnew/dialog_print_using_printer.cpp:396 -msgid "Print Preview" -msgstr "Prévisualisation" - -#: pcbnew/dialog_print_using_printer.cpp:465 -msgid "Print" -msgstr "Imprimer" - -#: pcbnew/dialog_print_using_printer.cpp:476 -msgid "There was a problem printing" -msgstr "Il y a un problème d'impression" - -#: pcbnew/dialog_print_using_printer.cpp:492 -#, c-format -msgid "Print page %d" -msgstr "Imprimer page %d" +#: pcbnew/gen_drill_report_files.cpp:264 +msgid "" +" Drill map: Too many diameter values to draw to draw one symbol per drill value (max 13)\n" +"Plot uses circle shape for some drill values" +msgstr "" +"Plan de perçage: trop de diamètres différents pour tracer 1 symbole par diamètre (max 13)\n" +"Le tracé utilise des cercles pour quelques valeurs " #: pcbnew/dsn.cpp:502 msgid "Line length exceeded" @@ -3609,6 +3562,14 @@ msgstr "Ref." msgid "Text" msgstr "Texte" +#: pcbnew/class_text_mod.cpp:482 +msgid "No" +msgstr "Non" + +#: pcbnew/class_text_mod.cpp:484 +msgid "Yes" +msgstr "Oui" + #: pcbnew/class_text_mod.cpp:494 msgid " No" msgstr "Non" @@ -3617,6 +3578,14 @@ msgstr "Non" msgid " Yes" msgstr "Oui" +#: pcbnew/class_text_mod.cpp:507 +msgid "H Size" +msgstr "Taille H" + +#: pcbnew/class_text_mod.cpp:510 +msgid "V Size" +msgstr "Taille V" + #: pcbnew/onleftclick.cpp:183 msgid "Graphic not authorized on Copper layers" msgstr "Graphique non autorisé sur Couches Cuivre" @@ -4427,6 +4396,11 @@ msgstr "Conn" msgid "Pad Type:" msgstr "Type Pad:" +#: pcbnew/dialog_pad_properties_base.cpp:102 +#: pcbnew/dialog_SVG_print_base.cpp:23 +msgid "Layers:" +msgstr "Couches:" + #: pcbnew/dialog_pad_properties_base.cpp:104 msgid "Copper layer" msgstr "Couches Cuivre" @@ -4965,6 +4939,14 @@ msgstr "Hauteur Texte Module" msgid "Text Module Size H" msgstr "Largeur Texte Module" +#: pcbnew/class_pcb_text.cpp:234 +msgid "COTATION" +msgstr "COTATION" + +#: pcbnew/class_pcb_text.cpp:236 +msgid "PCB Text" +msgstr "Texte PCB" + #: pcbnew/dialog_netlist.cpp:67 msgid "Netlist Selection:" msgstr "Sélection de la netliste" @@ -5057,6 +5039,10 @@ msgstr "Options Pages" msgid "Preview" msgstr "Prévisualisation" +#: pcbnew/dialog_print_using_printer_base.cpp:125 +msgid "Print" +msgstr "Imprimer" + #: pcbnew/dialog_netlist_fbp.cpp:25 #: pcbnew/class_board_item.cpp:96 msgid "Reference" @@ -5417,7 +5403,6 @@ msgid "Delete part in current library" msgstr "Supprimer composant en librairie de travail" #: pcbnew/tool_modedit.cpp:60 -#: pcbnew/dialog_exchange_modules_base.cpp:39 msgid "New Module" msgstr "Nouveau Module" @@ -5582,6 +5567,27 @@ msgstr "" "Chemins (chemins système et chemins utilisateurs) utilisés pour chercher et charger les fichiers libriries et documentation des composants.\n" "Triés par ordre de priorité décroissante." +#: pcbnew/dialog_print_using_printer.cpp:129 +msgid "Error Init Printer info" +msgstr "Erreur Init info imprimante" + +#: pcbnew/dialog_print_using_printer.cpp:374 +msgid "Printer Problem!" +msgstr "Problème d'imprimante" + +#: pcbnew/dialog_print_using_printer.cpp:396 +msgid "Print Preview" +msgstr "Prévisualisation" + +#: pcbnew/dialog_print_using_printer.cpp:476 +msgid "There was a problem printing" +msgstr "Il y a un problème d'impression" + +#: pcbnew/dialog_print_using_printer.cpp:492 +#, c-format +msgid "Print page %d" +msgstr "Imprimer page %d" + #: pcbnew/class_board_item.cpp:27 msgid "Bezier Curve" msgstr "Courbe de Bezier" @@ -6157,6 +6163,95 @@ msgstr "" msgid "Nothing found" msgstr " Rien trouvé" +#: eeschema/plothpgl.cpp:199 +msgid "Sheet Size" +msgstr "Dim. feuille" + +#: eeschema/plothpgl.cpp:200 +msgid "Page Size A4" +msgstr "Feuille A4" + +#: eeschema/plothpgl.cpp:201 +msgid "Page Size A3" +msgstr "Feuille A3" + +#: eeschema/plothpgl.cpp:202 +msgid "Page Size A2" +msgstr "Feuille A2" + +#: eeschema/plothpgl.cpp:203 +msgid "Page Size A1" +msgstr "Feuille A1" + +#: eeschema/plothpgl.cpp:204 +msgid "Page Size A0" +msgstr "Feuille A0" + +#: eeschema/plothpgl.cpp:205 +msgid "Page Size A" +msgstr "Feuille A" + +#: eeschema/plothpgl.cpp:206 +msgid "Page Size B" +msgstr "Feuille B" + +#: eeschema/plothpgl.cpp:207 +msgid "Page Size C" +msgstr "Feuille C" + +#: eeschema/plothpgl.cpp:208 +msgid "Page Size D" +msgstr "Feuille D" + +#: eeschema/plothpgl.cpp:209 +msgid "Page Size E" +msgstr "Feuille E" + +#: eeschema/plothpgl.cpp:210 +msgid "Plot page size:" +msgstr "Format de la feuille:" + +#: eeschema/plothpgl.cpp:217 +msgid "Pen control:" +msgstr "Contrôle plume" + +#: eeschema/plothpgl.cpp:221 +msgid "Pen Width ( mils )" +msgstr "Epaiss plume (mils)" + +#: eeschema/plothpgl.cpp:227 +msgid "Pen Speed ( cm/s )" +msgstr "Vitesse plume ( cm/s )" + +#: eeschema/plothpgl.cpp:239 +msgid "Page offset:" +msgstr "Offset page:" + +#: eeschema/plothpgl.cpp:243 +msgid "Plot Offset X" +msgstr "Offset de tracé X" + +#: eeschema/plothpgl.cpp:249 +msgid "Plot Offset Y" +msgstr "Offset de tracé Y" + +#: eeschema/plothpgl.cpp:260 +msgid "&Plot Page" +msgstr "&Tracer Page" + +#: eeschema/plothpgl.cpp:264 +msgid "Plot A&LL" +msgstr "&Tout Tracer" + +#: eeschema/plothpgl.cpp:272 +msgid "&Accept Offset" +msgstr "&Accepter Offset" + +#: eeschema/plothpgl.cpp:592 +#, c-format +msgid "Plot: %s\n" +msgstr "Trace: %s\n" + #: eeschema/eeredraw.cpp:100 msgid "Sheet" msgstr "Feuille" @@ -6202,10 +6297,6 @@ msgstr "Erreur en création de " msgid "Failed to create file " msgstr "Impossible de créer le fichier " -#: eeschema/eeschema.cpp:152 -msgid "Eeschema is already running, Continue?" -msgstr "Eeschema est en cours d'exécution. Continuer ?" - #: eeschema/hierarch.cpp:122 msgid "Navigator" msgstr "Navigateur" @@ -7035,6 +7126,30 @@ msgstr "> %-28.28s PinSheet %-7.7s (Feuille %s) pos: %3.3f, %3.3f\n" msgid "#End labels\n" msgstr "#End labels\n" +#: eeschema/plotps.cpp:174 +msgid "Plot Options:" +msgstr "Options de Tracé:" + +#: eeschema/plotps.cpp:179 +msgid "B/W" +msgstr "N/B" + +#: eeschema/plotps.cpp:181 +msgid "Plot Color:" +msgstr "Tracé et Couleurs:" + +#: eeschema/plotps.cpp:185 +msgid "Print Sheet Ref" +msgstr "Imprimer cartouche" + +#: eeschema/plotps.cpp:207 +msgid "Messages :" +msgstr "Messages :" + +#: eeschema/plotps.cpp:221 +msgid "Default Line Width" +msgstr "Epaiss. ligne par défaut" + #: eeschema/menubar.cpp:42 msgid "&New" msgstr "&Nouveau" @@ -7099,199 +7214,207 @@ msgstr "Tracé SVG" msgid "Plot schematic sheet in SVG format" msgstr "Tracer les feuilles schématiques en format SVG" -#: eeschema/menubar.cpp:97 +#: eeschema/menubar.cpp:94 +msgid "Plot DXF" +msgstr "Tracé DXF" + +#: eeschema/menubar.cpp:95 +msgid "Plot schematic sheet in DXF format" +msgstr "Tracer les feuilles schématiques en format DXF" + +#: eeschema/menubar.cpp:103 msgid "Plot to Clipboard" msgstr "Tracé dans Presse papier" -#: eeschema/menubar.cpp:98 +#: eeschema/menubar.cpp:104 msgid "Export drawings to clipboard" msgstr " Exporter le dessin dans le presse-papier" -#: eeschema/menubar.cpp:105 +#: eeschema/menubar.cpp:111 msgid "Plot schematic sheet in HPGL, PostScript or SVG format" msgstr "Tracer les feuilles schématiques en format HPGL, POSTSCRIPT ou SVG" -#: eeschema/menubar.cpp:109 +#: eeschema/menubar.cpp:115 msgid "Quit Eeschema" msgstr "Quitter Eeschema" -#: eeschema/menubar.cpp:118 +#: eeschema/menubar.cpp:124 msgid "&Undo\t" msgstr "&Undo\t" -#: eeschema/menubar.cpp:124 +#: eeschema/menubar.cpp:130 msgid "&Redo\t" msgstr "&Redo\t" -#: eeschema/menubar.cpp:139 +#: eeschema/menubar.cpp:145 msgid "Find" msgstr "Chercher" -#: eeschema/menubar.cpp:146 +#: eeschema/menubar.cpp:152 msgid "Backannotate" msgstr "Rétro Annotation" -#: eeschema/menubar.cpp:147 +#: eeschema/menubar.cpp:153 msgid "Back annotated footprint fields" msgstr "Rétroannotation des champs modules" -#: eeschema/menubar.cpp:185 +#: eeschema/menubar.cpp:191 msgid "&Component" msgstr "&Composant" -#: eeschema/menubar.cpp:186 +#: eeschema/menubar.cpp:192 msgid "Place the component" msgstr "Placer le Composant" -#: eeschema/menubar.cpp:190 +#: eeschema/menubar.cpp:196 msgid "&Power port" msgstr "Power Symbole" -#: eeschema/menubar.cpp:191 +#: eeschema/menubar.cpp:197 msgid "Place the power port" msgstr "Placer le Symbole Power" -#: eeschema/menubar.cpp:195 +#: eeschema/menubar.cpp:201 msgid "&Wire" msgstr "&Fil" -#: eeschema/menubar.cpp:196 +#: eeschema/menubar.cpp:202 msgid "Place the wire" msgstr "Place fil" -#: eeschema/menubar.cpp:200 +#: eeschema/menubar.cpp:206 msgid "&Bus" msgstr "&Bus" -#: eeschema/menubar.cpp:201 +#: eeschema/menubar.cpp:207 msgid "Place bus" msgstr "Place bus" -#: eeschema/menubar.cpp:206 +#: eeschema/menubar.cpp:212 msgid "W&ire to bus entry" msgstr "Entrées de bus (type fil vers bus)" -#: eeschema/menubar.cpp:212 +#: eeschema/menubar.cpp:218 msgid "B&us to bus entry" msgstr "Entrées de bus (type bus vers bus)" -#: eeschema/menubar.cpp:217 +#: eeschema/menubar.cpp:223 msgid "No connect flag" msgstr "Symbole de Non Connexion" -#: eeschema/menubar.cpp:218 +#: eeschema/menubar.cpp:224 msgid "Place a no connect flag" msgstr "Placer un Symbole de Non Connexion" -#: eeschema/menubar.cpp:222 +#: eeschema/menubar.cpp:228 msgid "Net name" msgstr "Net Name" -#: eeschema/menubar.cpp:227 +#: eeschema/menubar.cpp:233 msgid "Global label" msgstr "Label Global" -#: eeschema/menubar.cpp:228 +#: eeschema/menubar.cpp:234 msgid "Place a global label. Warning: all global labels with the same name are connected in whole hierarchy" msgstr "Placer un label global. Attention: tous les labels globaux avec le même nom sont connectés dans toute la hiérarchie" -#: eeschema/menubar.cpp:233 +#: eeschema/menubar.cpp:239 msgid "Junction" msgstr "Jonction" -#: eeschema/menubar.cpp:234 +#: eeschema/menubar.cpp:240 msgid "Place junction" msgstr "Place jonction" -#: eeschema/menubar.cpp:241 +#: eeschema/menubar.cpp:247 msgid "Hierarchical label" msgstr "Label Hiérarchique" -#: eeschema/menubar.cpp:248 +#: eeschema/menubar.cpp:254 msgid "Hierarchical sheet" msgstr "Feuille Hiérrachique" -#: eeschema/menubar.cpp:249 +#: eeschema/menubar.cpp:255 msgid "Create a hierarchical sheet" msgstr "Créer une Feuille Hiérachique" -#: eeschema/menubar.cpp:254 +#: eeschema/menubar.cpp:260 msgid "Import Hierarchical Label" msgstr "Importer Label Hiérarchique" -#: eeschema/menubar.cpp:255 +#: eeschema/menubar.cpp:261 msgid "Place a pin sheet created by importing a hierarchical label from sheet" msgstr "Placer une pin hiérarchique créée par importation d'un label hiérarchique de la feuille" -#: eeschema/menubar.cpp:261 +#: eeschema/menubar.cpp:267 msgid "Add Hierarchical Pin to Sheet" msgstr "Ajouter Pins de Hiérarchie dans feuille" -#: eeschema/menubar.cpp:262 +#: eeschema/menubar.cpp:268 msgid "Place a hierarchical pin to sheet" msgstr "Addition de pins de hiérarchie dans les feuilles symboles de hiérarchie" -#: eeschema/menubar.cpp:270 +#: eeschema/menubar.cpp:276 msgid "Graphic line or polygon" msgstr "Ligne ou polygone graphique" -#: eeschema/menubar.cpp:271 +#: eeschema/menubar.cpp:277 msgid "Place graphic lines or polygons" msgstr "Placer lignes ou polygones graphiques" -#: eeschema/menubar.cpp:277 +#: eeschema/menubar.cpp:283 msgid "Graphic text (comment)" msgstr "Textes graphiques (commentaires)" -#: eeschema/menubar.cpp:286 +#: eeschema/menubar.cpp:292 msgid "Library preferences" msgstr "Préférences pour Librairie" -#: eeschema/menubar.cpp:290 +#: eeschema/menubar.cpp:296 msgid "&Colors" msgstr "&Couleurs" -#: eeschema/menubar.cpp:291 +#: eeschema/menubar.cpp:297 msgid "Color preferences" msgstr "Préférences de couleurs" -#: eeschema/menubar.cpp:296 +#: eeschema/menubar.cpp:302 msgid "&Options" msgstr "&Options" -#: eeschema/menubar.cpp:297 +#: eeschema/menubar.cpp:303 msgid "Eeschema general options and preferences" msgstr "Options et préférences générales de Eeschema" -#: eeschema/menubar.cpp:304 +#: eeschema/menubar.cpp:310 msgid "&Save preferences" msgstr "&Sauver Préférences" -#: eeschema/menubar.cpp:309 +#: eeschema/menubar.cpp:315 msgid "&Read preferences" msgstr "&Lire Préférences" -#: eeschema/menubar.cpp:320 +#: eeschema/menubar.cpp:326 msgid "Open the eeschema manual" msgstr "Ouvrir la documentation de eeschema" -#: eeschema/menubar.cpp:324 +#: eeschema/menubar.cpp:330 msgid "&About" msgstr "&Au Sujet de" -#: eeschema/menubar.cpp:325 +#: eeschema/menubar.cpp:331 msgid "About eeschema schematic designer" msgstr "Au sujet de Eeschema (outil de conception schématique)" -#: eeschema/menubar.cpp:331 +#: eeschema/menubar.cpp:337 msgid "&Edit" msgstr "&Editer" -#: eeschema/menubar.cpp:332 +#: eeschema/menubar.cpp:338 msgid "&View" msgstr "&Voir" -#: eeschema/menubar.cpp:333 +#: eeschema/menubar.cpp:339 msgid "&Place" msgstr "&Placer" @@ -7321,99 +7444,13 @@ msgstr "Exporter le symbole" msgid "Save Symbol in [%s]" msgstr "Symbole sauvé en [%s]" -#: eeschema/class_pin.cpp:45 -msgid "Pin" -msgstr "Pin" +#: eeschema/eeschema.cpp:145 +msgid "Eeschema is already running, Continue?" +msgstr "Eeschema est en cours d'exécution. Continuer ?" -#: eeschema/class_pin.cpp:1047 -msgid "PinName" -msgstr "Nom Pin" - -#: eeschema/class_pin.cpp:1056 -msgid "PinNum" -msgstr "Num Pin" - -#: eeschema/class_pin.cpp:1060 -msgid "PinType" -msgstr "Type Pin" - -#: eeschema/class_pin.cpp:1066 -msgid "no" -msgstr "non" - -#: eeschema/class_pin.cpp:1068 -msgid "yes" -msgstr "oui" - -#: eeschema/class_pin.cpp:1080 -msgid "Up" -msgstr "Haut" - -#: eeschema/class_pin.cpp:1084 -msgid "Down" -msgstr "Bas" - -#: eeschema/class_pin.cpp:1088 -msgid "Left" -msgstr "Gauche" - -#: eeschema/class_pin.cpp:1092 -msgid "Right" -msgstr "Droite" - -#: eeschema/plotps.cpp:177 -#: eeschema/plothpgl.cpp:210 -msgid "Page Size A4" -msgstr "Feuille A4" - -#: eeschema/plotps.cpp:178 -#: eeschema/plothpgl.cpp:215 -msgid "Page Size A" -msgstr "Feuille A" - -#: eeschema/plotps.cpp:179 -#: eeschema/plothpgl.cpp:220 -msgid "Plot page size:" -msgstr "Format de la feuille:" - -#: eeschema/plotps.cpp:185 -msgid "Plot Options:" -msgstr "Options de Tracé:" - -#: eeschema/plotps.cpp:190 -msgid "B/W" -msgstr "N/B" - -#: eeschema/plotps.cpp:192 -msgid "Plot Color:" -msgstr "Tracé et Couleurs:" - -#: eeschema/plotps.cpp:196 -msgid "Print Sheet Ref" -msgstr "Imprimer cartouche" - -#: eeschema/plotps.cpp:205 -#: eeschema/plothpgl.cpp:270 -msgid "&Plot Page" -msgstr "&Tracer Page" - -#: eeschema/plotps.cpp:209 -#: eeschema/plothpgl.cpp:274 -msgid "Plot A&LL" -msgstr "&Tout Tracer" - -#: eeschema/plotps.cpp:218 -msgid "Messages :" -msgstr "Messages :" - -#: eeschema/plotps.cpp:232 -msgid "Default Line Width" -msgstr "Epaiss. ligne par défaut" - -#: eeschema/plotps.cpp:435 -#, c-format -msgid "Plot: %s\n" -msgstr "Trace: %s\n" +#: eeschema/eeconfig.cpp:289 +msgid "Save Project Settings" +msgstr "Sauver Optionsr Projet" #: eeschema/sheet.cpp:170 msgid "Sheetname:" @@ -7789,35 +7826,35 @@ msgstr "Nom" msgid "FileName" msgstr "Nom Fichier" -#: eeschema/schframe.cpp:316 +#: eeschema/schframe.cpp:317 msgid "Schematic modified, Save before exit ?" msgstr "Schématique modifiée, Sauver avant de quitter ?" -#: eeschema/schframe.cpp:444 +#: eeschema/schframe.cpp:445 msgid "Draw wires and busses in any direction" msgstr "Tracer les fils et bus de n'importe quelle direction" -#: eeschema/schframe.cpp:445 +#: eeschema/schframe.cpp:446 msgid "Draw horizontal and vertical wires and busses only" msgstr "Autoriser fils et bus verticaux et horizontaux seulement" -#: eeschema/schframe.cpp:453 +#: eeschema/schframe.cpp:454 msgid "Do not show hidden pins" msgstr "Ne pas affichager les pins invisibles" -#: eeschema/schframe.cpp:454 +#: eeschema/schframe.cpp:455 msgid "Show hidden pins" msgstr "Force affichage des pins invisibles" -#: eeschema/schframe.cpp:474 +#: eeschema/schframe.cpp:475 msgid "Hide grid" msgstr "Ne pas afficher la grille" -#: eeschema/schframe.cpp:474 +#: eeschema/schframe.cpp:475 msgid "Show grid" msgstr "Afficher grille" -#: eeschema/schframe.cpp:551 +#: eeschema/schframe.cpp:552 msgid "Schematic" msgstr "Schématique" @@ -7970,6 +8007,22 @@ msgstr "Vous devez fournir un nom pour ce composant" msgid "Enter the text to be used within the schematic" msgstr "Enter le texte qui doit être utilisé dans la schématique" +#: eeschema/dialog_edit_label_base.cpp:37 +msgid "Right" +msgstr "Droite" + +#: eeschema/dialog_edit_label_base.cpp:37 +msgid "Up" +msgstr "Haut" + +#: eeschema/dialog_edit_label_base.cpp:37 +msgid "Left" +msgstr "Gauche" + +#: eeschema/dialog_edit_label_base.cpp:37 +msgid "Down" +msgstr "Bas" + #: eeschema/dialog_edit_label_base.cpp:39 msgid "Direction" msgstr "Direction" @@ -8028,74 +8081,6 @@ msgstr " Convert" msgid " Normal" msgstr " Normal" -#: eeschema/plothpgl.cpp:209 -msgid "Sheet Size" -msgstr "Dim. feuille" - -#: eeschema/plothpgl.cpp:211 -msgid "Page Size A3" -msgstr "Feuille A3" - -#: eeschema/plothpgl.cpp:212 -msgid "Page Size A2" -msgstr "Feuille A2" - -#: eeschema/plothpgl.cpp:213 -msgid "Page Size A1" -msgstr "Feuille A1" - -#: eeschema/plothpgl.cpp:214 -msgid "Page Size A0" -msgstr "Feuille A0" - -#: eeschema/plothpgl.cpp:216 -msgid "Page Size B" -msgstr "Feuille B" - -#: eeschema/plothpgl.cpp:217 -msgid "Page Size C" -msgstr "Feuille C" - -#: eeschema/plothpgl.cpp:218 -msgid "Page Size D" -msgstr "Feuille D" - -#: eeschema/plothpgl.cpp:219 -msgid "Page Size E" -msgstr "Feuille E" - -#: eeschema/plothpgl.cpp:227 -msgid "Pen control:" -msgstr "Contrôle plume" - -#: eeschema/plothpgl.cpp:231 -msgid "Pen Width ( mils )" -msgstr "Epaiss plume (mils)" - -#: eeschema/plothpgl.cpp:237 -msgid "Pen Speed ( cm/s )" -msgstr "Vitesse plume ( cm/s )" - -#: eeschema/plothpgl.cpp:249 -msgid "Page offset:" -msgstr "Offset page:" - -#: eeschema/plothpgl.cpp:253 -msgid "Plot Offset X" -msgstr "Offset de tracé X" - -#: eeschema/plothpgl.cpp:259 -msgid "Plot Offset Y" -msgstr "Offset de tracé Y" - -#: eeschema/plothpgl.cpp:282 -msgid "&Accept Offset" -msgstr "&Accepter Offset" - -#: eeschema/plothpgl.cpp:609 -msgid "Plot " -msgstr "Trace " - #: eeschema/class_BodyItem_Text.cpp:83 #, c-format msgid "text only had %d parameters of the required 8" @@ -8105,10 +8090,6 @@ msgstr "le texte a seulement %d paramètres sur les 8 requis" msgid "Line width" msgstr "Epaisseur ligne" -#: eeschema/eeconfig.cpp:289 -msgid "Save Project Settings" -msgstr "Sauver Optionsr Projet" - #: eeschema/dialog_options.cpp:140 #: eeschema/dialog_options.cpp:287 msgid "Delta Step X" @@ -8320,13 +8301,11 @@ msgstr "Options :" #: eeschema/dialog_cmp_graphic_properties.cpp:154 #: eeschema/pinedit-dialog.cpp:180 -#: eeschema/dialog_bodygraphictext_properties_base.cpp:66 msgid "Common to Units" msgstr "Commun aux Unités" #: eeschema/dialog_cmp_graphic_properties.cpp:158 #: eeschema/pinedit-dialog.cpp:184 -#: eeschema/dialog_bodygraphictext_properties_base.cpp:70 msgid "Common to convert" msgstr "Commun à converti" @@ -8508,6 +8487,30 @@ msgstr "Emetteur ouv." msgid "Electrical Type:" msgstr "Type électrique:" +#: eeschema/class_pin.cpp:45 +msgid "Pin" +msgstr "Pin" + +#: eeschema/class_pin.cpp:1039 +msgid "PinName" +msgstr "Nom Pin" + +#: eeschema/class_pin.cpp:1048 +msgid "PinNum" +msgstr "Num Pin" + +#: eeschema/class_pin.cpp:1052 +msgid "PinType" +msgstr "Type Pin" + +#: eeschema/class_pin.cpp:1058 +msgid "no" +msgstr "non" + +#: eeschema/class_pin.cpp:1060 +msgid "yes" +msgstr "oui" + #: eeschema/dialog_bodygraphictext_properties_base.cpp:57 msgid " Text Options : " msgstr "Options du Texte: " @@ -8521,31 +8524,39 @@ msgid "Text Shape:" msgstr "Aspect Texte:" #: eeschema/dialog_bodygraphictext_properties_base.cpp:82 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:54 msgid "Align left" msgstr "Alignement à gauche" #: eeschema/dialog_bodygraphictext_properties_base.cpp:82 #: eeschema/dialog_bodygraphictext_properties_base.cpp:88 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:54 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:67 msgid "Align center" msgstr "Alignement au centre" #: eeschema/dialog_bodygraphictext_properties_base.cpp:82 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:54 msgid "Align right" msgstr "Alignement à droite" #: eeschema/dialog_bodygraphictext_properties_base.cpp:84 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:56 msgid "Horiz. Justify" msgstr "Justification Horiz." #: eeschema/dialog_bodygraphictext_properties_base.cpp:88 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:67 msgid "Align bottom" msgstr "Alignement en bas" #: eeschema/dialog_bodygraphictext_properties_base.cpp:88 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:67 msgid "Align top" msgstr "Alignement au sommet" #: eeschema/dialog_bodygraphictext_properties_base.cpp:90 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:69 msgid "Vert. Justify" msgstr "Vert. Justifié" @@ -9237,6 +9248,7 @@ msgid "Active Low Output" msgstr "Sortie Active Bas" #: cvpcb/tool_cvpcb.cpp:31 +#: cvpcb/menucfg.cpp:39 msgid "Open a NetList file" msgstr "Lire un Fichier Netliste" @@ -9301,6 +9313,8 @@ msgid "Delete selections" msgstr "Effacement des associations existantes" #: cvpcb/cvframe.cpp:422 +#: cvpcb/init.cpp:68 +#: cvpcb/init.cpp:120 #, c-format msgid "Components: %d (free: %d)" msgstr "Composants: %d (libres: %d)" @@ -9550,6 +9564,7 @@ msgid "1:1 zoom" msgstr "1:1 zoom" #: cvpcb/readschematicnetlist.cpp:114 +#: kicad/prjconfig.cpp:94 msgid "> not found" msgstr "> non trouvé" @@ -10039,11 +10054,14 @@ msgid "%d errors while reading Gerber file [%s]" msgstr "%d erreurs pendant lecture fichier gerber [%s]" #: gerbview/readgerb.cpp:274 +#: gerbview/files.cpp:208 +#: gerbview/files.cpp:243 #, c-format msgid "Gerber DCODE files (%s)|*.%s" msgstr "Fichiers Gerber DCODE (%s)|*.%s" #: gerbview/readgerb.cpp:278 +#: gerbview/files.cpp:213 msgid "Load GERBER DCODE File" msgstr "Charger Fichier de DCodes" @@ -10194,7 +10212,6 @@ msgid "D code File Ext:" msgstr "Ext. Fichiers DCodes:" #: gerbview/select_layers_to_pcb.cpp:220 -#: gerbview/tool_gerber.cpp:244 msgid "Layer " msgstr "Couche " @@ -11152,6 +11169,10 @@ msgstr "Commentaire3:" msgid "Comment4:" msgstr "Commentaire4:" +#: pcbnew/dialog_gendrill.h:50 +msgid "Drill Files Generation" +msgstr "Génération Fichiers de Perçage" + #: pcbnew/cleaningoptions_dialog.h:48 msgid "Cleaning options" msgstr "Options de Nettoyage" @@ -11214,10 +11235,6 @@ msgstr "Options Générales" msgid "Pad Properties" msgstr "Propriétés du Pad" -#: pcbnew/dialog_gendrill.h:50 -msgid "Drill Files Generation" -msgstr "Génération Fichiers de Perçage" - #: pcbnew/set_color.h:40 msgid "Pcbnew Layer Colors:" msgstr "Pcbnew: Couleur des Couches" @@ -11386,10 +11403,6 @@ msgstr "Marqueur ERC" msgid "Other" msgstr "Autre" -#: eeschema/plothpgl.h:55 -msgid "EESchema Plot HPGL" -msgstr "EESchema Tracé HPGL" - #: eeschema/sheet.h:47 msgid "Sheet properties" msgstr "Propriétés de la feuille" @@ -11398,18 +11411,26 @@ msgstr "Propriétés de la feuille" msgid "EESchema Locate" msgstr "Recherche" -#: eeschema/dialog_edit_component_in_schematic_fbp.h:82 -msgid "Component Properties" -msgstr "Propriétés du Composant" - -#: eeschema/pinedit-dialog.h:67 -msgid "Pin properties" -msgstr "Propriétés des Pins" +#: eeschema/plothpgl.h:55 +msgid "EESchema Plot HPGL" +msgstr "EESchema Tracé HPGL" #: eeschema/plotps.h:50 msgid "EESchema Plot PS" msgstr "EESchema Tracé PS" +#: eeschema/dialog_edit_component_in_schematic_fbp.h:82 +msgid "Component Properties" +msgstr "Propriétés du Composant" + +#: eeschema/plotdxf.h:47 +msgid "EESchema Plot DXF" +msgstr "EESchema Tracé DXF" + +#: eeschema/pinedit-dialog.h:67 +msgid "Pin properties" +msgstr "Propriétés des Pins" + #: eeschema/dialog_bodygraphictext_properties_base.h:58 msgid "Graphic text properties:" msgstr "Propriétés du texte graphique:" @@ -11574,6 +11595,12 @@ msgstr "DCodes id." msgid "Page Settings" msgstr "Ajustage opt Page" +#~ msgid "Org = Centre" +#~ msgstr "Org = Centre" +#~ msgid "Draw origin ( 0,0 ) in sheet center" +#~ msgstr "Origine des tracés au centre de la feuille" +#~ msgid "unable to reopen file <%s>" +#~ msgstr "Ne peut pas réouvrir fichier <%s>" #~ msgid "Include Tests For:" #~ msgstr "Inclure Tests Pour:" #~ msgid "Pad to pad" diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index e89f1c9e6f..05f21b1120 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -118,6 +118,7 @@ set(PCBNEW_SRCS plotgerb.cpp plothpgl.cpp plotps.cpp + plotdxf.cpp plot_rtn.cpp queue.cpp ratsnest.cpp diff --git a/pcbnew/dialog_gendrill.cpp b/pcbnew/dialog_gendrill.cpp index 5e6b24be24..f1a2f58379 100644 --- a/pcbnew/dialog_gendrill.cpp +++ b/pcbnew/dialog_gendrill.cpp @@ -151,7 +151,7 @@ void WinEDA_DrillFrame::Init() void WinEDA_DrillFrame::CreateControls() { ////@begin WinEDA_DrillFrame content construction - // Generated by DialogBlocks, 29/04/2009 15:14:32 (unregistered) + // Generated by DialogBlocks, 29/06/2009 20:34:44 (unregistered) WinEDA_DrillFrame* itemDialog1 = this; @@ -191,12 +191,10 @@ void WinEDA_DrillFrame::CreateControls() wxArrayString m_Choice_Drill_OffsetStrings; m_Choice_Drill_OffsetStrings.Add(_("absolute")); m_Choice_Drill_OffsetStrings.Add(_("auxiliary axis")); - m_Choice_Drill_Offset = new wxRadioBox( itemDialog1, ID_SEL_DRILL_SHEET, - _("Drill Origin:"), wxDefaultPosition, wxDefaultSize, - m_Choice_Drill_OffsetStrings, 1, wxRA_SPECIFY_COLS ); + m_Choice_Drill_Offset = new wxRadioBox( itemDialog1, ID_SEL_DRILL_SHEET, _("Drill Origin:"), wxDefaultPosition, wxDefaultSize, m_Choice_Drill_OffsetStrings, 1, wxRA_SPECIFY_COLS ); m_Choice_Drill_Offset->SetSelection(0); if (WinEDA_DrillFrame::ShowToolTips()) - m_Choice_Drill_Offset->SetToolTip(_("Choose the coordinate origin: absolute or relative to the auxiliary axis")); + m_Choice_Drill_Offset->SetToolTip(_("Choose the coordinate origin: absolute or relative to the auxiliray axis")); m_LeftBoxSizer->Add(m_Choice_Drill_Offset, 0, wxGROW|wxALL, 5); wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL); @@ -204,12 +202,11 @@ void WinEDA_DrillFrame::CreateControls() wxArrayString m_Choice_Drill_MapStrings; m_Choice_Drill_MapStrings.Add(_("None")); - m_Choice_Drill_MapStrings.Add(_("Drill sheet (HPGL)")); - m_Choice_Drill_MapStrings.Add(_("Drill sheet (PostScript)")); + m_Choice_Drill_MapStrings.Add(_("drill sheet (HPGL)")); + m_Choice_Drill_MapStrings.Add(_("drill sheet (PostScript)")); m_Choice_Drill_MapStrings.Add(_("Drill sheet (Gerber)")); - m_Choice_Drill_Map = new wxRadioBox( itemDialog1, ID_SEL_DRILL_SHEET, - _("Drill Sheet:"), wxDefaultPosition, wxDefaultSize, - m_Choice_Drill_MapStrings, 1, wxRA_SPECIFY_COLS ); + m_Choice_Drill_MapStrings.Add(_("Drill sheet (DXF)")); + m_Choice_Drill_Map = new wxRadioBox( itemDialog1, ID_SEL_DRILL_SHEET, _("Drill Sheet:"), wxDefaultPosition, wxDefaultSize, m_Choice_Drill_MapStrings, 1, wxRA_SPECIFY_COLS ); m_Choice_Drill_Map->SetSelection(0); if (WinEDA_DrillFrame::ShowToolTips()) m_Choice_Drill_Map->SetToolTip(_("Creates a drill map in PS or HPGL format")); @@ -231,13 +228,13 @@ void WinEDA_DrillFrame::CreateControls() wxStaticText* itemStaticText12 = new wxStaticText( itemDialog1, wxID_STATIC, _("Speed (cm/s)"), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(itemStaticText12, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); - m_PenSpeed = new wxTextCtrl( itemDialog1, ID_TEXTCTRL2, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); + m_PenSpeed = new wxTextCtrl( itemDialog1, ID_TEXTCTRL2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(m_PenSpeed, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); wxStaticText* itemStaticText14 = new wxStaticText( itemDialog1, wxID_STATIC, _("Pen Number"), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(itemStaticText14, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); - m_PenNum = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); + m_PenNum = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(m_PenNum, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); wxStaticBox* itemStaticBoxSizer16Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Options:")); diff --git a/pcbnew/dialog_gendrill.pjd b/pcbnew/dialog_gendrill.pjd index 3d8be7b6f3..4dd4f99039 100644 --- a/pcbnew/dialog_gendrill.pjd +++ b/pcbnew/dialog_gendrill.pjd @@ -21,6 +21,7 @@ 0 0 0 + 0 "<All platforms>" "2.8.7" "///////////////////////////////////////////////////////////////////////////// @@ -142,6 +143,8 @@ "Yes" "No" "No" + "No" + "Yes" "%WXVERSION%" "%EXECUTABLE%" "" @@ -628,7 +631,7 @@ "m_Choice_Drill_Map" "Drill Sheet:" 1 - "None|drill sheet (HPGL)|drill sheet (PostScript)" + "None|drill sheet (HPGL)|drill sheet (PostScript)|Drill sheet (Gerber)|Drill sheet (DXF)" 0 "" "Creates a drill map in PS or HPGL format" diff --git a/pcbnew/gen_drill_report_files.cpp b/pcbnew/gen_drill_report_files.cpp index 81468a02f1..d6c46a145a 100644 --- a/pcbnew/gen_drill_report_files.cpp +++ b/pcbnew/gen_drill_report_files.cpp @@ -41,7 +41,6 @@ void GenDrillMapFile( BOARD* aPcb, FILE* aFile, const wxString& aFullFileName, int dX, dY; wxPoint BoardCentre; wxPoint offset; - wxSize SheetSize; wxString msg; Plotter *plotter = NULL; @@ -67,9 +66,6 @@ void GenDrillMapFile( BOARD* aPcb, FILE* aFile, const wxString& aFullFileName, case PLOT_FORMAT_HPGL: /* Calcul des echelles de conversion format HPGL */ { - SheetSize = aSheet->m_Size; - SheetSize.x *= U_PCB; - SheetSize.y *= U_PCB; offset.x = 0; offset.y = 0; scale = 1; @@ -86,6 +82,7 @@ void GenDrillMapFile( BOARD* aPcb, FILE* aFile, const wxString& aFullFileName, case PLOT_FORMAT_POST: { Ki_PageDescr* SheetPS = &g_Sheet_A4; + wxSize SheetSize; SheetSize.x = SheetPS->m_Size.x * U_PCB; SheetSize.y = SheetPS->m_Size.y * U_PCB; /* Keep size for drill legend */ @@ -103,6 +100,18 @@ void GenDrillMapFile( BOARD* aPcb, FILE* aFile, const wxString& aFullFileName, plotter->set_viewport(offset, scale, 0); break; } + case PLOT_FORMAT_DXF: + { + offset.x = 0; + offset.y = 0; + scale = 1; + DXF_Plotter *dxf_plotter = new DXF_Plotter; + plotter = dxf_plotter; + plotter->set_paper_size(aSheet); + plotter->set_viewport(offset, scale, 0); + break; + } + default: wxASSERT(false); } diff --git a/pcbnew/gendrill.cpp b/pcbnew/gendrill.cpp index 24f9c51814..53ce0b6e9e 100644 --- a/pcbnew/gendrill.cpp +++ b/pcbnew/gendrill.cpp @@ -316,12 +316,12 @@ void WinEDA_DrillFrame::GenDrillFiles( wxCommandEvent& event ) fn.SetName( fn.GetName() + layer_extend ); fn.SetExt( DrillFileExtension ); - wxFileDialog dlg( this, _( "Save Drill File" ), wxEmptyString, + wxFileDialog dlg( this, _( "Save Drill File" ), fn.GetPath(), fn.GetFullName(), DrillFileWildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if( dlg.ShowModal() == wxID_CANCEL ) - continue; + break; FILE *excellon_dest = wxFopen( dlg.GetPath(), wxT( "w" ) ); @@ -354,6 +354,11 @@ void WinEDA_DrillFrame::GenDrillFiles( wxCommandEvent& event ) GenDrillMap( dlg.GetPath(), s_HoleListBuffer, s_ToolListBuffer, PLOT_FORMAT_GERBER ); break; + + case 4: + GenDrillMap( dlg.GetPath(), s_HoleListBuffer, s_ToolListBuffer, + PLOT_FORMAT_DXF ); + break; } if( !ExistsBuriedVias ) @@ -380,7 +385,6 @@ void WinEDA_DrillFrame::GenDrillFiles( wxCommandEvent& event ) GenDrillReport( m_Parent->GetScreen()->m_FileName ); } - EndModal( 0 ); } @@ -757,6 +761,10 @@ void WinEDA_DrillFrame::GenDrillMap( const wxString aFileName, wildcard = _( "Gerber files (.pho)|*.pho" ); break; + case PLOT_FORMAT_DXF: + ext = wxT( "dxf" ); + wildcard = _( "DXF files (.dxf)|*.dxf" ); + break; default: DisplayError( this, wxT( "WinEDA_DrillFrame::GenDrillMap() error" ) ); @@ -768,9 +776,9 @@ void WinEDA_DrillFrame::GenDrillMap( const wxString aFileName, fn.SetName( fn.GetName() + wxT( "-drl" ) ); fn.SetExt( ext ); - wxFileDialog dlg( this, _( "Save Drill Plot File" ), wxEmptyString, + wxFileDialog dlg( this, _( "Save Drill Plot File" ), fn.GetPath(), fn.GetFullName(), wildcard, - wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxFD_CHANGE_DIR ); + wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if( dlg.ShowModal() == wxID_CANCEL ) return; @@ -812,9 +820,9 @@ void WinEDA_DrillFrame::GenDrillReport( const wxString aFileName ) fn.SetName( fn.GetName() + wxT( "-drl" ) ); fn.SetExt( wxT( "rpt" ) ); - wxFileDialog dlg( this, _( "Save Drill Report File" ), wxEmptyString, + wxFileDialog dlg( this, _( "Save Drill Report File" ), fn.GetPath(), fn.GetFullName(), wildcard, - wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxFD_CHANGE_DIR ); + wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if( dlg.ShowModal() == wxID_CANCEL ) return; diff --git a/pcbnew/pcbplot.cpp b/pcbnew/pcbplot.cpp index c2c28d47d1..55d0f6ceb4 100644 --- a/pcbnew/pcbplot.cpp +++ b/pcbnew/pcbplot.cpp @@ -116,8 +116,15 @@ public: // change the A4 to the simple postscript, according to the // PlotFormat enum - if( radioNdx == 3 ) + switch (radioNdx) + { + case 3: radioNdx = PLOT_FORMAT_POST; + break; + case 4: + radioNdx = PLOT_FORMAT_DXF; + break; + } return PlotFormat( radioNdx ); } @@ -192,18 +199,19 @@ void WinEDA_PlotFrame::OnInitDialog( wxInitDialogEvent& event ) LeftBoxSizer->Add( LayersBoxSizer, 0, wxGROW | wxALL, 5 ); - static const wxString fmtmsg[4] = + static const wxString fmtmsg[5] = { wxT( "HPGL" ), wxT( "Gerber" ), wxT( "Postscript" ), - wxT( "Postscript A4" ) + wxT( "Postscript A4" ), + wxT( "DXF Export" ) }; m_PlotFormatOpt = new wxRadioBox( this, ID_SEL_PLOT_FORMAT, _( "Plot Format" ), wxDefaultPosition, wxSize( -1, -1 ), - 4, fmtmsg, 1, wxRA_SPECIFY_COLS ); + 5, fmtmsg, 1, wxRA_SPECIFY_COLS ); MidRightBoxSizer->Add( m_PlotFormatOpt, 0, wxGROW | wxALL, 5 ); if( config ) @@ -595,6 +603,28 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event ) m_Plot_PS_Negative->SetValue( false ); m_Plot_PS_Negative->Enable( false ); break; + + case PLOT_FORMAT_DXF: + m_PlotMirorOpt->Enable( false ); + m_PlotMirorOpt->SetValue( false ); + m_Drill_Shape_Opt->SetSelection( 0 ); + m_Drill_Shape_Opt->Enable( false ); + m_PlotModeOpt->Enable( true ); + m_Choice_Plot_Offset->Enable( false ); + m_LinesWidth->Enable( false ); + m_HPGL_OptionsBox->Enable( false ); + m_HPGLPenSizeOpt->Enable( false ); + m_HPGLPenSpeedOpt->Enable( false ); + m_HPGLPenOverlayOpt->Enable( false ); + m_Exclude_Edges_Pcb->SetValue( false ); + m_Exclude_Edges_Pcb->Enable( false ); + m_Scale_Opt->Enable( false ); + m_Scale_Opt->SetSelection( 1 ); + m_FineAdjustXscaleOpt->Enable( false ); + m_FineAdjustYscaleOpt->Enable( false ); + m_Plot_PS_Negative->SetValue( false ); + m_Plot_PS_Negative->Enable( false ); + break; } g_pcb_plot_options.PlotFormat = format; @@ -715,7 +745,6 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event ) wildcard = _( "Adobe post script files (.ps)|*.ps" ); break; - default: case PLOT_FORMAT_GERBER: g_pcb_plot_options.Scale = 1.0; // No scale option allowed in gerber format ext = wxT( "pho" ); @@ -726,6 +755,12 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event ) ext = wxT( "plt" ); wildcard = _( "HPGL plot files (.plt)|*.plt" ); break; + + case PLOT_FORMAT_DXF: + g_pcb_plot_options.Scale = 1.0; + ext = wxT( "dxf" ); + wildcard = _( "DXF files (.dxf)|*.dxf" ); + break; } // Test for a reasonnable scale value @@ -761,7 +796,6 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event ) g_pcb_plot_options.Trace_Mode ); break; - default: case PLOT_FORMAT_GERBER: m_Parent->Genere_GERBER( fn.GetFullPath(), layer_to_plot, s_PlotOriginIsAuxAxis, @@ -772,6 +806,11 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event ) m_Parent->Genere_HPGL( fn.GetFullPath(), layer_to_plot, g_pcb_plot_options.Trace_Mode ); break; + + case PLOT_FORMAT_DXF: + m_Parent->Genere_DXF( fn.GetFullPath(), layer_to_plot, + g_pcb_plot_options.Trace_Mode ); + break; } } }