@@ -31,9 +31,11 @@ module.exports = function linePoints(d, opts) {
31
31
var baseTolerance = opts . baseTolerance ;
32
32
var shape = opts . shape ;
33
33
var linear = shape === 'linear' ;
34
+ var fill = opts . fill && opts . fill !== 'none' ;
34
35
var segments = [ ] ;
35
36
var minTolerance = constants . minTolerance ;
36
- var pts = new Array ( d . length ) ;
37
+ var len = d . length ;
38
+ var pts = new Array ( len ) ;
37
39
var pti = 0 ;
38
40
39
41
var i ;
@@ -160,8 +162,10 @@ module.exports = function linePoints(d, opts) {
160
162
var ptCount = 0 ;
161
163
for ( var i = 0 ; i < 4 ; i ++ ) {
162
164
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
+ ) ;
165
169
if ( ptInt && ( ! ptCount ||
166
170
Math . abs ( ptInt . x - out [ 0 ] [ 0 ] ) > 1 ||
167
171
Math . abs ( ptInt . y - out [ 0 ] [ 1 ] ) > 1
@@ -359,7 +363,7 @@ module.exports = function linePoints(d, opts) {
359
363
}
360
364
361
365
// loop over ALL points in this trace
362
- for ( i = 0 ; i < d . length ; i ++ ) {
366
+ for ( i = 0 ; i < len ; i ++ ) {
363
367
clusterStartPt = getPt ( i ) ;
364
368
if ( ! clusterStartPt ) continue ;
365
369
@@ -368,7 +372,7 @@ module.exports = function linePoints(d, opts) {
368
372
addPt ( clusterStartPt ) ;
369
373
370
374
// loop over one segment of the trace
371
- for ( i ++ ; i < d . length ; i ++ ) {
375
+ for ( i ++ ; i < len ; i ++ ) {
372
376
clusterHighPt = getPt ( i ) ;
373
377
if ( ! clusterHighPt ) {
374
378
if ( connectGaps ) continue ;
@@ -387,7 +391,9 @@ module.exports = function linePoints(d, opts) {
387
391
388
392
clusterRefDist = ptDist ( clusterHighPt , clusterStartPt ) ;
389
393
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 ;
391
397
392
398
clusterUnitVector = [
393
399
( clusterHighPt [ 0 ] - clusterStartPt [ 0 ] ) / clusterRefDist ,
0 commit comments