Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
2da432b2
Commit
2da432b2
authored
Mar 22, 2008
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
plot fix, beautification
parent
11d8f51b
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
2168 additions
and
2078 deletions
+2168
-2078
common_plotHPGL_functions.cpp
common/common_plotHPGL_functions.cpp
+136
-128
common_plotPS_functions.cpp
common/common_plotPS_functions.cpp
+271
-244
common_plot_functions.cpp
common/common_plot_functions.cpp
+310
-295
drawtxt.cpp
common/drawtxt.cpp
+38
-38
eestring.cpp
eeschema/eestring.cpp
+475
-459
plot.cpp
eeschema/plot.cpp
+0
-2
plot_common.h
include/plot_common.h
+64
-42
wxPcbStruct.h
include/wxPcbStruct.h
+6
-6
gen_drill_report_files.cpp
pcbnew/gen_drill_report_files.cpp
+26
-26
gendrill.cpp
pcbnew/gendrill.cpp
+58
-58
pcbplot.cpp
pcbnew/pcbplot.cpp
+41
-45
pcbplot.h
pcbnew/pcbplot.h
+39
-40
plot_rtn.cpp
pcbnew/plot_rtn.cpp
+4
-10
plotgerb.cpp
pcbnew/plotgerb.cpp
+686
-677
plotps.cpp
pcbnew/plotps.cpp
+10
-8
specctra.h
pcbnew/specctra.h
+4
-0
No files found.
common/common_plotHPGL_functions.cpp
View file @
2da432b2
/******************************************/
/******************************************/
/* Kicad: Common plot HPGL Routines */
/* Kicad: Common plot HPGL Routines */
/******************************************/
/******************************************/
#include "fctsys.h"
#include "fctsys.h"
#include "gr_basic.h"
#include "gr_basic.h"
...
@@ -17,191 +17,199 @@
...
@@ -17,191 +17,199 @@
// Variables partagees avec Common plot Postscript Routines
// Variables partagees avec Common plot Postscript Routines
extern
wxPoint
LastPenPosition
;
extern
wxPoint
LastPenPosition
;
extern
wxPoint
PlotOffset
;
extern
wxPoint
PlotOffset
;
extern
FILE
*
PlotOutputFile
;
extern
FILE
*
PlotOutputFile
;
extern
double
XScale
,
YScale
;
extern
double
XScale
,
YScale
;
extern
int
g_DefaultPenWidth
,
g_CurrentPenWidth
;
extern
int
g_DefaultPenWidth
,
g_CurrentPenWidth
;
extern
int
PlotOrientOptions
,
etat_plume
;
extern
int
PlotOrientOptions
,
etat_plume
;
//Variables locales
//Variables locales
void
Move_Plume_HPGL
(
wxPoint
pos
,
int
plume
);
void
Move_Plume_HPGL
(
wxPoint
pos
,
int
plume
);
void
Plume_HPGL
(
int
plume
);
void
Plume_HPGL
(
int
plume
);
/***********************************************************************************/
/***********************************************************************************/
void
InitPlotParametresHPGL
(
wxPoint
offset
,
double
xscale
,
double
yscale
,
int
orient
)
void
InitPlotParametresHPGL
(
wxPoint
offset
,
double
xscale
,
double
yscale
,
int
orient
)
/***********************************************************************************/
/***********************************************************************************/
/* Set the plot offset for the current plotting
/* Set the plot offset for the current plotting
xscale,yscale = coordinate scale (scale coefficient for coordinates)
*
xscale,yscale = coordinate scale (scale coefficient for coordinates)
device_xscale,device_yscale = device coordinate scale (i.e scale used by plot device)
*
device_xscale,device_yscale = device coordinate scale (i.e scale used by plot device)
*/
*/
{
{
PlotOffset
=
offset
;
PlotOffset
=
offset
;
XScale
=
xscale
;
XScale
=
xscale
;
YScale
=
yscale
;
YScale
=
yscale
;
g_DefaultPenWidth
=
6
;
/* epaisseur du trait standard en 1/1000 pouce */
g_DefaultPenWidth
=
6
;
/* epaisseur du trait standard en 1/1000 pouce */
PlotOrientOptions
=
orient
;
PlotOrientOptions
=
orient
;
g_CurrentPenWidth
=
-
1
;
g_CurrentPenWidth
=
-
1
;
}
}
/*****************************************************************/
/*****************************************************************/
bool
PrintHeaderHPGL
(
FILE
*
plot_file
,
int
pen_speed
,
int
pen_num
)
bool
PrintHeaderHPGL
(
FILE
*
plot_file
,
int
pen_speed
,
int
pen_num
)
/*****************************************************************/
/*****************************************************************/
{
{
char
Line
[
256
];
char
Line
[
256
];
PlotOutputFile
=
plot_file
;
PlotOutputFile
=
plot_file
;
etat_plume
=
'U'
;
etat_plume
=
'U'
;
sprintf
(
Line
,
"IN;VS%d;PU;PA;SP%d;
\n
"
,
pen_speed
,
pen_num
);
sprintf
(
Line
,
"IN;VS%d;PU;PA;SP%d;
\n
"
,
pen_speed
,
pen_num
);
fputs
(
Line
,
plot_file
);
fputs
(
Line
,
plot_file
);
return
TRUE
;
return
TRUE
;
}
}
/**********************************/
/**********************************/
bool
CloseFileHPGL
(
FILE
*
plot_file
)
bool
CloseFileHPGL
(
FILE
*
plot_file
)
/**********************************/
/**********************************/
{
{
fputs
(
"PU;PA;SP0;
\n
"
,
plot_file
);
fputs
(
"PU;PA;SP0;
\n
"
,
plot_file
);
fclose
(
plot_file
);
fclose
(
plot_file
);
return
TRUE
;
return
TRUE
;
}
}
/************************************************************/
/************************************************************/
void
PlotCircle_HPGL
(
wxPoint
centre
,
int
diameter
,
int
width
)
void
PlotCircle_HPGL
(
wxPoint
centre
,
int
diameter
,
int
width
)
/************************************************************/
/************************************************************/
{
{
int
rayon
;
int
rayon
;
char
Line
[
256
];
char
Line
[
256
];
UserToDeviceCoordinate
(
centre
);
UserToDeviceCoordinate
(
centre
);
rayon
=
(
int
)
(
diameter
/
2
*
XScale
);
rayon
=
(
int
)
(
diameter
/
2
*
XScale
);
if
(
rayon
<
0
)
rayon
=
0
;
if
(
rayon
<
0
)
rayon
=
0
;
Plume_HPGL
(
'U'
);
Plume_HPGL
(
'U'
);
sprintf
(
Line
,
"PA %d,%d;CI %d,%d;
\n
"
,
centre
.
x
,
centre
.
y
,
rayon
,
CHORD_ANGLE
);
sprintf
(
Line
,
"PA %d,%d;CI %d,%d;
\n
"
,
centre
.
x
,
centre
.
y
,
rayon
,
CHORD_ANGLE
);
fputs
(
Line
,
PlotOutputFile
)
;
fputs
(
Line
,
PlotOutputFile
)
;
Plume_HPGL
(
'U'
);
return
;
Plume_HPGL
(
'U'
);
return
;
}
}
/********************************************************************/
/********************************************************************/
void
PlotArcHPGL
(
wxPoint
centre
,
int
StAngle
,
int
EndAngle
,
int
rayon
,
int
width
)
void
PlotArcHPGL
(
wxPoint
centre
,
int
StAngle
,
int
EndAngle
,
int
rayon
,
int
width
)
/********************************************************************/
/********************************************************************/
/* trace d'un arc de cercle:
/* trace d'un arc de cercle:
centre = coord du centre
*
centre = coord du centre
StAngle, EndAngle = angle de debut et fin
*
StAngle, EndAngle = angle de debut et fin
rayon = rayon de l'arc
*
rayon = rayon de l'arc
commande
*
commande
PU;PA x,y;PD;AA start_arc_X, start_arc_Y, angle, NbSegm; PU;
*
PU;PA x,y;PD;AA start_arc_X, start_arc_Y, angle, NbSegm; PU;
ou PU;PA x,y;PD;AA start_arc_X, start_arc_Y, angle; PU;
*
ou PU;PA x,y;PD;AA start_arc_X, start_arc_Y, angle; PU;
*/
*/
{
{
char
Line
[
256
];
char
Line
[
256
];
wxPoint
cmap
;
/* point de depart */
wxPoint
cmap
;
/* point de depart */
wxPoint
cpos
;
/* centre */
wxPoint
cpos
;
/* centre */
float
angle
;
/* angle de l'arc*/
float
angle
;
/* angle de l'arc*/
if
(
rayon
<=
0
)
return
;
if
(
rayon
<=
0
)
return
;
cpos
=
centre
;
UserToDeviceCoordinate
(
cpos
);
cpos
=
centre
;
UserToDeviceCoordinate
(
cpos
);
if
(
PlotOrientOptions
==
PLOT_MIROIR
)
{
if
(
PlotOrientOptions
==
PLOT_MIROIR
)
EndAngle
=
-
EndAngle
;
{
StAngle
=
-
StAngle
;
EndAngle
=
-
EndAngle
;
EXCHG
(
StAngle
,
EndAngle
);
StAngle
=
-
StAngle
;
}
EXCHG
(
StAngle
,
EndAngle
);
angle
=
(
EndAngle
-
StAngle
)
/
10.0
;
}
/* Calcul des coord du point de depart : */
angle
=
(
EndAngle
-
StAngle
)
/
10.0
;
cmap
.
x
=
(
int
)(
centre
.
x
+
(
rayon
*
cos
(
StAngle
*
M_PI
/
1800
)
)
);
/* Calcul des coord du point de depart : */
cmap
.
y
=
(
int
)(
centre
.
y
+
(
rayon
*
sin
(
StAngle
*
M_PI
/
1800
)
)
);
cmap
.
x
=
(
int
)
(
centre
.
x
+
(
rayon
*
cos
(
StAngle
*
M_PI
/
1800
)
)
);
UserToDeviceCoordinate
(
cmap
);
cmap
.
y
=
(
int
)
(
centre
.
y
+
(
rayon
*
sin
(
StAngle
*
M_PI
/
1800
)
)
);
UserToDeviceCoordinate
(
cmap
);
Plume_HPGL
(
'U'
);
sprintf
(
Line
,
"PU;PA %d,%d;PD;AA %d,%d, "
,
cmap
.
x
,
cmap
.
y
,
cpos
.
x
,
cpos
.
y
);
Plume_HPGL
(
'U'
);
fputs
(
Line
,
PlotOutputFile
)
;
sprintf
(
Line
,
"PU;PA %d,%d;PD;AA %d,%d, "
,
cmap
.
x
,
cmap
.
y
,
cpos
.
x
,
cpos
.
y
);
sprintf
(
Line
,
"%f"
,
-
angle
);
to_point
(
Line
);
// Transforme , et . du separateur
fputs
(
Line
,
PlotOutputFile
);
fputs
(
Line
,
PlotOutputFile
)
;
sprintf
(
Line
,
"%f"
,
-
angle
);
to_point
(
Line
);
// Transforme , et . du separateur
sprintf
(
Line
,
", %d"
,
CHORD_ANGLE
);
fputs
(
Line
,
PlotOutputFile
)
;
fputs
(
Line
,
PlotOutputFile
);
sprintf
(
Line
,
";PU;
\n
"
);
fputs
(
Line
,
PlotOutputFile
)
;
sprintf
(
Line
,
", %d"
,
CHORD_ANGLE
);
fputs
(
Line
,
PlotOutputFile
);
Plume_HPGL
(
'U'
);
sprintf
(
Line
,
";PU;
\n
"
);
fputs
(
Line
,
PlotOutputFile
);
Plume_HPGL
(
'U'
);
}
}
/*****************************************************/
/*****************************************************/
void
PlotPolyHPGL
(
int
nb
,
int
*
coord
,
int
fill
,
int
width
)
void
PlotPolyHPGL
(
int
nb
,
int
*
coord
,
int
fill
,
int
width
)
/*****************************************************/
/*****************************************************/
/* Trace un polygone (ferme si rempli) en format HPGL
/* Trace un polygone (ferme si rempli) en format HPGL
coord = tableau des coord des sommets
*
coord = tableau des coord des sommets
nb = nombre de coord ( 1 coord = 2 elements: X et Y du tableau )
*
nb = nombre de coord ( 1 coord = 2 elements: X et Y du tableau )
fill : si != 0 polygone rempli
*
fill : si != 0 polygone rempli
*/
*/
{
{
int
ii
;
int
ii
;
if
(
nb
<=
1
)
return
;
if
(
nb
<=
1
)
Move_Plume_HPGL
(
wxPoint
(
coord
[
0
],
coord
[
1
]),
'U'
);
return
;
for
(
ii
=
1
;
ii
<
nb
;
ii
++
)
{
Move_Plume_HPGL
(
wxPoint
(
coord
[
0
],
coord
[
1
]
),
'U'
);
Move_Plume_HPGL
(
wxPoint
(
coord
[
ii
*
2
],
coord
[(
ii
*
2
)
+
1
]),
'D'
);
for
(
ii
=
1
;
ii
<
nb
;
ii
++
)
}
{
Move_Plume_HPGL
(
wxPoint
(
coord
[
ii
*
2
],
coord
[(
ii
*
2
)
+
1
]
),
'D'
);
/* Fermeture eventuelle du polygone */
}
if
(
fill
)
{
/* Fermeture eventuelle du polygone */
ii
=
(
nb
-
1
)
*
2
;
if
(
fill
)
if
(
(
coord
[
ii
]
!=
coord
[
0
]
)
||
(
coord
[
ii
+
1
]
!=
coord
[
0
])
)
{
Move_Plume_HPGL
(
wxPoint
(
coord
[
0
],
coord
[
1
]),
'D'
);
ii
=
(
nb
-
1
)
*
2
;
}
if
(
(
coord
[
ii
]
!=
coord
[
0
]
)
||
(
coord
[
ii
+
1
]
!=
coord
[
0
])
)
Plume_HPGL
(
'U'
);
Move_Plume_HPGL
(
wxPoint
(
coord
[
0
],
coord
[
1
]
),
'D'
);
}
Plume_HPGL
(
'U'
);
}
}
/**********************************************/
/**********************************************/
void
Move_Plume_HPGL
(
wxPoint
pos
,
int
plume
)
void
Move_Plume_HPGL
(
wxPoint
pos
,
int
plume
)
/**********************************************/
/**********************************************/
/*
/*
deplace la plume levee (plume = 'U') ou baissee (plume = 'D')
*
deplace la plume levee (plume = 'U') ou baissee (plume = 'D')
en position x,y
*
en position x,y
Unites en Unites DESSIN
*
Unites en Unites DESSIN
Si plume = 'Z' lever de plume sans deplacement
*
Si plume = 'Z' lever de plume sans deplacement
*/
*/
{
{
char
Line
[
256
];
char
Line
[
256
];
if
(
plume
==
'Z'
)
if
(
plume
==
'Z'
)
{
{
Plume_HPGL
(
'U'
);
Plume_HPGL
(
'U'
);
return
;
return
;
}
}
Plume_HPGL
(
plume
);
Plume_HPGL
(
plume
);
UserToDeviceCoordinate
(
pos
);
UserToDeviceCoordinate
(
pos
);
sprintf
(
Line
,
"PA %d,%d;
\n
"
,
pos
.
x
,
pos
.
y
)
;
fputs
(
Line
,
PlotOutputFile
)
;
sprintf
(
Line
,
"PA %d,%d;
\n
"
,
pos
.
x
,
pos
.
y
);
fputs
(
Line
,
PlotOutputFile
)
;
}
}
/***************************/
/***************************/
void
Plume_HPGL
(
int
plume
)
void
Plume_HPGL
(
int
plume
)
/***************************/
/***************************/
/* leve (plume = 'U') ou baisse (plume = 'D') la plume
/* leve (plume = 'U') ou baisse (plume = 'D') la plume
*/
*/
{
{
if
(
plume
==
'U'
)
if
(
plume
==
'U'
)
{
{
if
(
etat_plume
!=
'U'
)
fputs
(
"PU;"
,
PlotOutputFile
)
;
if
(
etat_plume
!=
'U'
)
etat_plume
=
'U'
;
fputs
(
"PU;"
,
PlotOutputFile
);
}
etat_plume
=
'U'
;
else
}
{
else
if
(
etat_plume
!=
'D'
)
fputs
(
"PD;"
,
PlotOutputFile
)
;
{
etat_plume
=
'D'
;
if
(
etat_plume
!=
'D'
)
}
fputs
(
"PD;"
,
PlotOutputFile
);
etat_plume
=
'D'
;
}
}
}
common/common_plotPS_functions.cpp
View file @
2da432b2
This diff is collapsed.
Click to expand it.
common/common_plot_functions.cpp
View file @
2da432b2
This diff is collapsed.
Click to expand it.
common/drawtxt.cpp
View file @
2da432b2
...
@@ -62,7 +62,7 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -62,7 +62,7 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
width
=
-
width
;
width
=
-
width
;
sketch_mode
=
TRUE
;
sketch_mode
=
TRUE
;
}
}
kk
=
0
;
kk
=
0
;
ptr
=
0
;
/* ptr = text index */
ptr
=
0
;
/* ptr = text index */
nbchar
=
Text
.
Len
();
nbchar
=
Text
.
Len
();
...
@@ -70,7 +70,7 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -70,7 +70,7 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
return
;
return
;
espacement
=
(
10
*
size_h
)
/
9
;
// this is the pitch between chars
espacement
=
(
10
*
size_h
)
/
9
;
// this is the pitch between chars
ox
=
cX
=
Pos
.
x
;
ox
=
cX
=
Pos
.
x
;
oy
=
cY
=
Pos
.
y
;
oy
=
cY
=
Pos
.
y
;
/* Do not draw the text if out of draw area! */
/* Do not draw the text if out of draw area! */
...
@@ -79,15 +79,15 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -79,15 +79,15 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
int
xm
,
ym
,
ll
,
xc
,
yc
;
int
xm
,
ym
,
ll
,
xc
,
yc
;
int
textsize
=
ABS
(
espacement
);
int
textsize
=
ABS
(
espacement
);
ll
=
(
textsize
*
nbchar
)
/
zoom
;
ll
=
(
textsize
*
nbchar
)
/
zoom
;
xc
=
GRMapX
(
cX
);
xc
=
GRMapX
(
cX
);
yc
=
GRMapY
(
cY
);
yc
=
GRMapY
(
cY
);
x0
=
panel
->
m_ClipBox
.
GetX
()
-
ll
;
x0
=
panel
->
m_ClipBox
.
GetX
()
-
ll
;
y0
=
panel
->
m_ClipBox
.
GetY
()
-
ll
;
y0
=
panel
->
m_ClipBox
.
GetY
()
-
ll
;
xm
=
panel
->
m_ClipBox
.
GetRight
()
+
ll
;
xm
=
panel
->
m_ClipBox
.
GetRight
()
+
ll
;
ym
=
panel
->
m_ClipBox
.
GetBottom
()
+
ll
;
ym
=
panel
->
m_ClipBox
.
GetBottom
()
+
ll
;
if
(
xc
<
x0
)
if
(
xc
<
x0
)
return
;
return
;
if
(
yc
<
y0
)
if
(
yc
<
y0
)
...
@@ -165,10 +165,10 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -165,10 +165,10 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
break
;
break
;
}
}
}
}
cX
+=
ux0
;
cX
+=
ux0
;
cY
+=
uy0
;
cY
+=
uy0
;
ox
=
cX
-
dx
;
ox
=
cX
-
dx
;
oy
=
cY
+
dy
;
oy
=
cY
+
dy
;
...
@@ -180,15 +180,15 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -180,15 +180,15 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
dx
=
(
espacement
*
nbchar
)
/
2
;
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* Decalage du debut du texte / centre */
dy
=
size_v
/
2
;
/* Decalage du debut du texte / centre */
ux0
=
cX
-
dx
;
ux0
=
cX
-
dx
;
uy0
=
cY
;
uy0
=
cY
;
dx
+=
cX
;
dx
+=
cX
;
dy
=
cY
;
dy
=
cY
;
RotatePoint
(
&
ux0
,
&
uy0
,
cX
,
cY
,
orient
);
RotatePoint
(
&
ux0
,
&
uy0
,
cX
,
cY
,
orient
);
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
width
,
gcolor
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
width
,
gcolor
);
return
;
return
;
...
@@ -197,21 +197,21 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -197,21 +197,21 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
#if 0
#if 0
dx = (espacement * nbchar) / 2;
dx = (espacement * nbchar) / 2;
dy = size_v / 2;/* Decalage du debut du texte / centre */
dy = size_v / 2;/* Decalage du debut du texte / centre */
ux0 = cX - dx;
ux0 = cX - dx;
uy0 = cY;
uy0 = cY;
dx += cX;
dx += cX;
dy = cY;
dy = cY;
RotatePoint( &ux0, &uy0, cX, cY, orient );
RotatePoint( &ux0, &uy0, cX, cY, orient );
RotatePoint( &dx, &dy, cX, cY, orient );
RotatePoint( &dx, &dy, cX, cY, orient );
DC->SetTextForeground( wxColour(
DC->SetTextForeground( wxColour(
ColorRefs[gcolor].r,
ColorRefs[gcolor].r,
ColorRefs[gcolor].g,
ColorRefs[gcolor].g,
ColorRefs[gcolor].b ) );
ColorRefs[gcolor].b ) );
DC->DrawRotatedText( Text, GRMapX( ux0 ), GRMapY( uy0 ), (double) orient / 10.0 );
DC->DrawRotatedText( Text, GRMapX( ux0 ), GRMapY( uy0 ), (double) orient / 10.0 );
return;
return;
#endif
#endif
...
@@ -256,24 +256,24 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -256,24 +256,24 @@ void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC,
break
;
break
;
case
'D'
:
case
'D'
:
plume
=
f_cod
;
plume
=
f_cod
;
break
;
break
;
default
:
default
:
{
{
k1
=
f_cod
;
/* trace sur axe V */
k1
=
f_cod
;
/* trace sur axe V */
k1
=
-
(
(
k1
*
size_v
)
/
9
);
k1
=
-
(
(
k1
*
size_v
)
/
9
);
ptcar
++
;
ptcar
++
;
f_cod
=
*
ptcar
;
f_cod
=
*
ptcar
;
k2
=
f_cod
;
/* trace sur axe H */
k2
=
f_cod
;
/* trace sur axe H */
k2
=
(
k2
*
size_h
)
/
9
;
k2
=
(
k2
*
size_h
)
/
9
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
coord
[
ii
++
]
=
dx
;
coord
[
ii
++
]
=
dx
;
coord
[
ii
++
]
=
dy
;
coord
[
ii
++
]
=
dy
;
break
;
break
;
}
}
}
}
...
@@ -326,7 +326,7 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
...
@@ -326,7 +326,7 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
return
;
return
;
}
}
if
(
(
gcolor
>=
0
)
&&
(
format_plot
==
PLOT_FORMAT_POST
)
)
if
(
gcolor
>=
0
&&
IsPostScript
(
format_plot
)
)
SetColorMapPS
(
gcolor
);
SetColorMapPS
(
gcolor
);
size_h
=
Size
.
x
;
size_h
=
Size
.
x
;
...
@@ -336,14 +336,14 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
...
@@ -336,14 +336,14 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
if
(
size_v
==
0
)
if
(
size_v
==
0
)
size_v
=
DEFAULT_SIZE_TEXT
;
size_v
=
DEFAULT_SIZE_TEXT
;
kk
=
0
;
kk
=
0
;
ptr
=
0
;
/* ptr = text index */
ptr
=
0
;
/* ptr = text index */
/* calcul de la position du debut des textes: ox et oy */
/* calcul de la position du debut des textes: ox et oy */
nbchar
=
Text
.
Len
();
nbchar
=
Text
.
Len
();
espacement
=
(
10
*
size_h
)
/
9
;
espacement
=
(
10
*
size_h
)
/
9
;
ox
=
cX
=
Pos
.
x
;
ox
=
cX
=
Pos
.
x
;
oy
=
cY
=
Pos
.
y
;
oy
=
cY
=
Pos
.
y
;
/* Calcul du cadrage du texte */
/* Calcul du cadrage du texte */
...
@@ -412,11 +412,11 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
...
@@ -412,11 +412,11 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
break
;
break
;
}
}
}
}
cX
+=
ux0
;
cX
+=
ux0
;
cY
+=
uy0
;
/* cX, cY = coord du centre du texte */
cY
+=
uy0
;
/* cX, cY = coord du centre du texte */
ox
=
-
dx
;
ox
=
-
dx
;
oy
=
+
dy
;
/* ox, oy = coord debut texte, relativement au centre */
oy
=
+
dy
;
/* ox, oy = coord debut texte, relativement au centre */
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
...
@@ -446,17 +446,17 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
...
@@ -446,17 +446,17 @@ void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor,
k1
=
-
(
k1
*
size_v
)
/
9
;
k1
=
-
(
k1
*
size_v
)
/
9
;
ptcar
++
;
ptcar
++
;
f_cod
=
*
ptcar
;
f_cod
=
*
ptcar
;
k2
=
f_cod
;
/* trace sur axe H */
k2
=
f_cod
;
/* trace sur axe H */
k2
=
(
k2
*
size_h
)
/
9
;
k2
=
(
k2
*
size_h
)
/
9
;
dx
=
k2
+
ox
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
dy
=
k1
+
oy
;
RotatePoint
(
&
dx
,
&
dy
,
orient
);
RotatePoint
(
&
dx
,
&
dy
,
orient
);
FctPlume
(
wxPoint
(
cX
+
dx
,
cY
+
dy
),
plume
);
FctPlume
(
wxPoint
(
cX
+
dx
,
cY
+
dy
),
plume
);
x0
=
k2
;
x0
=
k2
;
y0
=
k1
;
y0
=
k1
;
break
;
break
;
}
}
...
...
eeschema/eestring.cpp
View file @
2da432b2
This diff is collapsed.
Click to expand it.
eeschema/plot.cpp
View file @
2da432b2
...
@@ -54,7 +54,6 @@ void Move_Plume( wxPoint pos, int plume )
...
@@ -54,7 +54,6 @@ void Move_Plume( wxPoint pos, int plume )
break
;
break
;
case
PLOT_FORMAT_POST
:
case
PLOT_FORMAT_POST
:
case
PLOT_FORMAT_POST_A4
:
LineTo_PS
(
pos
,
plume
);
LineTo_PS
(
pos
,
plume
);
break
;
break
;
}
}
...
@@ -69,7 +68,6 @@ void SetCurrentLineWidth( int width )
...
@@ -69,7 +68,6 @@ void SetCurrentLineWidth( int width )
break
;
break
;
case
PLOT_FORMAT_POST
:
case
PLOT_FORMAT_POST
:
case
PLOT_FORMAT_POST_A4
:
SetCurrentLineWidthPS
(
width
);
SetCurrentLineWidthPS
(
width
);
break
;
break
;
}
}
...
...
include/plot_common.h
View file @
2da432b2
/********************/
/********************/
/* plot_common.h */
/* plot_common.h */
/********************/
/********************/
#ifndef PLOT_COMMON_H
#ifndef PLOT_COMMON_H
#define PLOT_COMMON_H
#define PLOT_COMMON_H
...
@@ -12,12 +12,22 @@
...
@@ -12,12 +12,22 @@
#endif
#endif
typedef
enum
{
/**
PLOT_FORMAT_HPGL
,
* Enum PlotFormat
PLOT_FORMAT_POST
,
* must be kept in order of the radio buttons in the plot panel/window.
PLOT_FORMAT_GERBER
,
*/
PLOT_FORMAT_POST_A4
enum
PlotFormat
{
}
PlotFormat
;
PLOT_FORMAT_HPGL
,
PLOT_FORMAT_GERBER
,
PLOT_FORMAT_POST
,
};
static
inline
bool
IsPostScript
(
int
aFormat
)
{
return
aFormat
==
PLOT_FORMAT_POST
;
}
const
int
PLOT_MIROIR
=
1
;
const
int
PLOT_MIROIR
=
1
;
...
@@ -25,47 +35,59 @@ const int PLOT_MIROIR = 1;
...
@@ -25,47 +35,59 @@ const int PLOT_MIROIR = 1;
/*******************************/
/*******************************/
/* common_plot_functions.cpp */
/* common_plot_functions.cpp */
/*******************************/
/*******************************/
void
SetPlotScale
(
double
xscale
,
double
yscale
);
// Set the plot scale for the current plotting)
void
SetPlotScale
(
double
xscale
,
double
yscale
);
// Set the plot scale for the current plotting)
void
SetPlotOffset
(
wxPoint
offset
);
// Set the plot offset for the current plotting)
void
SetPlotOffset
(
wxPoint
offset
);
// Set the plot offset for the current plotting)
void
InitPlotParametresGERBER
(
wxPoint
offset
,
double
xscale
,
double
yscale
);
void
InitPlotParametresGERBER
(
wxPoint
offset
,
double
xscale
,
double
yscale
);
void
PlotWorkSheet
(
int
format_plot
,
BASE_SCREEN
*
screen
);
void
PlotWorkSheet
(
int
format_plot
,
BASE_SCREEN
*
screen
);
void
UserToDeviceCoordinate
(
wxPoint
&
pos
);
void
UserToDeviceCoordinate
(
wxPoint
&
pos
);
// modifie les coord pos.x et pos.y pour le trace selon l'orientation, l'echelle, les offsets de trace
void
UserToDeviceSize
(
wxSize
&
size
);
// modifie les coord pos.x et pos.y pour le trace selon l'orientation, l'echelle, les offsets de trace
// modifie les dimension size.x et size.y pour le trace selon l'echelle
void
UserToDeviceSize
(
wxSize
&
size
);
void
ForcePenReinit
();
// set the flag g_CurrentPenWidth to -1 in order
// modifie les dimension size.x et size.y pour le trace selon l'echelle
// to force a pen width redefinition for the next draw command
void
ForcePenReinit
();
// set the flag g_CurrentPenWidth to -1 in order
// to force a pen width redefinition for the next draw command
/*******************************/
/*******************************/
/* common_plotPS_functions.cpp */
/* common_plotPS_functions.cpp */
/*******************************/
/*******************************/
void
SetCurrentLineWidthPS
(
int
width
);
void
SetCurrentLineWidthPS
(
int
width
);
void
InitPlotParametresPS
(
wxPoint
offset
,
Ki_PageDescr
*
sheet
,
double
xscale
,
double
yscale
,
int
orient
=
0
);
void
InitPlotParametresPS
(
wxPoint
offset
,
void
SetDefaultLineWidthPS
(
int
width
);
Ki_PageDescr
*
sheet
,
void
PlotCircle_PS
(
wxPoint
pos
,
int
diametre
,
int
width
=
-
1
);
double
xscale
,
void
PlotArcPS
(
wxPoint
centre
,
int
StAngle
,
int
EndAngle
,
int
rayon
,
int
width
=
-
1
);
double
yscale
,
// Plot an arc: StAngle, EndAngle = start and end arc in 0.1 degree
int
orient
=
0
);
void
PlotPolyPS
(
int
nb_segm
,
int
*
coord
,
int
fill
,
int
width
=
-
1
);
void
SetDefaultLineWidthPS
(
int
width
);
void
PlotFilledSegmentPS
(
wxPoint
start
,
wxPoint
end
,
int
width
);
void
PlotCircle_PS
(
wxPoint
pos
,
int
diametre
,
int
width
=
-
1
);
void
LineTo_PS
(
wxPoint
pos
,
int
plume
);
void
PlotArcPS
(
wxPoint
centre
,
int
StAngle
,
int
EndAngle
,
int
rayon
,
int
width
=
-
1
);
void
PrintHeaderPS
(
FILE
*
file
,
const
wxString
&
Creator
,
const
wxString
&
FileName
,
int
PageCount
,
int
BBox
[
4
],
int
PaperOrientation
);
bool
CloseFilePS
(
FILE
*
plot_file
);
// Plot an arc: StAngle, EndAngle = start and end arc in 0.1 degree
void
SetColorMapPS
(
int
color
);
void
PlotPolyPS
(
int
nb_segm
,
int
*
coord
,
int
fill
,
int
width
=
-
1
);
void
PlotFilledSegmentPS
(
wxPoint
start
,
wxPoint
end
,
int
width
);
void
LineTo_PS
(
wxPoint
pos
,
int
plume
);
void
PrintHeaderPS
(
FILE
*
file
,
const
wxString
&
Creator
,
const
wxString
&
FileName
,
int
PageCount
,
int
BBox
[
4
],
int
PaperOrientation
);
bool
CloseFilePS
(
FILE
*
plot_file
);
void
SetColorMapPS
(
int
color
);
/*********************************/
/*********************************/
/* common_plotHPGL_functions.cpp */
/* common_plotHPGL_functions.cpp */
/*********************************/
/*********************************/
void
InitPlotParametresHPGL
(
wxPoint
offset
,
double
xscale
,
double
yscale
,
int
orient
=
0
);
void
InitPlotParametresHPGL
(
wxPoint
offset
,
double
xscale
,
double
yscale
,
int
orient
=
0
);
bool
PrintHeaderHPGL
(
FILE
*
plot_file
,
int
pen_speed
,
int
pen_num
);
bool
PrintHeaderHPGL
(
FILE
*
plot_file
,
int
pen_speed
,
int
pen_num
);
bool
CloseFileHPGL
(
FILE
*
plot_file
);
bool
CloseFileHPGL
(
FILE
*
plot_file
);
void
PlotCircle_HPGL
(
wxPoint
centre
,
int
diameter
,
int
width
=
-
1
);
void
PlotCircle_HPGL
(
wxPoint
centre
,
int
diameter
,
int
width
=
-
1
);
void
PlotArcHPGL
(
wxPoint
centre
,
int
StAngle
,
int
EndAngle
,
int
rayon
,
int
width
=
-
1
);
void
PlotArcHPGL
(
wxPoint
centre
,
int
StAngle
,
int
EndAngle
,
int
rayon
,
int
width
=
-
1
);
void
PlotPolyHPGL
(
int
nb
,
int
*
coord
,
int
fill
,
int
width
=
-
1
);
void
PlotPolyHPGL
(
int
nb
,
int
*
coord
,
int
fill
,
int
width
=
-
1
);
void
Move_Plume_HPGL
(
wxPoint
pos
,
int
plume
);
void
Move_Plume_HPGL
(
wxPoint
pos
,
int
plume
);
void
Plume_HPGL
(
int
plume
);
void
Plume_HPGL
(
int
plume
);
#endif // PLOT_COMMON_H
#endif // PLOT_COMMON_H
include/wxPcbStruct.h
View file @
2da432b2
...
@@ -258,7 +258,7 @@ public:
...
@@ -258,7 +258,7 @@ public:
void
Genere_GERBER
(
const
wxString
&
FullFileName
,
int
Layer
,
void
Genere_GERBER
(
const
wxString
&
FullFileName
,
int
Layer
,
bool
PlotOriginIsAuxAxis
);
bool
PlotOriginIsAuxAxis
);
void
Genere_HPGL
(
const
wxString
&
FullFileName
,
int
Layer
);
void
Genere_HPGL
(
const
wxString
&
FullFileName
,
int
Layer
);
void
Genere_PS
(
const
wxString
&
FullFileName
,
int
Layer
);
void
Genere_PS
(
const
wxString
&
FullFileName
,
int
Layer
,
bool
useA4
);
void
Plot_Layer_HPGL
(
FILE
*
File
,
int
masque_layer
,
void
Plot_Layer_HPGL
(
FILE
*
File
,
int
masque_layer
,
int
garde
,
int
tracevia
,
int
modetrace
);
int
garde
,
int
tracevia
,
int
modetrace
);
void
Plot_Layer_GERBER
(
FILE
*
File
,
int
masque_layer
,
void
Plot_Layer_GERBER
(
FILE
*
File
,
int
masque_layer
,
...
@@ -413,13 +413,13 @@ public:
...
@@ -413,13 +413,13 @@ public:
*/
*/
void
ImportSpecctraDesign
(
wxCommandEvent
&
event
);
void
ImportSpecctraDesign
(
wxCommandEvent
&
event
);
/**
/**
* Function Access_to_External_Tool
* Function Access_to_External_Tool
* Run an external tool (like freeroute )
* Run an external tool (like freeroute )
*/
*/
void
Access_to_External_Tool
(
wxCommandEvent
&
event
);
void
Access_to_External_Tool
(
wxCommandEvent
&
event
);
/* Fonctions specifiques */
/* Fonctions specifiques */
MODULE
*
ListAndSelectModuleName
();
MODULE
*
ListAndSelectModuleName
();
void
Liste_Equipot
(
wxCommandEvent
&
event
);
void
Liste_Equipot
(
wxCommandEvent
&
event
);
void
Swap_Layers
(
wxCommandEvent
&
event
);
void
Swap_Layers
(
wxCommandEvent
&
event
);
...
...
pcbnew/gen_drill_report_files.cpp
View file @
2da432b2
...
@@ -158,7 +158,7 @@ void GenDrillMapFile( BOARD* aPcb, FILE* aFile, const wxString& aFullFileName, w
...
@@ -158,7 +158,7 @@ void GenDrillMapFile( BOARD* aPcb, FILE* aFile, const wxString& aFullFileName, w
TextWidth
=
50
;
// Set Drill Symbols width in 1/10000 mils
TextWidth
=
50
;
// Set Drill Symbols width in 1/10000 mils
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
{
{
sprintf
(
line
,
"%d setlinewidth
\n
"
,
TextWidth
);
sprintf
(
line
,
"%d setlinewidth
\n
"
,
TextWidth
);
fputs
(
line
,
aFile
);
fputs
(
line
,
aFile
);
...
@@ -429,7 +429,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -429,7 +429,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
x0
=
position
.
x
;
y0
=
position
.
y
;
x0
=
position
.
x
;
y0
=
position
.
y
;
FctPlume
=
Move_Plume_HPGL
;
FctPlume
=
Move_Plume_HPGL
;
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
FctPlume
=
LineTo_PS
;
FctPlume
=
LineTo_PS
;
switch
(
aShapeId
)
switch
(
aShapeId
)
...
@@ -444,7 +444,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -444,7 +444,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
case
1
:
/* Cercle */
case
1
:
/* Cercle */
if
(
format
==
PLOT_FORMAT_HPGL
)
if
(
format
==
PLOT_FORMAT_HPGL
)
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
break
;
break
;
...
@@ -462,7 +462,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -462,7 +462,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
FctPlume
(
wxPoint
(
x0
-
rayon
,
y0
+
rayon
),
'D'
);
FctPlume
(
wxPoint
(
x0
-
rayon
,
y0
+
rayon
),
'D'
);
if
(
format
==
PLOT_FORMAT_HPGL
)
if
(
format
==
PLOT_FORMAT_HPGL
)
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
break
;
break
;
...
@@ -471,7 +471,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -471,7 +471,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
FctPlume
(
wxPoint
(
x0
+
rayon
,
y0
),
'D'
);
FctPlume
(
wxPoint
(
x0
+
rayon
,
y0
),
'D'
);
if
(
format
==
PLOT_FORMAT_HPGL
)
if
(
format
==
PLOT_FORMAT_HPGL
)
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
break
;
break
;
...
@@ -480,7 +480,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -480,7 +480,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
FctPlume
(
wxPoint
(
x0
,
y0
+
rayon
),
'D'
);
FctPlume
(
wxPoint
(
x0
,
y0
+
rayon
),
'D'
);
if
(
format
==
PLOT_FORMAT_HPGL
)
if
(
format
==
PLOT_FORMAT_HPGL
)
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
break
;
break
;
...
@@ -489,7 +489,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -489,7 +489,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
0
,
0
),
0
,
FILAIRE
);
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
0
,
0
),
0
,
FILAIRE
);
FILAIRE
);
...
@@ -500,7 +500,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -500,7 +500,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
...
@@ -515,7 +515,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -515,7 +515,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
0
,
0
),
0
,
FILAIRE
);
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
0
,
0
),
0
,
FILAIRE
);
FILAIRE
);
...
@@ -530,7 +530,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -530,7 +530,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
...
@@ -543,7 +543,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -543,7 +543,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
0
,
0
),
0
,
FILAIRE
);
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
0
,
0
),
0
,
FILAIRE
);
FILAIRE
);
...
@@ -556,7 +556,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -556,7 +556,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
...
@@ -569,7 +569,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -569,7 +569,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
trace_1_pad_TRAPEZE_POST
(
wxPoint
(
x0
,
y0
),
wxSize
(
rayon
,
rayon
),
wxSize
(
0
,
0
),
450
,
0
),
450
,
FILAIRE
);
FILAIRE
);
...
@@ -578,7 +578,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
...
@@ -578,7 +578,7 @@ void PlotDrillSymbol( const wxPoint& position, int diametre, int aShapeId, int f
default
:
default
:
if
(
format
==
PLOT_FORMAT_HPGL
)
if
(
format
==
PLOT_FORMAT_HPGL
)
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_HPGL
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
if
(
format
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format
)
)
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
trace_1_pastille_RONDE_POST
(
wxPoint
(
x0
,
y0
),
diametre
,
FILAIRE
);
break
;
break
;
}
}
...
@@ -654,21 +654,21 @@ void GenDrillReportFile( FILE* aFile, BOARD* aPcb, const wxString& aBoardFilenam
...
@@ -654,21 +654,21 @@ void GenDrillReportFile( FILE* aFile, BOARD* aPcb, const wxString& aBoardFilenam
TotalHoleCount
=
0
;
TotalHoleCount
=
0
;
if
(
gen_through_holes
)
if
(
gen_through_holes
)
{
{
sprintf
(
line
,
"Drill report for through holes :
\n
"
);
sprintf
(
line
,
"Drill report for through holes :
\n
"
);
}
}
else
else
{
{
if
(
layer1
==
COPPER_LAYER_N
)
// First partial hole list
if
(
layer1
==
COPPER_LAYER_N
)
// First partial hole list
{
{
sprintf
(
line
,
"Drill report for buried and blind vias :
\n\n
"
);
sprintf
(
line
,
"Drill report for buried and blind vias :
\n\n
"
);
fputs
(
line
,
aFile
);
fputs
(
line
,
aFile
);
}
}
sprintf
(
line
,
"Drill report for holes from layer %s to layer %s
\n
"
,
sprintf
(
line
,
"Drill report for holes from layer %s to layer %s
\n
"
,
CONV_TO_UTF8
(
aPcb
->
GetLayerName
(
layer1
)
),
CONV_TO_UTF8
(
aPcb
->
GetLayerName
(
layer1
)
),
CONV_TO_UTF8
(
aPcb
->
GetLayerName
(
layer2
)
)
);
CONV_TO_UTF8
(
aPcb
->
GetLayerName
(
layer2
)
)
);
}
}
fputs
(
line
,
aFile
);
fputs
(
line
,
aFile
);
...
...
pcbnew/gendrill.cpp
View file @
2da432b2
...
@@ -287,64 +287,64 @@ void WinEDA_DrillFrame::GenDrillFiles( wxCommandEvent& event )
...
@@ -287,64 +287,64 @@ void WinEDA_DrillFrame::GenDrillFiles( wxCommandEvent& event )
Build_Holes_List
(
m_Parent
->
m_Pcb
,
s_HoleListBuffer
,
s_ToolListBuffer
,
Build_Holes_List
(
m_Parent
->
m_Pcb
,
s_HoleListBuffer
,
s_ToolListBuffer
,
layer1
,
layer2
,
gen_through_holes
?
false
:
true
);
layer1
,
layer2
,
gen_through_holes
?
false
:
true
);
if
(
s_ToolListBuffer
.
size
()
>
0
)
//holes?
if
(
s_ToolListBuffer
.
size
()
>
0
)
//holes?
{
{
FullFileName
=
m_Parent
->
m_CurrentScreen
->
m_FileName
;
FullFileName
=
m_Parent
->
m_CurrentScreen
->
m_FileName
;
layer_extend
.
Empty
();
layer_extend
.
Empty
();
if
(
!
gen_through_holes
)
if
(
!
gen_through_holes
)
{
{
if
(
layer1
==
COPPER_LAYER_N
)
if
(
layer1
==
COPPER_LAYER_N
)
layer_extend
<<
wxT
(
"-copper"
);
layer_extend
<<
wxT
(
"-copper"
);
else
else
layer_extend
<<
wxT
(
"-inner"
)
<<
layer1
;
layer_extend
<<
wxT
(
"-inner"
)
<<
layer1
;
if
(
layer2
==
LAYER_CMP_N
)
if
(
layer2
==
LAYER_CMP_N
)
layer_extend
<<
wxT
(
"-cmp"
);
layer_extend
<<
wxT
(
"-cmp"
);
else
else
layer_extend
<<
wxT
(
"-inner"
)
<<
layer2
;
layer_extend
<<
wxT
(
"-inner"
)
<<
layer2
;
}
}
layer_extend
<<
Ext
;
layer_extend
<<
Ext
;
ChangeFileNameExt
(
FullFileName
,
layer_extend
);
ChangeFileNameExt
(
FullFileName
,
layer_extend
);
FullFileName
=
EDA_FileSelector
(
_
(
"Drill file"
),
FullFileName
=
EDA_FileSelector
(
_
(
"Drill file"
),
wxEmptyString
,
/* Chemin par defaut */
wxEmptyString
,
/* Chemin par defaut */
FullFileName
,
/* nom fichier par defaut */
FullFileName
,
/* nom fichier par defaut */
Ext
,
/* extension par defaut */
Ext
,
/* extension par defaut */
Mask
,
/* Masque d'affichage */
Mask
,
/* Masque d'affichage */
this
,
this
,
wxFD_SAVE
,
wxFD_SAVE
,
TRUE
TRUE
);
);
if
(
FullFileName
!=
wxEmptyString
)
if
(
FullFileName
!=
wxEmptyString
)
{
{
dest
=
wxFopen
(
FullFileName
,
wxT
(
"w"
)
);
dest
=
wxFopen
(
FullFileName
,
wxT
(
"w"
)
);
if
(
dest
==
0
)
if
(
dest
==
0
)
{
{
msg
=
_
(
"Unable to create file "
)
+
FullFileName
;
msg
=
_
(
"Unable to create file "
)
+
FullFileName
;
DisplayError
(
this
,
msg
);
DisplayError
(
this
,
msg
);
EndModal
(
0
);
EndModal
(
0
);
return
;
return
;
}
}
Create_Drill_File_EXCELLON
(
s_HoleListBuffer
,
s_ToolListBuffer
);
Create_Drill_File_EXCELLON
(
s_HoleListBuffer
,
s_ToolListBuffer
);
}
}
switch
(
m_Choice_Drill_Map
->
GetSelection
()
)
switch
(
m_Choice_Drill_Map
->
GetSelection
()
)
{
{
case
0
:
case
0
:
break
;
break
;
case
1
:
case
1
:
GenDrillMap
(
FullFileName
,
s_HoleListBuffer
,
s_ToolListBuffer
,
PLOT_FORMAT_HPGL
);
GenDrillMap
(
FullFileName
,
s_HoleListBuffer
,
s_ToolListBuffer
,
PLOT_FORMAT_HPGL
);
break
;
break
;
case
2
:
case
2
:
GenDrillMap
(
FullFileName
,
s_HoleListBuffer
,
s_ToolListBuffer
,
PLOT_FORMAT_POST
);
GenDrillMap
(
FullFileName
,
s_HoleListBuffer
,
s_ToolListBuffer
,
PLOT_FORMAT_POST
);
break
;
break
;
}
}
if
(
!
ExistsBuriedVias
)
if
(
!
ExistsBuriedVias
)
break
;
break
;
}
}
if
(
gen_through_holes
)
if
(
gen_through_holes
)
layer2
=
layer1
+
1
;
layer2
=
layer1
+
1
;
else
else
...
...
pcbnew/pcbplot.cpp
View file @
2da432b2
...
@@ -90,7 +90,29 @@ public:
...
@@ -90,7 +90,29 @@ public:
WinEDA_ValueCtrl
*
m_HPGLPenOverlayOpt
;
WinEDA_ValueCtrl
*
m_HPGLPenOverlayOpt
;
WinEDA_DFloatValueCtrl
*
m_FineAdjustXscaleOpt
,
*
m_FineAdjustYscaleOpt
;
WinEDA_DFloatValueCtrl
*
m_FineAdjustXscaleOpt
,
*
m_FineAdjustYscaleOpt
;
double
m_XScaleAdjust
,
m_YScaleAdjust
;
double
m_XScaleAdjust
,
m_YScaleAdjust
;
int
m_PlotFormat
;
bool
useA4
()
{
return
m_PlotFormatOpt
->
GetSelection
()
==
3
;
}
/**
* Function getFormat
* returns one of the values from the PlotFormat enum. If the 4th
* radio button is selected, map this back to postscript.
*/
PlotFormat
getFormat
()
{
int
radioNdx
=
m_PlotFormatOpt
->
GetSelection
();
// change the A4 to the simple postscript, according to the PlotFormat enum
if
(
radioNdx
==
3
)
radioNdx
=
2
;
return
PlotFormat
(
radioNdx
);
}
public
:
public
:
WinEDA_PlotFrame
(
WinEDA_BasePcbFrame
*
parent
);
WinEDA_PlotFrame
(
WinEDA_BasePcbFrame
*
parent
);
...
@@ -137,7 +159,6 @@ WinEDA_PlotFrame::WinEDA_PlotFrame( WinEDA_BasePcbFrame* parent ) :
...
@@ -137,7 +159,6 @@ WinEDA_PlotFrame::WinEDA_PlotFrame( WinEDA_BasePcbFrame* parent ) :
SetFont
(
*
g_DialogFont
);
SetFont
(
*
g_DialogFont
);
Centre
();
Centre
();
m_PlotFormat
=
format_plot
;
m_Plot_Sheet_Ref
=
NULL
;
m_Plot_Sheet_Ref
=
NULL
;
wxBoxSizer
*
MainBoxSizer
=
new
wxBoxSizer
(
wxHORIZONTAL
);
wxBoxSizer
*
MainBoxSizer
=
new
wxBoxSizer
(
wxHORIZONTAL
);
...
@@ -169,33 +190,16 @@ WinEDA_PlotFrame::WinEDA_PlotFrame( WinEDA_BasePcbFrame* parent ) :
...
@@ -169,33 +190,16 @@ WinEDA_PlotFrame::WinEDA_PlotFrame( WinEDA_BasePcbFrame* parent ) :
4
,
fmtmsg
,
1
,
wxRA_SPECIFY_COLS
);
4
,
fmtmsg
,
1
,
wxRA_SPECIFY_COLS
);
MidRightBoxSizer
->
Add
(
m_PlotFormatOpt
,
0
,
wxGROW
|
wxALL
,
5
);
MidRightBoxSizer
->
Add
(
m_PlotFormatOpt
,
0
,
wxGROW
|
wxALL
,
5
);
i
f
(
config
&&
config
->
Read
(
OPTKEY_OUTPUT_FORMAT
,
&
m_PlotFormat
)
)
i
nt
myFormatIndex
=
format_plot
;
m_PlotFormatOpt
->
SetSelection
(
m_PlotFormat
);
else
if
(
config
)
{
{
switch
(
m_PlotFormat
)
config
->
Read
(
OPTKEY_OUTPUT_FORMAT
,
&
myFormatIndex
);
{
case
PLOT_FORMAT_HPGL
:
m_PlotFormatOpt
->
SetSelection
(
0
);
break
;
case
PLOT_FORMAT_GERBER
:
m_PlotFormatOpt
->
SetSelection
(
1
);
break
;
default
:
// ( PLOT_FORMAT_POST or PLOT_FORMAT_POST_A4 )
// As m_PlotFormat is never set to a value of PLOT_FORMAT_POST_A4,
// use the value of g_ForcePlotPS_On_A4 to determine whether the
// "Postscript" or "Postscipt A4" radiobutton had been selected
// previously (and thus which button should be reselected now).
if
(
g_ForcePlotPS_On_A4
)
m_PlotFormatOpt
->
SetSelection
(
3
);
else
m_PlotFormatOpt
->
SetSelection
(
2
);
break
;
}
}
}
m_PlotFormatOpt
->
SetSelection
(
myFormatIndex
);
// Creation des menus d'option du format GERBER
// Creation des menus d'option du format GERBER
m_GerbSpotSizeMinOpt
=
new
WinEDA_ValueCtrl
(
this
,
_
(
"Spot min"
),
m_GerbSpotSizeMinOpt
=
new
WinEDA_ValueCtrl
(
this
,
_
(
"Spot min"
),
spot_mini
,
g_UnitMetric
,
MidRightBoxSizer
,
spot_mini
,
g_UnitMetric
,
MidRightBoxSizer
,
...
@@ -490,18 +494,10 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
...
@@ -490,18 +494,10 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
/* active ou dsactive les diffrents menus d'option selon le standard choisi
/* active ou dsactive les diffrents menus d'option selon le standard choisi
*/
*/
{
{
int
format
;
int
format
=
getFormat
();
static
const
int
format_list
[]
=
{
PLOT_FORMAT_HPGL
,
PLOT_FORMAT_GERBER
,
PLOT_FORMAT_POST
,
PLOT_FORMAT_POST_A4
};
format
=
format_list
[
m_PlotFormatOpt
->
GetSelection
()];
switch
(
format
)
switch
(
format
)
{
{
case
PLOT_FORMAT_POST_A4
:
case
PLOT_FORMAT_POST
:
case
PLOT_FORMAT_POST
:
default
:
default
:
m_Drill_Shape_Opt
->
Enable
(
true
);
m_Drill_Shape_Opt
->
Enable
(
true
);
...
@@ -519,8 +515,6 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
...
@@ -519,8 +515,6 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
m_Scale_Opt
->
Enable
(
true
);
m_Scale_Opt
->
Enable
(
true
);
m_FineAdjustXscaleOpt
->
Enable
(
true
);
m_FineAdjustXscaleOpt
->
Enable
(
true
);
m_FineAdjustYscaleOpt
->
Enable
(
true
);
m_FineAdjustYscaleOpt
->
Enable
(
true
);
m_PlotFormat
=
PLOT_FORMAT_POST
;
g_ForcePlotPS_On_A4
=
(
format
==
PLOT_FORMAT_POST_A4
);
m_Plot_PS_Negative
->
Enable
(
true
);
m_Plot_PS_Negative
->
Enable
(
true
);
break
;
break
;
...
@@ -540,7 +534,6 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
...
@@ -540,7 +534,6 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
m_Scale_Opt
->
Enable
(
false
);
m_Scale_Opt
->
Enable
(
false
);
m_FineAdjustXscaleOpt
->
Enable
(
false
);
m_FineAdjustXscaleOpt
->
Enable
(
false
);
m_FineAdjustYscaleOpt
->
Enable
(
false
);
m_FineAdjustYscaleOpt
->
Enable
(
false
);
m_PlotFormat
=
PLOT_FORMAT_GERBER
;
m_Plot_PS_Negative
->
Enable
(
false
);
m_Plot_PS_Negative
->
Enable
(
false
);
break
;
break
;
...
@@ -560,12 +553,11 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
...
@@ -560,12 +553,11 @@ void WinEDA_PlotFrame::SetCommands( wxCommandEvent& event )
m_Scale_Opt
->
Enable
(
true
);
m_Scale_Opt
->
Enable
(
true
);
m_FineAdjustXscaleOpt
->
Enable
(
false
);
m_FineAdjustXscaleOpt
->
Enable
(
false
);
m_FineAdjustYscaleOpt
->
Enable
(
false
);
m_FineAdjustYscaleOpt
->
Enable
(
false
);
m_PlotFormat
=
PLOT_FORMAT_HPGL
;
m_Plot_PS_Negative
->
Enable
(
false
);
m_Plot_PS_Negative
->
Enable
(
false
);
break
;
break
;
}
}
format_plot
=
m_PlotF
ormat
;
format_plot
=
f
ormat
;
}
}
...
@@ -616,8 +608,8 @@ void WinEDA_PlotFrame::SaveOptPlot( wxCommandEvent& event )
...
@@ -616,8 +608,8 @@ void WinEDA_PlotFrame::SaveOptPlot( wxCommandEvent& event )
config
->
Write
(
OPTKEY_PADS_ON_SILKSCREEN
,
PlotPadsOnSilkLayer
);
config
->
Write
(
OPTKEY_PADS_ON_SILKSCREEN
,
PlotPadsOnSilkLayer
);
config
->
Write
(
OPTKEY_ALWAYS_PRINT_PADS
,
Plot_Pads_All_Layers
);
config
->
Write
(
OPTKEY_ALWAYS_PRINT_PADS
,
Plot_Pads_All_Layers
);
m_PlotFormat
=
m_PlotFormatOpt
->
GetSelection
();
int
formatNdx
=
m_PlotFormatOpt
->
GetSelection
();
config
->
Write
(
OPTKEY_OUTPUT_FORMAT
,
m_PlotFormat
);
config
->
Write
(
OPTKEY_OUTPUT_FORMAT
,
formatNdx
);
wxString
layerKey
;
wxString
layerKey
;
for
(
int
layer
=
0
;
layer
<
NB_LAYERS
;
++
layer
)
for
(
int
layer
=
0
;
layer
<
NB_LAYERS
;
++
layer
)
...
@@ -668,12 +660,15 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
...
@@ -668,12 +660,15 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
BaseFileName
=
m_Parent
->
GetScreen
()
->
m_FileName
;
BaseFileName
=
m_Parent
->
GetScreen
()
->
m_FileName
;
ChangeFileNameExt
(
BaseFileName
,
wxT
(
"-"
)
);
ChangeFileNameExt
(
BaseFileName
,
wxT
(
"-"
)
);
switch
(
m_PlotFormat
)
int
format
=
getFormat
();
switch
(
format
)
{
{
case
PLOT_FORMAT_POST
:
case
PLOT_FORMAT_POST
:
ext
=
wxT
(
".ps"
);
ext
=
wxT
(
".ps"
);
break
;
break
;
default
:
case
PLOT_FORMAT_GERBER
:
case
PLOT_FORMAT_GERBER
:
ext
=
wxT
(
".pho"
);
ext
=
wxT
(
".pho"
);
break
;
break
;
...
@@ -695,12 +690,13 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
...
@@ -695,12 +690,13 @@ void WinEDA_PlotFrame::Plot( wxCommandEvent& event )
// Calcul du nom du fichier
// Calcul du nom du fichier
FullFileName
=
BaseFileName
+
board
->
GetLayerName
(
layer_to_plot
)
+
ext
;
FullFileName
=
BaseFileName
+
board
->
GetLayerName
(
layer_to_plot
)
+
ext
;
switch
(
m_PlotF
ormat
)
switch
(
f
ormat
)
{
{
case
PLOT_FORMAT_POST
:
case
PLOT_FORMAT_POST
:
m_Parent
->
Genere_PS
(
FullFileName
,
layer_to_plot
);
m_Parent
->
Genere_PS
(
FullFileName
,
layer_to_plot
,
useA4
()
);
break
;
break
;
default
:
case
PLOT_FORMAT_GERBER
:
case
PLOT_FORMAT_GERBER
:
m_Parent
->
Genere_GERBER
(
FullFileName
,
layer_to_plot
,
s_PlotOriginIsAuxAxis
);
m_Parent
->
Genere_GERBER
(
FullFileName
,
layer_to_plot
,
s_PlotOriginIsAuxAxis
);
break
;
break
;
...
...
pcbnew/pcbplot.h
View file @
2da432b2
/************/
/************/
/* pcbplot.h*/
/* pcbplot.h*/
/************/
/************/
#ifndef PCBPLOT_H
#ifndef PCBPLOT_H
#define PCBPLOT_H
#define PCBPLOT_H
...
@@ -60,9 +60,9 @@ eda_global bool PlotPadsOnSilkLayer /* Plot pads sur couche serigraphie */
...
@@ -60,9 +60,9 @@ eda_global bool PlotPadsOnSilkLayer /* Plot pads sur couche serigraphie */
#endif
#endif
;
;
eda_global
bool
Plot_Pads_All_Layers
;
/* Plot pads meme n'appartenant pas a la
eda_global
bool
Plot_Pads_All_Layers
;
/* Plot pads meme n'appartenant pas a la
couche ( utile pour serigraphie) */
couche ( utile pour serigraphie) */
/* Variables utiles */
/* Variables utiles */
eda_global
FILE
*
dest
;
eda_global
FILE
*
dest
;
...
@@ -90,19 +90,18 @@ eda_global wxPoint g_PlotOffset; /* Offset de trace modifies par l'echelle */
...
@@ -90,19 +90,18 @@ eda_global wxPoint g_PlotOffset; /* Offset de trace modifies par l'echelle */
eda_global
int
nb_plot_erreur
;
eda_global
int
nb_plot_erreur
;
eda_global
int
nb_items
;
/* utilise pour decompter les objets traces */
eda_global
int
nb_items
;
/* utilise pour decompter les objets traces */
eda_global
int
g_PlotLine_Width
;
/* Largeur du trait en mode filaire (utilise en serigraphie,
eda_global
int
g_PlotLine_Width
;
/* Largeur du trait en mode filaire (utilise en serigraphie,
pour traces en mode sketch et filaire) */
pour traces en mode sketch et filaire) */
eda_global
int
format_plot
;
/* numero de code du format de sortie */
eda_global
int
format_plot
;
/* numero de code du format de sortie */
eda_global
int
g_PlotOrient
;
/* numero de code de l'orientation du trace ( voir
eda_global
int
g_PlotOrient
;
/* numero de code de l'orientation du trace ( voir
defines precedents):
defines precedents):
0 = normal
0 = normal
PLOT_MIROIR = MIROIR
PLOT_MIROIR = MIROIR
*/
*/
eda_global
int
g_PlotScaleOpt
// 0 = automatique, >=1 echelle specifiee
eda_global
int
g_PlotScaleOpt
// 0 = automatique, >=1 echelle specifiee
#ifdef MAIN
#ifdef MAIN
=
1
=
1
#endif
#endif
;
;
eda_global
bool
g_ForcePlotPS_On_A4
;
// Force la selection de la feuille A4 pour le plot POSTSCRIPT
eda_global
int
g_DrillShapeOpt
eda_global
int
g_DrillShapeOpt
#ifdef MAIN
#ifdef MAIN
...
@@ -111,9 +110,9 @@ eda_global int g_DrillShapeOpt
...
@@ -111,9 +110,9 @@ eda_global int g_DrillShapeOpt
;
;
/*************************************/
/*************************************/
/* Constantes utiles en trace GERBER */
/* Constantes utiles en trace GERBER */
/*************************************/
/*************************************/
/* codes de type de forme d'outils */
/* codes de type de forme d'outils */
#define GERB_CIRCLE 1
#define GERB_CIRCLE 1
...
@@ -123,34 +122,34 @@ eda_global int g_DrillShapeOpt
...
@@ -123,34 +122,34 @@ eda_global int g_DrillShapeOpt
#define GERB_DONUT 5
#define GERB_DONUT 5
/* liste des D_CODES en fonction de leur numero d'ordre (numero d'outil)
/* liste des D_CODES en fonction de leur numero d'ordre (numero d'outil)
(l'ordre 0 n'est pas utilise) ;
(l'ordre 0 n'est pas utilise) ;
Tools have D_CODES >= 10
Tools have D_CODES >= 10
D_CODES <= 9 are used for commands only:
D_CODES <= 9 are used for commands only:
D01 ... D9 = command codes for photo plotting:
D01 ... D9 = command codes for photo plotting:
D01 = Light on
D01 = Light on
D02 = Light off
D02 = Light off
D03 = Flash
D03 = Flash
D04 .. D08 = ?
D04 .. D08 = ?
D09 = VAPE Flash
D09 = VAPE Flash
*/
*/
/* Routines generales de trace : */
/* Routines generales de trace : */
/* PLOT_RTN.CC */
/* PLOT_RTN.CC */
void
PlotTextePcb
(
TEXTE_PCB
*
pt_texte
,
int
format_plot
,
int
masque_layer
);
void
PlotTextePcb
(
TEXTE_PCB
*
pt_texte
,
int
format_plot
,
int
masque_layer
);
/* Trace 1 Texte type PCB , c.a.d autre que les textes sur modules,
/* Trace 1 Texte type PCB , c.a.d autre que les textes sur modules,
prepare les parametres de trace de Plot_1_texte */
prepare les parametres de trace de Plot_1_texte */
void
PlotArc
(
int
format_plot
,
wxPoint
centre
,
int
start_angle
,
int
end_angle
,
void
PlotArc
(
int
format_plot
,
wxPoint
centre
,
int
start_angle
,
int
end_angle
,
int
rayon
,
int
width
);
int
rayon
,
int
width
);
void
PlotCircle
(
int
format_plot
,
int
width
,
wxPoint
centre
,
int
rayon
);
void
PlotCircle
(
int
format_plot
,
int
width
,
wxPoint
centre
,
int
rayon
);
void
PlotPolygon
(
int
format_plot
,
bool
filled
,
int
nbpoints
,
int
*
coord
);
void
PlotPolygon
(
int
format_plot
,
bool
filled
,
int
nbpoints
,
int
*
coord
);
void
Plot_1_texte
(
int
format_plot
,
void
Plot_1_texte
(
int
format_plot
,
const
wxString
&
Text
,
int
t_orient
,
const
wxString
&
Text
,
int
t_orient
,
int
width
,
int
ox
,
int
oy
,
int
size_h
,
int
size_v
,
int
width
,
int
ox
,
int
oy
,
int
size_h
,
int
size_v
,
bool
centreX
=
TRUE
,
bool
centreY
=
TRUE
);
bool
centreX
=
TRUE
,
bool
centreY
=
TRUE
);
/* Routine de base de trace de 1 chaine de caracteres */
/* Routine de base de trace de 1 chaine de caracteres */
void
PlotDrawSegment
(
DRAWSEGMENT
*
PtSegm
,
int
format_plot
,
int
masque_layer
);
void
PlotDrawSegment
(
DRAWSEGMENT
*
PtSegm
,
int
format_plot
,
int
masque_layer
);
...
@@ -165,17 +164,17 @@ void PlotGERBERLine(wxPoint start, wxPoint end, int hauteur);
...
@@ -165,17 +164,17 @@ void PlotGERBERLine(wxPoint start, wxPoint end, int hauteur);
void
PlotCircle_GERBER
(
wxPoint
centre
,
int
rayon
,
int
width
);
void
PlotCircle_GERBER
(
wxPoint
centre
,
int
rayon
,
int
width
);
void
PlotPolygon_GERBER
(
int
nb_segm
,
int
*
coord
,
bool
fill
);
void
PlotPolygon_GERBER
(
int
nb_segm
,
int
*
coord
,
bool
fill
);
void
trace_1_contour_GERBER
(
wxPoint
pos
,
wxSize
size
,
wxSize
delta
,
void
trace_1_contour_GERBER
(
wxPoint
pos
,
wxSize
size
,
wxSize
delta
,
int
penwidth
,
int
orient
);
int
penwidth
,
int
orient
);
/* Trace 1 contour rectangulaire ou trapezoidal d'orientation quelconque
/* Trace 1 contour rectangulaire ou trapezoidal d'orientation quelconque
donne par son centre, ses dimensions,
donne par son centre, ses dimensions,
ses variations, l'epaisseur du trait et son orientation orient */
ses variations, l'epaisseur du trait et son orientation orient */
/* PLOTHPGL.CC */
/* PLOTHPGL.CC */
void
trace_1_segment_HPGL
(
int
pos_X0
,
int
pos_Y0
,
int
pos_X1
,
int
pos_Y1
,
void
trace_1_segment_HPGL
(
int
pos_X0
,
int
pos_Y0
,
int
pos_X1
,
int
pos_Y1
,
int
hauteur
);
int
hauteur
);
void
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
padpos
,
wxSize
size
,
wxSize
delta
,
void
trace_1_pad_TRAPEZE_HPGL
(
wxPoint
padpos
,
wxSize
size
,
wxSize
delta
,
int
orient
,
int
modetrace
);
int
orient
,
int
modetrace
);
void
trace_1_pastille_RONDE_HPGL
(
wxPoint
padpos
,
int
diametre
,
int
modetrace
)
;
void
trace_1_pastille_RONDE_HPGL
(
wxPoint
padpos
,
int
diametre
,
int
modetrace
)
;
void
trace_1_pastille_OVALE_HPGL
(
wxPoint
padpos
,
wxSize
size
,
int
orient
,
int
modetrace
);
void
trace_1_pastille_OVALE_HPGL
(
wxPoint
padpos
,
wxSize
size
,
int
orient
,
int
modetrace
);
...
@@ -187,11 +186,11 @@ void PlotRectangularPad_HPGL(wxPoint padpos, wxSize padsize, int orient,int mode
...
@@ -187,11 +186,11 @@ void PlotRectangularPad_HPGL(wxPoint padpos, wxSize padsize, int orient,int mode
void
trace_1_pastille_OVALE_POST
(
wxPoint
centre
,
wxSize
size
,
int
orient
,
int
modetrace
);
void
trace_1_pastille_OVALE_POST
(
wxPoint
centre
,
wxSize
size
,
int
orient
,
int
modetrace
);
void
trace_1_pastille_RONDE_POST
(
wxPoint
centre
,
int
diametre
,
int
modetrace
);
void
trace_1_pastille_RONDE_POST
(
wxPoint
centre
,
int
diametre
,
int
modetrace
);
void
trace_1_pad_rectangulaire_POST
(
wxPoint
centre
,
wxSize
size
,
int
orient
,
void
trace_1_pad_rectangulaire_POST
(
wxPoint
centre
,
wxSize
size
,
int
orient
,
int
modetrace
);
int
modetrace
);
void
trace_1_contour_POST
(
wxPoint
centre
,
wxSize
size
,
wxSize
delta
,
void
trace_1_contour_POST
(
wxPoint
centre
,
wxSize
size
,
wxSize
delta
,
int
dim_trait
,
int
orient
);
int
dim_trait
,
int
orient
);
void
trace_1_pad_TRAPEZE_POST
(
wxPoint
centre
,
wxSize
size
,
wxSize
delta
,
void
trace_1_pad_TRAPEZE_POST
(
wxPoint
centre
,
wxSize
size
,
wxSize
delta
,
int
orient
,
int
modetrace
);
int
orient
,
int
modetrace
);
#endif
/* #define PCBPLOT_H */
#endif
/* #define PCBPLOT_H */
...
...
pcbnew/plot_rtn.cpp
View file @
2da432b2
...
@@ -33,7 +33,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
...
@@ -33,7 +33,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
wxPoint
pos
,
shape_pos
;
wxPoint
pos
,
shape_pos
;
wxSize
size
;
wxSize
size
;
bool
trace_val
,
trace_ref
;
bool
trace_val
,
trace_ref
;
MODULE
*
Module
;
D_PAD
*
pt_pad
;
D_PAD
*
pt_pad
;
TEXTE_MODULE
*
pt_texte
;
TEXTE_MODULE
*
pt_texte
;
EDA_BaseStruct
*
PtStruct
;
EDA_BaseStruct
*
PtStruct
;
...
@@ -87,8 +86,8 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
...
@@ -87,8 +86,8 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
{
{
nb_items
=
0
;
nb_items
=
0
;
Affiche_1_Parametre
(
this
,
56
,
wxT
(
"Pads"
),
wxEmptyString
,
GREEN
);
Affiche_1_Parametre
(
this
,
56
,
wxT
(
"Pads"
),
wxEmptyString
,
GREEN
);
Module
=
m_Pcb
->
m_Modules
;
for
(
;
Module
!=
NULL
;
Module
=
(
MODULE
*
)
Module
->
Pnext
)
for
(
MODULE
*
Module
=
m_Pcb
->
m_Modules
;
Module
;
Module
=
Module
->
Next
()
)
{
{
pt_pad
=
(
D_PAD
*
)
Module
->
m_Pads
;
pt_pad
=
(
D_PAD
*
)
Module
->
m_Pads
;
for
(
;
pt_pad
!=
NULL
;
pt_pad
=
(
D_PAD
*
)
pt_pad
->
Pnext
)
for
(
;
pt_pad
!=
NULL
;
pt_pad
=
(
D_PAD
*
)
pt_pad
->
Pnext
)
...
@@ -121,7 +120,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
...
@@ -121,7 +120,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
trace_1_pastille_RONDE_POST
(
pos
,
size
.
x
,
FILAIRE
);
trace_1_pastille_RONDE_POST
(
pos
,
size
.
x
,
FILAIRE
);
break
;
break
;
}
}
break
;
break
;
case
PAD_OVAL
:
case
PAD_OVAL
:
...
@@ -144,7 +142,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
...
@@ -144,7 +142,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
pt_pad
->
m_Orient
,
FILAIRE
);
pt_pad
->
m_Orient
,
FILAIRE
);
break
;
break
;
}
}
break
;
break
;
case
PAD_TRAPEZOID
:
case
PAD_TRAPEZOID
:
...
@@ -172,7 +169,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
...
@@ -172,7 +169,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
FILAIRE
);
FILAIRE
);
break
;
break
;
}
}
break
;
break
;
}
}
...
@@ -196,7 +192,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
...
@@ -196,7 +192,6 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
(
int
)
pt_pad
->
m_Orient
,
FILAIRE
);
(
int
)
pt_pad
->
m_Orient
,
FILAIRE
);
break
;
break
;
}
}
break
;
break
;
}
}
...
@@ -209,8 +204,7 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
...
@@ -209,8 +204,7 @@ void WinEDA_BasePcbFrame::Plot_Serigraphie( int format_plot,
/* Trace Textes MODULES */
/* Trace Textes MODULES */
nb_items
=
0
;
Affiche_1_Parametre
(
this
,
64
,
wxT
(
"TxtMod"
),
wxEmptyString
,
LIGHTBLUE
);
nb_items
=
0
;
Affiche_1_Parametre
(
this
,
64
,
wxT
(
"TxtMod"
),
wxEmptyString
,
LIGHTBLUE
);
Module
=
m_Pcb
->
m_Modules
;
for
(
MODULE
*
Module
=
m_Pcb
->
m_Modules
;
Module
;
Module
=
Module
->
Next
()
)
for
(
;
Module
!=
NULL
;
Module
=
(
MODULE
*
)
Module
->
Pnext
)
{
{
/* Analyse des autorisations de trace pour les textes VALEUR et REF */
/* Analyse des autorisations de trace pour les textes VALEUR et REF */
trace_val
=
Sel_Texte_Valeur
;
trace_val
=
Sel_Texte_Valeur
;
...
@@ -831,7 +825,7 @@ void PlotArc( int format_plot, wxPoint centre, int start_angle, int end_angle,
...
@@ -831,7 +825,7 @@ void PlotArc( int format_plot, wxPoint centre, int start_angle, int end_angle,
if
(
Plot_Mode
==
FILAIRE
)
if
(
Plot_Mode
==
FILAIRE
)
epaisseur
=
g_PlotLine_Width
;
epaisseur
=
g_PlotLine_Width
;
if
(
format_plot
==
PLOT_FORMAT_POST
)
if
(
IsPostScript
(
format_plot
)
)
{
{
PlotArcPS
(
centre
,
start_angle
,
end_angle
,
rayon
,
epaisseur
);
PlotArcPS
(
centre
,
start_angle
,
end_angle
,
rayon
,
epaisseur
);
return
;
return
;
...
...
pcbnew/plotgerb.cpp
View file @
2da432b2
This diff is collapsed.
Click to expand it.
pcbnew/plotps.cpp
View file @
2da432b2
...
@@ -25,7 +25,7 @@ const int DRILL_MARK = 1;
...
@@ -25,7 +25,7 @@ const int DRILL_MARK = 1;
/****************************************************************************/
/****************************************************************************/
void
WinEDA_BasePcbFrame
::
Genere_PS
(
const
wxString
&
FullFileName
,
int
Layer
)
void
WinEDA_BasePcbFrame
::
Genere_PS
(
const
wxString
&
FullFileName
,
int
Layer
,
bool
useA4
)
/****************************************************************************/
/****************************************************************************/
/* Genere un fichier POSTSCRIPT (*.ps) de trace du circuit, couche layer
/* Genere un fichier POSTSCRIPT (*.ps) de trace du circuit, couche layer
...
@@ -59,6 +59,7 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer )
...
@@ -59,6 +59,7 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer )
if
(
g_PlotScaleOpt
!=
1
)
if
(
g_PlotScaleOpt
!=
1
)
Center
=
TRUE
;
// Echelle != 1 donc trace centree du PCB
Center
=
TRUE
;
// Echelle != 1 donc trace centree du PCB
modetrace
=
Plot_Mode
;
modetrace
=
Plot_Mode
;
scale_format
=
1.0
;
scale_format
=
1.0
;
...
@@ -69,7 +70,8 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer )
...
@@ -69,7 +70,8 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer )
// calcul en unites internes des dimensions des feuilles ( connues en 1/1000 pouce )
// calcul en unites internes des dimensions des feuilles ( connues en 1/1000 pouce )
PcbSheetSize
.
x
=
currentsheet
->
m_Size
.
x
*
U_PCB
;
PcbSheetSize
.
x
=
currentsheet
->
m_Size
.
x
*
U_PCB
;
PcbSheetSize
.
y
=
currentsheet
->
m_Size
.
y
*
U_PCB
;
PcbSheetSize
.
y
=
currentsheet
->
m_Size
.
y
*
U_PCB
;
if
(
g_ForcePlotPS_On_A4
)
if
(
useA4
)
{
{
SheetPS
=
&
g_Sheet_A4
;
SheetPS
=
&
g_Sheet_A4
;
PaperSize
.
x
=
g_Sheet_A4
.
m_Size
.
x
*
U_PCB
;
PaperSize
.
x
=
g_Sheet_A4
.
m_Size
.
x
*
U_PCB
;
...
@@ -168,9 +170,9 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer )
...
@@ -168,9 +170,9 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer )
SetColorMapPS
(
WHITE
);
SetColorMapPS
(
WHITE
);
}
}
// Specify that the contents of the "Edges Pcb" layer are to be plotted
// Specify that the contents of the "Edges Pcb" layer are to be plotted
// in addition to the contents of the currently specified layer.
// in addition to the contents of the currently specified layer.
int
layer_mask
=
g_TabOneLayerMask
[
Layer
]
|
EDGE_LAYER
;
int
layer_mask
=
g_TabOneLayerMask
[
Layer
]
|
EDGE_LAYER
;
switch
(
Layer
)
switch
(
Layer
)
{
{
...
@@ -464,7 +466,7 @@ static void PrintDrillMark( BOARD* Pcb )
...
@@ -464,7 +466,7 @@ static void PrintDrillMark( BOARD* Pcb )
if
(
g_DrillShapeOpt
==
DRILL_MARK
)
if
(
g_DrillShapeOpt
==
DRILL_MARK
)
diam
.
x
=
diam
.
y
=
SMALL_DRILL
;
diam
.
x
=
diam
.
y
=
SMALL_DRILL
;
else
else
diam
.
x
=
diam
.
y
=
pts
->
GetDrillValue
();
diam
.
x
=
diam
.
y
=
pts
->
GetDrillValue
();
trace_1_pastille_RONDE_POST
(
pos
,
diam
.
x
,
FILLED
);
trace_1_pastille_RONDE_POST
(
pos
,
diam
.
x
,
FILLED
);
}
}
...
@@ -573,7 +575,7 @@ void trace_1_pastille_RONDE_POST( wxPoint centre, int diametre, int modetrace )
...
@@ -573,7 +575,7 @@ void trace_1_pastille_RONDE_POST( wxPoint centre, int diametre, int modetrace )
if
(
modetrace
==
FILLED
)
if
(
modetrace
==
FILLED
)
{
{
SetCurrentLineWidthPS
(
0
);
SetCurrentLineWidthPS
(
0
);
rayon
=
diam
.
x
/
2
;
rayon
=
diam
.
x
/
2
;
if
(
rayon
<
1
)
if
(
rayon
<
1
)
rayon
=
1
;
rayon
=
1
;
...
@@ -588,7 +590,7 @@ void trace_1_pastille_RONDE_POST( wxPoint centre, int diametre, int modetrace )
...
@@ -588,7 +590,7 @@ void trace_1_pastille_RONDE_POST( wxPoint centre, int diametre, int modetrace )
rayon
=
1
;
rayon
=
1
;
if
(
rayon
<
w
)
if
(
rayon
<
w
)
w
=
rayon
;
w
=
rayon
;
SetCurrentLineWidthPS
(
w
);
SetCurrentLineWidthPS
(
w
);
fprintf
(
dest
,
"newpath %d %d %d 0 360 arc stroke
\n
"
,
fprintf
(
dest
,
"newpath %d %d %d 0 360 arc stroke
\n
"
,
centre
.
x
,
centre
.
y
,
rayon
);
centre
.
x
,
centre
.
y
,
rayon
);
}
}
...
...
pcbnew/specctra.h
View file @
2da432b2
...
@@ -2707,6 +2707,10 @@ public:
...
@@ -2707,6 +2707,10 @@ public:
};
};
/**
* Class CLASS
* corresponds to the <class_descriptor> in the specctra spec.
*/
class
CLASS
:
public
ELEM
class
CLASS
:
public
ELEM
{
{
friend
class
SPECCTRA_DB
;
friend
class
SPECCTRA_DB
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment