@@ -25,11 +25,14 @@ module.exports = function calc(gd, trace) {
2525 var slen = 0 ;
2626 var startx , starty , startz ;
2727 if ( trace . starts ) {
28- startx = trace . starts . x || [ ] ;
29- starty = trace . starts . y || [ ] ;
30- startz = trace . starts . z || [ ] ;
28+ startx = filter ( trace . starts . x || [ ] ) ;
29+ starty = filter ( trace . starts . y || [ ] ) ;
30+ startz = filter ( trace . starts . z || [ ] ) ;
3131 slen = Math . min ( startx . length , starty . length , startz . length ) ;
3232 }
33+ trace . _startsX = startx || [ ] ;
34+ trace . _startsY = starty || [ ] ;
35+ trace . _startsZ = startz || [ ] ;
3336
3437 var normMax = 0 ;
3538 var normMin = Infinity ;
@@ -61,13 +64,18 @@ module.exports = function calc(gd, trace) {
6164 var filledX ;
6265 var filledY ;
6366 var filledZ ;
64- var firstX ;
65- var firstY ;
66- var firstZ ;
67+ var firstX , lastX ;
68+ var firstY , lastY ;
69+ var firstZ , lastZ ;
6770 if ( len ) {
68- firstX = x [ 0 ] ;
69- firstY = y [ 0 ] ;
70- firstZ = z [ 0 ] ;
71+ firstX = + x [ 0 ] ;
72+ firstY = + y [ 0 ] ;
73+ firstZ = + z [ 0 ] ;
74+ }
75+ if ( len > 1 ) {
76+ lastX = + x [ len - 1 ] ;
77+ lastY = + y [ len - 1 ] ;
78+ lastZ = + z [ len - 1 ] ;
7179 }
7280
7381 for ( i = 0 ; i < len ; i ++ ) {
@@ -80,15 +88,15 @@ module.exports = function calc(gd, trace) {
8088 zMax = Math . max ( zMax , z [ i ] ) ;
8189 zMin = Math . min ( zMin , z [ i ] ) ;
8290
83- if ( ! filledX && x [ i ] !== firstX ) {
91+ if ( ! filledX && ( + x [ i ] ) !== firstX ) {
8492 filledX = true ;
8593 gridFill += 'x' ;
8694 }
87- if ( ! filledY && y [ i ] !== firstY ) {
95+ if ( ! filledY && ( + y [ i ] ) !== firstY ) {
8896 filledY = true ;
8997 gridFill += 'y' ;
9098 }
91- if ( ! filledZ && z [ i ] !== firstZ ) {
99+ if ( ! filledZ && ( + z [ i ] ) !== firstZ ) {
92100 filledZ = true ;
93101 gridFill += 'z' ;
94102 }
@@ -98,13 +106,13 @@ module.exports = function calc(gd, trace) {
98106 if ( ! filledY ) gridFill += 'y' ;
99107 if ( ! filledZ ) gridFill += 'z' ;
100108
101- var Xs = distinctVals ( trace . x . slice ( 0 , len ) ) ;
102- var Ys = distinctVals ( trace . y . slice ( 0 , len ) ) ;
103- var Zs = distinctVals ( trace . z . slice ( 0 , len ) ) ;
109+ var Xs = distinctVals ( filter ( trace . x , len ) ) ;
110+ var Ys = distinctVals ( filter ( trace . y , len ) ) ;
111+ var Zs = distinctVals ( filter ( trace . z , len ) ) ;
104112
105- gridFill = gridFill . replace ( 'x' , ( x [ 0 ] > x [ len - 1 ] ? '-' : '+' ) + 'x' ) ;
106- gridFill = gridFill . replace ( 'y' , ( y [ 0 ] > y [ len - 1 ] ? '-' : '+' ) + 'y' ) ;
107- gridFill = gridFill . replace ( 'z' , ( z [ 0 ] > z [ len - 1 ] ? '-' : '+' ) + 'z' ) ;
113+ gridFill = gridFill . replace ( 'x' , ( firstX > lastX ? '-' : '+' ) + 'x' ) ;
114+ gridFill = gridFill . replace ( 'y' , ( firstY > lastY ? '-' : '+' ) + 'y' ) ;
115+ gridFill = gridFill . replace ( 'z' , ( firstZ > lastZ ? '-' : '+' ) + 'z' ) ;
108116
109117 var empty = function ( ) {
110118 len = 0 ;
@@ -118,7 +126,7 @@ module.exports = function calc(gd, trace) {
118126
119127 var getArray = function ( c ) { return c === 'x' ? x : c === 'y' ? y : z ; } ;
120128 var getVals = function ( c ) { return c === 'x' ? Xs : c === 'y' ? Ys : Zs ; } ;
121- var getDir = function ( c ) { return ( c [ len - 1 ] < c [ 0 ] ) ? - 1 : 1 ; } ;
129+ var getDir = function ( c ) { return lessThan ( c [ len - 1 ] , c [ 0 ] ) ? - 1 : 1 ; } ;
122130
123131 var arrK = getArray ( gridFill [ 1 ] ) ;
124132 var arrJ = getArray ( gridFill [ 3 ] ) ;
@@ -146,9 +154,9 @@ module.exports = function calc(gd, trace) {
146154 var q100 = getIndex ( i + 1 , j , k ) ;
147155
148156 if (
149- ! ( arrK [ q000 ] * dirK < arrK [ q001 ] * dirK ) ||
150- ! ( arrJ [ q000 ] * dirJ < arrJ [ q010 ] * dirJ ) ||
151- ! ( arrI [ q000 ] * dirI < arrI [ q100 ] * dirI )
157+ ! lessThan ( arrK [ q000 ] * dirK , arrK [ q001 ] * dirK ) ||
158+ ! lessThan ( arrJ [ q000 ] * dirJ , arrJ [ q010 ] * dirJ ) ||
159+ ! lessThan ( arrI [ q000 ] * dirI , arrI [ q100 ] * dirI )
152160 ) {
153161 arbitrary = true ;
154162 }
@@ -194,3 +202,17 @@ module.exports = function calc(gd, trace) {
194202function distinctVals ( col ) {
195203 return Lib . distinctVals ( col ) . vals ;
196204}
205+
206+ function filter ( arr , len ) {
207+ if ( len === undefined ) len = arr . length ;
208+
209+ var values = [ ] ;
210+ for ( var i = 0 ; i < len ; i ++ ) {
211+ values [ i ] = + arr [ i ] ;
212+ }
213+ return values ;
214+ }
215+
216+ function lessThan ( a , b ) {
217+ return + a < + b ;
218+ }
0 commit comments