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
3c74b2e5
Commit
3c74b2e5
authored
Oct 31, 2007
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
zones work
parent
2a2bf469
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
90 additions
and
74 deletions
+90
-74
change_log.txt
change_log.txt
+6
-1
trpiste.cpp
gerbview/trpiste.cpp
+3
-1
pcbstruct.h
include/pcbstruct.h
+2
-0
collectors.h
pcbnew/collectors.h
+6
-6
tracepcb.cpp
pcbnew/tracepcb.cpp
+2
-2
zones.cpp
pcbnew/zones.cpp
+71
-64
No files found.
change_log.txt
View file @
3c74b2e5
...
...
@@ -16,9 +16,14 @@ email address.
+ all
* Added Doxygen configuration file, whose standard name is Doxyfile. Output
is set to go to ./doxygen directory just off the project tree.
*
a
dded a note to todo.txt which asks folks to start using "Doxygen compatible"
*
A
dded a note to todo.txt which asks folks to start using "Doxygen compatible"
comments in member functions and classes. Run Doxygen on the project, then
look at the documentation for class INSPECTOR as an example.
+ pcbnew
zones.cpp, Trace_Pcb(), & EDGE_ZONE class:
Reversed the usage of EDGE_ZONE::Pnext and Pback in the list management to be
consistent with other classes and with INSPECTOR::Inspect() and
BOARD::~BOARD().
2007-Oct-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
...
...
gerbview/trpiste.cpp
View file @
3c74b2e5
...
...
@@ -247,14 +247,16 @@ void Trace_DrawSegmentPcb( WinEDA_DrawPanel* panel, wxDC* DC,
/* 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
;
...
...
include/pcbstruct.h
View file @
3c74b2e5
...
...
@@ -433,6 +433,8 @@ public:
EDGE_ZONE
*
Next
()
{
return
(
EDGE_ZONE
*
)
Pnext
;
}
EDGE_ZONE
*
Back
()
{
return
(
EDGE_ZONE
*
)
Pback
;
}
/**
* Function Save
...
...
pcbnew/collectors.h
View file @
3c74b2e5
...
...
@@ -37,9 +37,9 @@
/**
* Class COLLECTORS_GUIDE
* is an abstract base class whose derivatives may be passed to a GENERALCOLLECTOR,
* telling GENERALCOLLECTOR what should be collected (aside from HitTest()ing
* and KICAD_T scanTypes[], information which are provided to the GENERALCOLLECTOR
* is an abstract base class whose derivatives may be passed to a GENERAL
_
COLLECTOR,
* telling GENERAL
_
COLLECTOR what should be collected (aside from HitTest()ing
* and KICAD_T scanTypes[], information which are provided to the GENERAL
_
COLLECTOR
* through attributes or arguments separately).
* <p>
* A justification for this class is to keep the structural storage details of
...
...
@@ -113,7 +113,7 @@ public:
/**
* Function IgnoreMTextsMarkedNoShow
* @return bool -true if MTexts marked as "no show" should be ignored.
* @return bool -
true if MTexts marked as "no show" should be ignored.
*/
virtual
bool
IgnoreMTextsMarkedNoShow
()
const
=
0
;
...
...
@@ -302,7 +302,7 @@ public:
/**
* Function Collect
* scans a BOARD using this class's Inspector method, which does the collection.
* scans a BOARD
_ITEM
using this class's Inspector method, which does the collection.
* @param aItem A BOARD_ITEM to scan, may be a BOARD or MODULE, or whatever.
* @param aScanList A list of KICAD_Ts with a terminating EOT, that specs
* what is to be collected and the priority order of the resultant
...
...
@@ -460,7 +460,7 @@ public:
/**
* Function IgnoreMTextsMarkedNoShow
* @return bool -true if MTexts marked as "no show" should be ignored.
* @return bool -
true if MTexts marked as "no show" should be ignored.
*/
bool
IgnoreMTextsMarkedNoShow
()
const
{
return
m_IgnoreMTextsMarkedNoShow
;
}
void
SetIgnoreMTextsMarkedNoShow
(
bool
ignore
)
{
m_IgnoreMTextsMarkedNoShow
=
ignore
;
}
...
...
pcbnew/tracepcb.cpp
View file @
3c74b2e5
...
...
@@ -176,8 +176,8 @@ void WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode )
if
(
g_HightLigt_Status
)
DrawHightLight
(
DC
,
g_HightLigth_NetCode
);
EDGE_ZONE
*
segment
=
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
segment
!=
NULL
;
segment
=
(
EDGE_ZONE
*
)
segment
->
Pback
)
EDGE_ZONE
*
segment
;
for
(
segment
=
m_Pcb
->
m_CurrentLimitZone
;
segment
;
segment
=
segment
->
Next
()
)
{
if
(
segment
->
m_Flags
&
IS_MOVED
)
continue
;
...
...
pcbnew/zones.cpp
View file @
3c74b2e5
...
...
@@ -433,24 +433,22 @@ void WinEDA_PcbFrame::Edit_Zone_Width( wxDC* DC, SEGZONE* aZone )
/**********************************************************/
void
WinEDA_PcbFrame
::
Delete_Zone
(
wxDC
*
DC
,
SEGZONE
*
Zone
)
void
WinEDA_PcbFrame
::
Delete_Zone
(
wxDC
*
DC
,
SEGZONE
*
a
Zone
)
/**********************************************************/
/* Efface la zone Zone.
* La zone est constituee des segments zones de meme TimeStamp
*/
{
unsigned
long
TimeStamp
;
int
nb_segm
=
0
;
bool
modify
=
FALSE
;
TimeStamp
=
Zone
->
m_TimeStamp
;
SEGZONE
*
next
;
for
(
SEGZONE
*
zone
=
m_Pcb
->
m_Zone
;
zone
;
zone
=
next
)
{
next
=
zone
->
Next
();
if
(
zone
->
m_TimeStamp
==
TimeStamp
)
if
(
zone
->
m_TimeStamp
==
aZone
->
m_TimeStamp
)
{
modify
=
TRUE
;
...
...
@@ -473,28 +471,27 @@ EDGE_ZONE* WinEDA_PcbFrame::Del_SegmEdgeZone( wxDC* DC, EDGE_ZONE* edge_zone )
/*****************************************************************************/
/* Routine d'effacement du segment de limite zone en cours de trace */
{
EDGE_ZONE
*
Segm
,
*
previous_
segm
;
EDGE_ZONE
*
segm
;
if
(
m_Pcb
->
m_CurrentLimitZone
)
S
egm
=
m_Pcb
->
m_CurrentLimitZone
;
s
egm
=
m_Pcb
->
m_CurrentLimitZone
;
else
S
egm
=
edge_zone
;
s
egm
=
edge_zone
;
if
(
S
egm
==
NULL
)
if
(
s
egm
==
NULL
)
return
NULL
;
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
S
egm
,
GR_XOR
);
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
s
egm
,
GR_XOR
);
previous_segm
=
(
EDGE_ZONE
*
)
Segm
->
Pback
;
delete
S
egm
;
m_Pcb
->
m_CurrentLimitZone
=
segm
->
Next
()
;
delete
s
egm
;
Segm
=
previous_segm
;
m_Pcb
->
m_CurrentLimitZone
=
Segm
;
SetCurItem
(
Segm
);
segm
=
m_Pcb
->
m_CurrentLimitZone
;
SetCurItem
(
segm
);
if
(
S
egm
)
if
(
s
egm
)
{
Segm
->
Pnext
=
NULL
;
segm
->
Pback
=
NULL
;
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
TRUE
);
}
...
...
@@ -504,7 +501,7 @@ EDGE_ZONE* WinEDA_PcbFrame::Del_SegmEdgeZone( wxDC* DC, EDGE_ZONE* edge_zone )
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
SetCurItem
(
NULL
);
}
return
S
egm
;
return
s
egm
;
}
...
...
@@ -639,20 +636,18 @@ void WinEDA_BasePcbFrame::DelLimitesZone( wxDC* DC, bool Redraw )
return
;
// erase the old zone border, one segment at a time
segment
=
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
segment
!=
NULL
;
segment
=
next
)
for
(
segment
=
m_Pcb
->
m_CurrentLimitZone
;
segment
;
segment
=
next
)
{
next
=
(
EDGE_ZONE
*
)
segment
->
Pback
;
next
=
segment
->
Next
()
;
if
(
Redraw
)
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
segment
,
GR_XOR
);
segment
->
Pnext
=
NULL
;
delete
segment
;
}
m_Pcb
->
m_CurrentLimitZone
=
NULL
;
SetCurItem
(
NULL
);
m_Pcb
->
m_CurrentLimitZone
=
NULL
;
}
...
...
@@ -678,10 +673,10 @@ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone()
newedge
->
SetLayer
(
GetScreen
()
->
m_Active_Layer
);
// link into list:
newedge
->
P
back
=
oldedge
;
newedge
->
P
next
=
oldedge
;
if
(
oldedge
)
oldedge
->
P
next
=
newedge
;
oldedge
->
P
back
=
newedge
;
m_Pcb
->
m_CurrentLimitZone
=
newedge
;
...
...
@@ -701,8 +696,8 @@ EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone()
newedge
->
SetLayer
(
GetScreen
()
->
m_Active_Layer
);
// link into list:
newedge
->
P
back
=
oldedge
;
oldedge
->
P
next
=
newedge
;
newedge
->
P
next
=
oldedge
;
oldedge
->
P
back
=
newedge
;
m_Pcb
->
m_CurrentLimitZone
=
newedge
;
}
}
...
...
@@ -719,7 +714,7 @@ void WinEDA_PcbFrame::End_Zone( wxDC* DC )
* Routine de fin de trace d'une zone (succession de segments)
*/
{
EDGE_ZONE
*
PtLim
;
EDGE_ZONE
*
edge
;
if
(
m_Pcb
->
m_CurrentLimitZone
)
{
...
...
@@ -727,22 +722,22 @@ void WinEDA_PcbFrame::End_Zone( wxDC* DC )
/* le dernier point genere est de longueur tj nulle donc inutile. */
/* il sera raccorde au point de depart */
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
PtLim
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
edge
=
m_Pcb
->
m_CurrentLimitZone
;
edge
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
while
(
PtLim
&&
PtLim
->
Pback
)
while
(
edge
&&
edge
->
Next
()
)
{
PtLim
=
(
EDGE_ZONE
*
)
PtLim
->
Pback
;
if
(
PtLim
->
m_Flags
&
STARTPOINT
)
edge
=
edge
->
Next
()
;
if
(
edge
->
m_Flags
&
STARTPOINT
)
break
;
PtLim
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
edge
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
}
if
(
PtLim
)
if
(
edge
)
{
PtLim
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
m_Pcb
->
m_CurrentLimitZone
->
m_End
=
PtLim
->
m_Start
;
edge
->
m_Flags
&=
~
(
IS_NEW
|
IS_MOVED
);
m_Pcb
->
m_CurrentLimitZone
->
m_End
=
edge
->
m_Start
;
}
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
m_Pcb
->
m_CurrentLimitZone
,
GR_XOR
);
}
...
...
@@ -759,8 +754,9 @@ static void Show_Zone_Edge_While_MoveMouse( WinEDA_DrawPanel* panel, wxDC* DC, b
/* redessin du contour de la piste lors des deplacements de la souris
*/
{
EDGE_ZONE
*
PtLim
,
*
edgezone
;
WinEDA_PcbFrame
*
pcbframe
=
(
WinEDA_PcbFrame
*
)
panel
->
m_Parent
;
EDGE_ZONE
*
edge
;
EDGE_ZONE
*
currentEdge
;
WinEDA_PcbFrame
*
pcbframe
=
(
WinEDA_PcbFrame
*
)
panel
->
m_Parent
;
if
(
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
==
NULL
)
return
;
...
...
@@ -768,37 +764,37 @@ static void Show_Zone_Edge_While_MoveMouse( WinEDA_DrawPanel* panel, wxDC* DC, b
/* efface ancienne position si elle a ete deja dessinee */
if
(
erase
)
{
PtLim
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
(
EDGE_ZONE
*
)
PtLim
->
Pback
)
edge
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
// for( ; edge; edge = edge->Next()
)
{
Trace_DrawSegmentPcb
(
panel
,
DC
,
PtLim
,
GR_XOR
);
Trace_DrawSegmentPcb
(
panel
,
DC
,
edge
,
GR_XOR
);
}
}
/* mise a jour de la couche */
edgezone
=
PtLim
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
(
EDGE_ZONE
*
)
PtLim
->
Pback
)
for
(
edge
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
edge
;
edge
=
edge
->
Next
()
)
{
PtLim
->
SetLayer
(
pcbframe
->
GetScreen
()
->
m_Active_Layer
);
edge
->
SetLayer
(
pcbframe
->
GetScreen
()
->
m_Active_Layer
);
}
/* dessin de la nouvelle piste : mise a jour du point d'arrivee */
currentEdge
=
pcbframe
->
m_Pcb
->
m_CurrentLimitZone
;
if
(
Zone_45_Only
)
{
/* Calcul de l'extremite de la piste pour orientations permises:
* horiz,vertical ou 45 degre */
edgezone
->
m_End
=
pcbframe
->
GetScreen
()
->
m_Curseur
;
Calcule_Coord_Extremite_45
(
edgezone
->
m_Start
.
x
,
edgezone
->
m_Start
.
y
,
&
edgezone
->
m_End
.
x
,
&
edgezone
->
m_End
.
y
);
{
// Calcul de l'extremite de la piste pour orientations permises:
// horiz,vertical ou 45 degre
currentEdge
->
m_End
=
pcbframe
->
GetScreen
()
->
m_Curseur
;
Calcule_Coord_Extremite_45
(
currentEdge
->
m_Start
.
x
,
currentEdge
->
m_Start
.
y
,
&
currentEdge
->
m_End
.
x
,
&
currentEdge
->
m_End
.
y
);
}
else
/* ici l'angle d'inclinaison est quelconque */
{
edgezon
e
->
m_End
=
pcbframe
->
GetScreen
()
->
m_Curseur
;
currentEdg
e
->
m_End
=
pcbframe
->
GetScreen
()
->
m_Curseur
;
}
PtLim
=
edgezone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
(
EDGE_ZONE
*
)
PtLim
->
Pback
)
// for( ; currentEdge; currentEdge = currentEdge->Next() )
{
Trace_DrawSegmentPcb
(
panel
,
DC
,
PtLim
,
GR_XOR
);
Trace_DrawSegmentPcb
(
panel
,
DC
,
currentEdge
,
GR_XOR
);
}
}
...
...
@@ -852,7 +848,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
/* mise a jour de la couche */
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
(
EDGE_ZONE
*
)
PtLim
->
Pback
)
for
(
;
PtLim
!=
NULL
;
PtLim
=
PtLim
->
Next
()
)
{
Trace_DrawSegmentPcb
(
DrawPanel
,
DC
,
PtLim
,
GR_XOR
);
PtLim
->
SetLayer
(
GetScreen
()
->
m_Active_Layer
);
...
...
@@ -930,7 +926,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
/* Init des points d'accrochage possibles de la zone:
* les pistes du net sont des points d'accrochage convenables*/
TRACK
*
pt_segm
=
m_Pcb
->
m_Track
;
for
(
;
pt_segm
!=
NULL
;
pt_segm
=
(
TRACK
*
)
pt_segm
->
Pnext
)
for
(
;
pt_segm
!=
NULL
;
pt_segm
=
pt_segm
->
Next
()
)
{
if
(
g_HightLigth_NetCode
!=
pt_segm
->
GetNet
()
)
continue
;
...
...
@@ -950,8 +946,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
Route_Layer_BOTTOM
=
Route_Layer_TOP
=
GetScreen
()
->
m_Active_Layer
;
/* Trace des limites de la zone sur la matrice de routage: */
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
(
EDGE_ZONE
*
)
PtLim
->
Pback
)
for
(
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
PtLim
;
PtLim
=
PtLim
->
Next
()
)
{
int
ux0
,
uy0
,
ux1
,
uy1
;
ux0
=
PtLim
->
m_Start
.
x
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
...
...
@@ -1000,8 +995,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC )
/* Trace des limites de la zone sur la matrice de routage
* (a pu etre detruit par PlaceCells()) : */
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
for
(
;
PtLim
!=
NULL
;
PtLim
=
(
EDGE_ZONE
*
)
PtLim
->
Pback
)
for
(
PtLim
=
m_Pcb
->
m_CurrentLimitZone
;
PtLim
;
PtLim
=
PtLim
->
Next
()
)
{
int
ux0
,
uy0
,
ux1
,
uy1
;
ux0
=
PtLim
->
m_Start
.
x
-
m_Pcb
->
m_BoundaryBox
.
m_Pos
.
x
;
...
...
@@ -1103,10 +1097,17 @@ static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code
pt_track
=
new
SEGZONE
(
frame
->
m_Pcb
);
pt_track
->
SetLayer
(
layer
);
pt_track
->
SetNet
(
net_code
);
pt_track
->
m_Width
=
g_GridRoutingSize
;
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
pt_track
->
Insert
(
frame
->
m_Pcb
,
NULL
);
pt_track
->
Draw
(
frame
->
DrawPanel
,
DC
,
GR_OR
);
nbsegm
++
;
...
...
@@ -1142,8 +1143,13 @@ static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code
pt_track
->
SetLayer
(
layer
);
pt_track
->
m_Width
=
g_GridRoutingSize
;
pt_track
->
SetNet
(
net_code
);
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_Start
.
x
=
ux0
;
pt_track
->
m_Start
.
y
=
uy0
;
pt_track
->
m_End
.
x
=
ux1
;
pt_track
->
m_End
.
y
=
uy1
;
pt_track
->
m_TimeStamp
=
s_TimeStamp
;
pt_track
->
Insert
(
frame
->
m_Pcb
,
NULL
);
pt_track
->
Draw
(
frame
->
DrawPanel
,
DC
,
GR_OR
);
...
...
@@ -1314,6 +1320,7 @@ static bool Genere_Pad_Connexion( WinEDA_PcbFrame* frame, wxDC* DC, int layer )
if
(
frame
->
m_Pcb
->
m_Zone
==
NULL
)
return
FALSE
;
/* pas de zone */
if
(
frame
->
m_Pcb
->
m_Zone
->
m_TimeStamp
!=
s_TimeStamp
)
/* c'est une autre zone */
return
FALSE
;
...
...
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