@@ -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