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
daeb1901
Commit
daeb1901
authored
Jun 28, 2009
by
charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
minor changes
parent
2a801170
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
362 additions
and
324 deletions
+362
-324
about_kicad.cpp
common/about_kicad.cpp
+2
-1
common_plotGERBER_functions.cpp
common/common_plotGERBER_functions.cpp
+245
-210
plot.cpp
eeschema/plot.cpp
+115
-113
No files found.
common/about_kicad.cpp
View file @
daeb1901
...
...
@@ -8,7 +8,7 @@
#include "appl_wxstruct.h"
#define BUILD_VERSION "(2009062
1
-unstable)"
#define BUILD_VERSION "(2009062
8
-unstable)"
#ifdef HAVE_SVN_VERSION
...
...
@@ -133,6 +133,7 @@ void InitKiCadAbout( wxAboutDialogInfo& info )
info
.
AddDeveloper
(
SetMsg
(
wxT
(
"Jerry Jacobs <jerkejacobs@gmail.com>"
)
)
);
info
.
AddDeveloper
(
SetMsg
(
wxT
(
"Jonas Diemer <diemer@gmx.de>"
)
)
);
info
.
AddDeveloper
(
SetMsg
(
wxT
(
"KBool Library <http://boolean.klaasholwerda.nl/bool.html>"
)
)
);
info
.
AddDeveloper
(
SetMsg
(
wxT
(
"Lorenzo <lomarcan@tin.it>"
)
)
);
info
.
AddDeveloper
(
SetMsg
(
wxT
(
"Marco Serantoni <marco.serantoni@gmail.com>"
)
)
);
info
.
AddDeveloper
(
SetMsg
(
wxT
(
"Rok Markovic <rok@kanardia.eu>"
)
)
);
info
.
AddDeveloper
(
SetMsg
(
wxT
(
"Tim Hanson <sideskate@gmail.com>"
)
)
);
...
...
common/common_plotGERBER_functions.cpp
View file @
daeb1901
...
...
@@ -15,29 +15,30 @@
/***************************************************************************/
void
Gerber_Plotter
::
set_viewport
(
wxPoint
offset
,
double
aScale
,
int
orient
)
double
aScale
,
int
orient
)
/***************************************************************************/
/** function set_viewport
* Set the plot offset for the current plotting
* @param aOffset = plot offset
* @param aScale = coordinate scale (scale coefficient for coordinates)
* Set the plot offset for the current plotting
* @param aOffset = plot offset
* @param aScale = coordinate scale (scale coefficient for coordinates)
*/
{
wxASSERT
(
!
output_file
);
wxASSERT
(
orient
==
0
);
wxASSERT
(
!
output_file
);
wxASSERT
(
orient
==
0
);
plot_orient_options
=
0
;
plot_offset
=
offset
;
wxASSERT
(
aScale
==
1
);
plot_scale
=
1
;
wxASSERT
(
aScale
==
1
);
plot_scale
=
1
;
device_scale
=
1
;
set_default_line_width
(
100
);
/* epaisseur du trait standard en 1/1000 pouce */
set_default_line_width
(
100
);
/* epaisseur du trait standard en 1/1000 pouce */
}
/******************************************************************/
void
Gerber_Plotter
::
start_plot
(
FILE
*
aFile
)
void
Gerber_Plotter
::
start_plot
(
FILE
*
aFile
)
/*****************************************************************/
/** Function start_plot
* Write GERBER header to file
* initialize global variable g_Plot_PlotOutputFile
...
...
@@ -46,9 +47,9 @@ void Gerber_Plotter::start_plot( FILE *aFile )
{
char
Line
[
1024
];
wxASSERT
(
!
output_file
);
final_file
=
aFile
;
work_file
=
tmpfile
();
wxASSERT
(
!
output_file
);
final_file
=
aFile
;
work_file
=
tmpfile
();
output_file
=
work_file
;
DateAndTime
(
Line
);
wxString
Title
=
creator
+
wxT
(
" "
)
+
GetBuildVersion
();
...
...
@@ -60,24 +61,25 @@ void Gerber_Plotter::start_plot( FILE *aFile )
/* Set gerber format to 3.4 */
fputs
(
"G04 Gerber Fmt 3.4, Leading zero omitted, Abs format*
\n
%FSLAX34Y34*%
\n
"
,
output_file
);
output_file
);
fputs
(
"G04 APERTURE LIST*
\n
"
,
output_file
);
/* Select the default aperture */
set_current_line_width
(
-
1
);
set_current_line_width
(
-
1
);
}
/******************************************************************/
void
Gerber_Plotter
::
end_plot
(
)
void
Gerber_Plotter
::
end_plot
()
/*****************************************************************/
{
char
line
[
1024
];
wxString
msg
;
wxASSERT
(
output_file
);
wxASSERT
(
output_file
);
/* Outfile is actually a temporary file! */
fputs
(
"M02*
\n
"
,
output_file
);
fflush
(
output_file
);
fflush
(
output_file
);
rewind
(
work_file
);
// work_file == output_file !!!
output_file
=
final_file
;
...
...
@@ -85,12 +87,12 @@ void Gerber_Plotter::end_plot( )
// Placement des Apertures en RS274X
while
(
fgets
(
line
,
1024
,
work_file
)
)
{
fputs
(
line
,
output_file
);
if
(
strcmp
(
strtok
(
line
,
"
\n\r
"
),
"G04 APERTURE LIST*"
)
==
0
)
{
write_aperture_list
();
fputs
(
"G04 APERTURE END LIST*
\n
"
,
output_file
);
}
fputs
(
line
,
output_file
);
if
(
strcmp
(
strtok
(
line
,
"
\n\r
"
),
"G04 APERTURE LIST*"
)
==
0
)
{
write_aperture_list
();
fputs
(
"G04 APERTURE END LIST*
\n
"
,
output_file
);
}
}
fclose
(
work_file
);
...
...
@@ -98,6 +100,7 @@ void Gerber_Plotter::end_plot( )
output_file
=
0
;
}
/*************************************************************************************/
void
Gerber_Plotter
::
set_default_line_width
(
int
width
)
/*************************************************************************************/
...
...
@@ -106,9 +109,10 @@ void Gerber_Plotter::set_default_line_width( int width )
*/
{
default_pen_width
=
width
;
// epaisseur du trait standard en 1/1000 pouce
current_aperture
=
apertures
.
end
();
current_aperture
=
apertures
.
end
();
}
/***************************************/
void
Gerber_Plotter
::
set_current_line_width
(
int
width
)
/***************************************/
...
...
@@ -123,154 +127,168 @@ void Gerber_Plotter::set_current_line_width( int width )
else
pen_width
=
default_pen_width
;
select_aperture
(
wxSize
(
pen_width
,
pen_width
),
Aperture
::
Plotting
);
select_aperture
(
wxSize
(
pen_width
,
pen_width
),
Aperture
::
Plotting
);
current_pen_width
=
pen_width
;
}
/******************************************************/
vector
<
Aperture
>::
iterator
Gerber_Plotter
::
get_aperture
(
const
wxSize
&
size
,
Aperture
::
Aperture_Type
type
)
vector
<
Aperture
>::
iterator
Gerber_Plotter
::
get_aperture
(
const
wxSize
&
size
,
Aperture
::
Aperture_Type
type
)
/******************************************************/
{
int
last_D_code
=
9
;
// Search an existing aperture
vector
<
Aperture
>::
iterator
tool
=
apertures
.
begin
();
while
(
tool
!=
apertures
.
end
())
{
last_D_code
=
tool
->
D_code
;
if
((
tool
->
type
==
type
)
&&
(
tool
->
size
==
size
))
return
tool
;
tool
++
;
while
(
tool
!=
apertures
.
end
()
)
{
last_D_code
=
tool
->
D_code
;
if
(
(
tool
->
type
==
type
)
&&
(
tool
->
size
==
size
)
)
return
tool
;
tool
++
;
}
// Allocate a new aperture
Aperture
new_tool
;
new_tool
.
size
=
size
;
new_tool
.
type
=
type
;
new_tool
.
D_code
=
last_D_code
+
1
;
apertures
.
push_back
(
new_tool
);
return
apertures
.
end
()
-
1
;
new_tool
.
size
=
size
;
new_tool
.
type
=
type
;
new_tool
.
D_code
=
last_D_code
+
1
;
apertures
.
push_back
(
new_tool
);
return
apertures
.
end
()
-
1
;
}
/******************************************************/
void
Gerber_Plotter
::
select_aperture
(
const
wxSize
&
size
,
Aperture
::
Aperture_Type
type
)
void
Gerber_Plotter
::
select_aperture
(
const
wxSize
&
size
,
Aperture
::
Aperture_Type
type
)
/******************************************************/
{
wxASSERT
(
output_file
);
if
((
current_aperture
==
apertures
.
end
())
||
(
current_aperture
->
type
!=
type
)
||
(
current_aperture
->
size
!=
size
))
{
/* Pick an existing aperture or create a new one */
current_aperture
=
get_aperture
(
size
,
type
);
fprintf
(
output_file
,
"G54D%d*
\n
"
,
current_aperture
->
D_code
);
wxASSERT
(
output_file
);
if
(
(
current_aperture
==
apertures
.
end
()
)
||
(
current_aperture
->
type
!=
type
)
||
(
current_aperture
->
size
!=
size
)
)
{
/* Pick an existing aperture or create a new one */
current_aperture
=
get_aperture
(
size
,
type
);
fprintf
(
output_file
,
"G54D%d*
\n
"
,
current_aperture
->
D_code
);
}
}
/******************************************************/
void
Gerber_Plotter
::
write_aperture_list
(
)
void
Gerber_Plotter
::
write_aperture_list
()
/******************************************************/
/* Genere la liste courante des D_CODES
* Retourne le nombre de D_Codes utilises
* Genere une sequence RS274X
*/
{
wxASSERT
(
output_file
);
wxASSERT
(
output_file
);
char
cbuf
[
1024
];
/* Init : */
for
(
vector
<
Aperture
>::
iterator
tool
=
apertures
.
begin
();
tool
!=
apertures
.
end
();
tool
++
)
for
(
vector
<
Aperture
>::
iterator
tool
=
apertures
.
begin
();
tool
!=
apertures
.
end
();
tool
++
)
{
const
float
fscale
=
0.0001
f
*
plot_scale
;
// For 3.4 format
char
*
text
;
const
float
fscale
=
0.0001
f
*
plot_scale
;
// For 3.4 format
char
*
text
;
text
=
cbuf
+
sprintf
(
cbuf
,
"%%ADD%d"
,
tool
->
D_code
);
text
=
cbuf
+
sprintf
(
cbuf
,
"%%ADD%d"
,
tool
->
D_code
);
switch
(
tool
->
type
)
{
case
Aperture
:
:
Circle
:
sprintf
(
text
,
"C,%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
);
break
;
switch
(
tool
->
type
)
{
case
Aperture
:
:
Circle
:
sprintf
(
text
,
"C,%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
);
break
;
case
Aperture
:
:
Rect
:
sprintf
(
text
,
"R,%fX%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
,
tool
->
size
.
y
*
fscale
);
break
;
case
Aperture
:
:
Rect
:
sprintf
(
text
,
"R,%fX%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
,
tool
->
size
.
y
*
fscale
);
break
;
case
Aperture
:
:
Plotting
:
sprintf
(
text
,
"C,%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
);
break
;
case
Aperture
:
:
Plotting
:
sprintf
(
text
,
"C,%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
);
break
;
case
Aperture
:
:
Oval
:
sprintf
(
text
,
"O,%fX%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
,
tool
->
size
.
y
*
fscale
);
break
;
}
case
Aperture
:
:
Oval
:
sprintf
(
text
,
"O,%fX%f*%%
\n
"
,
tool
->
size
.
x
*
fscale
,
tool
->
size
.
y
*
fscale
);
break
;
}
fputs
(
cbuf
,
output_file
);
fputs
(
cbuf
,
output_file
);
}
}
/**********************************************/
void
Gerber_Plotter
::
pen_to
(
wxPoint
aPos
,
char
plume
)
{
wxASSERT
(
output_file
);
wxASSERT
(
output_file
);
user_to_device_coordinates
(
aPos
);
switch
(
plume
)
{
case
'Z'
:
break
;
switch
(
plume
)
{
case
'Z'
:
break
;
case
'U'
:
fprintf
(
output_file
,
"X%5.5dY%5.5dD02*
\n
"
,
aPos
.
x
,
aPos
.
y
);
break
;
case
'U'
:
fprintf
(
output_file
,
"X%5.5dY%5.5dD02*
\n
"
,
aPos
.
x
,
aPos
.
y
);
break
;
case
'D'
:
fprintf
(
output_file
,
"X%5.5dY%5.5dD01*
\n
"
,
aPos
.
x
,
aPos
.
y
);
}
case
'D'
:
fprintf
(
output_file
,
"X%5.5dY%5.5dD01*
\n
"
,
aPos
.
x
,
aPos
.
y
);
}
pen_state
=
plume
;
}
/************************************************************/
/**************************************************************************/
void
Gerber_Plotter
::
rect
(
wxPoint
p1
,
wxPoint
p2
,
FILL_T
fill
,
int
width
)
/************************************************************/
/************************************************************
**************
/
{
wxASSERT
(
output_file
);
int
coord
[
10
]
=
{
p1
.
x
,
p1
.
y
,
p1
.
x
,
p2
.
y
,
p2
.
x
,
p2
.
y
,
p2
.
x
,
p1
.
y
,
p1
.
x
,
p1
.
y
wxASSERT
(
output_file
);
int
coord
[
10
]
=
{
p1
.
x
,
p1
.
y
,
p1
.
x
,
p2
.
y
,
p2
.
x
,
p2
.
y
,
p2
.
x
,
p1
.
y
,
p1
.
x
,
p1
.
y
};
poly
(
5
,
coord
,
fill
,
width
);
poly
(
5
,
coord
,
fill
,
width
);
}
/********************************************************************/
void
Gerber_Plotter
::
circle
(
wxPoint
pos
,
int
diametre
,
FILL_T
fill
,
int
width
)
/********************************************************************/
/** Function PlotCircle_GERBER
/*************************************************************************************/
void
Gerber_Plotter
::
circle
(
wxPoint
aCentre
,
int
aDiameter
,
FILL_T
fill
,
int
aWidth
)
/*************************************************************************************/
/** Function circle
* writes a non filled circle to output file
* Plot one circle as segments (6 to 16 depending on its radius
* @param aCentre = centre coordintes
* @param a
Radius = radius
of the circle
* @param a
Diameter = diameter
of the circle
* @param aWidth = line width
*/
*/
{
wxASSERT
(
output_file
);
wxPoint
start
,
end
;
double
aRadius
=
diametre
/
2
;
const
int
delta
=
3600
/
32
;
/* increment (in 0.1 degrees) to draw circles */
start
.
x
=
pos
.
x
+
aR
adius
;
start
.
y
=
pos
.
y
;
set_current_line_width
(
width
);
move_to
(
start
);
for
(
int
ii
=
delta
;
ii
<
3600
;
ii
+=
delta
)
wxASSERT
(
output_file
);
wxPoint
start
,
end
;
double
radius
=
aDiameter
/
2
;
const
int
delta
=
3600
/
32
;
/* increment (in 0.1 degrees) to draw circles */
start
.
x
=
aCentre
.
x
+
r
adius
;
start
.
y
=
aCentre
.
y
;
set_current_line_width
(
aWidth
);
move_to
(
start
);
for
(
int
ii
=
delta
;
ii
<
3600
;
ii
+=
delta
)
{
end
.
x
=
pos
.
x
+
(
int
)
(
aRadius
*
fcosinus
[
ii
]
);
end
.
y
=
pos
.
y
+
(
int
)
(
aRadius
*
fsinus
[
ii
]
);
line_to
(
end
);
end
.
x
=
aCentre
.
x
+
(
int
)
(
radius
*
fcosinus
[
ii
]
);
end
.
y
=
aCentre
.
y
+
(
int
)
(
radius
*
fsinus
[
ii
]
);
line_to
(
end
);
}
finish_to
(
start
);
...
...
@@ -278,65 +296,74 @@ void Gerber_Plotter::circle( wxPoint pos, int diametre, FILL_T fill, int width )
/***************************************************************/
void
Gerber_Plotter
::
poly
(
int
nb_segm
,
int
*
coord
,
FILL_T
fill
,
int
w
idth
)
void
Gerber_Plotter
::
poly
(
int
aCornersCount
,
int
*
aCoord
,
FILL_T
aFill
,
int
aW
idth
)
/***************************************************************/
/** Function PlotFilledPolygon_GERBER
* writes a filled polyline to output file
* @param aCornersCount = numer of corners
* @param aCoord = buffer of corners coordinates
*/
* @param aFill = plot option (NO_FILL, FILLED_SHAPE, FILLED_WITH_BG_BODYCOLOR)
* @param aCoord = buffer of corners coordinates
*/
{
wxASSERT
(
output_file
);
wxASSERT
(
output_file
);
wxPoint
pos
,
startpos
;
set_current_line_width
(
width
);
if
(
fill
)
fputs
(
"G36*
\n
"
,
output_file
);
startpos
.
x
=
*
c
oord
++
;
startpos
.
y
=
*
c
oord
++
;
move_to
(
startpos
);
for
(
int
ii
=
1
;
ii
<
nb_segm
;
ii
++
)
set_current_line_width
(
aWidth
);
if
(
aFill
)
fputs
(
"G36*
\n
"
,
output_file
);
startpos
.
x
=
*
aC
oord
++
;
startpos
.
y
=
*
aC
oord
++
;
move_to
(
startpos
);
for
(
int
ii
=
1
;
ii
<
aCornersCount
;
ii
++
)
{
pos
.
x
=
*
c
oord
++
;
pos
.
y
=
*
c
oord
++
;
line_to
(
pos
);
pos
.
x
=
*
aC
oord
++
;
pos
.
y
=
*
aC
oord
++
;
line_to
(
pos
);
}
if
(
fill
)
if
(
aFill
)
{
finish_to
(
startpos
);
fputs
(
"G37*
\n
"
,
output_file
);
finish_to
(
startpos
);
fputs
(
"G37*
\n
"
,
output_file
);
}
else
{
pen_finish
();
pen_finish
();
}
}
void
Gerber_Plotter
::
flash_pad_circle
(
wxPoint
pos
,
int
diametre
,
GRTraceMode
trace_mode
)
/
* Plot a circular pad or via at the user position pos
/* Function flash_pad_circle
* Plot a circular pad or via at the user position pos
*/
void
Gerber_Plotter
::
flash_pad_circle
(
wxPoint
pos
,
int
diametre
,
GRTraceMode
trace_mode
)
{
wxASSERT
(
output_file
);
wxSize
size
(
diametre
,
diametre
);
wxASSERT
(
output_file
);
wxSize
size
(
diametre
,
diametre
);
switch
(
trace_mode
)
switch
(
trace_mode
)
{
case
FILAIRE
:
case
SKETCH
:
set_current_line_width
(
-
1
);
circle
(
pos
,
diametre
-
current_pen_width
,
NO_FILL
);
break
;
set_current_line_width
(
-
1
);
circle
(
pos
,
diametre
-
current_pen_width
,
NO_FILL
);
break
;
case
FILLED
:
user_to_device_coordinates
(
pos
);
select_aperture
(
size
,
Aperture
::
Circle
);
fprintf
(
output_file
,
"X%5.5dY%5.5dD03*
\n
"
,
pos
.
x
,
pos
.
y
);
break
;
user_to_device_coordinates
(
pos
);
select_aperture
(
size
,
Aperture
::
Circle
);
fprintf
(
output_file
,
"X%5.5dY%5.5dD03*
\n
"
,
pos
.
x
,
pos
.
y
);
break
;
}
}
void
Gerber_Plotter
::
flash_pad_oval
(
wxPoint
pos
,
wxSize
size
,
int
orient
,
GRTraceMode
trace_mode
)
void
Gerber_Plotter
::
flash_pad_oval
(
wxPoint
pos
,
wxSize
size
,
int
orient
,
GRTraceMode
trace_mode
)
/* Trace 1 pastille PAD_OVAL en position pos_X,Y:
* dimensions dx, dy,
* orientation orient
...
...
@@ -344,56 +371,59 @@ void Gerber_Plotter::flash_pad_oval(wxPoint pos, wxSize size, int orient,
* Pour une orientation quelconque la forme est tracee comme un segment
*/
{
wxASSERT
(
output_file
);
int
x0
,
y0
,
x1
,
y1
,
delta
;
wxASSERT
(
output_file
);
int
x0
,
y0
,
x1
,
y1
,
delta
;
/* Trace de la forme flashee */
if
((
orient
==
0
||
orient
==
900
||
orient
==
1800
||
orient
==
2700
)
&&
trace_mode
==
FILLED
)
if
(
(
orient
==
0
||
orient
==
900
||
orient
==
1800
||
orient
==
2700
)
&&
trace_mode
==
FILLED
)
{
if
(
orient
==
900
||
orient
==
2700
)
/* orient tournee de 90 deg */
EXCHG
(
size
.
x
,
size
.
y
);
user_to_device_coordinates
(
pos
);
select_aperture
(
size
,
Aperture
::
Oval
);
fprintf
(
output_file
,
"X%5.5dY%5.5dD03*
\n
"
,
pos
.
x
,
pos
.
y
);
if
(
orient
==
900
||
orient
==
2700
)
/* orient tournee de 90 deg */
EXCHG
(
size
.
x
,
size
.
y
);
user_to_device_coordinates
(
pos
);
select_aperture
(
size
,
Aperture
::
Oval
);
fprintf
(
output_file
,
"X%5.5dY%5.5dD03*
\n
"
,
pos
.
x
,
pos
.
y
);
}
else
/* Forme tracee comme un segment */
{
if
(
size
.
x
>
size
.
y
)
{
EXCHG
(
size
.
x
,
size
.
y
);
if
(
orient
<
2700
)
orient
+=
900
;
else
orient
-=
2700
;
}
if
(
trace_mode
==
FILLED
)
{
/* la pastille est ramenee a une pastille ovale avec dy > dx */
delta
=
size
.
y
-
size
.
x
;
x0
=
0
;
y0
=
-
delta
/
2
;
x1
=
0
;
y1
=
delta
/
2
;
RotatePoint
(
&
x0
,
&
y0
,
orient
);
RotatePoint
(
&
x1
,
&
y1
,
orient
);
thick_segment
(
wxPoint
(
pos
.
x
+
x0
,
pos
.
y
+
y0
),
wxPoint
(
pos
.
x
+
x1
,
pos
.
y
+
y1
),
size
.
x
,
trace_mode
);
}
else
sketch_oval
(
pos
,
size
,
orient
,
-
1
);
if
(
size
.
x
>
size
.
y
)
{
EXCHG
(
size
.
x
,
size
.
y
);
if
(
orient
<
2700
)
orient
+=
900
;
else
orient
-=
2700
;
}
if
(
trace_mode
==
FILLED
)
{
/* la pastille est ramenee a une pastille ovale avec dy > dx */
delta
=
size
.
y
-
size
.
x
;
x0
=
0
;
y0
=
-
delta
/
2
;
x1
=
0
;
y1
=
delta
/
2
;
RotatePoint
(
&
x0
,
&
y0
,
orient
);
RotatePoint
(
&
x1
,
&
y1
,
orient
);
thick_segment
(
wxPoint
(
pos
.
x
+
x0
,
pos
.
y
+
y0
),
wxPoint
(
pos
.
x
+
x1
,
pos
.
y
+
y1
),
size
.
x
,
trace_mode
);
}
else
sketch_oval
(
pos
,
size
,
orient
,
-
1
);
}
}
void
Gerber_Plotter
::
flash_pad_rect
(
wxPoint
pos
,
wxSize
size
,
int
orient
,
GRTraceMode
trace_mode
)
void
Gerber_Plotter
::
flash_pad_rect
(
wxPoint
pos
,
wxSize
size
,
int
orient
,
GRTraceMode
trace_mode
)
/* Plot 1 rectangular pad
* donne par son centre, ses dimensions, et son orientation
* For a vertical or horizontal shape, the shape is an aperture (Dcode) and it is flashed
* For others orientations the shape is plotted as a polygon
*/
{
wxASSERT
(
output_file
);
wxASSERT
(
output_file
);
/* Trace de la forme flashee */
switch
(
orient
)
{
...
...
@@ -405,23 +435,26 @@ void Gerber_Plotter::flash_pad_rect(wxPoint pos, wxSize size,
case
0
:
case
1800
:
switch
(
trace_mode
)
{
case
FILAIRE
:
case
SKETCH
:
set_current_line_width
(
-
1
);
rect
(
wxPoint
(
pos
.
x
-
(
size
.
x
-
current_pen_width
)
/
2
,
pos
.
y
-
(
size
.
y
-
current_pen_width
)
/
2
),
wxPoint
(
pos
.
x
+
(
size
.
x
-
current_pen_width
)
/
2
,
pos
.
y
+
(
size
.
y
-
current_pen_width
)
/
2
),
NO_FILL
);
break
;
case
FILLED
:
user_to_device_coordinates
(
pos
);
select_aperture
(
size
,
Aperture
::
Rect
);
fprintf
(
output_file
,
"X%5.5dY%5.5dD03*
\n
"
,
pos
.
x
,
pos
.
y
);
break
;
}
break
;
switch
(
trace_mode
)
{
case
FILAIRE
:
case
SKETCH
:
set_current_line_width
(
-
1
);
rect
(
wxPoint
(
pos
.
x
-
(
size
.
x
-
current_pen_width
)
/
2
,
pos
.
y
-
(
size
.
y
-
current_pen_width
)
/
2
),
wxPoint
(
pos
.
x
+
(
size
.
x
-
current_pen_width
)
/
2
,
pos
.
y
+
(
size
.
y
-
current_pen_width
)
/
2
),
NO_FILL
);
break
;
case
FILLED
:
user_to_device_coordinates
(
pos
);
select_aperture
(
size
,
Aperture
::
Rect
);
fprintf
(
output_file
,
"X%5.5dY%5.5dD03*
\n
"
,
pos
.
x
,
pos
.
y
);
break
;
}
break
;
default
:
/* plot pad shape as polygon */
flash_pad_trapez
(
pos
,
size
,
wxSize
(
0
,
0
),
orient
,
trace_mode
);
...
...
@@ -429,8 +462,10 @@ void Gerber_Plotter::flash_pad_rect(wxPoint pos, wxSize size,
}
}
void
Gerber_Plotter
::
flash_pad_trapez
(
wxPoint
pos
,
wxSize
size
,
wxSize
delta
,
int
orient
,
GRTraceMode
trace_mode
)
void
Gerber_Plotter
::
flash_pad_trapez
(
wxPoint
pos
,
wxSize
size
,
wxSize
delta
,
int
orient
,
GRTraceMode
trace_mode
)
/* Trace 1 pad trapezoidal donne par :
* son centre pos.x,pos.y
* ses dimensions size.x et size.y
...
...
@@ -472,7 +507,7 @@ void Gerber_Plotter::flash_pad_trapez(wxPoint pos, wxSize size, wxSize delta,
* " 1 "
*/
{
wxASSERT
(
output_file
);
wxASSERT
(
output_file
);
int
ii
,
jj
;
int
dx
,
dy
;
wxPoint
polygon
[
4
];
/* polygon corners */
...
...
@@ -501,16 +536,16 @@ void Gerber_Plotter::flash_pad_trapez(wxPoint pos, wxSize size, wxSize delta,
for
(
ii
=
0
,
jj
=
0
;
ii
<
4
;
ii
++
)
{
RotatePoint
(
&
polygon
[
ii
].
x
,
&
polygon
[
ii
].
y
,
orient
);
coord
[
jj
]
=
polygon
[
ii
].
x
+=
pos
.
x
;
jj
++
;
coord
[
jj
]
=
polygon
[
ii
].
y
+=
pos
.
y
;
jj
++
;
RotatePoint
(
&
polygon
[
ii
].
x
,
&
polygon
[
ii
].
y
,
orient
);
coord
[
jj
]
=
polygon
[
ii
].
x
+=
pos
.
x
;
jj
++
;
coord
[
jj
]
=
polygon
[
ii
].
y
+=
pos
.
y
;
jj
++
;
}
coord
[
8
]
=
coord
[
0
];
coord
[
9
]
=
coord
[
1
];
set_current_line_width
(
-
1
);
poly
(
5
,
coord
,
trace_mode
==
FILLED
?
FILLED_SHAPE
:
NO_FILL
);
}
coord
[
8
]
=
coord
[
0
];
coord
[
9
]
=
coord
[
1
];
set_current_line_width
(
-
1
);
poly
(
5
,
coord
,
trace_mode
==
FILLED
?
FILLED_SHAPE
:
NO_FILL
);
}
eeschema/plot.cpp
View file @
daeb1901
...
...
@@ -17,17 +17,17 @@
#include "protos.h"
/* Local Variables : */
static
void
Plot_Hierarchical_PIN_Sheet
(
Plotter
*
plotter
,
Hierarchical_PIN_Sheet_Struct
*
Struct
);
static
void
PlotTextField
(
Plotter
*
plotter
,
SCH_COMPONENT
*
DrawLibItem
,
static
void
Plot_Hierarchical_PIN_Sheet
(
Plotter
*
plotter
,
Hierarchical_PIN_Sheet_Struct
*
Struct
);
static
void
PlotTextField
(
Plotter
*
plotter
,
SCH_COMPONENT
*
DrawLibItem
,
int
FieldNumber
,
int
IsMulti
,
int
DrawMode
);
static
void
PlotPinSymbol
(
Plotter
*
plotter
,
const
wxPoint
&
pos
,
int
len
,
int
orient
,
int
Shape
);
static
void
PlotPinSymbol
(
Plotter
*
plotter
,
const
wxPoint
&
pos
,
int
len
,
int
orient
,
int
Shape
);
/***/
/**********************************************************/
static
void
PlotNoConnectStruct
(
Plotter
*
plotter
,
DrawNoConnectStruct
*
Struct
)
static
void
PlotNoConnectStruct
(
Plotter
*
plotter
,
DrawNoConnectStruct
*
Struct
)
/**********************************************************/
/* Routine de dessin des symboles de "No Connexion" ..
...
...
@@ -47,16 +47,16 @@ static void PlotNoConnectStruct(Plotter *plotter, DrawNoConnectStruct* Struct )
/*************************************************/
static
void
PlotLibPart
(
Plotter
*
plotter
,
SCH_COMPONENT
*
DrawLibItem
)
static
void
PlotLibPart
(
Plotter
*
plotter
,
SCH_COMPONENT
*
DrawLibItem
)
/*************************************************/
/* Polt a component */
{
int
ii
,
t1
,
t2
,
*
Poly
,
orient
;
int
ii
,
t1
,
t2
,
*
Poly
,
orient
;
EDA_LibComponentStruct
*
Entry
;
int
TransMat
[
2
][
2
],
Multi
,
convert
;
EDA_Colors
CharColor
=
UNSPECIFIED_COLOR
;
wxPoint
pos
;
bool
draw_bgfill
=
false
;
int
TransMat
[
2
][
2
],
Multi
,
convert
;
EDA_Colors
CharColor
=
UNSPECIFIED_COLOR
;
wxPoint
pos
;
bool
draw_bgfill
=
false
;
Entry
=
FindLibPart
(
DrawLibItem
->
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
);
if
(
Entry
==
NULL
)
...
...
@@ -65,8 +65,8 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
Multi
=
DrawLibItem
->
m_Multi
;
convert
=
DrawLibItem
->
m_Convert
;
for
(
LibEDA_BaseStruct
*
DEntry
=
Entry
->
m_Drawings
;
DEntry
!=
NULL
;
DEntry
=
DEntry
->
Next
()
)
for
(
LibEDA_BaseStruct
*
DEntry
=
Entry
->
m_Drawings
;
DEntry
!=
NULL
;
DEntry
=
DEntry
->
Next
()
)
{
/* Elimination des elements non relatifs a l'unite */
if
(
Multi
&&
DEntry
->
m_Unit
&&
(
DEntry
->
m_Unit
!=
Multi
)
)
...
...
@@ -74,8 +74,8 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
if
(
convert
&&
DEntry
->
m_Convert
&&
(
DEntry
->
m_Convert
!=
convert
)
)
continue
;
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
draw_bgfill
=
plotter
->
get_color_mode
();
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
draw_bgfill
=
plotter
->
get_color_mode
();
switch
(
DEntry
->
Type
()
)
{
...
...
@@ -90,13 +90,13 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
plotter
->
arc
(
pos
,
t1
,
t2
,
Arc
->
m_Rayon
,
FILLED_SHAPE
,
0
);
}
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
arc
(
pos
,
t1
,
t2
,
Arc
->
m_Rayon
,
Arc
->
m_Fill
,
Arc
->
m_Width
);
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
arc
(
pos
,
t1
,
t2
,
Arc
->
m_Rayon
,
Arc
->
m_Fill
,
Arc
->
m_Width
);
}
break
;
...
...
@@ -109,11 +109,11 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
plotter
->
circle
(
pos
,
Circle
->
m_Rayon
*
2
,
FILLED_SHAPE
,
0
);
}
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
circle
(
pos
,
Circle
->
m_Rayon
*
2
,
Circle
->
m_Fill
,
Circle
->
m_Width
);
Circle
->
m_Rayon
*
2
,
Circle
->
m_Fill
,
Circle
->
m_Width
);
}
break
;
...
...
@@ -130,11 +130,11 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
thickness
=
Clamp_Text_PenSize
(
thickness
,
Text
->
m_Size
,
Text
->
m_Bold
);
plotter
->
text
(
pos
,
CharColor
,
Text
->
m_Text
,
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
Text
->
m_Size
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
thickness
,
Text
->
m_Italic
,
Text
->
m_Bold
);
Text
->
m_Text
,
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
Text
->
m_Size
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
thickness
,
Text
->
m_Italic
,
Text
->
m_Bold
);
}
break
;
...
...
@@ -150,7 +150,7 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
plotter
->
rect
(
pos
,
end
,
FILLED_WITH_BG_BODYCOLOR
,
0
);
}
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
rect
(
pos
,
end
,
Square
->
m_Fill
,
Square
->
m_Width
);
}
break
;
...
...
@@ -167,7 +167,7 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
pos
=
TransformCoordinate
(
TransMat
,
Pin
->
m_Pos
)
+
DrawLibItem
->
m_Pos
;
/* Dessin de la pin et du symbole special associe */
PlotPinSymbol
(
plotter
,
pos
,
Pin
->
m_PinLen
,
orient
,
Pin
->
m_PinShape
);
PlotPinSymbol
(
plotter
,
pos
,
Pin
->
m_PinLen
,
orient
,
Pin
->
m_PinShape
);
int
thickness
=
g_DrawDefaultLineThickness
;
Pin
->
PlotPinTexts
(
plotter
,
pos
,
orient
,
Entry
->
m_TextInside
,
...
...
@@ -180,7 +180,7 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
{
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DEntry
;
Poly
=
(
int
*
)
MyMalloc
(
sizeof
(
int
)
*
2
*
polyline
->
GetCornerCount
()
);
for
(
ii
=
0
;
ii
<
(
int
)
polyline
->
GetCornerCount
();
ii
++
)
for
(
ii
=
0
;
ii
<
(
int
)
polyline
->
GetCornerCount
();
ii
++
)
{
pos
=
polyline
->
m_PolyPoints
[
ii
];
pos
=
TransformCoordinate
(
TransMat
,
pos
)
+
DrawLibItem
->
m_Pos
;
...
...
@@ -193,7 +193,7 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
plotter
->
poly
(
ii
,
Poly
,
FILLED_WITH_BG_BODYCOLOR
,
0
);
}
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
poly
(
ii
,
Poly
,
polyline
->
m_Fill
,
polyline
->
m_Width
);
MyFree
(
Poly
);
}
...
...
@@ -216,7 +216,7 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
plotter
->
poly
(
ii
,
Poly
,
FILLED_WITH_BG_BODYCOLOR
,
0
);
}
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_DEVICE
)
);
plotter
->
poly
(
ii
,
Poly
,
polyline
->
m_Fill
,
polyline
->
m_Width
);
MyFree
(
Poly
);
}
...
...
@@ -238,23 +238,23 @@ static void PlotLibPart(Plotter *plotter, SCH_COMPONENT* DrawLibItem )
if
(
(
Entry
->
m_Prefix
.
m_Attributs
&
TEXT_NO_VISIBLE
)
==
0
)
{
if
(
Entry
->
m_UnitCount
>
1
)
PlotTextField
(
plotter
,
DrawLibItem
,
REFERENCE
,
1
,
0
);
PlotTextField
(
plotter
,
DrawLibItem
,
REFERENCE
,
1
,
0
);
else
PlotTextField
(
plotter
,
DrawLibItem
,
REFERENCE
,
0
,
0
);
PlotTextField
(
plotter
,
DrawLibItem
,
REFERENCE
,
0
,
0
);
}
if
(
(
Entry
->
m_Name
.
m_Attributs
&
TEXT_NO_VISIBLE
)
==
0
)
PlotTextField
(
plotter
,
DrawLibItem
,
VALUE
,
0
,
0
);
PlotTextField
(
plotter
,
DrawLibItem
,
VALUE
,
0
,
0
);
for
(
ii
=
2
;
ii
<
NUMBER_OF_FIELDS
;
ii
++
)
{
PlotTextField
(
plotter
,
DrawLibItem
,
ii
,
0
,
0
);
PlotTextField
(
plotter
,
DrawLibItem
,
ii
,
0
,
0
);
}
}
/*************************************************************/
static
void
PlotTextField
(
Plotter
*
plotter
,
SCH_COMPONENT
*
DrawLibItem
,
static
void
PlotTextField
(
Plotter
*
plotter
,
SCH_COMPONENT
*
DrawLibItem
,
int
FieldNumber
,
int
IsMulti
,
int
DrawMode
)
/**************************************************************/
...
...
@@ -274,7 +274,7 @@ static void PlotTextField( Plotter *plotter, SCH_COMPONENT* DrawLibItem,
int
orient
;
EDA_Colors
color
=
UNSPECIFIED_COLOR
;
color
=
ReturnLayerColor
(
field
->
GetLayer
()
);
color
=
ReturnLayerColor
(
field
->
GetLayer
()
);
DrawMode
=
0
;
/* Unused */
if
(
field
->
m_Attributs
&
TEXT_NO_VISIBLE
)
...
...
@@ -375,10 +375,10 @@ static void PlotTextField( Plotter *plotter, SCH_COMPONENT* DrawLibItem,
if
(
!
IsMulti
||
(
FieldNumber
!=
REFERENCE
)
)
{
plotter
->
text
(
textpos
,
color
,
field
->
m_Text
,
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
field
->
m_Size
,
hjustify
,
vjustify
,
thickness
,
field
->
m_Italic
,
field
->
m_Bold
);
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
field
->
m_Size
,
hjustify
,
vjustify
,
thickness
,
field
->
m_Italic
,
field
->
m_Bold
);
}
else
/* We plt the reference, for a multiple parts per package */
{
...
...
@@ -394,16 +394,16 @@ static void PlotTextField( Plotter *plotter, SCH_COMPONENT* DrawLibItem,
#endif
Text
.
Append
(
unit_id
);
plotter
->
text
(
textpos
,
color
,
Text
,
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
field
->
m_Size
,
hjustify
,
vjustify
,
thickness
,
field
->
m_Italic
,
field
->
m_Bold
);
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
field
->
m_Size
,
hjustify
,
vjustify
,
thickness
,
field
->
m_Italic
,
field
->
m_Bold
);
}
}
/**************************************************************************/
static
void
PlotPinSymbol
(
Plotter
*
plotter
,
const
wxPoint
&
pos
,
int
len
,
int
orient
,
int
Shape
)
static
void
PlotPinSymbol
(
Plotter
*
plotter
,
const
wxPoint
&
pos
,
int
len
,
int
orient
,
int
Shape
)
/**************************************************************************/
/* Trace la pin du symbole en cours de trace
...
...
@@ -442,13 +442,13 @@ static void PlotPinSymbol(Plotter *plotter, const wxPoint& pos,
if
(
Shape
&
INVERT
)
{
plotter
->
circle
(
wxPoint
(
MapX1
*
INVERT_PIN_RADIUS
+
x1
,
MapY1
*
INVERT_PIN_RADIUS
+
y1
),
INVERT_PIN_RADIUS
*
2
,
// diameter
NO_FILL
,
// fill
-
1
);
// width
MapY1
*
INVERT_PIN_RADIUS
+
y1
),
INVERT_PIN_RADIUS
*
2
,
// diameter
NO_FILL
,
// fill
-
1
);
// width
plotter
->
move_to
(
wxPoint
(
MapX1
*
INVERT_PIN_RADIUS
*
2
+
x1
,
MapY1
*
INVERT_PIN_RADIUS
*
2
+
y1
)
);
MapY1
*
INVERT_PIN_RADIUS
*
2
+
y1
)
);
plotter
->
finish_to
(
pos
);
}
else
...
...
@@ -479,14 +479,14 @@ static void PlotPinSymbol(Plotter *plotter, const wxPoint& pos,
{
plotter
->
move_to
(
wxPoint
(
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
y1
)
);
plotter
->
line_to
(
wxPoint
(
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
y1
-
IEEE_SYMBOL_PIN_DIM
)
);
y1
-
IEEE_SYMBOL_PIN_DIM
)
);
plotter
->
finish_to
(
wxPoint
(
x1
,
y1
)
);
}
else
/* MapX1 = 0 */
{
plotter
->
move_to
(
wxPoint
(
x1
,
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
)
);
plotter
->
line_to
(
wxPoint
(
x1
-
IEEE_SYMBOL_PIN_DIM
,
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
)
);
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
)
);
plotter
->
finish_to
(
wxPoint
(
x1
,
y1
)
);
}
}
...
...
@@ -509,7 +509,7 @@ static void PlotPinSymbol(Plotter *plotter, const wxPoint& pos,
/*******************************************/
static
void
PlotTextStruct
(
Plotter
*
plotter
,
EDA_BaseStruct
*
Struct
)
static
void
PlotTextStruct
(
Plotter
*
plotter
,
EDA_BaseStruct
*
Struct
)
/*******************************************/
/*
...
...
@@ -531,11 +531,11 @@ static void PlotTextStruct(Plotter *plotter, EDA_BaseStruct* Struct )
return
;
}
SCH_TEXT
*
schText
=
(
SCH_TEXT
*
)
Struct
;
EDA_Colors
color
=
UNSPECIFIED_COLOR
;
color
=
ReturnLayerColor
(
schText
->
m_Layer
);
wxPoint
textpos
=
schText
->
m_Pos
+
schText
->
GetSchematicTextOffset
();
int
thickness
=
(
schText
->
m_Width
==
0
)
?
g_DrawDefaultLineThickness
:
schText
->
m_Width
;
SCH_TEXT
*
schText
=
(
SCH_TEXT
*
)
Struct
;
EDA_Colors
color
=
UNSPECIFIED_COLOR
;
color
=
ReturnLayerColor
(
schText
->
m_Layer
);
wxPoint
textpos
=
schText
->
m_Pos
+
schText
->
GetSchematicTextOffset
();
int
thickness
=
(
schText
->
m_Width
==
0
)
?
g_DrawDefaultLineThickness
:
schText
->
m_Width
;
thickness
=
Clamp_Text_PenSize
(
thickness
,
schText
->
m_Size
,
schText
->
m_Bold
);
plotter
->
set_current_line_width
(
thickness
);
...
...
@@ -553,20 +553,19 @@ static void PlotTextStruct(Plotter *plotter, EDA_BaseStruct* Struct )
{
wxString
txt
=
list
->
Item
(
i
);
plotter
->
text
(
pos
,
color
,
txt
,
schText
->
m_Orient
,
schText
->
m_Size
,
schText
->
m_HJustify
,
schText
->
m_VJustify
,
thickness
,
schText
->
m_Italic
,
schText
->
m_Bold
);
color
,
txt
,
schText
->
m_Orient
,
schText
->
m_Size
,
schText
->
m_HJustify
,
schText
->
m_VJustify
,
thickness
,
schText
->
m_Italic
,
schText
->
m_Bold
);
pos
+=
offset
;
}
delete
(
list
);
}
else
plotter
->
text
(
textpos
,
color
,
schText
->
m_Text
,
schText
->
m_Orient
,
schText
->
m_Size
,
schText
->
m_HJustify
,
schText
->
m_VJustify
,
thickness
,
schText
->
m_Italic
,
schText
->
m_Bold
);
color
,
schText
->
m_Text
,
schText
->
m_Orient
,
schText
->
m_Size
,
schText
->
m_HJustify
,
schText
->
m_VJustify
,
thickness
,
schText
->
m_Italic
,
schText
->
m_Bold
);
/* Draw graphic symbol for global or hierachical labels */
if
(
Struct
->
Type
()
==
TYPE_SCH_GLOBALLABEL
)
...
...
@@ -583,8 +582,8 @@ static void PlotTextStruct(Plotter *plotter, EDA_BaseStruct* Struct )
/*****************************************************************************************/
static
void
Plot_Hierarchical_PIN_Sheet
(
Plotter
*
plotter
,
Hierarchical_PIN_Sheet_Struct
*
aHierarchical_PIN
)
static
void
Plot_Hierarchical_PIN_Sheet
(
Plotter
*
plotter
,
Hierarchical_PIN_Sheet_Struct
*
aHierarchical_PIN
)
/****************************************************************************************/
/* Plot a Hierarchical_PIN_Sheet
...
...
@@ -595,7 +594,7 @@ static void Plot_Hierarchical_PIN_Sheet(Plotter *plotter,
static
std
::
vector
<
wxPoint
>
Poly
;
txtcolor
=
ReturnLayerColor
(
aHierarchical_PIN
->
GetLayer
()
);
txtcolor
=
ReturnLayerColor
(
aHierarchical_PIN
->
GetLayer
()
);
posx
=
aHierarchical_PIN
->
m_Pos
.
x
;
posy
=
aHierarchical_PIN
->
m_Pos
.
y
;
...
...
@@ -612,14 +611,18 @@ static void Plot_Hierarchical_PIN_Sheet(Plotter *plotter,
side
=
GR_TEXT_HJUSTIFY_LEFT
;
}
int
thickness
=
(
aHierarchical_PIN
->
m_Width
==
0
)
?
g_DrawDefaultLineThickness
:
aHierarchical_PIN
->
m_Width
;
thickness
=
Clamp_Text_PenSize
(
thickness
,
aHierarchical_PIN
->
m_Size
,
aHierarchical_PIN
->
m_Bold
);
int
thickness
=
(
aHierarchical_PIN
->
m_Width
==
0
)
?
g_DrawDefaultLineThickness
:
aHierarchical_PIN
->
m_Width
;
thickness
=
Clamp_Text_PenSize
(
thickness
,
aHierarchical_PIN
->
m_Size
,
aHierarchical_PIN
->
m_Bold
);
plotter
->
set_current_line_width
(
thickness
);
plotter
->
text
(
wxPoint
(
tposx
,
posy
),
txtcolor
,
aHierarchical_PIN
->
m_Text
,
TEXT_ORIENT_HORIZ
,
wxSize
(
size
,
size
),
side
,
GR_TEXT_VJUSTIFY_CENTER
,
thickness
,
aHierarchical_PIN
->
m_Italic
,
aHierarchical_PIN
->
m_Bold
);
aHierarchical_PIN
->
m_Text
,
TEXT_ORIENT_HORIZ
,
wxSize
(
size
,
size
),
side
,
GR_TEXT_VJUSTIFY_CENTER
,
thickness
,
aHierarchical_PIN
->
m_Italic
,
aHierarchical_PIN
->
m_Bold
);
/* Draw the associated graphic symbol */
aHierarchical_PIN
->
CreateGraphicShape
(
Poly
,
aHierarchical_PIN
->
m_Pos
);
...
...
@@ -629,7 +632,7 @@ static void Plot_Hierarchical_PIN_Sheet(Plotter *plotter,
/*************************************************/
static
void
PlotSheetStruct
(
Plotter
*
plotter
,
DrawSheetStruct
*
Struct
)
static
void
PlotSheetStruct
(
Plotter
*
plotter
,
DrawSheetStruct
*
Struct
)
/*************************************************/
/* Routine de dessin du bloc type hierarchie */
{
...
...
@@ -667,9 +670,9 @@ static void PlotSheetStruct(Plotter *plotter, DrawSheetStruct* Struct )
bool
italic
=
false
;
plotter
->
text
(
pos
,
txtcolor
,
Text
,
TEXT_ORIENT_HORIZ
,
size
,
GR_TEXT_HJUSTIFY_LEFT
,
GR_TEXT_VJUSTIFY_BOTTOM
,
thickness
,
italic
,
false
);
Text
,
TEXT_ORIENT_HORIZ
,
size
,
GR_TEXT_HJUSTIFY_LEFT
,
GR_TEXT_VJUSTIFY_BOTTOM
,
thickness
,
italic
,
false
);
/*Draw texts : FileName */
Text
=
Struct
->
GetFileName
();
...
...
@@ -680,10 +683,10 @@ static void PlotSheetStruct(Plotter *plotter, DrawSheetStruct* Struct )
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_SHEETFILENAME
)
);
plotter
->
text
(
wxPoint
(
Struct
->
m_Pos
.
x
,
Struct
->
m_Pos
.
y
+
Struct
->
m_Size
.
y
+
4
),
txtcolor
,
Text
,
TEXT_ORIENT_HORIZ
,
size
,
GR_TEXT_HJUSTIFY_LEFT
,
GR_TEXT_VJUSTIFY_TOP
,
thickness
,
italic
,
false
);
txtcolor
,
Text
,
TEXT_ORIENT_HORIZ
,
size
,
GR_TEXT_HJUSTIFY_LEFT
,
GR_TEXT_VJUSTIFY_TOP
,
thickness
,
italic
,
false
);
/* Draw texts : SheetLabel */
SheetLabelStruct
=
Struct
->
m_Label
;
...
...
@@ -691,20 +694,21 @@ static void PlotSheetStruct(Plotter *plotter, DrawSheetStruct* Struct )
while
(
SheetLabelStruct
!=
NULL
)
{
Plot_Hierarchical_PIN_Sheet
(
plotter
,
SheetLabelStruct
);
Plot_Hierarchical_PIN_Sheet
(
plotter
,
SheetLabelStruct
);
SheetLabelStruct
=
SheetLabelStruct
->
Next
();
}
}
/*************************************************/
void
PlotDrawlist
(
Plotter
*
plotter
,
SCH_ITEM
*
drawlist
)
void
PlotDrawlist
(
Plotter
*
plotter
,
SCH_ITEM
*
drawlist
)
/*************************************************/
{
while
(
drawlist
)
/* tracage */
{
SCH_COMPONENT
*
DrawLibItem
;
int
layer
;
wxPoint
StartPos
,
EndPos
;
SCH_COMPONENT
*
DrawLibItem
;
int
layer
;
wxPoint
StartPos
,
EndPos
;
switch
(
drawlist
->
Type
()
)
{
...
...
@@ -718,33 +722,31 @@ void PlotDrawlist(Plotter *plotter, SCH_ITEM* drawlist )
case
DRAW_SEGMENT_STRUCT_TYPE
:
#undef STRUCT
#define STRUCT ( (EDA_DrawLineStruct*) drawlist )
if
(
drawlist
->
Type
()
==
DRAW_SEGMENT_STRUCT_TYPE
)
{
StartPos
=
STRUCT
->
m_Start
;
EndPos
=
STRUCT
->
m_End
;
layer
=
STRUCT
->
GetLayer
();
}
plotter
->
set_color
(
ReturnLayerColor
(
layer
)
);
StartPos
=
STRUCT
->
m_Start
;
EndPos
=
STRUCT
->
m_End
;
layer
=
STRUCT
->
GetLayer
();
plotter
->
set_color
(
ReturnLayerColor
(
layer
)
);
switch
(
layer
)
{
case
LAYER_NOTES
:
/* Trace en pointilles */
plotter
->
set_current_line_width
(
g_DrawDefaultLineThickness
);
plotter
->
set_dash
(
true
);
plotter
->
set_dash
(
true
);
plotter
->
move_to
(
StartPos
);
plotter
->
finish_to
(
EndPos
);
plotter
->
set_dash
(
false
);
plotter
->
set_dash
(
false
);
break
;
case
LAYER_BUS
:
/* Trait large */
{
int
thickness
=
wxRound
(
g_DrawDefaultLineThickness
*
2
);
if
(
thickness
<
3
)
thickness
=
3
;
/* We NEED it to be thick, even on HPGL */
plotter
->
thick_segment
(
StartPos
,
EndPos
,
thickness
,
FILLED
);
if
(
thickness
<
3
)
thickness
=
3
;
/* We NEED it to be thick, even on HPGL */
plotter
->
thick_segment
(
StartPos
,
EndPos
,
thickness
,
FILLED
);
plotter
->
set_current_line_width
(
g_DrawDefaultLineThickness
);
}
break
;
break
;
default
:
plotter
->
set_current_line_width
(
g_DrawDefaultLineThickness
);
...
...
@@ -752,12 +754,13 @@ void PlotDrawlist(Plotter *plotter, SCH_ITEM* drawlist )
plotter
->
finish_to
(
EndPos
);
break
;
}
break
;
case
DRAW_JUNCTION_STRUCT_TYPE
:
#undef STRUCT
#define STRUCT ( (DrawJunctionStruct*) drawlist )
plotter
->
set_color
(
ReturnLayerColor
(
STRUCT
->
GetLayer
()
)
);
plotter
->
set_color
(
ReturnLayerColor
(
STRUCT
->
GetLayer
()
)
);
plotter
->
circle
(
STRUCT
->
m_Pos
,
DRAWJUNCTION_SIZE
,
FILLED_SHAPE
);
break
;
...
...
@@ -765,12 +768,12 @@ void PlotDrawlist(Plotter *plotter, SCH_ITEM* drawlist )
case
TYPE_SCH_LABEL
:
case
TYPE_SCH_GLOBALLABEL
:
case
TYPE_SCH_HIERLABEL
:
PlotTextStruct
(
plotter
,
drawlist
);
PlotTextStruct
(
plotter
,
drawlist
);
break
;
case
TYPE_SCH_COMPONENT
:
DrawLibItem
=
(
SCH_COMPONENT
*
)
drawlist
;
PlotLibPart
(
plotter
,
DrawLibItem
);
PlotLibPart
(
plotter
,
DrawLibItem
);
break
;
case
DRAW_PICK_ITEM_STRUCT_TYPE
:
...
...
@@ -788,14 +791,14 @@ void PlotDrawlist(Plotter *plotter, SCH_ITEM* drawlist )
case
DRAW_SHEET_STRUCT_TYPE
:
#undef STRUCT
#define STRUCT ( (DrawSheetStruct*) drawlist )
PlotSheetStruct
(
plotter
,
STRUCT
);
PlotSheetStruct
(
plotter
,
STRUCT
);
break
;
case
DRAW_NOCONNECT_STRUCT_TYPE
:
#undef STRUCT
#define STRUCT ( (DrawNoConnectStruct*) drawlist )
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_NOCONNECT
)
);
PlotNoConnectStruct
(
plotter
,
STRUCT
);
plotter
->
set_color
(
ReturnLayerColor
(
LAYER_NOCONNECT
)
);
PlotNoConnectStruct
(
plotter
,
STRUCT
);
break
;
default
:
...
...
@@ -804,4 +807,3 @@ void PlotDrawlist(Plotter *plotter, SCH_ITEM* drawlist )
drawlist
=
drawlist
->
Next
();
}
}
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