@@ -2,34 +2,61 @@ import macro from 'vtk.js/Sources/macro';
22import Constants from 'vtk.js/Sources/Common/Core/DataArray/Constants' ;
33
44const { DefaultDataType } = Constants ;
5- const { vtkErrorMacro } = macro ;
65const TUPLE_HOLDER = [ ] ;
76
87// ----------------------------------------------------------------------------
98// Global methods
109// ----------------------------------------------------------------------------
1110
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 ;
1441
1542 if ( component < 0 ) {
1643 // 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 ( ) ;
1953 }
2054
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 ] ) ;
3057 }
3158
32- return range ;
59+ return helper . getRange ( ) ;
3360}
3461
3562function ensureRangeSize ( rangeArray , size = 0 ) {
@@ -55,6 +82,7 @@ function getDataType(typedArray) {
5582export const STATIC = {
5683 computeRange,
5784 getDataType,
85+ createRangeHelper,
5886} ;
5987
6088// ----------------------------------------------------------------------------
@@ -93,7 +121,7 @@ function vtkDataArray(publicAPI, model) {
93121
94122 publicAPI . getData = ( ) => model . values ;
95123
96- publicAPI . getRange = ( componentIndex = 0 ) => {
124+ publicAPI . getRange = ( componentIndex = - 1 ) => {
97125 const rangeIdx =
98126 componentIndex < 0 ? model . numberOfComponents : componentIndex ;
99127 let range = null ;
0 commit comments