@@ -52,7 +52,43 @@ proto.handlePick = function(selection) {
52
52
} ;
53
53
54
54
function parseColorArray ( colors ) {
55
- return colors . map ( str2RgbaArray ) ;
55
+ var b = [ ] ;
56
+ var len = colors . length ;
57
+ for ( var i = 0 ; i < len ; i ++ ) {
58
+ b [ i ] = str2RgbaArray ( colors [ i ] ) ;
59
+ }
60
+ return b ;
61
+ }
62
+
63
+ // Unpack position data
64
+ function toDataCoords ( axis , coord , scale , calendar ) {
65
+ var b = [ ] ;
66
+ var len = coord . length ;
67
+ for ( var i = 0 ; i < len ; i ++ ) {
68
+ b [ i ] = axis . d2l ( coord [ i ] , 0 , calendar ) * scale ;
69
+ }
70
+ return b ;
71
+ }
72
+
73
+ // round indices if passed as floats
74
+ function toIndex ( a ) {
75
+ var b = [ ] ;
76
+ var len = a . length ;
77
+ for ( var i = 0 ; i < len ; i ++ ) {
78
+ b [ i ] = Math . round ( a [ i ] ) ;
79
+ }
80
+ return b ;
81
+ }
82
+
83
+ // create cells
84
+ function delaunayCells ( delaunayaxis , positions ) {
85
+ var d = [ 'x' , 'y' , 'z' ] . indexOf ( delaunayaxis ) ;
86
+ var b = [ ] ;
87
+ var len = positions . length ;
88
+ for ( var i = 0 ; i < len ; i ++ ) {
89
+ b [ i ] = [ positions [ i ] [ ( d + 1 ) % 3 ] , positions [ i ] [ ( d + 2 ) % 3 ] ] ;
90
+ }
91
+ return triangulate ( b ) ;
56
92
}
57
93
58
94
proto . update = function ( data ) {
@@ -61,13 +97,6 @@ proto.update = function(data) {
61
97
62
98
this . data = data ;
63
99
64
- // Unpack position data
65
- function toDataCoords ( axis , coord , scale , calendar ) {
66
- return coord . map ( function ( x ) {
67
- return axis . d2l ( x , 0 , calendar ) * scale ;
68
- } ) ;
69
- }
70
-
71
100
var positions = zip3 (
72
101
toDataCoords ( layout . xaxis , data . x , scene . dataScale [ 0 ] , data . xcalendar ) ,
73
102
toDataCoords ( layout . yaxis , data . y , scene . dataScale [ 1 ] , data . ycalendar ) ,
@@ -77,19 +106,16 @@ proto.update = function(data) {
77
106
var cells ;
78
107
if ( data . i && data . j && data . k ) {
79
108
cells = zip3 (
80
- data . i . map ( function ( e ) { return Math . round ( e ) ; } ) ,
81
- data . j . map ( function ( e ) { return Math . round ( e ) ; } ) ,
82
- data . k . map ( function ( e ) { return Math . round ( e ) ; } )
109
+ toIndex ( data . i ) ,
110
+ toIndex ( data . j ) ,
111
+ toIndex ( data . k )
83
112
) ;
84
113
} else if ( data . alphahull === 0 ) {
85
114
cells = convexHull ( positions ) ;
86
115
} else if ( data . alphahull > 0 ) {
87
116
cells = alphaShape ( data . alphahull , positions ) ;
88
117
} else {
89
- var d = [ 'x' , 'y' , 'z' ] . indexOf ( data . delaunayaxis ) ;
90
- cells = triangulate ( positions . map ( function ( c ) {
91
- return [ c [ ( d + 1 ) % 3 ] , c [ ( d + 2 ) % 3 ] ] ;
92
- } ) ) ;
118
+ cells = delaunayCells ( data . delaunayaxis , positions ) ;
93
119
}
94
120
95
121
var config = {
0 commit comments