@@ -2,34 +2,61 @@ import macro from 'vtk.js/Sources/macro';
2
2
import Constants from 'vtk.js/Sources/Common/Core/DataArray/Constants' ;
3
3
4
4
const { DefaultDataType } = Constants ;
5
- const { vtkErrorMacro } = macro ;
6
5
const TUPLE_HOLDER = [ ] ;
7
6
8
7
// ----------------------------------------------------------------------------
9
8
// Global methods
10
9
// ----------------------------------------------------------------------------
11
10
12
- function computeRange ( values , component = 0 , tuple = 1 ) {
13
- const range = { min : Number . MAX_VALUE , max : - Number . MAX_VALUE } ;
11
+ function createRangeHelper ( ) {
12
+ let min = Number . MAX_VALUE ;
13
+ let max = - Number . MAX_VALUE ;
14
+ let count = 0 ;
15
+ let sum = 0 ;
16
+
17
+ return {
18
+ add ( value ) {
19
+ if ( min > value ) {
20
+ min = value ;
21
+ }
22
+ if ( max < value ) {
23
+ max = value ;
24
+ }
25
+ count ++ ;
26
+ sum += value ;
27
+ } ,
28
+ get ( ) {
29
+ return { min, max, count, sum, mean : sum / count } ;
30
+ } ,
31
+ getRange ( ) {
32
+ return { min, max } ;
33
+ } ,
34
+ } ;
35
+ }
36
+
37
+ function computeRange ( values , component = 0 , numberOfComponents = 1 ) {
38
+ const helper = createRangeHelper ( ) ;
39
+ const size = values . length ;
40
+ let value = 0 ;
14
41
15
42
if ( component < 0 ) {
16
43
// Compute magnitude
17
- vtkErrorMacro ( 'vtkDataArray: Compute magnitude - NOT IMPLEMENTED' ) ;
18
- return range ;
44
+ for ( let i = 0 ; i < size ; i += numberOfComponents ) {
45
+ value = 0 ;
46
+ for ( let j = 0 ; j < numberOfComponents ; j ++ ) {
47
+ value += values [ i + j ] * values [ i + j ] ;
48
+ }
49
+ value **= 0.5 ;
50
+ helper . add ( value ) ;
51
+ }
52
+ return helper . getRange ( ) ;
19
53
}
20
54
21
- const size = values . length ;
22
- for ( let i = component ; i < size ; i += tuple ) {
23
- const value = values [ i ] ;
24
- if ( range . min > value ) {
25
- range . min = value ;
26
- }
27
- if ( range . max < value ) {
28
- range . max = value ;
29
- }
55
+ for ( let i = component ; i < size ; i += numberOfComponents ) {
56
+ helper . add ( values [ i ] ) ;
30
57
}
31
58
32
- return range ;
59
+ return helper . getRange ( ) ;
33
60
}
34
61
35
62
function ensureRangeSize ( rangeArray , size = 0 ) {
@@ -55,6 +82,7 @@ function getDataType(typedArray) {
55
82
export const STATIC = {
56
83
computeRange,
57
84
getDataType,
85
+ createRangeHelper,
58
86
} ;
59
87
60
88
// ----------------------------------------------------------------------------
@@ -93,7 +121,7 @@ function vtkDataArray(publicAPI, model) {
93
121
94
122
publicAPI . getData = ( ) => model . values ;
95
123
96
- publicAPI . getRange = ( componentIndex = 0 ) => {
124
+ publicAPI . getRange = ( componentIndex = - 1 ) => {
97
125
const rangeIdx =
98
126
componentIndex < 0 ? model . numberOfComponents : componentIndex ;
99
127
let range = null ;
0 commit comments