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
f1b36209
Commit
f1b36209
authored
Apr 01, 2008
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
DRAWSEGMENT::Draw()
parent
aa93f54d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
149 additions
and
220 deletions
+149
-220
trpiste.cpp
gerbview/trpiste.cpp
+2
-95
base_struct.h
include/base_struct.h
+1
-3
block.cpp
pcbnew/block.cpp
+4
-5
class_board.h
pcbnew/class_board.h
+7
-0
class_drawsegment.cpp
pcbnew/class_drawsegment.cpp
+100
-0
class_drawsegment.h
pcbnew/class_drawsegment.h
+7
-4
class_equipot.h
pcbnew/class_equipot.h
+18
-11
tracepcb.cpp
pcbnew/tracepcb.cpp
+7
-4
trpiste.cpp
pcbnew/trpiste.cpp
+3
-98
No files found.
gerbview/trpiste.cpp
View file @
f1b36209
...
...
@@ -221,103 +221,10 @@ void Trace_Segment( WinEDA_DrawPanel* panel, wxDC* DC, TRACK* track, int draw_mo
void
Trace_DrawSegmentPcb
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
DRAWSEGMENT
*
PtDrawSegment
,
int
draw_mode
)
/**************************************************************************/
/* Affichage d'un segment type drawing PCB:
* Entree : ox, oy = offset de trace
* draw_mode = mode de trace ( GR_OR, GR_XOR, GrAND)
* Les contours sont de differents type:
* segment
* cercle
* arc
*/
{
int
ux0
,
uy0
,
dx
,
dy
;
int
l_piste
;
int
color
,
mode
;
int
zoom
=
panel
->
GetZoom
();
int
rayon
;
color
=
g_DesignSettings
.
m_LayerColor
[
PtDrawSegment
->
GetLayer
()];
if
(
color
&
ITEM_NOT_SHOW
)
return
;
GRSetDrawMode
(
DC
,
draw_mode
);
l_piste
=
PtDrawSegment
->
m_Width
>>
1
;
/* l_piste = demi largeur piste */
/* coord de depart */
ux0
=
PtDrawSegment
->
m_Start
.
x
;
uy0
=
PtDrawSegment
->
m_Start
.
y
;
/* coord d'arrivee */
dx
=
PtDrawSegment
->
m_End
.
x
;
dy
=
PtDrawSegment
->
m_End
.
y
;
mode
=
DisplayOpt
.
DisplayPcbTrackFill
?
FILLED
:
SKETCH
;
if
(
PtDrawSegment
->
m_Flags
&
FORCE_SKETCH
)
mode
=
SKETCH
;
if
(
l_piste
<
(
L_MIN_DESSIN
*
zoom
)
)
mode
=
FILAIRE
;
switch
(
PtDrawSegment
->
m_Shape
)
{
case
S_CIRCLE
:
rayon
=
(
int
)
hypot
(
(
double
)
(
dx
-
ux0
),
(
double
)
(
dy
-
uy0
)
);
if
(
mode
==
FILAIRE
)
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
,
0
,
color
);
}
else
if
(
mode
==
SKETCH
)
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
-
l_piste
,
0
,
color
);
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
+
l_piste
,
0
,
color
);
}
else
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
,
PtDrawSegment
->
m_Width
,
color
);
}
break
;
case
S_ARC
:
{
int
StAngle
,
EndAngle
;
rayon
=
(
int
)
hypot
(
(
double
)
(
dx
-
ux0
),
(
double
)
(
dy
-
uy0
)
);
StAngle
=
(
int
)
ArcTangente
(
dy
-
uy0
,
dx
-
ux0
);
EndAngle
=
StAngle
+
PtDrawSegment
->
m_Angle
;
if
(
mode
==
FILAIRE
)
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
,
0
,
color
);
else
if
(
mode
==
SKETCH
)
{
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
0
,
StAngle
,
EndAngle
,
rayon
-
l_piste
,
color
);
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
0
,
StAngle
,
EndAngle
,
rayon
+
l_piste
,
color
);
}
else
{
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
,
PtDrawSegment
->
m_Width
,
color
);
}
}
break
;
// @todo Replace all calls to Trace_DrawSegmentPcb() with this call:
default
:
if
(
mode
==
FILAIRE
)
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
0
,
color
);
else
if
(
mode
==
SKETCH
)
{
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
PtDrawSegment
->
m_Width
,
color
);
}
else
{
GRFillCSegm
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
PtDrawSegment
->
m_Width
,
color
);
}
break
;
}
PtDrawSegment
->
Draw
(
panel
,
DC
,
draw_mode
);
}
...
...
include/base_struct.h
View file @
f1b36209
...
...
@@ -612,9 +612,7 @@ public:
* BOARD_ITEMs which have their own color information.
*/
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
offset
=
ZeroOffset
)
{
}
int
aDrawMode
,
const
wxPoint
&
offset
=
ZeroOffset
)
=
0
;
/**
...
...
pcbnew/block.cpp
View file @
f1b36209
...
...
@@ -503,12 +503,11 @@ void WinEDA_BasePcbFrame::Block_Delete( wxDC* DC )
switch
(
PtStruct
->
Type
()
)
{
case
TYPEDRAWSEGMENT
:
#undef STRUCT
#define STRUCT ( (DRAWSEGMENT*) PtStruct )
if
(
(
g_TabOneLayerMask
[
STRUCT
->
GetLayer
()]
&
masque_layer
)
==
0
)
if
(
(
g_TabOneLayerMask
[
PtStruct
->
GetLayer
()]
&
masque_layer
)
==
0
)
break
;
if
(
!
PtStruct
->
HitTest
(
GetScreen
()
->
BlockLocate
)
)
break
;
/* l'element est ici bon a etre efface */
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
(
DRAWSEGMENT
*
)
PtStruct
,
GR_XOR
);
PtStruct
->
DeleteStructure
();
...
...
@@ -526,7 +525,7 @@ void WinEDA_BasePcbFrame::Block_Delete( wxDC* DC )
break
;
case
TYPEMIRE
:
if
(
(
g_TabOneLayerMask
[
STRUCT
->
GetLayer
()]
&
masque_layer
)
==
0
)
if
(
(
g_TabOneLayerMask
[
PtStruct
->
GetLayer
()]
&
masque_layer
)
==
0
)
break
;
if
(
!
PtStruct
->
HitTest
(
GetScreen
()
->
BlockLocate
)
)
break
;
...
...
@@ -535,7 +534,7 @@ void WinEDA_BasePcbFrame::Block_Delete( wxDC* DC )
break
;
case
TYPECOTATION
:
if
(
(
g_TabOneLayerMask
[
STRUCT
->
GetLayer
()]
&
masque_layer
)
==
0
)
if
(
(
g_TabOneLayerMask
[
PtStruct
->
GetLayer
()]
&
masque_layer
)
==
0
)
break
;
if
(
!
PtStruct
->
HitTest
(
GetScreen
()
->
BlockLocate
)
)
break
;
...
...
pcbnew/class_board.h
View file @
f1b36209
...
...
@@ -252,6 +252,13 @@ public:
*/
void
Display_Infos
(
WinEDA_DrawFrame
*
frame
);
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
offset
=
ZeroOffset
)
{
// void WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode )
// goes here.
}
/**
* Function Visit
...
...
pcbnew/class_drawsegment.cpp
View file @
f1b36209
...
...
@@ -144,6 +144,106 @@ bool DRAWSEGMENT::ReadDrawSegmentDescr( FILE* File, int* LineNum )
}
void
DRAWSEGMENT
::
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
draw_mode
,
const
wxPoint
&
notUsed
)
{
int
ux0
,
uy0
,
dx
,
dy
;
int
l_piste
;
int
color
,
mode
;
int
zoom
;
int
rayon
;
color
=
g_DesignSettings
.
m_LayerColor
[
GetLayer
()];
if
(
color
&
ITEM_NOT_SHOW
)
return
;
if
(
panel
)
zoom
=
panel
->
GetZoom
();
else
zoom
=
ActiveScreen
->
GetZoom
();
GRSetDrawMode
(
DC
,
draw_mode
);
l_piste
=
m_Width
>>
1
;
/* l_piste = demi largeur piste */
/* coord de depart */
ux0
=
m_Start
.
x
;
uy0
=
m_Start
.
y
;
/* coord d'arrivee */
dx
=
m_End
.
x
;
dy
=
m_End
.
y
;
mode
=
DisplayOpt
.
DisplayDrawItems
;
if
(
m_Flags
&
FORCE_SKETCH
)
mode
=
SKETCH
;
if
(
l_piste
<
(
L_MIN_DESSIN
*
zoom
)
)
mode
=
FILAIRE
;
switch
(
m_Shape
)
{
case
S_CIRCLE
:
rayon
=
(
int
)
hypot
(
(
double
)
(
dx
-
ux0
),
(
double
)
(
dy
-
uy0
)
);
if
(
mode
==
FILAIRE
)
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
,
color
);
}
else
if
(
mode
==
SKETCH
)
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
-
l_piste
,
color
);
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
+
l_piste
,
color
);
}
else
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
,
m_Width
,
color
);
}
break
;
case
S_ARC
:
{
int
StAngle
,
EndAngle
;
rayon
=
(
int
)
hypot
(
(
double
)
(
dx
-
ux0
),
(
double
)
(
dy
-
uy0
)
);
StAngle
=
(
int
)
ArcTangente
(
dy
-
uy0
,
dx
-
ux0
);
EndAngle
=
StAngle
+
m_Angle
;
if
(
StAngle
>
EndAngle
)
EXCHG
(
StAngle
,
EndAngle
);
if
(
mode
==
FILAIRE
)
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
,
color
);
else
if
(
mode
==
SKETCH
)
{
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
-
l_piste
,
color
);
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
+
l_piste
,
color
);
}
else
{
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
,
m_Width
,
color
);
}
}
break
;
default
:
if
(
mode
==
FILAIRE
)
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
0
,
color
);
else
if
(
mode
==
SKETCH
)
{
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
m_Width
,
color
);
}
else
{
GRFillCSegm
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
m_Width
,
color
);
}
break
;
}
}
// see pcbstruct.h
void
DRAWSEGMENT
::
Display_Infos
(
WinEDA_DrawFrame
*
frame
)
{
...
...
pcbnew/class_drawsegment.h
View file @
f1b36209
...
...
@@ -49,6 +49,9 @@ public:
void
Copy
(
DRAWSEGMENT
*
source
);
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
offset
=
ZeroOffset
);
/**
* Function Display_Infos
* has knowledge about the frame and how and where to put status information
...
...
@@ -86,11 +89,11 @@ public:
return
wxT
(
"DRAWSEGMENT"
);
}
#if defined(DEBUG)
#if defined(DEBUG)
void
Show
(
int
nestLevel
,
std
::
ostream
&
os
);
#endif
#endif
};
...
...
pcbnew/class_equipot.h
View file @
f1b36209
...
...
@@ -33,13 +33,13 @@ public:
/**
* Function GetPosition
* returns the position of this object.
* @return wxPoint& - The position of this object, non-const so it
* @return wxPoint& - The position of this object, non-const so it
* can be changed
* A dummy to satisfy pure virtual BOARD::GetPosition()
*/
wxPoint
&
GetPosition
();
/* Effacement memoire de la structure */
void
UnLink
();
...
...
@@ -51,18 +51,25 @@ public:
* writes the data structures for this object out to a FILE in "*.brd" format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
*/
bool
Save
(
FILE
*
aFile
)
const
;
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
offset
=
ZeroOffset
)
{
// @todo we actually could show a NET, simply show all the tracks and pads
}
/**
* Function GetNet
* @return int - the netcode
*/
int
GetNet
()
const
{
return
m_NetCode
;
}
void
SetNet
(
int
aNetCode
)
{
m_NetCode
=
aNetCode
;
}
/**
* Function GetClass
* returns the class name.
...
...
@@ -73,17 +80,17 @@ public:
return
wxT
(
"NET"
);
}
#if defined(DEBUG)
/**
* Function Show
* is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level
* @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree.
* @param os The ostream& to output to.
*/
virtual
void
Show
(
int
nestLevel
,
std
::
ostream
&
os
);
#endif
};
pcbnew/tracepcb.cpp
View file @
f1b36209
...
...
@@ -101,6 +101,12 @@ void WinEDA_PcbFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
#define DRAW_CUR_LAYER_LAST 1
/* should make the function below this one:
void BOARD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
int aDrawMode, const wxPoint& offset = ZeroOffset );
*/
/****************************************************/
void
WinEDA_PcbFrame
::
Trace_Pcb
(
wxDC
*
DC
,
int
mode
)
/****************************************************/
...
...
@@ -149,13 +155,10 @@ void WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode )
case
TYPECOTATION
:
case
TYPETEXTE
:
case
TYPEMIRE
:
case
TYPEDRAWSEGMENT
:
item
->
Draw
(
DrawPanel
,
DC
,
mode
);
break
;
case
TYPEDRAWSEGMENT
:
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
(
DRAWSEGMENT
*
)
item
,
mode
);
break
;
default
:
break
;
}
...
...
pcbnew/trpiste.cpp
View file @
f1b36209
...
...
@@ -62,104 +62,9 @@ void Trace_Une_Piste( WinEDA_DrawPanel* panel, wxDC* DC, TRACK* Track,
void
Trace_DrawSegmentPcb
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
DRAWSEGMENT
*
PtDrawSegment
,
int
draw_mode
)
/*************************************************************/
/* Affichage d'un segment type drawing PCB:
* draw_mode = mode de trace ( GR_OR, GR_XOR, GrAND)
* Les contours sont de differents type:
* segment
* cercle
* arc
*/
{
int
ux0
,
uy0
,
dx
,
dy
;
int
l_piste
;
int
color
,
mode
;
int
zoom
;
int
rayon
;
color
=
g_DesignSettings
.
m_LayerColor
[
PtDrawSegment
->
GetLayer
()];
if
(
color
&
ITEM_NOT_SHOW
)
return
;
if
(
panel
)
zoom
=
panel
->
GetZoom
();
else
zoom
=
ActiveScreen
->
GetZoom
();
GRSetDrawMode
(
DC
,
draw_mode
);
l_piste
=
PtDrawSegment
->
m_Width
>>
1
;
/* l_piste = demi largeur piste */
/* coord de depart */
ux0
=
PtDrawSegment
->
m_Start
.
x
;
uy0
=
PtDrawSegment
->
m_Start
.
y
;
/* coord d'arrivee */
dx
=
PtDrawSegment
->
m_End
.
x
;
dy
=
PtDrawSegment
->
m_End
.
y
;
mode
=
DisplayOpt
.
DisplayDrawItems
;
if
(
PtDrawSegment
->
m_Flags
&
FORCE_SKETCH
)
mode
=
SKETCH
;
if
(
l_piste
<
(
L_MIN_DESSIN
*
zoom
)
)
mode
=
FILAIRE
;
// @todo Replace all calls to Trace_DrawSegmentPcb() with this call:
switch
(
PtDrawSegment
->
m_Shape
)
{
case
S_CIRCLE
:
rayon
=
(
int
)
hypot
(
(
double
)
(
dx
-
ux0
),
(
double
)
(
dy
-
uy0
)
);
if
(
mode
==
FILAIRE
)
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
,
color
);
}
else
if
(
mode
==
SKETCH
)
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
-
l_piste
,
color
);
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
+
l_piste
,
color
);
}
else
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
rayon
,
PtDrawSegment
->
m_Width
,
color
);
}
break
;
case
S_ARC
:
{
int
StAngle
,
EndAngle
;
rayon
=
(
int
)
hypot
(
(
double
)
(
dx
-
ux0
),
(
double
)
(
dy
-
uy0
)
);
StAngle
=
(
int
)
ArcTangente
(
dy
-
uy0
,
dx
-
ux0
);
EndAngle
=
StAngle
+
PtDrawSegment
->
m_Angle
;
if
(
StAngle
>
EndAngle
)
EXCHG
(
StAngle
,
EndAngle
);
if
(
mode
==
FILAIRE
)
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
,
color
);
else
if
(
mode
==
SKETCH
)
{
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
-
l_piste
,
color
);
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
+
l_piste
,
color
);
}
else
{
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
StAngle
,
EndAngle
,
rayon
,
PtDrawSegment
->
m_Width
,
color
);
}
}
break
;
default
:
if
(
mode
==
FILAIRE
)
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
0
,
color
);
else
if
(
mode
==
SKETCH
)
{
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
PtDrawSegment
->
m_Width
,
color
);
}
else
{
GRFillCSegm
(
&
panel
->
m_ClipBox
,
DC
,
ux0
,
uy0
,
dx
,
dy
,
PtDrawSegment
->
m_Width
,
color
);
}
break
;
}
PtDrawSegment
->
Draw
(
panel
,
DC
,
draw_mode
);
}
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