Commit a1998410 authored by charras's avatar charras

Some enhancements and fixes. (see changelog)

parent cacb2225
......@@ -4,6 +4,15 @@ KiCad ChangeLog 2009
Please add newer entries at the top, list the date and your name with
email address.
2009-Dec-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
++pcbnew
Added option to use some usual Gerber files extension, depending on the layer
Do not allow in plot menu to output files for non enabled layers.
++Kicad and Gerbview
Display Gerber files that use usual files extension (in tree project or dialog files)
(See http://en.wikipedia.org/wiki/Gerber_File)
2009-Dec-20 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++pcbnew
......
......@@ -521,7 +521,7 @@ void WinEDA_DrawPanel::EraseScreen( wxDC* DC )
#ifndef WX_ZOOM
GRSFilledRect( &m_ClipBox, DC, m_ClipBox.GetX(), m_ClipBox.GetY(),
m_ClipBox.GetRight(), m_ClipBox.GetBottom(),
g_DrawBgColor, g_DrawBgColor );
0, g_DrawBgColor, g_DrawBgColor );
#else
EDA_Rect tmp = m_ClipBox;
......@@ -534,7 +534,7 @@ void WinEDA_DrawPanel::EraseScreen( wxDC* DC )
GRSFilledRect( &m_ClipBox, DC, m_ClipBox.GetX(), m_ClipBox.GetY(),
m_ClipBox.GetRight(), m_ClipBox.GetBottom(),
g_DrawBgColor, g_DrawBgColor );
0, g_DrawBgColor, g_DrawBgColor );
m_ClipBox = tmp;
#endif
......
......@@ -60,15 +60,22 @@ static int PenMinWidth = 1; /* minimum pen width (must be> 0)
* (Useful for printing) */
static bool ForceBlackPen; /* if true: draws in black instead of
* color for printing. */
static int xcliplo = 0,
ycliplo = 0,
xcliphi = 2000,
ycliphi = 2000;
static int lastcolor = -1;
static int lastwidth = -1;
static int xcliplo = 0,
ycliplo = 0,
xcliphi = 2000,
ycliphi = 2000;
static int lastcolor = -1;
static int lastwidth = -1;
static int s_Last_Pen_Style = -1;
static wxDC* lastDC = NULL;
/* Local functions: */
static void GRSRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int Color );
static void GRSRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int width, int Color );
/*
* Macro clipping the trace of a line:
* Line (x1, y1 x2, y2) is clipped to remain within
......@@ -362,9 +369,13 @@ void GRSetDrawMode( wxDC* DC, int draw_mode )
if( draw_mode & GR_OR )
#if defined(__WXMAC__) && (wxMAC_USE_CORE_GRAPHICS || wxCHECK_VERSION( 2, 9, 0 ) )
DC->SetLogicalFunction( wxCOPY );
#else
DC->SetLogicalFunction( wxOR );
#endif
else if( draw_mode & GR_XOR )
......@@ -372,9 +383,13 @@ void GRSetDrawMode( wxDC* DC, int draw_mode )
else if( draw_mode & GR_NXOR )
#if defined(__WXMAC__) && (wxMAC_USE_CORE_GRAPHICS || wxCHECK_VERSION( 2, 9, 0 ) )
DC->SetLogicalFunction( wxXOR );
#else
DC->SetLogicalFunction( wxEQUIV );
#endif
else
......@@ -1397,7 +1412,7 @@ void GRArc( EDA_Rect* ClipBox, wxDC* DC, int xc, int yc, int StAngle,
GRSetColorPen( DC, Color );
GRSetBrush( DC, Color, FALSE );
DC->DrawArc( GRMapX( xc + x1 ), GRMapY( yc - y1 ), GRMapX( xc + x2 ),
GRMapY( yc - y2 ), GRMapX( xc ), GRMapY( yc ) );
GRMapY( yc - y2 ), GRMapX( xc ), GRMapY( yc ) );
}
......@@ -1422,13 +1437,9 @@ void GRArc( EDA_Rect* ClipBox,
/*
* Draw a rectangle in drawing space.
*/
void GRRect( EDA_Rect* ClipBox,
wxDC* DC,
int x1,
int y1,
int x2,
int y2,
int Color )
void GRRect( EDA_Rect* ClipBox, wxDC* DC,
int x1, int y1, int x2, int y2,
int Color )
{
x1 = GRMapX( x1 );
y1 = GRMapY( y1 );
......@@ -1438,18 +1449,25 @@ void GRRect( EDA_Rect* ClipBox,
GRSRect( ClipBox, DC, x1, y1, x2, y2, Color );
}
void GRRect( EDA_Rect* aClipBox, wxDC* aDC,
const EDA_Rect& aRect,
int aColor )
{
int x1 = GRMapX( aRect.GetX() );
int y1 = GRMapY( aRect.GetY() );
int x2 = GRMapX( aRect.GetRight() );
int y2 = GRMapY( aRect.GetBottom() );
GRSRect( aClipBox, aDC, x1, y1, x2, y2, aColor );
}
/*
* Draw a rectangle in drawing space.
* Draw a rectangle (thick lines) in drawing space.
*/
void GRRect( EDA_Rect* ClipBox,
wxDC* DC,
int x1,
int y1,
int x2,
int y2,
int width,
int Color )
void GRRect( EDA_Rect* ClipBox, wxDC* DC,
int x1, int y1, int x2, int y2,
int width, int Color )
{
x1 = GRMapX( x1 );
y1 = GRMapY( y1 );
......@@ -1460,6 +1478,20 @@ void GRRect( EDA_Rect* ClipBox,
GRSRect( ClipBox, DC, x1, y1, x2, y2, width, Color );
}
void GRRect( EDA_Rect* aClipBox, wxDC* aDC,
const EDA_Rect& aRect,
int aWidth, int aColor )
{
int x1 = GRMapX( aRect.GetX() );
int y1 = GRMapY( aRect.GetY() );
int x2 = GRMapX( aRect.GetRight() );
int y2 = GRMapY( aRect.GetBottom() );
int width = ZoomValue( aWidth );
GRSRect( aClipBox, aDC, x1, y1, x2, y2, width, aColor );
}
/*
* Draw a rectangle (filled with AreaColor) in drawing space.
......@@ -1543,31 +1575,10 @@ void GRSRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
}
/*
* Draw a filled rectangle in screen space.
*/
void GRSFilledRect( EDA_Rect* ClipBox,
wxDC* DC,
int x1,
int y1,
int x2,
int y2,
int Color,
int BgColor )
{
GRSFilledRect( ClipBox, DC, x1, y1, x2, y2, 0, Color, BgColor );
}
void GRSFilledRect( EDA_Rect* ClipBox,
wxDC* DC,
int x1,
int y1,
int x2,
int y2,
int width,
int Color,
int BgColor )
void GRSFilledRect( EDA_Rect* ClipBox, wxDC* DC,
int x1, int y1, int x2, int y2,
int width, int Color, int BgColor )
{
if( x1 > x2 )
EXCHG( x1, x2 );
......@@ -1635,11 +1646,11 @@ void ClipAndDrawFilledPoly( EDA_Rect* aClipBox,
clippedPolygon.clear();
for( int ii = 0; ii < n; ii++ )
inputPolygon.push_back( PointF( (REAL) aPoints[ii].x,
(REAL) aPoints[ii].y ) );
(REAL) aPoints[ii].y ) );
RectF window( (REAL) aClipBox->GetX(), (REAL) aClipBox->GetY(),
(REAL) aClipBox->GetWidth(),
(REAL) aClipBox->GetHeight() );
(REAL) aClipBox->GetWidth(),
(REAL) aClipBox->GetHeight() );
SutherlandHodgman sh( window );
sh.Clip( inputPolygon, outputPolygon );
......@@ -1649,13 +1660,14 @@ void ClipAndDrawFilledPoly( EDA_Rect* aClipBox,
++cit )
{
clippedPolygon.push_back( wxPoint( wxRound( cit->X ),
wxRound( cit->Y ) ) );
wxRound( cit->Y ) ) );
}
if( clippedPolygon.size() )
aDC->DrawPolygon( clippedPolygon.size(), &clippedPolygon[0] );
}
#endif
......
......@@ -451,7 +451,7 @@ bool LIB_COMPONENT::Save( FILE* aFile )
if( fprintf( aFile, "DEF" ) < 0 )
return false;
if( ( value.m_Attributs & TEXT_NO_VISIBLE ) == 0 )
if( value.IsVisible() )
{
if( fprintf( aFile, " %s", CONV_TO_UTF8( value.m_Text ) ) < 0 )
return false;
......@@ -859,7 +859,7 @@ EDA_Rect LIB_COMPONENT::GetBoundaryBox( int aUnit, int aConvert )
continue;
if ( ( item.Type() == COMPONENT_FIELD_DRAW_TYPE )
&& ( ( ( LIB_TEXT& ) item ).m_Attributs & TEXT_NO_VISIBLE ) )
&& !( ( LIB_FIELD& ) item ).IsVisible() )
continue;
bBox.Merge( item.GetBoundingBox() );
......
......@@ -84,9 +84,16 @@ public:
int aColor, int aDrawMode, void* aData,
const int aTransformMatrix[2][2] );
/** Function IsVisible
* @return true is this field is visible, false if flagged invisible
*/
bool IsVisible()
{
return (m_Attributs & TEXT_NO_VISIBLE) == 0 ? true : false;
}
/**
* Return the bounding rectangle of the field text.
*
* @return Bounding rectangle.
*/
virtual EDA_Rect GetBoundingBox();
......
......@@ -67,6 +67,14 @@ public:
*/
int GetPenSize( );
/** Function IsVisible
* @return true is this field is visible, false if flagged invisible
*/
bool IsVisible()
{
return (m_Attributs & TEXT_NO_VISIBLE) == 0 ? true : false;
}
/**
* Function Draw
*/
......
......@@ -205,8 +205,7 @@ void SCH_COMPONENT::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
SCH_FIELD* field = GetField( REFERENCE );
if( ( ( field->m_Attributs & TEXT_NO_VISIBLE ) == 0 )
&& !( field->m_Flags & IS_MOVED ) )
if( field->IsVisible() && !( field->m_Flags & IS_MOVED ) )
{
if( Entry->GetPartCount() > 1 )
{
......@@ -236,23 +235,20 @@ void SCH_COMPONENT::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
{
EDA_Rect BoundaryBox;
BoundaryBox = GetBoundaryBox();
int x1 = BoundaryBox.GetX();
int y1 = BoundaryBox.GetY();
int x2 = BoundaryBox.GetRight();
int y2 = BoundaryBox.GetBottom();
GRRect( &panel->m_ClipBox, DC, x1, y1, x2, y2, BROWN );
BoundaryBox = GetField( REFERENCE )->GetBoundaryBox();
x1 = BoundaryBox.GetX();
y1 = BoundaryBox.GetY();
x2 = BoundaryBox.GetRight();
y2 = BoundaryBox.GetBottom();
GRRect( &panel->m_ClipBox, DC, x1, y1, x2, y2, BROWN );
BoundaryBox = GetField( VALUE )->GetBoundaryBox();
x1 = BoundaryBox.GetX();
y1 = BoundaryBox.GetY();
x2 = BoundaryBox.GetRight();
y2 = BoundaryBox.GetBottom();
GRRect( &panel->m_ClipBox, DC, x1, y1, x2, y2, BROWN );
GRRect( &panel->m_ClipBox, DC, BoundaryBox, BROWN );
#if 1
if( GetField( REFERENCE )->IsVisible() )
{
BoundaryBox = GetField( REFERENCE )->GetBoundaryBox();
GRRect( &panel->m_ClipBox, DC, BoundaryBox, BROWN );
}
if( GetField( VALUE )->IsVisible() )
{
BoundaryBox = GetField( VALUE )->GetBoundaryBox();
GRRect( &panel->m_ClipBox, DC, BoundaryBox, BROWN );
}
#endif
}
#endif
}
......@@ -530,7 +526,13 @@ LIB_PIN* SCH_COMPONENT::GetPin( const wxString& number )
return Entry->GetPin( number, m_Multi, m_Convert );
}
/**
* Function GetBoundaryBox
* returns the orthogonal, bounding box of this object for display purposes.
* This box should be an enclosing perimeter for graphic items and pins.
* this include only fields defined in library
* use GetBoundingBox() to include fields in schematic
*/
EDA_Rect SCH_COMPONENT::GetBoundaryBox() const
{
LIB_COMPONENT* Entry = CMP_LIBRARY::FindLibraryComponent( m_ChipName );
......@@ -1064,6 +1066,13 @@ bool SCH_COMPONENT::Save( FILE* f ) const
}
/**
* Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display purposes.
* This box should be an enclosing perimeter for visible components of this
* object, and the units should be in the pcb or schematic coordinate system.
* It is OK to overestimate the size by a few counts.
*/
EDA_Rect SCH_COMPONENT::GetBoundingBox()
{
const int PADDING = 40;
......@@ -1074,11 +1083,13 @@ EDA_Rect SCH_COMPONENT::GetBoundingBox()
// Include BoundingBoxes of fields
for( int ii = 0; ii < GetFieldCount(); ii++ )
{
if( ! GetField( ii )->IsVisible() )
continue;
bbox.Merge( GetField( ii )->GetBoundaryBox() );
}
// ... add padding
bbox.Inflate( PADDING, PADDING );
bbox.Inflate( PADDING );
return bbox;
}
......
......@@ -209,6 +209,13 @@ public:
*/
void SetTimeStamp( long aNewTimeStamp);
/**
* Function GetBoundaryBox
* returns the orthogonal, bounding box of this object for display purposes.
* This box should be an enclosing perimeter for graphic items and pins.
* this include only fields defined in library
* use GetBoundingBox() to include fields in schematic
*/
EDA_Rect GetBoundaryBox() const;
/**
......
......@@ -22,8 +22,6 @@
/* Used for EDA_BaseStruct, .m_Select member */
#define IS_SELECTED 1
#define TEXT_NO_VISIBLE 1
//#define GR_DEFAULT_DRAWMODE GR_COPY
#define GR_DEFAULT_DRAWMODE GR_COPY
......
......@@ -417,7 +417,6 @@ bool IsItemInBox( EDA_Rect& aBox, SCH_ITEM* DrawStruct )
case TYPE_SCH_TEXT:
case TYPE_SCH_HIERLABEL:
case TYPE_SCH_GLOBALLABEL:
case TYPE_SCH_COMPONENT:
case DRAW_SHEET_STRUCT_TYPE:
case TYPE_SCH_MARKER:
BoundaryBox = DrawStruct->GetBoundingBox();
......@@ -425,6 +424,14 @@ bool IsItemInBox( EDA_Rect& aBox, SCH_ITEM* DrawStruct )
return true;
break;
case TYPE_SCH_COMPONENT:
// Use a more restrictive area than GetBoundingBox()
// Area is restricted to the body area, excludint fields outside this area
BoundaryBox = ((SCH_COMPONENT*)DrawStruct)->GetBoundaryBox();
if( aBox.Intersects( BoundaryBox ) )
return true;
break;
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
break;
......
......@@ -5,6 +5,9 @@
#ifndef PROGRAM_H
#define PROGRAM_H
#define HIGHLIGHT_COLOR WHITE
#define TEXT_NO_VISIBLE 1
#include "wxEeschemaStruct.h"
#include "macros.h"
#include "base_struct.h"
......@@ -17,9 +20,6 @@
#include "class_text-label.h"
#include "class_schematic_items.h"
#define HIGHLIGHT_COLOR WHITE
#define TEXT_NO_VISIBLE 1
/* Rotation, mirror of graphic items in components bodies are handled by a
* transform matrix. The default matix is useful to draw lib entries with
......
......@@ -110,9 +110,14 @@ bool WinEDA_GerberFrame::LoadOneGerberFile( const wxString& FullFileName,
{
wxString current_path = filename.GetPath();
/* Standard gerber filetypes */
filetypes += _( "Gerber files (.gbr .gbx .lgr .ger .pho)| \
.gbr;*.GBR;*.gbx;*.GBX;*.lgr;*.LGR;*.ger;*.GER;*.pho;*.PHO|" );
/* Standard gerber filetypes
* (See http://en.wikipedia.org/wiki/Gerber_File)
* the .pho extension is the default used in Pcbnew
*/
filetypes = _( "Gerber files (.gb* .gt* .lgr .ger .pho)" );
filetypes << wxT("|");
filetypes += wxT("*.gb*;*.GB*;.gt*;.GT*;.gko;.GKO;*.GPB;*.gpb;*.lgr;*.LGR;*.ger;*.GER;*.pho;*.PHO" );
filetypes << wxT("|");
/* Special gerber filetypes */
filetypes += _( "Top layer (*.GTL)|*.GTL;*.gtl|" );
......
......@@ -175,15 +175,15 @@ public:
bool Inside( int x, int y ) { return Inside( wxPoint( x, y ) ); }
wxSize GetSize() { return m_Size; }
int GetX() { return m_Pos.x; }
int GetY() { return m_Pos.y; }
int GetX() const { return m_Pos.x; }
int GetY() const { return m_Pos.y; }
wxPoint GetOrigin() { return m_Pos; }
wxPoint GetPosition() { return m_Pos; }
wxPoint GetEnd() { return wxPoint( GetRight(), GetBottom() ); }
int GetWidth() { return m_Size.x; }
int GetHeight() { return m_Size.y; }
int GetRight() { return m_Pos.x + m_Size.x; }
int GetBottom() { return m_Pos.y + m_Size.y; }
wxPoint GetEnd() const { return wxPoint( GetRight(), GetBottom() ); }
int GetWidth() const { return m_Size.x; }
int GetHeight() const { return m_Size.y; }
int GetRight() const { return m_Pos.x + m_Size.x; }
int GetBottom() const { return m_Pos.y + m_Size.y; }
void SetOrigin( const wxPoint& pos ) { m_Pos = pos; }
void SetOrigin( int x, int y ) { m_Pos.x = x; m_Pos.y = y; }
void SetSize( const wxSize& size ) { m_Size = size; }
......
......@@ -58,6 +58,10 @@ void GRForceBlackPen( bool flagforce );
bool GetGRForceBlackPenState( void );
void SetPenMinWidth( int minwidth );
void GRSPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int color );
void GRSFilledRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int width, int Color, int BgColor );
void GRLine( EDA_Rect* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd,
int aWidth, int aColor );
void GRLine( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1, int x2,
......@@ -205,24 +209,19 @@ void GRSetColor( int Color );
void GRSetDefaultPalette();
int GRGetColor();
void GRPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int color );
void GRSPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int color );
int GRGetPixel( wxDC* DC, int x, int y );
void GRFilledRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int Color, int BgColor );
void GRFilledRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int width, int Color, int BgColor );
void GRSFilledRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int Color, int BgColor );
void GRSFilledRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int width, int Color, int BgColor );
void GRRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int Color );
void GRRect( EDA_Rect* ClipBox, wxDC* DC,const EDA_Rect& aRect,
int Color );
void GRRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int width, int Color );
void GRSRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int Color );
void GRSRect( EDA_Rect* ClipBox, wxDC* DC, int x1, int y1,
int x2, int y2, int width, int Color );
void GRRect( EDA_Rect* aClipBox, wxDC* aDC,const EDA_Rect& aRect,
int aWidth, int aColor );
#endif /* define GR_BASIC */
No preview for this file type
......@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: kicad\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-12-29 11:30+0100\n"
"PO-Revision-Date: 2009-12-29 11:34+0100\n"
"POT-Creation-Date: 2009-12-30 18:30+0100\n"
"PO-Revision-Date: 2009-12-30 18:34+0100\n"
"Last-Translator: \n"
"Language-Team: kicad team <jean-pierre.charras@ujf-grenoble.fr>\n"
"MIME-Version: 1.0\n"
......@@ -2423,236 +2423,244 @@ msgstr "&3D Visu"
msgid "&Help"
msgstr "&Aide"
#: pcbnew/pcbplot.cpp:178
#: pcbnew/pcbplot.cpp:327
#: pcbnew/pcbplot.cpp:184
#: pcbnew/pcbplot.cpp:328
msgid "Plot"
msgstr "Tracer"
#: pcbnew/pcbplot.cpp:226
#: pcbnew/pcbplot.cpp:232
msgid "Plot Format"
msgstr "Format de tracé"
#: pcbnew/pcbplot.cpp:240
#: pcbnew/pcbplot.cpp:243
msgid "HPGL Options:"
msgstr "Options HPGL:"
#: pcbnew/pcbplot.cpp:245
#: pcbnew/pcbplot.cpp:248
msgid "Pen size"
msgstr "Diam plume"
#: pcbnew/pcbplot.cpp:252
#: pcbnew/pcbplot.cpp:255
msgid "Pen Speed (cm/s)"
msgstr "Vitesse Plume ( cm/s )"
#: pcbnew/pcbplot.cpp:256
#: pcbnew/pcbplot.cpp:259
msgid "Set pen speed in cm/s"
msgstr "Ajuster Vitesse plume en centimètres par seconde"
#: pcbnew/pcbplot.cpp:258
#: pcbnew/pcbplot.cpp:261
msgid "Pen ovr"
msgstr "Recouvrement"
#: pcbnew/pcbplot.cpp:264
#: pcbnew/pcbplot.cpp:267
msgid "Set plot overlay for filling"
msgstr "Ajuste recouvrement des tracés pour les remplissages"
#: pcbnew/pcbplot.cpp:266
#: pcbnew/pcbplot.cpp:269
msgid "Line width"
msgstr "Epaisseur ligne"
#: pcbnew/pcbplot.cpp:272
#: pcbnew/pcbplot.cpp:276
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:277
#: pcbnew/pcbplot.cpp:281
msgid "Absolute"
msgstr "Absolu"
#: pcbnew/pcbplot.cpp:277
#: pcbnew/pcbplot.cpp:281
msgid "Auxiliary axis"
msgstr "Axe Auxiliaire"
#: pcbnew/pcbplot.cpp:280
#: pcbnew/pcbplot.cpp:284
msgid "Plot Origin"
msgstr "Origine des Coord de Tracé"
#: pcbnew/pcbplot.cpp:308
#: pcbnew/pcbplot.cpp:309
msgid "X scale adjust"
msgstr "Ajustage Echelle X"
#: pcbnew/pcbplot.cpp:311
#: pcbnew/pcbplot.cpp:312
msgid "Set X scale adjust for exact scale plotting"
msgstr "Ajuster échelle X pour traçage à l'échelle exacte"
#: pcbnew/pcbplot.cpp:315
#: pcbnew/pcbplot.cpp:316
msgid "Y scale adjust"
msgstr "Ajustage Echelle Y"
#: pcbnew/pcbplot.cpp:318
#: pcbnew/pcbplot.cpp:319
msgid "Set Y scale adjust for exact scale plotting"
msgstr "Ajuster échelle Y pour traçage à l'échelle exacte"
#: pcbnew/pcbplot.cpp:321
#: pcbnew/pcbplot.cpp:322
msgid "Plot negative"
msgstr "Tracé en Négatif"
#: pcbnew/pcbplot.cpp:330
#: pcbnew/pcbplot.cpp:331
msgid "Save Options"
msgstr "Sauver Options"
#: pcbnew/pcbplot.cpp:334
#: pcbnew/pcbplot.cpp:335
msgid "Generate drill file"
msgstr "Créer Fichier de perçage"
#: pcbnew/pcbplot.cpp:337
#: pcbnew/pcbplot.cpp:338
msgid "Close"
msgstr "Fermer"
#: pcbnew/pcbplot.cpp:383
#: pcbnew/pcbplot.cpp:384
msgid "Use Proper Gerber Extensions"
msgstr "Utiliser Extensions Gerber Particulières"
#: pcbnew/pcbplot.cpp:390
msgid "Use Proper Gerber Extensions - .GBL, .GTL, etc..."
msgstr "Utiliser les extensions GERBER specifiques aux couches - .GBL, .GTL, etc..."
#: pcbnew/pcbplot.cpp:397
msgid "Exclude pcb edge layer"
msgstr "Exclure couche contours PCB"
#: pcbnew/pcbplot.cpp:387
#: pcbnew/pcbplot.cpp:401
msgid "Exclude contents of the pcb edge layer from all other layers"
msgstr "Exclure les tracés contour PCB des autres couches"
#: pcbnew/pcbplot.cpp:394
#: pcbnew/pcbplot.cpp:408
msgid "Print sheet reference"
msgstr "Imprimer cartouche"
#: pcbnew/pcbplot.cpp:405
#: pcbnew/pcbplot.cpp:419
msgid "Print pads on silkscreen"
msgstr "Pads sur Sérigraphie"
#: pcbnew/pcbplot.cpp:413
#: pcbnew/pcbplot.cpp:426
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:417
#: pcbnew/pcbplot.cpp:430
msgid "Always print pads"
msgstr "Toujours tracer pads"
#: pcbnew/pcbplot.cpp:423
#: pcbnew/pcbplot.cpp:435
msgid "Force print/plot pads on ALL layers"
msgstr "Force le tracé des pastilles sur TOUTES les couches"
#: pcbnew/pcbplot.cpp:428
#: pcbnew/pcbplot.cpp:440
msgid "Print module value"
msgstr "Imprimer Valeur Module"
#: pcbnew/pcbplot.cpp:432
#: pcbnew/pcbplot.cpp:444
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:436
#: pcbnew/pcbplot.cpp:448
msgid "Print module reference"
msgstr "Imprimer Référence Module"
#: pcbnew/pcbplot.cpp:440
#: pcbnew/pcbplot.cpp:452
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:444
#: pcbnew/pcbplot.cpp:456
msgid "Print other module texts"
msgstr "Imprimer autres textes module"
#: pcbnew/pcbplot.cpp:448
#: pcbnew/pcbplot.cpp:460
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:453
#: pcbnew/pcbplot.cpp:465
msgid "Force print invisible texts"
msgstr "Force tracé textes invisibles"
#: pcbnew/pcbplot.cpp:457
#: pcbnew/pcbplot.cpp:469
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:462
#: pcbnew/pcbplot.cpp:475
msgid "No drill mark"
msgstr "Pas de marque"
#: pcbnew/pcbplot.cpp:463
#: pcbnew/pcbplot.cpp:476
msgid "Small mark"
msgstr "Petite marque"
#: pcbnew/pcbplot.cpp:464
#: pcbnew/pcbplot.cpp:477
msgid "Real drill"
msgstr "Perçage réel"
#: pcbnew/pcbplot.cpp:468
#: pcbnew/pcbplot.cpp:481
msgid "Pads Drill Opt"
msgstr "Options Perçage Pads"
#: pcbnew/pcbplot.cpp:477
#: pcbnew/pcbplot.cpp:490
msgid "Auto scale"
msgstr "Ech. auto"
#: pcbnew/pcbplot.cpp:478
#: pcbnew/pcbplot.cpp:491
msgid "Scale 1"
msgstr "Echelle 1"
#: pcbnew/pcbplot.cpp:479
#: pcbnew/pcbplot.cpp:492
msgid "Scale 1.5"
msgstr "Echelle 1,5"
#: pcbnew/pcbplot.cpp:480
#: pcbnew/pcbplot.cpp:493
msgid "Scale 2"
msgstr "Echelle 2"
#: pcbnew/pcbplot.cpp:481
#: pcbnew/pcbplot.cpp:494
msgid "Scale 3"
msgstr "Echelle 3"
#: pcbnew/pcbplot.cpp:485
#: pcbnew/pcbplot.cpp:498
msgid "Scale Opt"
msgstr "Echelle"
#: pcbnew/pcbplot.cpp:492
#: pcbnew/pcbplot.cpp:507
msgid "Line"
msgstr "Ligne"
#: pcbnew/pcbplot.cpp:492
#: pcbnew/pcbplot.cpp:507
msgid "Filled"
msgstr "Plein"
#: pcbnew/pcbplot.cpp:493
#: pcbnew/pcbplot.cpp:508
msgid "Sketch"
msgstr "Contour"
#: pcbnew/pcbplot.cpp:495
#: pcbnew/pcbplot.cpp:511
msgid "Plot Mode"
msgstr "Mode de Tracé"
#: pcbnew/pcbplot.cpp:503
#: pcbnew/pcbplot.cpp:519
msgid "Plot mirror"
msgstr "Tracé Miroir"
#: pcbnew/pcbplot.cpp:509
#: pcbnew/pcbplot.cpp:525
msgid "Vias on mask"
msgstr "Vias sur masque"
#: pcbnew/pcbplot.cpp:513
#: pcbnew/pcbplot.cpp:529
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:762
#: pcbnew/pcbplot.cpp:784
msgid "Adobe post script files (.ps)|*.ps"
msgstr "Fichiers Adobe post script (.ps)|*.ps"
#: pcbnew/pcbplot.cpp:768
msgid "GERBER photo plot files (.pho)|*.pho"
msgstr "Fichiers phottraçage GERBER (.pho)|*.pho"
#: pcbnew/pcbplot.cpp:790
msgid "GERBER photo plot files (.pho .gbr)|*.pho;*.gbr"
msgstr "Fichiers photraçage GERBER (.pho .gbr)|*.pho;*.gbr"
#: pcbnew/pcbplot.cpp:786
#: pcbnew/pcbplot.cpp:808
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:789
#: pcbnew/pcbplot.cpp:811
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:838
#: pcbnew/pcbplot.cpp:939
msgid "No layer selected"
msgstr "Pas de couche sélectionnée"
......@@ -9710,7 +9718,7 @@ msgstr "Imprimer Tout"
msgid "Current"
msgstr "Courant"
#: eeschema/class_sch_component.cpp:1103
#: eeschema/class_sch_component.cpp:1114
msgid "Power symbol"
msgstr "Symbole d'alimentation"
......@@ -11220,105 +11228,105 @@ msgstr "Fichier exécutable ("
msgid "Select Prefered Editor"
msgstr "Sélection Editeur Préféré"
#: kicad/treeprj_frame.cpp:123
#: kicad/treeprj_frame.cpp:126
msgid "&Run"
msgstr "Exécute&r"
#: kicad/treeprj_frame.cpp:124
#: kicad/treeprj_frame.cpp:127
msgid "Run the Python Script"
msgstr "Exécuter le Script Python"
#: kicad/treeprj_frame.cpp:133
#: kicad/treeprj_frame.cpp:208
#: kicad/treeprj_frame.cpp:136
#: kicad/treeprj_frame.cpp:211
msgid "&Edit in a text editor"
msgstr "Editer avec un éditeur de Texte"
#: kicad/treeprj_frame.cpp:134
#: kicad/treeprj_frame.cpp:137
msgid "&Open the file in a Text Editor"
msgstr "&Ouvrir le fichier avec un Editeur de texte"
#: kicad/treeprj_frame.cpp:151
#: kicad/treeprj_frame.cpp:154
msgid "New D&irectory"
msgstr "&Nouveau Répertoire"
#: kicad/treeprj_frame.cpp:152
#: kicad/treeprj_frame.cpp:155
msgid "Create a New Directory"
msgstr "Créer un nouveau Répertoire"
#: kicad/treeprj_frame.cpp:161
#: kicad/treeprj_frame.cpp:164
msgid "New P&ython Script"
msgstr "Nouveau Script P&ython"
#: kicad/treeprj_frame.cpp:162
#: kicad/treeprj_frame.cpp:165
msgid "Create a New Python Script"
msgstr "Créer un nouveau script Python"
#: kicad/treeprj_frame.cpp:171
#: kicad/treeprj_frame.cpp:174
msgid "New &Text File"
msgstr "Nouveau Fichier &Texte"
#: kicad/treeprj_frame.cpp:172
#: kicad/treeprj_frame.cpp:175
msgid "Create a New Txt File"
msgstr "Créer un nouveau Fichier texte"
#: kicad/treeprj_frame.cpp:180
#: kicad/treeprj_frame.cpp:183
msgid "New &File"
msgstr "Nouveau &Fichier"
#: kicad/treeprj_frame.cpp:181
#: kicad/treeprj_frame.cpp:184
msgid "Create a New File"
msgstr "Créer un nouveau Fichier"
#: kicad/treeprj_frame.cpp:195
#: kicad/treeprj_frame.cpp:198
msgid "&Rename file"
msgstr "&Renommer fichier"
#: kicad/treeprj_frame.cpp:196
#: kicad/treeprj_frame.cpp:198
#: kicad/treeprj_frame.cpp:199
#: kicad/treeprj_frame.cpp:201
msgid "&Rename directory"
msgstr "&Renommer répertoire"
#: kicad/treeprj_frame.cpp:197
#: kicad/treeprj_frame.cpp:200
msgid "Rename file"
msgstr "Renommer fichier"
#: kicad/treeprj_frame.cpp:209
#: kicad/treeprj_frame.cpp:212
msgid "Open the file in a Text Editor"
msgstr "Ouvrir le fichier avec un Editeur de texte"
#: kicad/treeprj_frame.cpp:217
#: kicad/treeprj_frame.cpp:220
msgid "&Delete File"
msgstr "&Supprimer Fichier"
#: kicad/treeprj_frame.cpp:218
#: kicad/treeprj_frame.cpp:221
msgid "&Delete Directory"
msgstr "&Supprimer le Répertoire"
#: kicad/treeprj_frame.cpp:219
#: kicad/treeprj_frame.cpp:222
msgid "Delete the File"
msgstr "Supprimer le fichier"
#: kicad/treeprj_frame.cpp:220
#: kicad/treeprj_frame.cpp:223
msgid "&Delete the Directory and its content"
msgstr "Effacer le Répertoire et son contenu"
#: kicad/treeprj_frame.cpp:546
#: kicad/treeprj_frame.cpp:549
msgid "Create New File"
msgstr "Créer un Nouveau Fichier"
#: kicad/treeprj_frame.cpp:547
#: kicad/treeprj_frame.cpp:550
msgid "Create New Directory"
msgstr "Créer un nouveau Répertoire"
#: kicad/treeprj_frame.cpp:556
#: kicad/treeprj_frame.cpp:559
msgid "noname."
msgstr "noname."
#: kicad/treeprj_frame.cpp:1085
#: kicad/treeprj_frame.cpp:1088
msgid "Change filename: "
msgstr "Changer Nom Fichier: "
#: kicad/treeprj_frame.cpp:1087
#: kicad/treeprj_frame.cpp:1090
msgid "Change filename"
msgstr "Changer Nom Fichier"
......@@ -11360,14 +11368,14 @@ msgid "%d errors while reading Gerber file [%s]"
msgstr "%d erreurs pendant lecture fichier gerber [%s]"
#: gerbview/readgerb.cpp:267
#: gerbview/files.cpp:183
#: gerbview/files.cpp:216
#: gerbview/files.cpp:185
#: gerbview/files.cpp:218
#, c-format
msgid "Gerber DCODE files (%s)|*.%s"
msgstr "Fichiers Gerber DCODE (%s)|*.%s"
#: gerbview/readgerb.cpp:272
#: gerbview/files.cpp:189
#: gerbview/files.cpp:191
msgid "Load GERBER DCODE File"
msgstr "Charger Fichier de DCodes"
......@@ -11384,62 +11392,62 @@ msgid "Not yet available..."
msgstr "non encore disponible"
#: gerbview/files.cpp:114
msgid "Gerber files (.gbr .gbx .lgr .ger .pho)| .gbr;*.GBR;*.gbx;*.GBX;*.lgr;*.LGR;*.ger;*.GER;*.pho;*.PHO|"
msgstr "Fichiers Gerber (.gbr .gbx .lgr .ger .pho)| *.gbr;*.GBR;*.gbx;*.GBX;*.lgr;*.LGR;*.ger;*.GER;*.pho;*.PHO|"
msgid "Gerber files (.gb* .gt* .lgr .ger .pho)"
msgstr "Fichiers Gerber .gb* .gt* .lgr .ger .pho)"
#: gerbview/files.cpp:118
#: gerbview/files.cpp:120
msgid "Top layer (*.GTL)|*.GTL;*.gtl|"
msgstr "Couche composant"
#: gerbview/files.cpp:119
#: gerbview/files.cpp:121
msgid "Bottom layer (*.GBL)|*.GBL;*.gbl|"
msgstr "Couche cuivre"
#: gerbview/files.cpp:120
#: gerbview/files.cpp:122
msgid "Bottom solder resist (*.GBS)|*.GBS;*.gbs|"
msgstr "Masque soudure cuivre (*.GBS)|*.GBS;*.gbs|"
#: gerbview/files.cpp:121
#: gerbview/files.cpp:123
msgid "Top solder resist (*.GTS)|*.GTS;*.gts|"
msgstr "Masque soudure composant (*.GTS)|*.GTS;*.gts|"
#: gerbview/files.cpp:122
#: gerbview/files.cpp:124
msgid "Bottom overlay (*.GBO)|*.GBO;*.gbo|"
msgstr "Simple face, CMS coté Cuivre."
msgstr "Bottom overlay (*.GBO)|*.GBO;*.gbo|"
#: gerbview/files.cpp:123
#: gerbview/files.cpp:125
msgid "Top overlay (*.GTO)|*.GTO;*.gto|"
msgstr "Top overlay (*.GTO)|*.GTO;*.gto|"
#: gerbview/files.cpp:124
#: gerbview/files.cpp:126
msgid "Bottom paste (*.GBP)|*.GBP;*.gbp|"
msgstr "Bottom paste (*.GBP)|*.GBP;*.gbp|"
msgstr "Masque pate à souder cuivre (*.GBP)|*.GBP;*.gbp|"
#: gerbview/files.cpp:125
#: gerbview/files.cpp:127
msgid "Top paste (*.GTP)|*.GTP;*.gtp|"
msgstr "Masque pate à souder composant (*.GTP)|*.GTP;*.gtp|"
#: gerbview/files.cpp:126
#: gerbview/files.cpp:128
msgid "Keep-out layer (*.GKO)|*.GKO;*.gko|"
msgstr "Couche de \"Keep-out\" (*.GKO)|*.GKO;*.gko|"
#: gerbview/files.cpp:127
#: gerbview/files.cpp:129
msgid "Mechanical layers (*.GMx)|*.GM1;*.gm1;*.GM2;*.gm2;*.GM3;*.gm3|"
msgstr "Couches mécaniques (*.GMx)|*.GM1;*.gm1;*.GM2;*.gm2;*.GM3;*.gm3|"
#: gerbview/files.cpp:128
#: gerbview/files.cpp:130
msgid "Top Pad Master (*.GPT)|*.GPT;*.gpt|"
msgstr "Top Pad Master (*.GPT)|*.GPT;*.gpt|"
#: gerbview/files.cpp:129
#: gerbview/files.cpp:131
msgid "Bottom Pad Master (*.GPB)|*.GPB;*.gpb|"
msgstr "Bottom Pad Master (*.GPB)|*.GPB;*.gpb|"
#: gerbview/files.cpp:139
#: gerbview/files.cpp:141
msgid "Open Gerber File"
msgstr "Ouvrir Fichier Gerber"
#: gerbview/files.cpp:220
#: gerbview/files.cpp:222
msgid "Save Gerber File"
msgstr "Sauver Fichier Gerber"
......@@ -12842,6 +12850,12 @@ msgstr "Options d'Affichage"
msgid "Page Settings"
msgstr "Ajustage opt Page"
#~ msgid ""
#~ "Gerber files (.gbr .gbx .lgr .ger .pho)| .gbr;*.GBR;*.gbx;*.GBX;*.lgr;*."
#~ "LGR;*.ger;*.GER;*.pho;*.PHO|"
#~ msgstr ""
#~ "Fichiers Gerber (.gbr .gbx .lgr .ger .pho)| *.gbr;*.GBR;*.gbx;*.GBX;*.lgr;"
#~ "*.LGR;*.ger;*.GER;*.pho;*.PHO|"
#~ msgid "&Name:"
#~ msgstr "&Nom:"
#~ msgid "N&umber:"
......
......@@ -40,8 +40,11 @@ const wxChar* s_AllowedExtensionsToList[] =
wxT( "^[^$].*\\.brd$" ),
wxT( "^.*\\.net$" ),
wxT( "^.*\\.txt$" ),
wxT( "^.*\\.pho$" ),
wxT( "^.*\\.gbr$" ),
wxT( "^.*\\.pho$" ), // Gerber file
wxT( "^.*\\.gbr$" ), // Gerber file
wxT( "^.*\\.gb[alops]$" ), // Gerber back (or bottom) layer file
wxT( "^.*\\.gt[alops]$" ), // Gerber front (or top) layer file
wxT( "^.*\\.g[0-9]{1,2}$" ), // Gerber inner layer file
wxT( "^.*\\.odt$" ),
wxT( "^.*\\.sxw$" ),
wxT( "^.*\\.htm$" ),
......
......@@ -14,11 +14,14 @@
#include "worksheet.h"
#include "pcbnew_id.h"
#include "protos.h"
#include "pcbstruct.h"
#include "class_board_design_settings.h"
#define PLOT_DEFAULT_MARGE 300 // mils
/* Keywords to r/w options in config */
#define OPTKEY_EDGELAYER_GERBER wxT( "EdgeLayerGerberOpt" )
#define OPTKEY_GERBER_EXTENSIONS wxT( "GerberOptUseLayersExt" )
#define OPTKEY_XFINESCALE_ADJ wxT( "PlotXFineScaleAdj" )
#define OPTKEY_YFINESCALE_ADJ wxT( "PlotYFineScaleAdj" )
#define OPTKEY_PADS_ON_SILKSCREEN wxT( "PlotPadsOnSilkscreen" )
......@@ -37,12 +40,13 @@ PCB_Plot_Options::PCB_Plot_Options()
Sel_Texte_Divers = true;
DrillShapeOpt = PCB_Plot_Options::SMALL_DRILL_SHAPE;
Trace_Mode = FILLED;
Scale = 1.0;
ScaleAdjX = 1.0;
ScaleAdjY = 1.0;
Scale = 1.0;
ScaleAdjX = 1.0;
ScaleAdjY = 1.0;
PlotScaleOpt = 1;
}
static long s_SelectedLayers = LAYER_BACK | LAYER_FRONT |
SILKSCREEN_LAYER_FRONT | SILKSCREEN_LAYER_BACK;
......@@ -69,7 +73,8 @@ enum id_plotps {
ID_PRINT_PAD_ON_SILKSCREEN,
ID_FORCE_PRINT_PAD,
ID_CREATE_DRILL_FILE,
ID_SEL_PLOT_OFFSET_OPTION
ID_SEL_PLOT_OFFSET_OPTION,
ID_USE_GERBER_EXTENSIONS
};
......@@ -94,6 +99,7 @@ public:
wxCheckBox* m_PlotMirorOpt;
wxCheckBox* m_PlotNoViaOnMaskOpt;
wxCheckBox* m_Exclude_Edges_Pcb;
wxCheckBox* m_Use_Gerber_Extensions;
wxCheckBox* m_Plot_Sheet_Ref;
wxCheckBox* m_Plot_Invisible_Text;
wxCheckBox* m_Plot_Text_Value;
......@@ -110,8 +116,8 @@ public:
WinEDA_DFloatValueCtrl* m_FineAdjustXscaleOpt;
WinEDA_DFloatValueCtrl* m_FineAdjustYscaleOpt;
double m_XScaleAdjust;
double m_YScaleAdjust;
double m_XScaleAdjust;
double m_YScaleAdjust;
bool useA4()
{
......@@ -130,15 +136,16 @@ public:
// change the A4 to the simple postscript, according to the
// PlotFormat enum
switch (radioNdx)
{
case 3:
switch( radioNdx )
{
case 3:
radioNdx = PLOT_FORMAT_POST;
break;
case 4:
radioNdx = PLOT_FORMAT_DXF;
break;
}
break;
case 4:
radioNdx = PLOT_FORMAT_DXF;
break;
}
return PlotFormat( radioNdx );
}
......@@ -160,14 +167,14 @@ private:
};
BEGIN_EVENT_TABLE( WinEDA_PlotFrame, wxDialog )
EVT_INIT_DIALOG( WinEDA_PlotFrame::OnInitDialog )
EVT_CLOSE( WinEDA_PlotFrame::OnClose )
EVT_BUTTON( wxID_CANCEL, WinEDA_PlotFrame::OnQuit )
EVT_BUTTON( ID_EXEC_PLOT, WinEDA_PlotFrame::Plot )
EVT_BUTTON( ID_SAVE_OPT_PLOT, WinEDA_PlotFrame::SaveOptPlot )
EVT_BUTTON( ID_CREATE_DRILL_FILE, WinEDA_PlotFrame::CreateDrillFile )
EVT_RADIOBOX( ID_SEL_PLOT_FORMAT, WinEDA_PlotFrame::SetCommands )
EVT_RADIOBOX( ID_SCALE_OPT, WinEDA_PlotFrame::OnSetScaleOpt )
EVT_INIT_DIALOG( WinEDA_PlotFrame::OnInitDialog )
EVT_CLOSE( WinEDA_PlotFrame::OnClose )
EVT_BUTTON( wxID_CANCEL, WinEDA_PlotFrame::OnQuit )
EVT_BUTTON( ID_EXEC_PLOT, WinEDA_PlotFrame::Plot )
EVT_BUTTON( ID_SAVE_OPT_PLOT, WinEDA_PlotFrame::SaveOptPlot )
EVT_BUTTON( ID_CREATE_DRILL_FILE, WinEDA_PlotFrame::CreateDrillFile )
EVT_RADIOBOX( ID_SEL_PLOT_FORMAT, WinEDA_PlotFrame::SetCommands )
EVT_RADIOBOX( ID_SCALE_OPT, WinEDA_PlotFrame::OnSetScaleOpt )
END_EVENT_TABLE()
......@@ -228,12 +235,9 @@ void WinEDA_PlotFrame::OnInitDialog( wxInitDialogEvent& event )
5, fmtmsg, 1, wxRA_SPECIFY_COLS );
MidRightBoxSizer->Add( m_PlotFormatOpt, 0, wxGROW | wxALL, 5 );
if( config )
{
config->Read( OPTKEY_OUTPUT_FORMAT, &g_pcb_plot_options.PlotFormat );
config->Read( OPTKEY_PLOT_LINEWIDTH_VALUE,
&g_pcb_plot_options.PlotLine_Width );
}
config->Read( OPTKEY_OUTPUT_FORMAT, &g_pcb_plot_options.PlotFormat );
config->Read( OPTKEY_PLOT_LINEWIDTH_VALUE,
&g_pcb_plot_options.PlotLine_Width );
m_PlotFormatOpt->SetSelection( g_pcb_plot_options.PlotFormat );
......@@ -269,7 +273,8 @@ void WinEDA_PlotFrame::OnInitDialog( wxInitDialogEvent& event )
MidRightBoxSizer,
PCB_INTERNAL_UNIT );
m_LinesWidth->SetToolTip( _( "Set lines width used to plot in sketch \
m_LinesWidth->SetToolTip( _(
"Set lines width used to plot in sketch \
mode and plot pads outlines on silk screen layers" ) );
// Create the right column commands
......@@ -292,12 +297,9 @@ mode and plot pads outlines on silk screen layers" ) );
// Create scale adjust option
m_XScaleAdjust = m_YScaleAdjust = 1.0;
if( config )
{
config->Read( OPTKEY_EDGELAYER_GERBER, &g_pcb_plot_options.Exclude_Edges_Pcb );
config->Read( OPTKEY_XFINESCALE_ADJ, &m_XScaleAdjust );
config->Read( OPTKEY_YFINESCALE_ADJ, &m_YScaleAdjust );
}
config->Read( OPTKEY_EDGELAYER_GERBER, &g_pcb_plot_options.Exclude_Edges_Pcb );
config->Read( OPTKEY_XFINESCALE_ADJ, &m_XScaleAdjust );
config->Read( OPTKEY_YFINESCALE_ADJ, &m_YScaleAdjust );
// Test for a reasonable scale value. Set to 1 if problem
if( m_XScaleAdjust < MIN_SCALE || m_YScaleAdjust < MIN_SCALE
......@@ -331,7 +333,7 @@ scale plotting" ) );
RightBoxSizer->Add( button, 0, wxGROW | wxALL, 5 );
button = new wxButton( this, ID_CREATE_DRILL_FILE,
_( "Generate drill file" ) );
_( "Generate drill file" ) );
RightBoxSizer->Add( button, 0, wxGROW | wxALL, 5 );
button = new wxButton( this, wxID_CANCEL, _( "Close" ) );
......@@ -341,7 +343,7 @@ scale plotting" ) );
wxBoxSizer* OneColumnLayerBoxSizer = new wxBoxSizer( wxVERTICAL );
LayersBoxSizer->Add( OneColumnLayerBoxSizer, 0, wxGROW | wxALL, 5 );
int mask = 1;
int mask = 1;
for( int layer = 0; layer<NB_LAYERS; layer++, mask <<= 1 )
{
......@@ -376,11 +378,33 @@ scale plotting" ) );
}
}
// Disable checkboxes if the corresponding layer is not enabled
for( int layer = 0; layer<NB_LAYERS; layer++, mask <<= 1 )
{
if( ! board->m_BoardSettings->IsLayerEnabled( layer ) )
{
m_BoxSelectLayer[layer]->Enable( false );
m_BoxSelectLayer[layer]->SetValue( false );
}
}
// Option for using proper Gerber extensions
m_Use_Gerber_Extensions = new wxCheckBox( this,
ID_USE_GERBER_EXTENSIONS,
_( "Use Proper Gerber Extensions" ) );
long ltmp;
config->Read( OPTKEY_GERBER_EXTENSIONS, &ltmp );
m_Use_Gerber_Extensions->SetValue( ltmp );
m_Use_Gerber_Extensions->SetToolTip(
_( "Use Proper Gerber Extensions - .GBL, .GTL, etc..." ) );
LeftBoxSizer->Add( m_Use_Gerber_Extensions, 0, wxGROW | wxALL, 1 );
// Option for excluding contents of "Edges Pcb" layer
m_Exclude_Edges_Pcb = new wxCheckBox( this,
ID_EXCLUDE_EDGES_PCB,
_( "Exclude pcb edge layer" ) );
ID_EXCLUDE_EDGES_PCB,
_( "Exclude pcb edge layer" ) );
m_Exclude_Edges_Pcb->SetValue( g_pcb_plot_options.Exclude_Edges_Pcb );
m_Exclude_Edges_Pcb->SetToolTip(
......@@ -391,7 +415,7 @@ scale plotting" ) );
if( m_Parent->m_Print_Sheet_Ref )
{
m_Plot_Sheet_Ref = new wxCheckBox( this, ID_PRINT_REF,
_( "Print sheet reference" ) );
_( "Print sheet reference" ) );
m_Plot_Sheet_Ref->SetValue( g_pcb_plot_options.Plot_Frame_Ref );
LeftBoxSizer->Add( m_Plot_Sheet_Ref, 0, wxGROW | wxALL, 1 );
......@@ -401,12 +425,11 @@ scale plotting" ) );
// Option to plot pads on silkscreen layers or all layers
m_Plot_Pads_on_Silkscreen = new wxCheckBox( this,
ID_PRINT_PAD_ON_SILKSCREEN,
_( "Print pads on silkscreen" ) );
ID_PRINT_PAD_ON_SILKSCREEN,
_( "Print pads on silkscreen" ) );
if( config )
config->Read( OPTKEY_PADS_ON_SILKSCREEN,
&g_pcb_plot_options.PlotPadsOnSilkLayer );
config->Read( OPTKEY_PADS_ON_SILKSCREEN,
&g_pcb_plot_options.PlotPadsOnSilkLayer );
m_Plot_Pads_on_Silkscreen->SetValue( &g_pcb_plot_options.PlotPadsOnSilkLayer );
m_Plot_Pads_on_Silkscreen->SetToolTip(
......@@ -414,10 +437,9 @@ scale plotting" ) );
LeftBoxSizer->Add( m_Plot_Pads_on_Silkscreen, 0, wxGROW | wxALL, 1 );
m_Force_Plot_Pads = new wxCheckBox( this, ID_FORCE_PRINT_PAD,
_( "Always print pads" ) );
if( config )
config->Read( OPTKEY_ALWAYS_PRINT_PADS,
&g_pcb_plot_options.Plot_Pads_All_Layers );
_( "Always print pads" ) );
config->Read( OPTKEY_ALWAYS_PRINT_PADS,
&g_pcb_plot_options.Plot_Pads_All_Layers );
m_Force_Plot_Pads->SetValue( g_pcb_plot_options.Plot_Pads_All_Layers );
m_Force_Plot_Pads->SetToolTip( _( "Force print/plot pads on ALL layers" ) );
......@@ -425,7 +447,7 @@ scale plotting" ) );
// Options to plot texts on footprints
m_Plot_Text_Value = new wxCheckBox( this, ID_PRINT_VALUE,
_( "Print module value" ) );
_( "Print module value" ) );
m_Plot_Text_Value->SetValue( g_pcb_plot_options.Sel_Texte_Valeur );
m_Plot_Text_Value->SetToolTip(
......@@ -433,7 +455,7 @@ scale plotting" ) );
LeftBoxSizer->Add( m_Plot_Text_Value, 0, wxGROW | wxALL, 1 );
m_Plot_Text_Ref = new wxCheckBox( this, ID_PRINT_REF,
_( "Print module reference" ) );
_( "Print module reference" ) );
m_Plot_Text_Ref->SetValue( g_pcb_plot_options.Sel_Texte_Reference );
m_Plot_Text_Ref->SetToolTip(
......@@ -441,7 +463,7 @@ scale plotting" ) );
LeftBoxSizer->Add( m_Plot_Text_Ref, 0, wxGROW | wxALL, 1 );
m_Plot_Text_Div = new wxCheckBox( this, ID_PRINT_MODULE_TEXTS,
_( "Print other module texts" ) );
_( "Print other module texts" ) );
m_Plot_Text_Div->SetValue( g_pcb_plot_options.Sel_Texte_Divers );
m_Plot_Text_Div->SetToolTip(
......@@ -449,8 +471,8 @@ scale plotting" ) );
LeftBoxSizer->Add( m_Plot_Text_Div, 0, wxGROW | wxALL, 1 );
m_Plot_Invisible_Text = new wxCheckBox( this,
ID_FORCE_PRINT_INVISIBLE_TEXT,
_( "Force print invisible texts" ) );
ID_FORCE_PRINT_INVISIBLE_TEXT,
_( "Force print invisible texts" ) );
m_Plot_Invisible_Text->SetValue( g_pcb_plot_options.Sel_Texte_Invisible );
m_Plot_Invisible_Text->SetToolTip(
......@@ -458,7 +480,8 @@ scale plotting" ) );
LeftBoxSizer->Add( m_Plot_Invisible_Text, 0, wxGROW | wxALL, 1 );
static const wxString drillmsg[3] = {
static const wxString drillmsg[3] =
{
_( "No drill mark" ),
_( "Small mark" ),
_( "Real drill" )
......@@ -489,8 +512,11 @@ scale plotting" ) );
m_Scale_Opt->SetSelection( g_pcb_plot_options.PlotScaleOpt );
MidLeftBoxSizer->Add( m_Scale_Opt, 0, wxGROW | wxALL, 5 );
static const wxString list_opt3[3] = { _( "Line" ), _( "Filled" ),
_( "Sketch" ) };
static const wxString list_opt3[3] =
{
_( "Line" ), _( "Filled" ),
_( "Sketch" )
};
m_PlotModeOpt = new wxRadioBox( this, ID_PLOT_MODE_OPT, _( "Plot Mode" ),
wxDefaultPosition, wxDefaultSize,
......@@ -500,13 +526,13 @@ scale plotting" ) );
MidLeftBoxSizer->Add( m_PlotModeOpt, 0, wxGROW | wxALL, 5 );
m_PlotMirorOpt = new wxCheckBox( this, ID_MIROR_OPT,
_( "Plot mirror" ) );
_( "Plot mirror" ) );
m_PlotMirorOpt->SetValue( g_pcb_plot_options.Plot_Set_MIROIR );
MidLeftBoxSizer->Add( m_PlotMirorOpt, 0, wxGROW | wxALL, 5 );
m_PlotNoViaOnMaskOpt = new wxCheckBox( this, ID_MASKVIA_OPT,
_( "Vias on mask" ) );
_( "Vias on mask" ) );
m_PlotNoViaOnMaskOpt->SetValue( g_pcb_plot_options.DrawViaOnMaskLayer );
m_PlotNoViaOnMaskOpt->SetToolTip(
......@@ -526,7 +552,7 @@ scale plotting" ) );
}
void WinEDA_PlotFrame::OnQuit( wxCommandEvent& WXUNUSED( event ) )
void WinEDA_PlotFrame::OnQuit( wxCommandEvent& WXUNUSED(event) )
{
Close( true ); // true is to force the frame to close
}
......@@ -543,16 +569,19 @@ void WinEDA_PlotFrame::CreateDrillFile( wxCommandEvent& event )
( (WinEDA_PcbFrame*) m_Parent )->InstallDrillFrame( event );
}
void WinEDA_PlotFrame::OnSetScaleOpt( wxCommandEvent& event )
{
/* Disable sheet reference for scale != 1:1 */
bool scale1 = ( m_Scale_Opt->GetSelection() == 1 );
m_Plot_Sheet_Ref->Enable( scale1 );
if ( !scale1 )
if( !scale1 )
m_Plot_Sheet_Ref->SetValue( false );
}
void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
{
int format = getFormat();
......@@ -572,6 +601,7 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
m_HPGLPenOverlayOpt->Enable( false );
m_Exclude_Edges_Pcb->SetValue( false );
m_Exclude_Edges_Pcb->Enable( false );
m_Use_Gerber_Extensions->Enable( false );
m_Scale_Opt->Enable( true );
m_FineAdjustXscaleOpt->Enable( true );
m_FineAdjustYscaleOpt->Enable( true );
......@@ -591,6 +621,7 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
m_HPGLPenSpeedOpt->Enable( false );
m_HPGLPenOverlayOpt->Enable( false );
m_Exclude_Edges_Pcb->Enable( true );
m_Use_Gerber_Extensions->Enable( true );
m_Scale_Opt->SetSelection( 1 );
m_Scale_Opt->Enable( false );
m_FineAdjustXscaleOpt->Enable( false );
......@@ -611,6 +642,7 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
m_HPGLPenOverlayOpt->Enable( true );
m_Exclude_Edges_Pcb->SetValue( false );
m_Exclude_Edges_Pcb->Enable( false );
m_Use_Gerber_Extensions->Enable( false );
m_Scale_Opt->Enable( true );
m_FineAdjustXscaleOpt->Enable( false );
m_FineAdjustYscaleOpt->Enable( false );
......@@ -631,6 +663,7 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
m_HPGLPenOverlayOpt->Enable( false );
m_Exclude_Edges_Pcb->SetValue( false );
m_Exclude_Edges_Pcb->Enable( false );
m_Use_Gerber_Extensions->Enable( false );
m_Scale_Opt->Enable( false );
m_Scale_Opt->SetSelection( 1 );
m_FineAdjustXscaleOpt->Enable( false );
......@@ -670,7 +703,7 @@ void WinEDA_PlotFrame::SaveOptPlot( wxCommandEvent& event )
g_pcb_plot_options.PlotOrient = PLOT_MIROIR;
else
g_pcb_plot_options.PlotOrient = 0;
g_pcb_plot_options.Trace_Mode = (GRTraceMode)m_PlotModeOpt->GetSelection();
g_pcb_plot_options.Trace_Mode = (GRTraceMode) m_PlotModeOpt->GetSelection();
g_pcb_plot_options.DrawViaOnMaskLayer = m_PlotNoViaOnMaskOpt->GetValue();
g_pcb_plot_options.HPGL_Pen_Diam = m_HPGLPenSizeOpt->GetValue();
......@@ -683,28 +716,27 @@ void WinEDA_PlotFrame::SaveOptPlot( wxCommandEvent& event )
wxConfig* config = wxGetApp().m_EDA_Config;
if( config )
config->Write( OPTKEY_EDGELAYER_GERBER,
g_pcb_plot_options.Exclude_Edges_Pcb );
config->Write( OPTKEY_GERBER_EXTENSIONS,
m_Use_Gerber_Extensions->GetValue() );
config->Write( OPTKEY_XFINESCALE_ADJ, m_XScaleAdjust );
config->Write( OPTKEY_YFINESCALE_ADJ, m_YScaleAdjust );
config->Write( OPTKEY_PADS_ON_SILKSCREEN,
g_pcb_plot_options.PlotPadsOnSilkLayer );
config->Write( OPTKEY_ALWAYS_PRINT_PADS,
g_pcb_plot_options.Plot_Pads_All_Layers );
int formatNdx = m_PlotFormatOpt->GetSelection();
config->Write( OPTKEY_OUTPUT_FORMAT, formatNdx );
config->Write( OPTKEY_PLOT_LINEWIDTH_VALUE,
g_pcb_plot_options.PlotLine_Width );
wxString layerKey;
for( int layer = 0; layer<NB_LAYERS; ++layer )
{
config->Write( OPTKEY_EDGELAYER_GERBER,
g_pcb_plot_options.Exclude_Edges_Pcb );
config->Write( OPTKEY_XFINESCALE_ADJ, m_XScaleAdjust );
config->Write( OPTKEY_YFINESCALE_ADJ, m_YScaleAdjust );
config->Write( OPTKEY_PADS_ON_SILKSCREEN,
g_pcb_plot_options.PlotPadsOnSilkLayer );
config->Write( OPTKEY_ALWAYS_PRINT_PADS,
g_pcb_plot_options.Plot_Pads_All_Layers );
int formatNdx = m_PlotFormatOpt->GetSelection();
config->Write( OPTKEY_OUTPUT_FORMAT, formatNdx );
config->Write( OPTKEY_PLOT_LINEWIDTH_VALUE,
g_pcb_plot_options.PlotLine_Width );
wxString layerKey;
for( int layer = 0; layer<NB_LAYERS; ++layer )
{
layerKey.Printf( OPTKEY_LAYERBASE, layer );
config->Write( layerKey, m_BoxSelectLayer[layer]->IsChecked() );
}
layerKey.Printf( OPTKEY_LAYERBASE, layer );
config->Write( layerKey, m_BoxSelectLayer[layer]->IsChecked() );
}
g_pcb_plot_options.Plot_PS_Negative = m_Plot_PS_Negative->GetValue();
......@@ -764,8 +796,8 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
case PLOT_FORMAT_GERBER:
g_pcb_plot_options.Scale = 1.0; // No scale option allowed in gerber format
ext = wxT( "pho" );
wildcard = _( "GERBER photo plot files (.pho)|*.pho" );
ext = wxT( "pho" );
wildcard = _( "GERBER photo plot files (.pho .gbr)|*.pho;*.gbr" );
break;
case PLOT_FORMAT_HPGL:
......@@ -783,10 +815,10 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
// Test for a reasonable scale value
if( g_pcb_plot_options.Scale < MIN_SCALE )
DisplayInfoMessage( this,
_( "Warning: Scale option set to a very small value" ) );
_( "Warning: Scale option set to a very small value" ) );
if( g_pcb_plot_options.Scale > MAX_SCALE )
DisplayInfoMessage( this,
_( "Warning: Scale option set to a very large value" ) );
_( "Warning: Scale option set to a very large value" ) );
int mask = 1;
s_SelectedLayers = 0;
......@@ -802,9 +834,90 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
fn = m_Parent->GetScreen()->m_FileName;
// Create file name.
fn.SetName( fn.GetName() + wxT( "-" ) +
board->GetLayerName( layer_to_plot ) );
fn.SetExt( ext );
wxString layername = board->GetLayerName( layer_to_plot );
layername.Trim(true); layername.Trim(false); // remove leading and trailing spaces if any
fn.SetName( fn.GetName() + wxT( "-" ) + layername );
// Use Gerber Extensions based on layer number
// (See http://en.wikipedia.org/wiki/Gerber_File)
if( (format == PLOT_FORMAT_GERBER) && m_Use_Gerber_Extensions->GetValue() )
{
switch( layer_to_plot )
{
case LAYER_N_FRONT:
fn.SetExt( wxT( "gtl" ) );
break;
case LAYER_N_2:
case LAYER_N_3:
case LAYER_N_4:
case LAYER_N_5:
case LAYER_N_6:
case LAYER_N_7:
case LAYER_N_8:
case LAYER_N_9:
case LAYER_N_10:
case LAYER_N_11:
case LAYER_N_12:
case LAYER_N_13:
case LAYER_N_14:
case LAYER_N_15:
// TODO: use g1 to gxx according to the
// new internal layers designation
// (1 is the first internal layer from the front layer)
fn.SetExt( wxT( "gbr" ) );
break;
case LAYER_N_BACK:
fn.SetExt( wxT( "gbl" ) );
break;
case ADHESIVE_N_BACK:
fn.SetExt( wxT( "gba" ) );
break;
case ADHESIVE_N_FRONT:
fn.SetExt( wxT( "gta" ) );
break;
case SOLDERPASTE_N_BACK:
fn.SetExt( wxT( "gbp" ) );
break;
case SOLDERPASTE_N_FRONT:
fn.SetExt( wxT( "gtp" ) );
break;
case SILKSCREEN_N_BACK:
fn.SetExt( wxT( "gbo" ) );
break;
case SILKSCREEN_N_FRONT:
fn.SetExt( wxT( "gto" ) );
break;
case SOLDERMASK_N_BACK:
fn.SetExt( wxT( "gbs" ) );
break;
case SOLDERMASK_N_FRONT:
fn.SetExt( wxT( "gts" ) );
break;
case DRAW_N:
case COMMENT_N:
case ECO1_N:
case ECO2_N:
case EDGE_N:
fn.SetExt( wxT( "gbr" ) );
break;
}
}
else
{
fn.SetExt( ext );
}
switch( format )
{
......@@ -816,7 +929,7 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
case PLOT_FORMAT_GERBER:
m_Parent->Genere_GERBER( fn.GetFullPath(), layer_to_plot,
s_PlotOriginIsAuxAxis,
g_pcb_plot_options.Trace_Mode );
g_pcb_plot_options.Trace_Mode );
break;
case PLOT_FORMAT_HPGL:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment