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
3f970c85
Commit
3f970c85
authored
May 25, 2009
by
charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more cleanup and enhancements about rats nest (work in progress)
parent
e073bdc0
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
349 additions
and
408 deletions
+349
-408
CMakeLists.txt
common/CMakeLists.txt
+1
-1
pcbstruct.h
include/pcbstruct.h
+1
-1
wxPcbStruct.h
include/wxPcbStruct.h
+1
-1
class_board.h
pcbnew/class_board.h
+1
-1
class_netinfo.h
pcbnew/class_netinfo.h
+212
-212
class_netinfo_item.cpp
pcbnew/class_netinfo_item.cpp
+25
-5
editrack.cpp
pcbnew/editrack.cpp
+2
-2
move_or_drag_track.cpp
pcbnew/move_or_drag_track.cpp
+3
-3
protos.h
pcbnew/protos.h
+1
-1
ratsnest.cpp
pcbnew/ratsnest.cpp
+102
-181
No files found.
common/CMakeLists.txt
View file @
3f970c85
...
@@ -56,7 +56,7 @@ set(PCB_COMMON_SRCS
...
@@ -56,7 +56,7 @@ set(PCB_COMMON_SRCS
../pcbnew/class_drawsegment.cpp
../pcbnew/class_drawsegment.cpp
../pcbnew/class_drc_item.cpp
../pcbnew/class_drc_item.cpp
../pcbnew/class_edge_mod.cpp
../pcbnew/class_edge_mod.cpp
../pcbnew/class_
equipot
.cpp
../pcbnew/class_
netinfo_item
.cpp
../pcbnew/class_netinfolist.cpp
../pcbnew/class_netinfolist.cpp
../pcbnew/class_marker.cpp
../pcbnew/class_marker.cpp
../pcbnew/class_mire.cpp
../pcbnew/class_mire.cpp
...
...
include/pcbstruct.h
View file @
3f970c85
...
@@ -250,7 +250,7 @@ public:
...
@@ -250,7 +250,7 @@ public:
#include "class_edge_mod.h" // Class for footprint graphic elements
#include "class_edge_mod.h" // Class for footprint graphic elements
#include "class_text_mod.h" // Class for footprint fields
#include "class_text_mod.h" // Class for footprint fields
#include "class_module.h" // Class for the footprint
#include "class_module.h" // Class for the footprint
#include "class_
equipot.h"
#include "class_
netinfo.h" // Class for nets
/***********************************/
/***********************************/
...
...
include/wxPcbStruct.h
View file @
3f970c85
...
@@ -286,7 +286,7 @@ public:
...
@@ -286,7 +286,7 @@ public:
void
Build_Board_Ratsnest
(
wxDC
*
DC
);
void
Build_Board_Ratsnest
(
wxDC
*
DC
);
void
DrawGeneralRatsnest
(
wxDC
*
DC
,
int
net_code
=
0
);
void
DrawGeneralRatsnest
(
wxDC
*
DC
,
int
net_code
=
0
);
void
trace_ratsnest_pad
(
wxDC
*
DC
);
void
trace_ratsnest_pad
(
wxDC
*
DC
);
int
*
build_ratsnest_pad
(
EDA_BaseStruct
*
ref
,
void
build_ratsnest_pad
(
BOARD_ITEM
*
ref
,
const
wxPoint
&
refpos
,
const
wxPoint
&
refpos
,
bool
init
);
bool
init
);
...
...
pcbnew/class_board.h
View file @
3f970c85
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
#include "dlist.h"
#include "dlist.h"
#include "class_
equipot
.h"
#include "class_
netinfo
.h"
class
ZONE_CONTAINER
;
class
ZONE_CONTAINER
;
...
...
pcbnew/class_
equipot
.h
→
pcbnew/class_
netinfo
.h
View file @
3f970c85
pcbnew/class_
equipot
.cpp
→
pcbnew/class_
netinfo_item
.cpp
View file @
3f970c85
...
@@ -3,14 +3,14 @@
...
@@ -3,14 +3,14 @@
/*************************************************************************/
/*************************************************************************/
#include "fctsys.h"
#include "fctsys.h"
#include "
wxstruct
.h"
#include "
class_drawpanel
.h"
#include "common.h"
#include "common.h"
#include "kicad_string.h"
#include "kicad_string.h"
#include "pcbnew.h"
#include "pcbnew.h"
/*********************************************************/
/*********************************************************/
/* class NETINFO_ITEM: hand data relative to a given net */
/* class NETINFO_ITEM: hand
le
data relative to a given net */
/*********************************************************/
/*********************************************************/
/* Constructor */
/* Constructor */
...
@@ -24,7 +24,7 @@ NETINFO_ITEM::NETINFO_ITEM( BOARD_ITEM* aParent )
...
@@ -24,7 +24,7 @@ NETINFO_ITEM::NETINFO_ITEM( BOARD_ITEM* aParent )
}
}
/* destructo
t
*/
/* destructo
r
*/
NETINFO_ITEM
::~
NETINFO_ITEM
()
NETINFO_ITEM
::~
NETINFO_ITEM
()
{
{
...
@@ -107,9 +107,8 @@ void NETINFO_ITEM::SetNetname( const wxString & aNetname )
...
@@ -107,9 +107,8 @@ void NETINFO_ITEM::SetNetname( const wxString & aNetname )
/** function Draw (TODO)
/** function Draw (TODO)
* we actually could show a NET, simply show all the tracks and pads or net name on pad and vias
*/
*/
void
NETINFO_ITEM
::
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
o
ffset
)
void
NETINFO_ITEM
::
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
aO
ffset
)
{
{
}
}
...
@@ -169,3 +168,24 @@ void NETINFO_ITEM::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int aDrawMode, const
...
@@ -169,3 +168,24 @@ void NETINFO_ITEM::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int aDrawMode, const
valeur_param
(
(
int
)
lengthnet
,
txt
);
valeur_param
(
(
int
)
lengthnet
,
txt
);
Affiche_1_Parametre
(
frame
,
60
,
_
(
"Net Length"
),
txt
,
RED
);
Affiche_1_Parametre
(
frame
,
60
,
_
(
"Net Length"
),
txt
,
RED
);
}
}
/***********************/
/* class RATSNEST_ITEM */
/***********************/
/** function Draw
* Draws a line from the starting pad to the ending pad
*/
void
RATSNEST_ITEM
::
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
int
aDrawMode
,
const
wxPoint
&
aOffset
)
{
EDA_Colors
color
=
(
EDA_Colors
)
g_DesignSettings
.
m_RatsnestColor
;
if
(
(
m_Status
&
LOCAL_RATSNEST_ITEM
)
)
color
=
YELLOW
;
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
m_PadStart
->
m_Pos
.
x
+
aOffset
.
x
,
m_PadStart
->
m_Pos
.
y
+
aOffset
.
y
,
m_PadEnd
->
m_Pos
.
x
+
aOffset
.
x
,
m_PadEnd
->
m_Pos
.
y
+
aOffset
.
y
,
0
,
color
);
}
pcbnew/editrack.cpp
View file @
3f970c85
...
@@ -86,7 +86,7 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* aTrack, wxDC* DC )
...
@@ -86,7 +86,7 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* aTrack, wxDC* DC )
D_PAD
*
pt_pad
=
NULL
;
D_PAD
*
pt_pad
=
NULL
;
TRACK
*
TrackOnStartPoint
=
NULL
;
TRACK
*
TrackOnStartPoint
=
NULL
;
int
masquelayer
=
g_TabOneLayerMask
[((
PCB_SCREEN
*
)
GetScreen
())
->
m_Active_Layer
];
int
masquelayer
=
g_TabOneLayerMask
[((
PCB_SCREEN
*
)
GetScreen
())
->
m_Active_Layer
];
EDA_BaseStruct
*
LockPoint
;
BOARD_ITEM
*
LockPoint
;
wxPoint
pos
=
GetScreen
()
->
m_Curseur
;
wxPoint
pos
=
GetScreen
()
->
m_Curseur
;
static
int
InitialTrackWidthValue
;
/* first track segment width.
static
int
InitialTrackWidthValue
;
/* first track segment width.
...
@@ -457,7 +457,7 @@ void WinEDA_PcbFrame::End_Route( TRACK* aTrack, wxDC* DC )
...
@@ -457,7 +457,7 @@ void WinEDA_PcbFrame::End_Route( TRACK* aTrack, wxDC* DC )
* ceci contribue a la reduction du temps de calcul */
* ceci contribue a la reduction du temps de calcul */
/* Accrochage de la fin de la piste */
/* Accrochage de la fin de la piste */
EDA_BaseStruct
*
LockPoint
=
LocateLockPoint
(
GetBoard
(),
pos
,
masquelayer
);
BOARD_ITEM
*
LockPoint
=
LocateLockPoint
(
GetBoard
(),
pos
,
masquelayer
);
if
(
LockPoint
)
/* La fin de la piste est sur un PAD */
if
(
LockPoint
)
/* La fin de la piste est sur un PAD */
{
{
...
...
pcbnew/move_or_drag_track.cpp
View file @
3f970c85
...
@@ -924,7 +924,7 @@ bool WinEDA_PcbFrame::PlaceDraggedTrackSegment( TRACK* Track, wxDC* DC )
...
@@ -924,7 +924,7 @@ bool WinEDA_PcbFrame::PlaceDraggedTrackSegment( TRACK* Track, wxDC* DC )
Track
->
SetState
(
EDIT
,
OFF
);
Track
->
SetState
(
EDIT
,
OFF
);
Track
->
Draw
(
DrawPanel
,
DC
,
draw_mode
);
Track
->
Draw
(
DrawPanel
,
DC
,
draw_mode
);
/*
Tracage des segments dragge
s */
/*
Draw ddragged track
s */
pt_drag
=
g_DragSegmentList
;
pt_drag
=
g_DragSegmentList
;
for
(
;
pt_drag
;
pt_drag
=
pt_drag
->
Pnext
)
for
(
;
pt_drag
;
pt_drag
=
pt_drag
->
Pnext
)
{
{
...
@@ -954,10 +954,10 @@ bool WinEDA_PcbFrame::PlaceDraggedTrackSegment( TRACK* Track, wxDC* DC )
...
@@ -954,10 +954,10 @@ bool WinEDA_PcbFrame::PlaceDraggedTrackSegment( TRACK* Track, wxDC* DC )
/************************************************************************/
/************************************************************************/
EDA_BaseStruct
*
LocateLockPoint
(
BOARD
*
Pcb
,
wxPoint
pos
,
int
LayerMask
)
BOARD_ITEM
*
LocateLockPoint
(
BOARD
*
Pcb
,
wxPoint
pos
,
int
LayerMask
)
/************************************************************************/
/************************************************************************/
/* Routine trouvant le point "
d'accrochage
" d'une extremite de piste.
/* Routine trouvant le point "
d'accrochage
" d'une extremite de piste.
* Ce point peut etre un PAD ou un autre segment de piste
* Ce point peut etre un PAD ou un autre segment de piste
* Retourne:
* Retourne:
* - pointeur sur ce PAD ou:
* - pointeur sur ce PAD ou:
...
...
pcbnew/protos.h
View file @
3f970c85
...
@@ -353,7 +353,7 @@ void MasqueAttributs( int* masque_set, int* masque_clr );
...
@@ -353,7 +353,7 @@ void MasqueAttributs( int* masque_set, int* masque_clr );
/* DUPLTRAC.CPP */
/* DUPLTRAC.CPP */
/***************/
/***************/
EDA_BaseStruct
*
LocateLockPoint
(
BOARD
*
Pcb
,
wxPoint
pos
,
int
LayerMask
);
BOARD_ITEM
*
LocateLockPoint
(
BOARD
*
Pcb
,
wxPoint
pos
,
int
LayerMask
);
/* Routine trouvant le point " d'accrochage " d'une extremite de piste.
/* Routine trouvant le point " d'accrochage " d'une extremite de piste.
* Ce point peut etre un PAD ou un autre segment de piste
* Ce point peut etre un PAD ou un autre segment de piste
...
...
pcbnew/ratsnest.cpp
View file @
3f970c85
...
@@ -291,11 +291,7 @@ static int gen_rats_block_to_block( WinEDA_DrawPanel* DrawPanel, wxDC* DC,
...
@@ -291,11 +291,7 @@ static int gen_rats_block_to_block( WinEDA_DrawPanel* DrawPanel, wxDC* DC,
g_pt_chevelu
->
m_PadEnd
=
*
pt_liste_pad_tmp
;
g_pt_chevelu
->
m_PadEnd
=
*
pt_liste_pad_tmp
;
if
(
DisplayRastnestInProgress
&&
DC
)
if
(
DisplayRastnestInProgress
&&
DC
)
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
g_pt_chevelu
->
m_PadStart
->
m_Pos
.
x
,
g_pt_chevelu
->
Draw
(
DrawPanel
,
DC
,
GR_XOR
,
wxPoint
(
0
,
0
)
);
g_pt_chevelu
->
m_PadStart
->
m_Pos
.
y
,
g_pt_chevelu
->
m_PadEnd
->
m_Pos
.
x
,
g_pt_chevelu
->
m_PadEnd
->
m_Pos
.
y
,
0
,
g_DesignSettings
.
m_RatsnestColor
);
g_pt_chevelu
++
;
g_pt_chevelu
++
;
}
}
...
@@ -339,9 +335,6 @@ static int gen_rats_pad_to_pad( WinEDA_DrawPanel* DrawPanel, wxDC* DC,
...
@@ -339,9 +335,6 @@ static int gen_rats_pad_to_pad( WinEDA_DrawPanel* DrawPanel, wxDC* DC,
pt_start_liste
=
pt_liste_pad
;
pt_start_liste
=
pt_liste_pad
;
if
(
DC
)
GRSetDrawMode
(
DC
,
GR_XOR
);
for
(
;
pt_liste_pad
<
pt_limite
;
pt_liste_pad
++
)
for
(
;
pt_liste_pad
<
pt_limite
;
pt_liste_pad
++
)
{
{
ref_pad
=
*
pt_liste_pad
;
ref_pad
=
*
pt_liste_pad
;
...
@@ -400,13 +393,8 @@ static int gen_rats_pad_to_pad( WinEDA_DrawPanel* DrawPanel, wxDC* DC,
...
@@ -400,13 +393,8 @@ static int gen_rats_pad_to_pad( WinEDA_DrawPanel* DrawPanel, wxDC* DC,
g_pt_chevelu
->
m_PadEnd
=
pad
;
g_pt_chevelu
->
m_PadEnd
=
pad
;
if
(
DisplayRastnestInProgress
&&
DC
)
if
(
DisplayRastnestInProgress
&&
DC
)
{
g_pt_chevelu
->
Draw
(
DrawPanel
,
DC
,
GR_XOR
,
wxPoint
(
0
,
0
)
);
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
g_pt_chevelu
->
m_PadStart
->
m_Pos
.
x
,
g_pt_chevelu
->
m_PadStart
->
m_Pos
.
y
,
g_pt_chevelu
->
m_PadEnd
->
m_Pos
.
x
,
g_pt_chevelu
->
m_PadEnd
->
m_Pos
.
y
,
0
,
g_DesignSettings
.
m_RatsnestColor
);
}
g_pt_chevelu
++
;
g_pt_chevelu
++
;
}
}
}
}
...
@@ -477,7 +465,8 @@ void WinEDA_BasePcbFrame::Build_Board_Ratsnest( wxDC* DC )
...
@@ -477,7 +465,8 @@ void WinEDA_BasePcbFrame::Build_Board_Ratsnest( wxDC* DC )
if
(
m_Pcb
->
m_NbNodes
==
0
)
if
(
m_Pcb
->
m_NbNodes
==
0
)
return
;
/* pas de connexions utiles */
return
;
/* pas de connexions utiles */
m_Pcb
->
m_Ratsnest
=
(
RATSNEST_ITEM
*
)
MyZMalloc
(
(
m_Pcb
->
m_NbNodes
+
10
)
*
sizeof
(
RATSNEST_ITEM
)
);
m_Pcb
->
m_Ratsnest
=
(
RATSNEST_ITEM
*
)
MyZMalloc
(
(
m_Pcb
->
m_NbNodes
+
10
)
*
sizeof
(
RATSNEST_ITEM
)
);
if
(
m_Pcb
->
m_Ratsnest
==
NULL
)
if
(
m_Pcb
->
m_Ratsnest
==
NULL
)
return
;
return
;
...
@@ -505,8 +494,8 @@ void WinEDA_BasePcbFrame::Build_Board_Ratsnest( wxDC* DC )
...
@@ -505,8 +494,8 @@ void WinEDA_BasePcbFrame::Build_Board_Ratsnest( wxDC* DC )
/* Compute the ratsnest relative to the current net */
/* Compute the ratsnest relative to the current net */
/* a - first pass : create the blocks from not already in block pads */
/* a - first pass : create the blocks from not already in block pads */
D_PAD
**
pstart
=
&
net
->
m_ListPad
[
0
];
D_PAD
**
pstart
=
&
net
->
m_ListPad
[
0
];
D_PAD
**
pend
=
pstart
+
net
->
m_ListPad
.
size
();
D_PAD
**
pend
=
pstart
+
net
->
m_ListPad
.
size
();
int
icnt
=
gen_rats_pad_to_pad
(
DrawPanel
,
DC
,
pstart
,
pend
,
int
icnt
=
gen_rats_pad_to_pad
(
DrawPanel
,
DC
,
pstart
,
pend
,
num_block
,
&
noconn
);
num_block
,
&
noconn
);
...
@@ -530,19 +519,13 @@ void WinEDA_BasePcbFrame::Build_Board_Ratsnest( wxDC* DC )
...
@@ -530,19 +519,13 @@ void WinEDA_BasePcbFrame::Build_Board_Ratsnest( wxDC* DC )
// erase the ratsnest displayed on screen if needed
// erase the ratsnest displayed on screen if needed
RATSNEST_ITEM
*
Chevelu
=
m_Pcb
->
m_Ratsnest
;
RATSNEST_ITEM
*
Chevelu
=
m_Pcb
->
m_Ratsnest
;
if
(
DC
)
GRSetDrawMode
(
DC
,
GR_XOR
);
for
(
int
ii
=
m_Pcb
->
GetNumRatsnests
();
ii
>
0
&&
Chevelu
;
ii
--
,
Chevelu
++
)
for
(
int
ii
=
m_Pcb
->
GetNumRatsnests
();
ii
>
0
&&
Chevelu
;
ii
--
,
Chevelu
++
)
{
{
if
(
!
g_Show_Ratsnest
)
if
(
!
g_Show_Ratsnest
)
Chevelu
->
m_Status
&=
~
CH_VISIBLE
;
Chevelu
->
m_Status
&=
~
CH_VISIBLE
;
if
(
DC
)
if
(
DC
)
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
Chevelu
->
Draw
(
DrawPanel
,
DC
,
GR_XOR
,
wxPoint
(
0
,
0
)
);
Chevelu
->
m_PadStart
->
m_Pos
.
x
,
Chevelu
->
m_PadStart
->
m_Pos
.
y
,
Chevelu
->
m_PadEnd
->
m_Pos
.
x
,
Chevelu
->
m_PadEnd
->
m_Pos
.
y
,
0
,
g_DesignSettings
.
m_RatsnestColor
);
}
}
}
}
...
@@ -583,19 +566,13 @@ void WinEDA_BasePcbFrame::DrawGeneralRatsnest( wxDC* DC, int net_code )
...
@@ -583,19 +566,13 @@ void WinEDA_BasePcbFrame::DrawGeneralRatsnest( wxDC* DC, int net_code )
if
(
Chevelu
==
NULL
)
if
(
Chevelu
==
NULL
)
return
;
return
;
GRSetDrawMode
(
DC
,
GR_XOR
);
for
(
ii
=
m_Pcb
->
GetNumRatsnests
();
ii
>
0
;
Chevelu
++
,
ii
--
)
for
(
ii
=
m_Pcb
->
GetNumRatsnests
();
ii
>
0
;
Chevelu
++
,
ii
--
)
{
{
if
(
(
Chevelu
->
m_Status
&
(
CH_VISIBLE
|
CH_ACTIF
)
)
!=
(
CH_VISIBLE
|
CH_ACTIF
)
)
if
(
(
Chevelu
->
m_Status
&
(
CH_VISIBLE
|
CH_ACTIF
)
)
!=
(
CH_VISIBLE
|
CH_ACTIF
)
)
continue
;
continue
;
if
(
(
net_code
<=
0
)
||
(
net_code
==
Chevelu
->
GetNet
()
)
)
if
(
(
net_code
<=
0
)
||
(
net_code
==
Chevelu
->
GetNet
()
)
)
{
Chevelu
->
Draw
(
DrawPanel
,
DC
,
GR_XOR
,
wxPoint
(
0
,
0
)
);
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
Chevelu
->
m_PadStart
->
m_Pos
.
x
,
Chevelu
->
m_PadStart
->
m_Pos
.
y
,
Chevelu
->
m_PadEnd
->
m_Pos
.
x
,
Chevelu
->
m_PadEnd
->
m_Pos
.
y
,
0
,
g_DesignSettings
.
m_RatsnestColor
);
}
}
}
}
}
...
@@ -739,7 +716,7 @@ void WinEDA_BasePcbFrame::Tst_Ratsnest( wxDC* DC, int ref_netcode )
...
@@ -739,7 +716,7 @@ void WinEDA_BasePcbFrame::Tst_Ratsnest( wxDC* DC, int ref_netcode )
if
(
m_Pcb
->
m_Pads
.
size
()
==
0
)
if
(
m_Pcb
->
m_Pads
.
size
()
==
0
)
return
;
return
;
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_RATSNEST_ITEM_OK
)
==
0
)
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_RATSNEST_ITEM_OK
)
==
0
)
Build_Board_Ratsnest
(
DC
);
Build_Board_Ratsnest
(
DC
);
for
(
net_code
=
1
;
;
net_code
++
)
for
(
net_code
=
1
;
;
net_code
++
)
...
@@ -1039,7 +1016,7 @@ calcul_chevelu_ext:
...
@@ -1039,7 +1016,7 @@ calcul_chevelu_ext:
local_chevelu
++
;
local_chevelu
++
;
}
}
return
(
char
*
)(
local_chevelu
+
1
);
/* the struct pointed by local_chevelu is used
return
(
char
*
)
(
local_chevelu
+
1
);
/* the struct pointed by local_chevelu is used
* in temporary computations, so we skip it
* in temporary computations, so we skip it
*/
*/
}
}
...
@@ -1064,34 +1041,15 @@ void WinEDA_BasePcbFrame::trace_ratsnest_module( wxDC* DC )
...
@@ -1064,34 +1041,15 @@ void WinEDA_BasePcbFrame::trace_ratsnest_module( wxDC* DC )
local_chevelu
=
local_liste_chevelu
;
local_chevelu
=
local_liste_chevelu
;
ii
=
nb_local_chevelu
;
ii
=
nb_local_chevelu
;
GRSetDrawMode
(
DC
,
GR_XOR
);
while
(
ii
--
>
0
)
while
(
ii
--
>
0
)
{
{
if
(
local_chevelu
->
m_Status
&
LOCAL_RATSNEST_ITEM
)
local_chevelu
->
Draw
(
DrawPanel
,
DC
,
GR_XOR
,
wxPoint
(
0
,
0
)
);
{
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
local_chevelu
->
m_PadStart
->
m_Pos
.
x
-
g_Offset_Module
.
x
,
local_chevelu
->
m_PadStart
->
m_Pos
.
y
-
g_Offset_Module
.
y
,
local_chevelu
->
m_PadEnd
->
m_Pos
.
x
-
g_Offset_Module
.
x
,
local_chevelu
->
m_PadEnd
->
m_Pos
.
y
-
g_Offset_Module
.
y
,
0
,
YELLOW
);
}
else
{
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
local_chevelu
->
m_PadStart
->
m_Pos
.
x
-
g_Offset_Module
.
x
,
local_chevelu
->
m_PadStart
->
m_Pos
.
y
-
g_Offset_Module
.
y
,
local_chevelu
->
m_PadEnd
->
m_Pos
.
x
,
local_chevelu
->
m_PadEnd
->
m_Pos
.
y
,
0
,
g_DesignSettings
.
m_RatsnestColor
);
}
local_chevelu
++
;
local_chevelu
++
;
}
}
}
}
/*
*
/*
* construction de la liste en mode de calcul rapide pour affichage
* construction de la liste en mode de calcul rapide pour affichage
* en temps reel du chevelu d'un pad lors des tracés d'une piste démarrant
* en temps reel du chevelu d'un pad lors des tracés d'une piste démarrant
* sur ce pad.
* sur ce pad.
...
@@ -1102,61 +1060,53 @@ void WinEDA_BasePcbFrame::trace_ratsnest_module( wxDC* DC )
...
@@ -1102,61 +1060,53 @@ void WinEDA_BasePcbFrame::trace_ratsnest_module( wxDC* DC )
* init (flag)
* init (flag)
* = 0 : mise a jour des chevelu
* = 0 : mise a jour des chevelu
* <> 0: creation de la liste
* <> 0: creation de la liste
* retourne: adresse memoire disponible
*/
*/
/* Used by build_ratsnest_pad(): sort function by link lenght (manathan distance)*/
/* Buffer to store pads coordinates when creating a track.
static
int
sort_by_localnetlength
(
const
void
*
o1
,
const
void
*
o2
)
* these pads are members of the net
{
* and when the mouse is moved, the g_MaxLinksShowed links to neightbors are drawn
int
*
ref
=
(
int
*
)
o1
;
*/
int
*
compare
=
(
int
*
)
o2
;
static
std
::
vector
<
wxPoint
>
s_RatsnestMouseToPads
;
static
wxPoint
s_CursorPos
;
// Coordinate of the moving point (mouse cursor and end of current track segment)
int
*
org
=
(
int
*
)
adr_lowmem
;
// ref coordinate (todo : change for a betted code: used an external wxPoint variable)
int
ox
=
*
org
++
;
int
oy
=
*
org
++
;
int
lengthref
,
lengthcmp
;
lengthref
=
abs
(
*
ref
-
ox
);
ref
++
;
lengthref
+=
abs
(
*
ref
-
oy
);
// = distance between ref coordinate and pad ref
lengthcmp
=
abs
(
*
compare
-
ox
);
/* Used by build_ratsnest_pad(): sort function by link lenght (manhattan distance)*/
static
bool
sort_by_localnetlength
(
const
wxPoint
&
ref
,
const
wxPoint
&
compare
)
{
wxPoint
deltaref
=
ref
-
s_CursorPos
;
wxPoint
deltacmp
=
compare
-
s_CursorPos
;
compare
++
;
// = distance between ref coordinate and pad ref
int
lengthref
=
abs
(
deltaref
.
x
)
+
abs
(
deltaref
.
y
);
lengthcmp
+=
abs
(
*
compare
-
oy
);
// = distance between ref coordinate and the other pad
// distance between ref coordinate and the other pad
int
lengthcmp
=
abs
(
deltacmp
.
x
)
+
abs
(
deltacmp
.
y
);
return
lengthref
-
lengthcmp
;
return
lengthref
<
lengthcmp
;
}
}
/****************************************************************************************/
/****************************************************************************************/
int
*
WinEDA_BasePcbFrame
::
build_ratsnest_pad
(
EDA_BaseStruct
*
ref
,
void
WinEDA_BasePcbFrame
::
build_ratsnest_pad
(
BOARD_ITEM
*
ref
,
const
wxPoint
&
refpos
,
bool
init
)
const
wxPoint
&
refpos
,
bool
init
)
/****************************************************************************************/
/****************************************************************************************/
{
{
int
ii
;
int
*
pt_coord
,
*
base_data
;
int
current_net_code
=
0
,
conn_number
=
0
;
int
current_net_code
=
0
,
conn_number
=
0
;
D_PAD
**
padlist
;
D_PAD
*
pad_ref
=
NULL
;
D_PAD
*
pad_ref
=
NULL
;
if
(
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_RATSNEST_ITEM_OK
)
==
0
)
if
(
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_RATSNEST_ITEM_OK
)
==
0
)
||
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_PAD_OK
)
==
0
)
)
||
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_PAD_OK
)
==
0
)
||
(
(
m_Pcb
->
m_Status_Pcb
&
NET_CODES_OK
)
==
0
)
)
{
{
nb_local_chevelu
=
0
;
s_RatsnestMouseToPads
.
clear
()
;
return
NULL
;
return
;
}
}
base_data
=
pt_coord
=
(
int
*
)
adr_lowmem
;
s_CursorPos
=
refpos
;
local_liste_chevelu
=
(
RATSNEST_ITEM
*
)
pt_coord
;
if
(
init
)
if
(
init
)
{
{
nb_local_chevelu
=
0
;
s_RatsnestMouseToPads
.
clear
()
;
if
(
ref
==
NULL
)
if
(
ref
==
NULL
)
return
NULL
;
return
;
switch
(
ref
->
Type
()
)
switch
(
ref
->
Type
()
)
{
{
...
@@ -1180,41 +1130,26 @@ int* WinEDA_BasePcbFrame::build_ratsnest_pad( EDA_BaseStruct* ref,
...
@@ -1180,41 +1130,26 @@ int* WinEDA_BasePcbFrame::build_ratsnest_pad( EDA_BaseStruct* ref,
}
}
if
(
current_net_code
<=
0
)
if
(
current_net_code
<=
0
)
return
NULL
;
return
;
*
pt_coord
++
=
refpos
.
x
;
*
pt_coord
++
=
refpos
.
y
;
if
(
m_Pcb
->
m_Ratsnest
==
NULL
)
NETINFO_ITEM
*
net
=
m_Pcb
->
FindNet
(
current_net_code
);
return
NULL
;
if
(
net
==
NULL
)
return
;
padlist
=
&
m_Pcb
->
m_Pads
[
0
];
// Create a list of pads candidates ( pads not already connected to the current track:
for
(
ii
=
0
;
ii
<
(
int
)
m_Pcb
->
m_Pads
.
size
();
padlist
++
,
ii
++
)
for
(
unsigned
ii
=
0
;
ii
<
net
->
m_ListPad
.
size
();
ii
++
)
{
{
D_PAD
*
pad
=
*
padlist
;
D_PAD
*
pad
=
net
->
m_ListPad
[
ii
];
if
(
pad
->
GetNet
()
!=
current_net_code
)
continue
;
if
(
pad
==
pad_ref
)
if
(
pad
==
pad_ref
)
continue
;
continue
;
if
(
!
pad
->
GetSubNet
()
||
(
pad
->
GetSubNet
()
!=
conn_number
)
)
if
(
!
pad
->
GetSubNet
()
||
(
pad
->
GetSubNet
()
!=
conn_number
)
)
{
s_RatsnestMouseToPads
.
push_back
(
pad
->
m_Pos
);
*
pt_coord
=
pad
->
m_Pos
.
x
;
pt_coord
++
;
*
pt_coord
=
pad
->
m_Pos
.
y
;
pt_coord
++
;
nb_local_chevelu
++
;
}
}
}
}
/* end if Init */
}
/* end if Init */
else
if
(
nb_local_chevelu
)
{
*
pt_coord
=
refpos
.
x
;
*
(
pt_coord
+
1
)
=
refpos
.
y
;
}
qsort
(
base_data
+
2
,
nb_local_chevelu
,
2
*
sizeof
(
int
),
if
(
s_RatsnestMouseToPads
.
size
()
>
1
)
sort_by_localnetlength
);
sort
(
s_RatsnestMouseToPads
.
begin
(),
s_RatsnestMouseToPads
.
end
(),
sort_by_localnetlength
);
return
pt_coord
;
}
}
...
@@ -1226,35 +1161,21 @@ void WinEDA_BasePcbFrame::trace_ratsnest_pad( wxDC* DC )
...
@@ -1226,35 +1161,21 @@ void WinEDA_BasePcbFrame::trace_ratsnest_pad( wxDC* DC )
* Displays a "ratsnest" during track creation
* Displays a "ratsnest" during track creation
*/
*/
{
{
int
*
pt_coord
;
int
ii
;
int
refX
,
refY
;
if
(
DC
==
NULL
)
if
(
DC
==
NULL
)
return
;
return
;
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_RATSNEST_ITEM_OK
)
==
0
)
if
(
s_RatsnestMouseToPads
.
size
()
==
0
)
return
;
if
(
nb_local_chevelu
==
0
)
return
;
return
;
if
(
local_liste_chevelu
==
NULL
)
return
;
pt_coord
=
(
int
*
)
local_liste_chevelu
;
refX
=
*
pt_coord
++
;
refY
=
*
pt_coord
++
;
GRSetDrawMode
(
DC
,
GR_XOR
);
GRSetDrawMode
(
DC
,
GR_XOR
);
for
(
i
i
=
0
;
ii
<
nb_local_chevelu
;
ii
++
)
for
(
i
nt
ii
=
0
;
ii
<
(
int
)
s_RatsnestMouseToPads
.
size
()
;
ii
++
)
{
{
if
(
ii
>=
g_MaxLinksShowed
)
if
(
ii
>=
g_MaxLinksShowed
)
break
;
break
;
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
refX
,
refY
,
*
pt_coord
,
*
(
pt_coord
+
1
),
GRLine
(
&
DrawPanel
->
m_ClipBox
,
DC
,
s_CursorPos
.
x
,
s_CursorPos
.
y
,
s_RatsnestMouseToPads
[
ii
].
x
,
s_RatsnestMouseToPads
[
ii
].
y
,
0
,
YELLOW
);
0
,
YELLOW
);
pt_coord
+=
2
;
}
}
}
}
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