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
2aa1a26b
Commit
2aa1a26b
authored
Jan 19, 2008
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
beautification
parent
461d75de
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
473 additions
and
390 deletions
+473
-390
base_struct.cpp
common/base_struct.cpp
+34
-14
drawtxt.cpp
common/drawtxt.cpp
+439
-376
No files found.
common/base_struct.cpp
View file @
2aa1a26b
...
...
@@ -342,6 +342,7 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
if
(
m_TextDrawings
==
NULL
)
/* pointeur sur la liste des segments de dessin */
CreateDrawData
();
if
(
m_TextDrawings
==
NULL
)
return
;
...
...
@@ -349,6 +350,7 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
width
=
m_Width
/
zoom
;
if
(
display_mode
==
FILAIRE
)
width
=
0
;
/* choix de la couleur du texte : */
if
(
draw_mode
!=
-
1
)
GRSetDrawMode
(
DC
,
draw_mode
);
...
...
@@ -370,12 +372,15 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
{
int
anchor_size
=
2
*
zoom
;
anchor_color
&=
MASKCOLOR
;
/* calcul de la position du texte */
int
cX
=
m_Pos
.
x
-
offset
.
x
;
int
cY
=
m_Pos
.
y
-
offset
.
y
;
/* trace ancre du texte */
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
cX
-
anchor_size
,
cY
,
cX
+
anchor_size
,
cY
,
0
,
anchor_color
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
cX
,
cY
-
anchor_size
,
cX
,
cY
+
anchor_size
,
0
,
anchor_color
);
}
...
...
@@ -385,15 +390,14 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
nbpoints
=
m_TextDrawings
[
jj
];
if
(
nbpoints
>
50
)
nbpoints
=
50
;
for
(
kk
=
0
,
ll
=
0
;
(
kk
<
nbpoints
)
&&
(
ii
<
m_TextDrawingsSize
);
kk
++
)
{
coord
[
ll
]
=
m_TextDrawings
[
ii
]
+
offset
.
x
+
m_Pos
.
x
;
ll
++
;
ii
++
;
coord
[
ll
]
=
m_TextDrawings
[
ii
]
+
offset
.
y
+
m_Pos
.
y
;
ll
++
;
ii
++
;
coord
[
ll
++
]
=
m_TextDrawings
[
ii
++
]
+
offset
.
x
+
m_Pos
.
x
;
coord
[
ll
++
]
=
m_TextDrawings
[
ii
++
]
+
offset
.
y
+
m_Pos
.
y
;
}
jj
=
ii
;
ii
++
;
jj
=
ii
++
;
if
(
width
>
2
)
{
...
...
@@ -544,8 +548,13 @@ void EDA_TextStruct::CreateDrawData()
m_ZoomLevelDrawable
=
m_Size
.
x
/
3
;
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* Decalage du debut du texte / centre */
ux0
=
cX
-
dx
;
uy0
=
cY
;
dx
+=
cX
;
dy
=
cY
;
ux0
=
cX
-
dx
;
uy0
=
cY
;
dx
+=
cX
;
dy
=
cY
;
RotatePoint
(
&
ux0
,
&
uy0
,
cX
,
cY
,
m_Orient
);
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
m_Orient
);
...
...
@@ -582,9 +591,10 @@ void EDA_TextStruct::CreateDrawData()
coord
=
(
int
*
)
realloc
(
coord
,
coord_count_max
*
sizeof
(
int
)
);
}
coord
[
jj
]
=
nbpoints
;
jj
=
ii
;
ii
++
;
jj
=
ii
++
;
}
plume
=
f_cod
;
nbpoints
=
0
;
plume
=
f_cod
;
nbpoints
=
0
;
break
;
case
'D'
:
...
...
@@ -600,14 +610,20 @@ void EDA_TextStruct::CreateDrawData()
f_cod
=
*
ptcar
;
k2
=
f_cod
;
/* trace sur axe H */
k2
=
(
k2
*
size_h
)
/
9
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
m_Orient
);
if
(
ii
>=
coord_count_max
)
{
coord_count_max
*=
2
;
coord
=
(
int
*
)
realloc
(
coord
,
coord_count_max
*
sizeof
(
int
)
);
}
coord
[
ii
]
=
dx
;
ii
++
;
coord
[
ii
]
=
dy
;
ii
++
;
coord
[
ii
++
]
=
dx
;
coord
[
ii
++
]
=
dy
;
nbpoints
++
;
break
;
}
...
...
@@ -618,7 +634,8 @@ void EDA_TextStruct::CreateDrawData()
/* end boucle for = end trace de 1 caractere */
ptr
++
;
ox
+=
espacement
;
ptr
++
;
ox
+=
espacement
;
}
/* end trace du texte */
...
...
@@ -661,13 +678,16 @@ bool EDA_Rect::Inside( const wxPoint& point )
if
(
size
.
x
<
0
)
{
size
.
x
=
-
size
.
x
;
rel_posx
+=
size
.
x
;
size
.
x
=
-
size
.
x
;
rel_posx
+=
size
.
x
;
}
if
(
size
.
y
<
0
)
{
size
.
y
=
-
size
.
y
;
rel_posy
+=
size
.
y
;
size
.
y
=
-
size
.
y
;
rel_posy
+=
size
.
y
;
}
return
(
rel_posx
>=
0
)
&&
(
rel_posy
>=
0
)
&&
(
rel_posy
<=
size
.
y
)
&&
(
rel_posx
<=
size
.
x
)
...
...
common/drawtxt.cpp
View file @
2aa1a26b
/*************************************************/
/* drawtxt.cpp : Function to draw and plot texts */
/*************************************************/
/*************************************************/
/* drawtxt.cpp : Function to draw and plot texts */
/*************************************************/
#include "fctsys.h"
#include "gr_basic.h"
...
...
@@ -22,391 +22,454 @@
/****************************************************************************/
void
DrawGraphicText
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
Pos
,
int
gcolor
,
const
wxString
&
Text
,
int
orient
,
const
wxSize
&
Size
,
int
h_justify
,
int
v_justify
,
int
width
)
void
DrawGraphicText
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
Pos
,
int
gcolor
,
const
wxString
&
Text
,
int
orient
,
const
wxSize
&
Size
,
int
h_justify
,
int
v_justify
,
int
width
)
/*****************************************************************************/
/* Draw a graphic text (like module texts)
Text = text to draw
Pos = text position (according to h_justify, v_justify)
Size = text size (size.x or size.y can be < 0 for mirrored texts)
orient = angle in 0.1 degree
mode_color = GR_OR, GR_XOR..
h_justify = horizontal justification (Left, center, right)
v_justify = vertical justification (bottom, center, top)
width = line width (pen width) (default = 0)
if width < 0 : draw segments in sketch mode, width = abs(width)
*/
*
Text = text to draw
*
Pos = text position (according to h_justify, v_justify)
* Size = text size (size.x or size.y can be < 0 for mirrored texts)
*
orient = angle in 0.1 degree
*
mode_color = GR_OR, GR_XOR..
*
h_justify = horizontal justification (Left, center, right)
*
v_justify = vertical justification (bottom, center, top)
*
width = line width (pen width) (default = 0)
*
if width < 0 : draw segments in sketch mode, width = abs(width)
*/
{
int
ii
,
kk
,
nbchar
,
AsciiCode
,
endcar
;
int
k1
,
k2
,
x0
,
y0
;
int
zoom
;
int
size_h
,
size_v
,
espacement
;
SH_CODE
f_cod
,
plume
=
'U'
;
const
SH_CODE
*
ptcar
;
int
ptr
;
int
ux0
,
uy0
,
dx
,
dy
;
// Draw coordinate for segments to draw. also used in some other calculation
int
cX
,
cY
;
// Texte center
int
ox
,
oy
;
// Draw coordinates for the current char
int
coord
[
100
];
// Buffer coordinate used to draw polylines (char shapes)
bool
sketch_mode
=
FALSE
;
zoom
=
panel
->
GetZoom
();
size_h
=
Size
.
x
;
size_v
=
Size
.
y
;
if
(
width
<
0
)
{
width
=
-
width
;
sketch_mode
=
TRUE
;
}
kk
=
0
;
ptr
=
0
;
/* ptr = text index */
nbchar
=
Text
.
Len
();
if
(
nbchar
==
0
)
return
;
espacement
=
(
10
*
size_h
)
/
9
;
// this is the pitch between chars
ox
=
cX
=
Pos
.
x
;
oy
=
cY
=
Pos
.
y
;
/* Do not draw the text if out of draw area! */
if
(
panel
)
{
int
xm
,
ym
,
ll
,
xc
,
yc
;
int
textsize
=
ABS
(
espacement
);
ll
=
(
textsize
*
nbchar
)
/
zoom
;
xc
=
GRMapX
(
cX
);
yc
=
GRMapY
(
cY
);
x0
=
panel
->
m_ClipBox
.
GetX
()
-
ll
;
y0
=
panel
->
m_ClipBox
.
GetY
()
-
ll
;
xm
=
panel
->
m_ClipBox
.
GetRight
()
+
ll
;
ym
=
panel
->
m_ClipBox
.
GetBottom
()
+
ll
;
if
(
xc
<
x0
)
return
;
if
(
yc
<
y0
)
return
;
if
(
xc
>
xm
)
return
;
if
(
yc
>
ym
)
return
;
}
/* Compute the position ux0, uy0 of the first letter , next */
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* dx, dy = draw offset between first letter and text center */
ux0
=
uy0
=
0
;
/* Decalage du centre du texte / coord de ref */
if
(
(
orient
==
0
)
||
(
orient
==
1800
)
)
/* Horizontal Text */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dx
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dx
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dy
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dy
;
break
;
}
}
else
/* Vertical Text */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dy
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dy
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dx
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dx
;
break
;
}
}
cX
+=
ux0
;
cY
+=
uy0
;
ox
=
cX
-
dx
;
;
oy
=
cY
+
dy
;
if
(
(
Size
.
x
/
zoom
)
==
0
)
return
;
if
(
ABS
((
Size
.
x
/
zoom
))
<
3
)
/* chars trop petits pour etre dessines */
{
/* le texte est symbolise par une barre */
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* Decalage du debut du texte / centre */
ux0
=
cX
-
dx
;
uy0
=
cY
;
dx
+=
cX
;
dy
=
cY
;
RotatePoint
(
&
ux0
,
&
uy0
,
cX
,
cY
,
orient
);
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
width
,
gcolor
);
return
;
}
int
ii
,
kk
,
nbchar
,
AsciiCode
,
endcar
;
int
k1
,
k2
,
x0
,
y0
;
int
zoom
;
int
size_h
,
size_v
,
espacement
;
SH_CODE
f_cod
,
plume
=
'U'
;
const
SH_CODE
*
ptcar
;
int
ptr
;
int
ux0
,
uy0
,
dx
,
dy
;
// Draw coordinate for segments to draw. also used in some other calculation
int
cX
,
cY
;
// Texte center
int
ox
,
oy
;
// Draw coordinates for the current char
int
coord
[
100
];
// Buffer coordinate used to draw polylines (char shapes)
bool
sketch_mode
=
FALSE
;
zoom
=
panel
->
GetZoom
();
size_h
=
Size
.
x
;
size_v
=
Size
.
y
;
if
(
width
<
0
)
{
width
=
-
width
;
sketch_mode
=
TRUE
;
}
kk
=
0
;
ptr
=
0
;
/* ptr = text index */
nbchar
=
Text
.
Len
();
if
(
nbchar
==
0
)
return
;
espacement
=
(
10
*
size_h
)
/
9
;
// this is the pitch between chars
ox
=
cX
=
Pos
.
x
;
oy
=
cY
=
Pos
.
y
;
/* Do not draw the text if out of draw area! */
if
(
panel
)
{
int
xm
,
ym
,
ll
,
xc
,
yc
;
int
textsize
=
ABS
(
espacement
);
ll
=
(
textsize
*
nbchar
)
/
zoom
;
xc
=
GRMapX
(
cX
);
yc
=
GRMapY
(
cY
);
x0
=
panel
->
m_ClipBox
.
GetX
()
-
ll
;
y0
=
panel
->
m_ClipBox
.
GetY
()
-
ll
;
xm
=
panel
->
m_ClipBox
.
GetRight
()
+
ll
;
ym
=
panel
->
m_ClipBox
.
GetBottom
()
+
ll
;
if
(
xc
<
x0
)
return
;
if
(
yc
<
y0
)
return
;
if
(
xc
>
xm
)
return
;
if
(
yc
>
ym
)
return
;
}
/* Compute the position ux0, uy0 of the first letter , next */
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* dx, dy = draw offset between first letter and text center */
ux0
=
uy0
=
0
;
/* Decalage du centre du texte / coord de ref */
if
(
(
orient
==
0
)
||
(
orient
==
1800
)
)
/* Horizontal Text */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dx
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dx
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dy
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dy
;
break
;
}
}
else
/* Vertical Text */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dy
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dy
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dx
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dx
;
break
;
}
}
cX
+=
ux0
;
cY
+=
uy0
;
ox
=
cX
-
dx
;
oy
=
cY
+
dy
;
if
(
(
Size
.
x
/
zoom
)
==
0
)
return
;
if
(
ABS
(
(
Size
.
x
/
zoom
)
)
<
3
)
/* chars trop petits pour etre dessines */
{
/* le texte est symbolise par une barre */
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* Decalage du debut du texte / centre */
ux0
=
cX
-
dx
;
uy0
=
cY
;
dx
+=
cX
;
dy
=
cY
;
RotatePoint
(
&
ux0
,
&
uy0
,
cX
,
cY
,
orient
);
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
width
,
gcolor
);
return
;
}
#if 0
dx = (espacement * nbchar) / 2;
dy = size_v / 2; /* Decalage du debut du texte / centre */
ux0 = cX - dx; uy0 = cY;
dx += cX; dy = cY;
RotatePoint(&ux0, &uy0, cX, cY, orient);
RotatePoint(&dx, &dy, cX, cY, orient);
DC->SetTextForeground( wxColour(
ColorRefs[gcolor].r,
ColorRefs[gcolor].g,
ColorRefs[gcolor].b) );
DC->DrawRotatedText(Text, GRMapX(ux0), GRMapY(uy0), (double) orient / 10.0);
return;
dx = (espacement * nbchar) / 2;
dy = size_v / 2;/* Decalage du debut du texte / centre */
ux0 = cX - dx;
uy0 = cY;
dx += cX;
dy = cY;
RotatePoint( &ux0, &uy0, cX, cY, orient );
RotatePoint( &dx, &dy, cX, cY, orient );
DC->SetTextForeground( wxColour(
ColorRefs[gcolor].r,
ColorRefs[gcolor].g,
ColorRefs[gcolor].b ) );
DC->DrawRotatedText( Text, GRMapX( ux0 ), GRMapY( uy0 ), (double) orient / 10.0 );
return;
#endif
while
(
kk
++
<
nbchar
)
{
x0
=
0
;
y0
=
0
;
AsciiCode
=
Text
.
GetChar
(
ptr
)
&
255
;
ptcar
=
graphic_fonte_shape
[
AsciiCode
]
;
/* ptcar pointe la description
du caractere a dessiner */
for
(
ii
=
0
,
endcar
=
FALSE
;
!
endcar
;
ptcar
++
)
{
f_cod
=
*
ptcar
;
/* get code n de la forme selectionnee */
switch
(
f_cod
)
{
case
'X'
:
endcar
=
TRUE
;
/* fin du caractere */
break
;
case
'U'
:
if
(
ii
&&
(
plume
==
'D'
)
)
{
if
(
width
<=
1
)
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
ii
/
2
,
coord
,
0
,
0
,
gcolor
,
gcolor
);
else
if
(
sketch_mode
)
{
int
ik
,
*
coordptr
;
coordptr
=
coord
;
for
(
ik
=
0
;
ik
<
(
ii
-
2
);
ik
+=
2
,
coordptr
+=
2
)
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
*
coordptr
,
*
(
coordptr
+
1
),
*
(
coordptr
+
2
),
*
(
coordptr
+
3
),
width
,
gcolor
)
;
}
else
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
ii
/
2
,
coord
,
0
,
width
,
gcolor
,
gcolor
);
}
plume
=
f_cod
;
ii
=
0
;
break
;
case
'D'
:
plume
=
f_cod
;
break
;
default
:
{
k1
=
f_cod
;
/* trace sur axe V */
k1
=
-
((
k1
*
size_v
)
/
9
)
;
ptcar
++
;
f_cod
=
*
ptcar
;
k2
=
f_cod
;
/* trace sur axe H */
k2
=
(
k2
*
size_h
)
/
9
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
coord
[
ii
]
=
dx
;
ii
++
;
coord
[
ii
]
=
dy
;
ii
++
;
break
;
}
}
/* end switch */
}
/* end boucle for = end trace de 1 caractere */
ptr
++
;
ox
+=
espacement
;
}
/* end trace du texte */
while
(
kk
++
<
nbchar
)
{
x0
=
0
;
y0
=
0
;
AsciiCode
=
Text
.
GetChar
(
ptr
)
&
255
;
ptcar
=
graphic_fonte_shape
[
AsciiCode
];
/* ptcar pointe la description
* du caractere a dessiner */
for
(
ii
=
0
,
endcar
=
FALSE
;
!
endcar
;
ptcar
++
)
{
f_cod
=
*
ptcar
;
/* get code n de la forme selectionnee */
switch
(
f_cod
)
{
case
'X'
:
endcar
=
TRUE
;
/* fin du caractere */
break
;
case
'U'
:
if
(
ii
&&
(
plume
==
'D'
)
)
{
if
(
width
<=
1
)
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
ii
/
2
,
coord
,
0
,
0
,
gcolor
,
gcolor
);
else
if
(
sketch_mode
)
{
int
ik
,
*
coordptr
;
coordptr
=
coord
;
for
(
ik
=
0
;
ik
<
(
ii
-
2
);
ik
+=
2
,
coordptr
+=
2
)
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
*
coordptr
,
*
(
coordptr
+
1
),
*
(
coordptr
+
2
),
*
(
coordptr
+
3
),
width
,
gcolor
);
}
else
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
ii
/
2
,
coord
,
0
,
width
,
gcolor
,
gcolor
);
}
plume
=
f_cod
;
ii
=
0
;
break
;
case
'D'
:
plume
=
f_cod
;
break
;
default
:
{
k1
=
f_cod
;
/* trace sur axe V */
k1
=
-
(
(
k1
*
size_v
)
/
9
);
ptcar
++
;
f_cod
=
*
ptcar
;
k2
=
f_cod
;
/* trace sur axe H */
k2
=
(
k2
*
size_h
)
/
9
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
RotatePoint
(
&
dx
,
&
dy
,
cX
,
cY
,
orient
);
coord
[
ii
++
]
=
dx
;
coord
[
ii
++
]
=
dy
;
break
;
}
}
/* end switch */
}
/* end boucle for = end trace de 1 caractere */
ptr
++
;
ox
+=
espacement
;
}
/* end trace du texte */
}
/******************************************************************************************/
void
PlotGraphicText
(
int
format_plot
,
const
wxPoint
&
Pos
,
int
gcolor
,
const
wxString
&
Text
,
int
orient
,
const
wxSize
&
Size
,
int
h_justify
,
int
v_justify
)
void
PlotGraphicText
(
int
format_plot
,
const
wxPoint
&
Pos
,
int
gcolor
,
const
wxString
&
Text
,
int
orient
,
const
wxSize
&
Size
,
int
h_justify
,
int
v_justify
)
/******************************************************************************************/
/*
id DrawGraphicText, for plot graphic text
*/
*
id DrawGraphicText, for plot graphic text
*/
{
int
kk
,
nbchar
,
end
,
AsciiCode
;
int
k1
,
k2
,
x0
,
y0
,
ox
,
oy
;
int
size_h
,
size_v
,
espacement
;
SH_CODE
f_cod
,
plume
=
'U'
;
const
SH_CODE
*
ptcar
;
int
ptr
;
int
ux0
,
uy0
,
dx
,
dy
;
// Coord de trace des segments de texte & variables de calcul */
int
cX
,
cY
;
// Centre du texte
void
(
*
FctPlume
)(
wxPoint
pos
,
int
state
);
switch
(
format_plot
)
{
case
PLOT_FORMAT_POST
:
FctPlume
=
LineTo_PS
;
break
;
case
PLOT_FORMAT_HPGL
:
FctPlume
=
Move_Plume_HPGL
;
break
;
case
PLOT_FORMAT_GERBER
:
default
:
return
;
}
if
(
(
gcolor
>=
0
)
&&
(
format_plot
==
PLOT_FORMAT_POST
)
)
SetColorMapPS
(
gcolor
);
size_h
=
Size
.
x
;
size_v
=
Size
.
y
;
if
(
size_h
==
0
)
size_h
=
DEFAULT_SIZE_TEXT
;
if
(
size_v
==
0
)
size_v
=
DEFAULT_SIZE_TEXT
;
kk
=
0
;
ptr
=
0
;
/* ptr = text index */
/* calcul de la position du debut des textes: ox et oy */
nbchar
=
Text
.
Len
();
espacement
=
(
10
*
size_h
)
/
9
;
ox
=
cX
=
Pos
.
x
;
oy
=
cY
=
Pos
.
y
;
/* Calcul du cadrage du texte */
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* Decalage du debut du texte / centre */
ux0
=
uy0
=
0
;
/* Decalage du centre du texte / ccord de ref */
if
(
(
orient
==
0
)
||
(
orient
==
1800
)
)
/* Texte Horizontal */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dx
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dx
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dy
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dy
;
break
;
}
}
else
/* Texte Vertical */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dy
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dy
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dx
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dx
;
break
;
}
}
cX
+=
ux0
;
cY
+=
uy0
;
/* cX, cY = coord du centre du texte */
ox
=
-
dx
;
oy
=
+
dy
;
/* ox, oy = coord debut texte, relativement au centre */
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
while
(
kk
++
<
nbchar
)
{
AsciiCode
=
Text
.
GetChar
(
ptr
)
&
255
;
ptcar
=
graphic_fonte_shape
[
AsciiCode
]
;
/* ptcar pointe la description
du caractere a dessiner */
for
(
end
=
0
;
end
==
0
;
ptcar
++
)
{
f_cod
=
*
ptcar
;
/* get code n de la forme selectionnee */
switch
(
f_cod
)
{
case
'X'
:
end
=
1
;
/* fin du caractere */
case
'U'
:
case
'D'
:
plume
=
f_cod
;
break
;
default
:
k1
=
f_cod
;
/* trace sur axe V */
k1
=
-
(
k1
*
size_v
)
/
9
;
ptcar
++
;
f_cod
=
*
ptcar
;
k2
=
f_cod
;
/* trace sur axe H */
k2
=
(
k2
*
size_h
)
/
9
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
RotatePoint
(
&
dx
,
&
dy
,
orient
);
FctPlume
(
wxPoint
(
cX
+
dx
,
cY
+
dy
),
plume
);
x0
=
k2
;
y0
=
k1
;
break
;
}
/* end switch */
}
/* end boucle for = end trace de 1 caractere */
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
ptr
++
;
ox
+=
espacement
;
}
/* end trace du texte */
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
int
kk
,
nbchar
,
end
,
AsciiCode
;
int
k1
,
k2
,
x0
,
y0
,
ox
,
oy
;
int
size_h
,
size_v
,
espacement
;
SH_CODE
f_cod
,
plume
=
'U'
;
const
SH_CODE
*
ptcar
;
int
ptr
;
int
ux0
,
uy0
,
dx
,
dy
;
// Coord de trace des segments de texte & variables de calcul */
int
cX
,
cY
;
// Centre du texte
void
(
*
FctPlume
)(
wxPoint
pos
,
int
state
);
switch
(
format_plot
)
{
case
PLOT_FORMAT_POST
:
FctPlume
=
LineTo_PS
;
break
;
case
PLOT_FORMAT_HPGL
:
FctPlume
=
Move_Plume_HPGL
;
break
;
case
PLOT_FORMAT_GERBER
:
default
:
return
;
}
if
(
(
gcolor
>=
0
)
&&
(
format_plot
==
PLOT_FORMAT_POST
)
)
SetColorMapPS
(
gcolor
);
size_h
=
Size
.
x
;
size_v
=
Size
.
y
;
if
(
size_h
==
0
)
size_h
=
DEFAULT_SIZE_TEXT
;
if
(
size_v
==
0
)
size_v
=
DEFAULT_SIZE_TEXT
;
kk
=
0
;
ptr
=
0
;
/* ptr = text index */
/* calcul de la position du debut des textes: ox et oy */
nbchar
=
Text
.
Len
();
espacement
=
(
10
*
size_h
)
/
9
;
ox
=
cX
=
Pos
.
x
;
oy
=
cY
=
Pos
.
y
;
/* Calcul du cadrage du texte */
dx
=
(
espacement
*
nbchar
)
/
2
;
dy
=
size_v
/
2
;
/* Decalage du debut du texte / centre */
ux0
=
uy0
=
0
;
/* Decalage du centre du texte / ccord de ref */
if
(
(
orient
==
0
)
||
(
orient
==
1800
)
)
/* Texte Horizontal */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dx
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dx
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dy
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dy
;
break
;
}
}
else
/* Texte Vertical */
{
switch
(
h_justify
)
{
case
GR_TEXT_HJUSTIFY_CENTER
:
break
;
case
GR_TEXT_HJUSTIFY_RIGHT
:
ux0
=
-
dy
;
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
ux0
=
dy
;
break
;
}
switch
(
v_justify
)
{
case
GR_TEXT_VJUSTIFY_CENTER
:
break
;
case
GR_TEXT_VJUSTIFY_TOP
:
uy0
=
dx
;
break
;
case
GR_TEXT_VJUSTIFY_BOTTOM
:
uy0
=
-
dx
;
break
;
}
}
cX
+=
ux0
;
cY
+=
uy0
;
/* cX, cY = coord du centre du texte */
ox
=
-
dx
;
oy
=
+
dy
;
/* ox, oy = coord debut texte, relativement au centre */
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
while
(
kk
++
<
nbchar
)
{
AsciiCode
=
Text
.
GetChar
(
ptr
)
&
255
;
ptcar
=
graphic_fonte_shape
[
AsciiCode
];
/* ptcar pointe la description
* du caractere a dessiner */
for
(
end
=
0
;
end
==
0
;
ptcar
++
)
{
f_cod
=
*
ptcar
;
/* get code n de la forme selectionnee */
switch
(
f_cod
)
{
case
'X'
:
end
=
1
;
/* fin du caractere */
case
'U'
:
case
'D'
:
plume
=
f_cod
;
break
;
default
:
k1
=
f_cod
;
/* trace sur axe V */
k1
=
-
(
k1
*
size_v
)
/
9
;
ptcar
++
;
f_cod
=
*
ptcar
;
k2
=
f_cod
;
/* trace sur axe H */
k2
=
(
k2
*
size_h
)
/
9
;
dx
=
k2
+
ox
;
dy
=
k1
+
oy
;
RotatePoint
(
&
dx
,
&
dy
,
orient
);
FctPlume
(
wxPoint
(
cX
+
dx
,
cY
+
dy
),
plume
);
x0
=
k2
;
y0
=
k1
;
break
;
}
/* end switch */
}
/* end boucle for = end trace de 1 caractere */
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
ptr
++
;
ox
+=
espacement
;
}
/* end trace du texte */
FctPlume
(
wxPoint
(
0
,
0
),
'Z'
);
}
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