@@ -31,9 +31,11 @@ module.exports = function linePoints(d, opts) {
3131 var baseTolerance = opts . baseTolerance ;
3232 var shape = opts . shape ;
3333 var linear = shape === 'linear' ;
34+ var fill = opts . fill && opts . fill !== 'none' ;
3435 var segments = [ ] ;
3536 var minTolerance = constants . minTolerance ;
36- var pts = new Array ( d . length ) ;
37+ var len = d . length ;
38+ var pts = new Array ( len ) ;
3739 var pti = 0 ;
3840
3941 var i ;
@@ -160,8 +162,10 @@ module.exports = function linePoints(d, opts) {
160162 var ptCount = 0 ;
161163 for ( var i = 0 ; i < 4 ; i ++ ) {
162164 var edge = edges [ i ] ;
163- var ptInt = segmentsIntersect ( pt1 [ 0 ] , pt1 [ 1 ] , pt2 [ 0 ] , pt2 [ 1 ] ,
164- edge [ 0 ] , edge [ 1 ] , edge [ 2 ] , edge [ 3 ] ) ;
165+ var ptInt = segmentsIntersect (
166+ pt1 [ 0 ] , pt1 [ 1 ] , pt2 [ 0 ] , pt2 [ 1 ] ,
167+ edge [ 0 ] , edge [ 1 ] , edge [ 2 ] , edge [ 3 ]
168+ ) ;
165169 if ( ptInt && ( ! ptCount ||
166170 Math . abs ( ptInt . x - out [ 0 ] [ 0 ] ) > 1 ||
167171 Math . abs ( ptInt . y - out [ 0 ] [ 1 ] ) > 1
@@ -359,7 +363,7 @@ module.exports = function linePoints(d, opts) {
359363 }
360364
361365 // loop over ALL points in this trace
362- for ( i = 0 ; i < d . length ; i ++ ) {
366+ for ( i = 0 ; i < len ; i ++ ) {
363367 clusterStartPt = getPt ( i ) ;
364368 if ( ! clusterStartPt ) continue ;
365369
@@ -368,7 +372,7 @@ module.exports = function linePoints(d, opts) {
368372 addPt ( clusterStartPt ) ;
369373
370374 // loop over one segment of the trace
371- for ( i ++ ; i < d . length ; i ++ ) {
375+ for ( i ++ ; i < len ; i ++ ) {
372376 clusterHighPt = getPt ( i ) ;
373377 if ( ! clusterHighPt ) {
374378 if ( connectGaps ) continue ;
@@ -387,7 +391,9 @@ module.exports = function linePoints(d, opts) {
387391
388392 clusterRefDist = ptDist ( clusterHighPt , clusterStartPt ) ;
389393
390- if ( clusterRefDist < getTolerance ( clusterHighPt , nextPt ) * minTolerance ) continue ;
394+ // #3147 - always include the very first and last points for fills
395+ if ( ! ( fill && ( pti === 0 || pti === len - 1 ) ) &&
396+ clusterRefDist < getTolerance ( clusterHighPt , nextPt ) * minTolerance ) continue ;
391397
392398 clusterUnitVector = [
393399 ( clusterHighPt [ 0 ] - clusterStartPt [ 0 ] ) / clusterRefDist ,
0 commit comments