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
4b04d6c2
Commit
4b04d6c2
authored
Feb 29, 2008
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix for magnetic tracks for parallel case, cleanup of original patches
parent
5cb57e3b
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
172 additions
and
119 deletions
+172
-119
change_log.txt
change_log.txt
+23
-20
controle.cpp
eeschema/controle.cpp
+31
-30
controle.cpp
pcbnew/controle.cpp
+90
-38
editrack.cpp
pcbnew/editrack.cpp
+27
-30
protos.h
pcbnew/protos.h
+1
-1
No files found.
change_log.txt
View file @
4b04d6c2
...
...
@@ -5,23 +5,28 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2008-Feb-29 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew
controle.cpp: fixed the magnetic track if tracks are parallel.
2008-Feb-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+eeschema
Renaming the sheet filename now works in simple and complex hierarchies.
Use carefully because this can change the whole schematic structure.
Gen Bom List now works in unicode build version
(label list generation crashed eeschema in unicode build version)
Renaming the sheet filename now works in simple and complex hierarchies.
Use carefully because this can change the whole schematic structure.
Gen Bom List now works in unicode build version
(label list generation crashed eeschema in unicode build version)
+all
Display filename and full sheet name ("sheet path") in sheet reference
the full sheet name has no meanning in pcbnew.
Display filename and full sheet name ("sheet path") in sheet reference
the full sheet name has no meanning in pcbnew.
2008-Feb-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+eeschema
Fixed: problem which could crash eeschema when a sub schematic file in a hierarchy was not found.
Fixed: problem which could crash eeschema when a sub schematic file in a hierarchy was not found.
2008-Feb-27 UPDATE Wayne Stambaugh <stambaughw{at}verizon{dot}net>
...
...
@@ -40,18 +45,16 @@ email address.
2008-Feb-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+eeschema
changed in class DrawSheetStruct m_s member name to m_AssociatedScreen
some others minor problems solved.
some files "uncrustified"
Major problem in undo/redo when a sheet is deleted not yet solved
Only for a complex hierarchy, could lost data.
When a sheet is deleted by block delete. it is put in undo list.
It is really deleted after 10 changes (when the undo list is full).
At this time, the associated data is also deleted.
If an other (not deleted) sheet shares the same data, this data is lost.
Need work to solve this problem and keep the undo/redo feature.
changed in class DrawSheetStruct m_s member name to m_AssociatedScreen
some others minor problems solved.
some files "uncrustified"
Major problem in undo/redo when a sheet is deleted not yet solved
Only for a complex hierarchy, could lost data.
When a sheet is deleted by block delete. it is put in undo list.
It is really deleted after 10 changes (when the undo list is full).
At this time, the associated data is also deleted.
If an other (not deleted) sheet shares the same data, this data is lost.
Need work to solve this problem and keep the undo/redo feature.
2008-Feb-25 UPDATE Wayne Stambaugh <stambaughw{at}verizon{dot}net>
...
...
eeschema/controle.cpp
View file @
4b04d6c2
...
...
@@ -55,22 +55,22 @@ SchematicGeneralLocateAndDisplay( bool IncludePin )
/* Cross probing to pcbnew if a pin or a component is found */
switch
(
DrawStruct
->
Type
()
)
{
case
DRAW_PART_TEXT_STRUCT_TYPE
:
case
DRAW_PART_TEXT_STRUCT_TYPE
:
case
COMPONENT_FIELD_DRAW_TYPE
:
LibItem
=
(
EDA_SchComponentStruct
*
)
DrawStruct
->
m_Parent
;
SendMessageToPCBNEW
(
DrawStruct
,
LibItem
);
SendMessageToPCBNEW
(
DrawStruct
,
LibItem
);
break
;
case
DRAW_LIB_ITEM_STRUCT_TYPE
:
Pin
=
LocateAnyPin
(
GetScreen
()
->
EEDrawList
,
GetScreen
()
->
m_Curseur
,
&
LibItem
);
Pin
=
LocateAnyPin
(
GetScreen
()
->
EEDrawList
,
GetScreen
()
->
m_Curseur
,
&
LibItem
);
if
(
Pin
)
break
;
// Priority is probing a pin first
LibItem
=
(
EDA_SchComponentStruct
*
)
DrawStruct
;
SendMessageToPCBNEW
(
DrawStruct
,
LibItem
);
SendMessageToPCBNEW
(
DrawStruct
,
LibItem
);
break
;
default
:
Pin
=
LocateAnyPin
(
GetScreen
()
->
EEDrawList
,
GetScreen
()
->
m_Curseur
,
&
LibItem
);
Pin
=
LocateAnyPin
(
GetScreen
()
->
EEDrawList
,
GetScreen
()
->
m_Curseur
,
&
LibItem
);
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
...
...
@@ -89,7 +89,7 @@ SchematicGeneralLocateAndDisplay( bool IncludePin )
CYAN
);
// Cross probing:2 - pin found, and send a locate pin command to pcbnew (hightlight net)
SendMessageToPCBNEW
(
Pin
,
LibItem
);
SendMessageToPCBNEW
(
Pin
,
LibItem
);
}
return
DrawStruct
;
}
...
...
@@ -156,7 +156,7 @@ SchematicGeneralLocateAndDisplay( const wxPoint& refpoint, bool IncludePin )
WIREITEM
|
BUSITEM
|
RACCORDITEM
);
if
(
DrawStruct
)
// Search for a pin
{
Pin
=
LocateAnyPin
(
m_CurrentSheet
->
LastDrawList
(),
refpoint
,
&
LibItem
);
Pin
=
LocateAnyPin
(
m_CurrentSheet
->
LastDrawList
(),
refpoint
,
&
LibItem
);
if
(
Pin
)
{
Pin
->
Display_Infos
(
this
);
...
...
@@ -182,7 +182,7 @@ SchematicGeneralLocateAndDisplay( const wxPoint& refpoint, bool IncludePin )
}
/* search for a pin */
Pin
=
LocateAnyPin
(
m_CurrentSheet
->
LastDrawList
(),
refpoint
,
&
LibItem
);
Pin
=
LocateAnyPin
(
m_CurrentSheet
->
LastDrawList
(),
refpoint
,
&
LibItem
);
if
(
Pin
)
{
Pin
->
Display_Infos
(
this
);
...
...
@@ -230,16 +230,16 @@ void WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels
/***********************************************************************/
{
wxSize
delta
;
SCH_SCREEN
*
screen
=
(
SCH_SCREEN
*
)
GetScreen
();
int
zoom
=
screen
->
GetZoom
();
SCH_SCREEN
*
screen
=
(
SCH_SCREEN
*
)
GetScreen
();
int
zoom
=
screen
->
GetZoom
();
wxPoint
curpos
,
oldpos
;
int
hotkey
=
0
;
curpos
=
screen
->
m_MousePosition
;
oldpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_MousePosition
;
oldpos
=
screen
->
m_Curseur
;
delta
.
x
=
screen
->
GetGrid
().
x
/
zoom
;
delta
.
y
=
screen
->
GetGrid
().
y
/
zoom
;
delta
.
x
=
screen
->
GetGrid
().
x
/
zoom
;
delta
.
y
=
screen
->
GetGrid
().
y
/
zoom
;
if
(
delta
.
x
<=
0
)
delta
.
x
=
1
;
...
...
@@ -253,37 +253,37 @@ void WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels
case
EDA_PANNING_UP_KEY
:
OnZoom
(
ID_ZOOM_PANNING_UP
);
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
break
;
case
EDA_PANNING_DOWN_KEY
:
OnZoom
(
ID_ZOOM_PANNING_DOWN
);
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
break
;
case
EDA_PANNING_LEFT_KEY
:
OnZoom
(
ID_ZOOM_PANNING_LEFT
);
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
break
;
case
EDA_PANNING_RIGHT_KEY
:
OnZoom
(
ID_ZOOM_PANNING_RIGHT
);
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
break
;
case
EDA_ZOOM_IN_FROM_MOUSE
:
OnZoom
(
ID_ZOOM_IN_KEY
);
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
break
;
case
EDA_ZOOM_OUT_FROM_MOUSE
:
OnZoom
(
ID_ZOOM_OUT_KEY
);
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
break
;
case
EDA_ZOOM_CENTER_FROM_MOUSE
:
OnZoom
(
ID_ZOOM_CENTER_KEY
);
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
break
;
case
WXK_NUMPAD8
:
/* Deplacement curseur vers le haut */
...
...
@@ -294,6 +294,7 @@ void WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels
case
WXK_NUMPAD2
:
/* Deplacement curseur vers le bas */
case
WXK_DOWN
:
D
(
printf
(
"DOWN
\n
"
);)
MousePositionInPixels
.
y
+=
delta
.
y
;
DrawPanel
->
MouseTo
(
MousePositionInPixels
);
break
;
...
...
@@ -316,22 +317,22 @@ void WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels
}
/* Recalcul de la position du curseur schema */
screen
->
m_Curseur
=
curpos
;
screen
->
m_Curseur
=
curpos
;
/* Placement sur la grille generale */
PutOnGrid
(
&
(
screen
->
m_Curseur
)
);
PutOnGrid
(
&
(
screen
->
m_Curseur
)
);
if
(
screen
->
IsRefreshReq
()
)
if
(
screen
->
IsRefreshReq
()
)
{
RedrawActiveWindow
(
DC
,
TRUE
);
}
if
(
oldpos
!=
screen
->
m_Curseur
)
if
(
oldpos
!=
screen
->
m_Curseur
)
{
curpos
=
screen
->
m_Curseur
;
curpos
=
screen
->
m_Curseur
;
screen
->
m_Curseur
=
oldpos
;
DrawPanel
->
CursorOff
(
DC
);
GetScreen
()
->
m_Curseur
=
curpos
;
GetScreen
()
->
m_Curseur
=
curpos
;
DrawPanel
->
CursorOn
(
DC
);
if
(
DrawPanel
->
ManageCurseur
)
...
...
@@ -342,9 +343,9 @@ void WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels
if
(
hotkey
)
{
if
(
screen
->
GetCurItem
()
&&
screen
->
GetCurItem
()
->
m_Flags
)
OnHotKey
(
DC
,
hotkey
,
screen
->
GetCurItem
()
);
if
(
screen
->
GetCurItem
()
&&
screen
->
GetCurItem
()
->
m_Flags
)
OnHotKey
(
DC
,
hotkey
,
screen
->
GetCurItem
()
);
else
OnHotKey
(
DC
,
hotkey
,
NULL
);
}
...
...
pcbnew/controle.cpp
View file @
4b04d6c2
...
...
@@ -219,14 +219,20 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay( int aHotKeyCode )
}
/*
* "Join" finds the point where b0+x*(b1-b0) intersects with a0+y*(a1-a0).
/**
* Function Join
* finds the point where b0+x*(b1-b0) intersects with a0+y*(a1-a0).
* If that point would be outside of a0-a1, the respective endpoint is used.
* Join returns the point in "res" and "true" if a suitable point was found,
* "false" if both lines are parallel.
*/
static
bool
Join
(
wxPoint
&
res
,
wxPoint
a0
,
wxPoint
a1
,
wxPoint
b0
,
wxPoint
b1
)
static
bool
Join
(
wxPoint
*
res
,
wxPoint
a0
,
wxPoint
a1
,
wxPoint
b0
,
wxPoint
b1
)
{
/* References:
http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/
http://www.gekkou.co.uk/blogs/monologues/2007/12/13/1197586800000.html
*/
int64_t
denom
;
double
t
;
...
...
@@ -234,16 +240,18 @@ static bool Join( wxPoint& res, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 )
b1
-=
b0
;
b0
-=
a0
;
denom
=
(
int64_t
)
b1
.
y
*
a1
.
x
-
(
int64_t
)
b1
.
x
*
a1
.
y
;
if
(
!
denom
)
return
false
;
// parallel
denom
=
(
int64_t
)
b1
.
y
*
a1
.
x
-
(
int64_t
)
b1
.
x
*
a1
.
y
;
if
(
!
denom
)
{
return
false
;
// parallel
}
t
=
((
int64_t
)
b1
.
y
*
b0
.
x
-
(
int64_t
)
b1
.
x
*
b0
.
y
)
/
(
double
)
denom
;
t
=
((
int64_t
)
b1
.
y
*
b0
.
x
-
(
int64_t
)
b1
.
x
*
b0
.
y
)
/
(
double
)
denom
;
t
=
min
(
max
(
t
,
0.0
),
1.0
);
res
.
x
=
(
int
)
round
(
a0
.
x
+
t
*
a1
.
x
);
res
.
y
=
(
int
)
round
(
a0
.
y
+
t
*
a1
.
y
);
res
->
x
=
(
int
)
round
(
a0
.
x
+
t
*
a1
.
x
);
res
->
y
=
(
int
)
round
(
a0
.
y
+
t
*
a1
.
y
);
return
true
;
}
...
...
@@ -253,7 +261,7 @@ static bool Join( wxPoint& res, wxPoint a0, wxPoint a1, wxPoint b0, wxPoint b1 )
* "Project" finds the projection of a grid point on a track. This is the point
* from where we want to draw new orthogonal tracks when starting on a track.
*/
bool
Project
(
wxPoint
&
res
,
wxPoint
on_grid
,
const
TRACK
*
track
)
bool
Project
(
wxPoint
*
res
,
wxPoint
on_grid
,
const
TRACK
*
track
)
{
wxPoint
vec
;
double
t
;
...
...
@@ -269,31 +277,40 @@ bool Project( wxPoint& res, wxPoint on_grid, const TRACK* track )
t
/=
(
int64_t
)
vec
.
x
*
vec
.
x
+
(
int64_t
)
vec
.
y
*
vec
.
y
;
t
=
min
(
max
(
t
,
0.0
),
1.0
);
res
.
x
=
(
int
)
round
(
track
->
m_Start
.
x
+
t
*
vec
.
x
);
res
.
y
=
(
int
)
round
(
track
->
m_Start
.
y
+
t
*
vec
.
y
);
res
->
x
=
(
int
)
round
(
track
->
m_Start
.
x
+
t
*
vec
.
x
);
res
->
y
=
(
int
)
round
(
track
->
m_Start
.
y
+
t
*
vec
.
y
);
return
true
;
}
/**
* Function Magnetize
* tests to see if there are any magnetic items within near reach of the given
* "curpos". If yes, then curpos is adjusted appropriately according to that
* near magnetic item and true is returned.
* @param curpos The initial position, and what to adjust if a change is needed.
*/
static
bool
Magnetize
(
BOARD
*
m_Pcb
,
WinEDA_PcbFrame
*
frame
,
int
m_ID_current_state
,
wxSize
grid
,
wxPoint
on_grid
,
wxPoint
&
curpos
)
int
aCurrentTool
,
wxSize
grid
,
wxPoint
on_grid
,
wxPoint
*
curpos
)
{
const
D_PAD
*
pad
;
const
TRACK
*
curr
=
NULL
;
const
TRACK
*
via
,
*
track
;
int
layer
,
layer_mask
;
D_PAD
*
pad
;
TRACK
*
curr
=
g_CurrentTrackSegment
;
TRACK
*
via
;
TRACK
*
track
;
int
layer
,
layer_mask
;
bool
sometimes
=
g_MagneticPadOption
!=
capture_always
&&
Drc_On
;
bool
doCheckNet
=
g_MagneticPadOption
!=
capture_always
&&
Drc_On
;
curr
=
g_CurrentTrackSegment
;
if
(
frame
->
GetCurItem
()
!=
curr
)
{
curr
=
NULL
;
}
switch
(
g_MagneticPadOption
)
{
case
capture_cursor_in_track_tool
:
if
(
m_ID_current_state
!=
ID_TRACK_BUTT
)
if
(
aCurrentTool
!=
ID_TRACK_BUTT
)
return
false
;
break
;
...
...
@@ -308,20 +325,22 @@ static bool Magnetize( BOARD* m_Pcb, WinEDA_PcbFrame* frame,
pad
=
Locate_Any_Pad
(
m_Pcb
,
CURSEUR_OFF_GRILLE
,
TRUE
);
if
(
pad
)
{
if
(
curr
&&
curr
->
GetNet
()
!=
pad
->
GetNet
()
&&
sometimes
)
if
(
doCheckNet
&&
curr
&&
curr
->
GetNet
()
!=
pad
->
GetNet
()
)
return
false
;
curpos
=
pad
->
m_Pos
;
*
curpos
=
pad
->
m_Pos
;
return
true
;
}
layer
=
(
(
PCB_SCREEN
*
)
ActiveScreen
)
->
m_Active_Layer
;
via
=
Locate_Via_Area
(
m_Pcb
,
curpos
,
layer
);
via
=
Locate_Via_Area
(
m_Pcb
,
*
curpos
,
layer
);
if
(
via
)
{
if
(
curr
&&
curr
->
GetNet
()
!=
via
->
GetNet
()
&&
sometimes
)
if
(
doCheckNet
&&
curr
&&
curr
->
GetNet
()
!=
via
->
GetNet
()
)
return
false
;
curpos
=
via
->
m_Start
;
*
curpos
=
via
->
m_Start
;
return
true
;
}
...
...
@@ -340,25 +359,57 @@ static bool Magnetize( BOARD* m_Pcb, WinEDA_PcbFrame* frame,
* In two segment mode, ignore the final segment if it's inside a grid
* square.
*/
if
(
g_TwoSegmentTrackBuild
&&
curr
->
Pback
if
(
g_TwoSegmentTrackBuild
&&
curr
->
Back
()
&&
curr
->
m_Start
.
x
-
grid
.
x
<
curr
->
m_End
.
x
&&
curr
->
m_Start
.
x
+
grid
.
x
>
curr
->
m_End
.
x
&&
curr
->
m_Start
.
y
-
grid
.
y
<
curr
->
m_End
.
y
&&
curr
->
m_Start
.
y
+
grid
.
y
>
curr
->
m_End
.
y
)
{
curr
=
curr
->
Back
();
}
track
=
Locate_Pistes
(
m_Pcb
->
m_Track
,
layer_mask
,
CURSEUR_OFF_GRILLE
);
for
(
;
track
;
track
=
track
->
Next
()
)
for
(
track
=
m_Pcb
->
m_Track
;
track
;
track
=
track
->
Next
()
)
{
if
(
track
->
Type
()
!=
TYPETRACK
)
continue
;
if
(
curr
->
GetNet
()
!=
track
->
GetNet
()
&&
sometimes
)
if
(
doCheckNet
&&
curr
->
GetNet
()
!=
track
->
GetNet
()
)
continue
;
if
(
Join
(
curpos
,
track
->
m_Start
,
track
->
m_End
,
curr
->
m_Start
,
curr
->
m_End
)
)
if
(
(
g_DesignSettings
.
m_LayerColor
[
track
->
GetLayer
()]
&
ITEM_NOT_SHOW
)
)
continue
;
if
(
!
track
->
IsOnLayer
(
layer
)
)
continue
;
// @todo, this should be a track overlap test, not a mouse on track test.
// The former would consider the new track's width.
if
(
!
track
->
HitTest
(
*
curpos
)
)
continue
;
if
(
Join
(
curpos
,
track
->
m_Start
,
track
->
m_End
,
curr
->
m_Start
,
curr
->
m_End
)
)
{
return
true
;
}
if
(
aCurrentTool
==
ID_TRACK_BUTT
)
{
// At this point we have a drawing mouse on a track, we are drawing
// a new track and that new track is parallel to the track the
// mouse is on. Find the nearest end point of the track under mouse
// to the mouse and return that.
double
distStart
=
hypot
(
double
(
curpos
->
x
-
track
->
m_Start
.
x
),
double
(
curpos
->
y
-
track
->
m_Start
.
y
));
double
distEnd
=
hypot
(
double
(
curpos
->
x
-
track
->
m_End
.
x
),
double
(
curpos
->
y
-
track
->
m_End
.
y
));
if
(
distStart
<
distEnd
)
*
curpos
=
track
->
m_Start
;
else
*
curpos
=
track
->
m_End
;
return
true
;
}
}
return
false
;
...
...
@@ -505,20 +556,21 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
PutOnGrid
(
&
on_grid
);
if
(
Magnetize
(
m_Pcb
,
(
WinEDA_PcbFrame
*
)
this
,
m_ID_current_state
,
GetScreen
()
->
GetGrid
(),
on_grid
,
curpos
)
)
GetScreen
()
->
GetGrid
(),
on_grid
,
&
curpos
)
)
{
GetScreen
()
->
m_Curseur
=
curpos
;
}
else
{
/*
* If there's an intrusion and DRC is active, we pass the cursor
* "as is", and let ShowNewTrackWhenMovingCursor figure our what to
* do.
*/
// If there's no intrusion and DRC is active, we pass the cursor
// "as is", and let ShowNewTrackWhenMovingCursor figure out what to do.
if
(
!
Drc_On
||
!
g_CurrentTrackSegment
||
g_CurrentTrackSegment
!=
this
->
GetCurItem
()
||
!
LocateIntrusion
(
m_Pcb
->
m_Track
,
g_CurrentTrackSegment
->
GetNet
(),
||
!
LocateIntrusion
(
m_Pcb
->
m_Track
,
g_CurrentTrackSegment
->
GetNet
(),
g_CurrentTrackSegment
->
m_Width
)
)
{
GetScreen
()
->
m_Curseur
=
on_grid
;
}
}
}
...
...
pcbnew/editrack.cpp
View file @
4b04d6c2
...
...
@@ -500,44 +500,41 @@ void WinEDA_PcbFrame::End_Route( TRACK* track, wxDC* DC )
TRACK
*
LocateIntrusion
(
TRACK
*
start
,
int
net
,
int
width
)
{
int
layer
=
(
(
PCB_SCREEN
*
)
ActiveScreen
)
->
m_Active_Layer
;
int
layer_mask
=
g_TabOneLayerMask
[
layer
];
wxPoint
ref
=
ActiveScreen
->
RefPos
(
1
);
TRACK
*
track
,
*
found
=
NULL
;
int
layer
=
(
(
PCB_SCREEN
*
)
ActiveScreen
)
->
m_Active_Layer
;
for
(
track
=
start
;
track
;
track
=
track
->
Next
()
)
{
int
dist
;
wxPoint
pos
,
vec
;
int64_t
tmp
;
wxPoint
ref
=
ActiveScreen
->
RefPos
(
true
);
/* Locate_Pistes */
if
(
track
->
GetState
(
BUSY
|
DELETED
)
)
continue
;
TRACK
*
found
=
NULL
;
if
(
!
(
g_TabOneLayerMask
[
track
->
GetLayer
()]
&
layer_mask
)
)
continue
;
for
(
TRACK
*
track
=
start
;
track
;
track
=
track
->
Next
()
)
{
if
(
track
->
Type
()
==
TYPETRACK
)
// skip vias
{
if
(
track
->
GetState
(
BUSY
|
DELETED
)
)
continue
;
if
(
track
->
GetNet
()
==
net
)
continue
;
if
(
layer
!=
track
->
GetLayer
()
)
continue
;
if
(
track
->
Type
()
==
TYPEVIA
)
continue
;
if
(
track
->
GetNet
()
==
net
)
continue
;
/* TRACK::HitTest */
dist
=
width
/
2
+
track
->
m_Width
/
2
+
g_DesignSettings
.
m_TrackClearence
;
pos
=
ref
-
track
->
m_Start
;
vec
=
track
->
m_End
-
track
->
m_Start
;
/* TRACK::HitTest */
int
dist
=
width
/
2
+
track
->
m_Width
/
2
+
g_DesignSettings
.
m_TrackClearence
;
if
(
!
DistanceTest
(
dist
,
vec
.
x
,
vec
.
y
,
pos
.
x
,
pos
.
y
)
)
continue
;
wxPoint
pos
=
ref
-
track
->
m_Start
;
wxPoint
vec
=
track
->
m_End
-
track
->
m_Start
;
found
=
track
;
if
(
!
DistanceTest
(
dist
,
vec
.
x
,
vec
.
y
,
pos
.
x
,
pos
.
y
)
)
continue
;
/* prefer intrusions from the side, not the end */
tmp
=
(
int64_t
)
pos
.
x
*
vec
.
x
+
(
int64_t
)
pos
.
y
*
vec
.
y
;
if
(
tmp
>=
0
&&
tmp
<=
(
int64_t
)
vec
.
x
*
vec
.
x
+
(
int64_t
)
vec
.
y
*
vec
.
y
)
break
;
found
=
track
;
/* prefer intrusions from the side, not the end */
int64_t
tmp
=
(
int64_t
)
pos
.
x
*
vec
.
x
+
(
int64_t
)
pos
.
y
*
vec
.
y
;
if
(
tmp
>=
0
&&
tmp
<=
(
int64_t
)
vec
.
x
*
vec
.
x
+
(
int64_t
)
vec
.
y
*
vec
.
y
)
break
;
}
}
return
found
;
...
...
@@ -612,7 +609,7 @@ static void PushTrack( WinEDA_DrawPanel* panel )
n
.
x
=
(
int
)
round
(
f
*
n
.
x
);
n
.
y
=
(
int
)
round
(
f
*
n
.
y
);
Project
(
track
->
m_End
,
cursor
,
other
);
Project
(
&
track
->
m_End
,
cursor
,
other
);
track
->
m_End
+=
n
;
}
...
...
pcbnew/protos.h
View file @
4b04d6c2
...
...
@@ -387,7 +387,7 @@ TRACK* CreateLockPoint( int* pX, int* pY, TRACK* ptsegm, TRACK* refsegm
/* CONTROLE.CPP */
/****************/
void
RemoteCommand
(
const
char
*
cmdline
);
bool
Project
(
wxPoint
&
res
,
wxPoint
on_grid
,
const
TRACK
*
track
);
bool
Project
(
wxPoint
*
res
,
wxPoint
on_grid
,
const
TRACK
*
track
);
/***************/
...
...
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