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
0cf334a0
Commit
0cf334a0
authored
Sep 16, 2014
by
Tomasz Wlostowski
Committed by
Maciej Suminski
Sep 16, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pcbnew: bugfix for "PNS router allocates all memory"
parent
d3f15f21
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
23 deletions
+26
-23
pns_line.cpp
pcbnew/router/pns_line.cpp
+26
-23
No files found.
pcbnew/router/pns_line.cpp
View file @
0cf334a0
...
...
@@ -70,12 +70,12 @@ const PNS_LINE& PNS_LINE::operator=( const PNS_LINE& aOther )
m_hasVia
=
aOther
.
m_hasVia
;
m_marker
=
aOther
.
m_marker
;
m_rank
=
aOther
.
m_rank
;
copyLinks
(
&
aOther
);
return
*
this
;
}
PNS_LINE
*
PNS_LINE
::
Clone
()
const
{
...
...
@@ -88,7 +88,7 @@ PNS_LINE* PNS_LINE::Clone() const
void
PNS_LINE
::
Mark
(
int
aMarker
)
{
m_marker
=
aMarker
;
if
(
m_segmentRefs
)
{
BOOST_FOREACH
(
PNS_SEGMENT
*
s
,
*
m_segmentRefs
)
...
...
@@ -123,14 +123,14 @@ int PNS_LINE::Marker()const
}
void
PNS_LINE
::
copyLinks
(
const
PNS_LINE
*
aParent
)
void
PNS_LINE
::
copyLinks
(
const
PNS_LINE
*
aParent
)
{
if
(
aParent
->
m_segmentRefs
==
NULL
)
{
m_segmentRefs
=
NULL
;
return
;
}
m_segmentRefs
=
new
SEGMENT_REFS
();
*
m_segmentRefs
=
*
aParent
->
m_segmentRefs
;
}
...
...
@@ -199,7 +199,10 @@ bool PNS_LINE::Walkaround( SHAPE_LINE_CHAIN aObstacle, SHAPE_LINE_CHAIN& aPre,
{
const
VECTOR2I
p
=
ips
[
i
].
p
;
int
dist
=
line
.
PathLength
(
p
);
if
(
dist
<
0
)
return
false
;
if
(
dist
<=
nearest_dist
)
{
nearest_dist
=
dist
;
...
...
@@ -222,7 +225,7 @@ bool PNS_LINE::Walkaround( SHAPE_LINE_CHAIN aObstacle, SHAPE_LINE_CHAIN& aPre,
aPre
=
line
.
Slice
(
0
,
nearest
.
our
.
Index
()
);
aPre
.
Append
(
nearest
.
p
);
aPre
.
Simplify
();
aWalk
.
Clear
();
aWalk
.
SetClosed
(
false
);
aWalk
.
Append
(
nearest
.
p
);
...
...
@@ -236,7 +239,7 @@ bool PNS_LINE::Walkaround( SHAPE_LINE_CHAIN aObstacle, SHAPE_LINE_CHAIN& aPre,
aObstacle
.
Split
(
nearest
.
p
);
aObstacle
.
Split
(
farthest
.
p
);
int
i_first
=
aObstacle
.
Find
(
nearest
.
p
);
int
i_last
=
aObstacle
.
Find
(
farthest
.
p
);
...
...
@@ -246,13 +249,13 @@ bool PNS_LINE::Walkaround( SHAPE_LINE_CHAIN aObstacle, SHAPE_LINE_CHAIN& aPre,
{
aWalk
.
Append
(
aObstacle
.
CPoint
(
i
)
);
i
+=
(
aCw
?
1
:
-
1
);
if
(
i
<
0
)
i
=
aObstacle
.
PointCount
()
-
1
;
else
if
(
i
==
aObstacle
.
PointCount
()
)
i
=
0
;
}
aWalk
.
Append
(
farthest
.
p
);
aWalk
.
Simplify
();
...
...
@@ -386,7 +389,7 @@ SHAPE_LINE_CHAIN dragCornerInternal( const SHAPE_LINE_CHAIN& aOrigin, const VECT
if
(
picked
)
break
;
}
if
(
picked
)
{
SHAPE_LINE_CHAIN
path
=
aOrigin
.
Slice
(
0
,
i
);
...
...
@@ -394,7 +397,7 @@ SHAPE_LINE_CHAIN dragCornerInternal( const SHAPE_LINE_CHAIN& aOrigin, const VECT
return
path
;
}
return
DIRECTION_45
().
BuildInitialTrace
(
aOrigin
.
CPoint
(
0
),
aP
,
true
);
}
...
...
@@ -419,7 +422,7 @@ void PNS_LINE::DragCorner ( const VECTOR2I& aP, int aIndex, int aSnappingThresho
}
path
.
Simplify
();
m_line
=
path
;
m_line
=
path
;
}
...
...
@@ -448,7 +451,7 @@ VECTOR2I PNS_LINE::snapDraggedCorner( const SHAPE_LINE_CHAIN& aPath, const VECTO
continue
;
OPT_VECTOR2I
ip
=
a
.
IntersectLines
(
b
);
if
(
ip
)
{
int
dist
=
(
*
ip
-
aP
).
EuclideanNorm
();
...
...
@@ -483,7 +486,7 @@ VECTOR2I PNS_LINE::snapToNeighbourSegments( const SHAPE_LINE_CHAIN& aPath, const
snap_d
[
0
]
=
s
.
LineDistance
(
aP
);
snap_p
[
0
]
=
s
.
A
;
}
}
if
(
aIndex
<
aPath
.
SegmentCount
()
-
2
)
{
...
...
@@ -493,7 +496,7 @@ VECTOR2I PNS_LINE::snapToNeighbourSegments( const SHAPE_LINE_CHAIN& aPath, const
snap_d
[
1
]
=
s
.
LineDistance
(
aP
);
snap_p
[
1
]
=
s
.
A
;
}
}
VECTOR2I
best
=
aP
;
int
minDist
=
INT_MAX
;
...
...
@@ -560,7 +563,7 @@ void PNS_LINE::DragSegment ( const VECTOR2I& aP, int aIndex, int aSnappingThresh
bool
lockEndpointA
=
true
;
bool
lockEndpointB
=
true
;
if
(
aIndex
==
0
)
{
if
(
!
lockEndpointA
)
...
...
@@ -678,7 +681,7 @@ void PNS_LINE::DragSegment ( const VECTOR2I& aP, int aIndex, int aSnappingThresh
}
bool
PNS_LINE
::
CompareGeometry
(
const
PNS_LINE
&
aOther
)
bool
PNS_LINE
::
CompareGeometry
(
const
PNS_LINE
&
aOther
)
{
return
m_line
.
CompareGeometry
(
aOther
.
m_line
);
}
...
...
@@ -699,7 +702,7 @@ void PNS_LINE::AppendVia( const PNS_VIA& aVia )
{
Reverse
();
}
m_hasVia
=
true
;
m_via
=
aVia
;
m_via
.
SetNet
(
m_net
);
...
...
@@ -741,12 +744,12 @@ int PNS_LINE::Rank() const
void
PNS_LINE
::
ClipVertexRange
(
int
aStart
,
int
aEnd
)
{
m_line
=
m_line
.
Slice
(
aStart
,
aEnd
);
if
(
m_segmentRefs
)
{
SEGMENT_REFS
*
snew
=
new
SEGMENT_REFS
(
m_segmentRefs
->
begin
()
+
aStart
,
m_segmentRefs
->
begin
()
+
aEnd
);
delete
m_segmentRefs
;
m_segmentRefs
=
snew
;
}
...
...
@@ -763,7 +766,7 @@ bool PNS_LINE::HasLoops() const
return
true
;
}
}
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