9
9
'use strict' ;
10
10
11
11
var createMesh = require ( 'gl-mesh3d' ) ;
12
-
13
- var Lib = require ( '../../lib' ) ;
14
-
15
12
var parseColorScale = require ( '../../lib/gl_format_color' ) . parseColorScale ;
16
13
var str2RgbaArray = require ( '../../lib/str2rgbarray' ) ;
17
14
var extractOpts = require ( '../../components/colorscale' ) . extractOpts ;
18
15
var zip3 = require ( '../../plots/gl3d/zip3' ) ;
19
16
20
- function distinctVals ( col ) {
21
- return Lib . distinctVals ( col ) . vals ;
22
- }
23
-
24
17
var findNearestOnAxis = function ( w , arr ) {
25
18
for ( var q = arr . length - 1 ; q > 0 ; q -- ) {
26
19
var min = Math . min ( arr [ q ] , arr [ q - 1 ] ) ;
@@ -53,9 +46,9 @@ proto.handlePick = function(selection) {
53
46
if ( selection . object === this . mesh ) {
54
47
var rawId = selection . data . index ;
55
48
56
- var x = this . data . _x [ rawId ] ;
57
- var y = this . data . _y [ rawId ] ;
58
- var z = this . data . _z [ rawId ] ;
49
+ var x = this . data . _meshX [ rawId ] ;
50
+ var y = this . data . _meshY [ rawId ] ;
51
+ var z = this . data . _meshZ [ rawId ] ;
59
52
60
53
var height = this . data . _Ys . length ;
61
54
var depth = this . data . _Zs . length ;
@@ -67,10 +60,10 @@ proto.handlePick = function(selection) {
67
60
var selectIndex = selection . index = k + depth * j + depth * height * i ;
68
61
69
62
selection . traceCoordinate = [
70
- this . data . _x [ selectIndex ] ,
71
- this . data . _y [ selectIndex ] ,
72
- this . data . _z [ selectIndex ] ,
73
- this . data . value [ selectIndex ]
63
+ this . data . _meshX [ selectIndex ] ,
64
+ this . data . _meshY [ selectIndex ] ,
65
+ this . data . _meshZ [ selectIndex ] ,
66
+ this . data . _value [ selectIndex ]
74
67
] ;
75
68
76
69
var text = this . data . hovertext || this . data . text ;
@@ -98,11 +91,11 @@ proto.update = function(data) {
98
91
}
99
92
100
93
var positions = zip3 (
101
- toDataCoords ( layout . xaxis , data . _x , scene . dataScale [ 0 ] , data . xcalendar ) ,
102
- toDataCoords ( layout . yaxis , data . _y , scene . dataScale [ 1 ] , data . ycalendar ) ,
103
- toDataCoords ( layout . zaxis , data . _z , scene . dataScale [ 2 ] , data . zcalendar ) ) ;
94
+ toDataCoords ( layout . xaxis , data . _meshX , scene . dataScale [ 0 ] , data . xcalendar ) ,
95
+ toDataCoords ( layout . yaxis , data . _meshY , scene . dataScale [ 1 ] , data . ycalendar ) ,
96
+ toDataCoords ( layout . zaxis , data . _meshZ , scene . dataScale [ 2 ] , data . zcalendar ) ) ;
104
97
105
- var cells = zip3 ( data . _i , data . _j , data . _k ) ;
98
+ var cells = zip3 ( data . _meshI , data . _meshJ , data . _meshK ) ;
106
99
107
100
var config = {
108
101
positions : positions ,
@@ -123,7 +116,7 @@ proto.update = function(data) {
123
116
} ;
124
117
125
118
var cOpts = extractOpts ( data ) ;
126
- config . vertexIntensity = data . _intensity ;
119
+ config . vertexIntensity = data . _meshIntensity ;
127
120
config . vertexIntensityBounds = [ cOpts . min , cOpts . max ] ;
128
121
config . colormap = parseColorScale ( data ) ;
129
122
@@ -136,10 +129,12 @@ proto.dispose = function() {
136
129
this . mesh . dispose ( ) ;
137
130
} ;
138
131
132
+ var GRID_TYPES = [ 'xyz' , 'xzy' , 'yxz' , 'yzx' , 'zxy' , 'zyx' ] ;
133
+
139
134
function generateIsoMeshes ( data ) {
140
- data . _i = [ ] ;
141
- data . _j = [ ] ;
142
- data . _k = [ ] ;
135
+ data . _meshI = [ ] ;
136
+ data . _meshJ = [ ] ;
137
+ data . _meshK = [ ] ;
143
138
144
139
var showSurface = data . surface . show ;
145
140
var showSpaceframe = data . spaceframe . show ;
@@ -154,17 +149,32 @@ function generateIsoMeshes(data) {
154
149
var numVertices ;
155
150
var beginVertextLength ;
156
151
157
- var Xs = distinctVals ( data . x . slice ( 0 , data . _len ) ) ;
158
- var Ys = distinctVals ( data . y . slice ( 0 , data . _len ) ) ;
159
- var Zs = distinctVals ( data . z . slice ( 0 , data . _len ) ) ;
152
+ var Xs = data . _Xs ;
153
+ var Ys = data . _Ys ;
154
+ var Zs = data . _Zs ;
160
155
161
156
var width = Xs . length ;
162
157
var height = Ys . length ;
163
158
var depth = Zs . length ;
164
159
165
- function getIndex ( i , j , k ) {
166
- return k + depth * j + depth * height * i ;
167
- }
160
+ var filled = GRID_TYPES . indexOf ( data . _gridFill . replace ( / - / g, '' ) . replace ( / \+ / g, '' ) ) ;
161
+
162
+ var getIndex = function ( i , j , k ) {
163
+ switch ( filled ) {
164
+ case 5 : // 'zyx'
165
+ return k + depth * j + depth * height * i ;
166
+ case 4 : // 'zxy'
167
+ return k + depth * i + depth * width * j ;
168
+ case 3 : // 'yzx'
169
+ return j + height * k + height * depth * i ;
170
+ case 2 : // 'yxz'
171
+ return j + height * i + height * width * k ;
172
+ case 1 : // 'xzy'
173
+ return i + width * k + width * depth * j ;
174
+ default : // case 0: // 'xyz'
175
+ return i + width * j + width * height * k ;
176
+ }
177
+ } ;
168
178
169
179
var minValues = data . _minValues ;
170
180
var maxValues = data . _maxValues ;
@@ -218,9 +228,9 @@ function generateIsoMeshes(data) {
218
228
}
219
229
220
230
function addFace ( a , b , c ) {
221
- data . _i . push ( a ) ;
222
- data . _j . push ( b ) ;
223
- data . _k . push ( c ) ;
231
+ data . _meshI . push ( a ) ;
232
+ data . _meshJ . push ( b ) ;
233
+ data . _meshK . push ( c ) ;
224
234
numFaces ++ ;
225
235
226
236
return numFaces - 1 ;
@@ -379,10 +389,10 @@ function generateIsoMeshes(data) {
379
389
var index = indecies [ q ] ;
380
390
xyzv . push (
381
391
[
382
- data . x [ index ] ,
383
- data . y [ index ] ,
384
- data . z [ index ] ,
385
- data . value [ index ]
392
+ data . _x [ index ] ,
393
+ data . _y [ index ] ,
394
+ data . _z [ index ] ,
395
+ data . _value [ index ]
386
396
]
387
397
) ;
388
398
}
@@ -870,10 +880,10 @@ function generateIsoMeshes(data) {
870
880
for ( var k = 0 ; k < depth ; k ++ ) {
871
881
var index = getIndex ( i , j , k ) ;
872
882
addVertex (
873
- data . x [ index ] ,
874
- data . y [ index ] ,
875
- data . z [ index ] ,
876
- data . value [ index ]
883
+ data . _x [ index ] ,
884
+ data . _y [ index ] ,
885
+ data . _z [ index ] ,
886
+ data . _value [ index ]
877
887
) ;
878
888
}
879
889
}
@@ -1011,10 +1021,10 @@ function generateIsoMeshes(data) {
1011
1021
emptyVertices ( ) ;
1012
1022
}
1013
1023
1014
- data . _x = allXs ;
1015
- data . _y = allYs ;
1016
- data . _z = allZs ;
1017
- data . _intensity = allVs ;
1024
+ data . _meshX = allXs ;
1025
+ data . _meshY = allYs ;
1026
+ data . _meshZ = allZs ;
1027
+ data . _meshIntensity = allVs ;
1018
1028
1019
1029
data . _Xs = Xs ;
1020
1030
data . _Ys = Ys ;
0 commit comments