@@ -393,14 +393,28 @@ function generateIsosurfaceMesh(data) {
393
393
return xyzv ;
394
394
}
395
395
396
- function tryCreateTri ( style , xyzv , abc , min , max , isSecondPass ) {
396
+ var MAX_PASS = 3 ;
397
+
398
+ function tryCreateTri ( style , xyzv , abc , min , max , nPass ) {
399
+
400
+ if ( ! nPass ) nPass = 1 ;
397
401
398
402
abc = [ - 1 , - 1 , - 1 ] ; // Note: for the moment we override indices
399
403
// to run faster! But it is possible to comment this line
400
404
// to reduce the number of vertices.
401
405
402
406
var result = false ;
403
407
408
+ var ok = [
409
+ inRange ( xyzv [ 0 ] [ 3 ] , min , max ) ,
410
+ inRange ( xyzv [ 1 ] [ 3 ] , min , max ) ,
411
+ inRange ( xyzv [ 2 ] [ 3 ] , min , max )
412
+ ] ;
413
+
414
+ if ( ! ok [ 0 ] && ! ok [ 1 ] && ! ok [ 2 ] ) {
415
+ return false ;
416
+ }
417
+
404
418
var tryDrawTri = function ( style , xyzv , abc ) {
405
419
if ( // we check here if the points are in `real` iso-min/max range
406
420
almostInFinalRange ( xyzv [ 0 ] [ 3 ] ) &&
@@ -409,28 +423,18 @@ function generateIsosurfaceMesh(data) {
409
423
) {
410
424
drawTri ( style , xyzv , abc ) ;
411
425
return true ;
412
- } else if ( ! isSecondPass ) {
413
- return tryCreateTri ( style , xyzv , abc , vMin , vMax , true ) ; // i.e. second pass
426
+ } else if ( nPass < MAX_PASS ) {
427
+ return tryCreateTri ( style , xyzv , abc , vMin , vMax , ++ nPass ) ; // i.e. second pass using actual vMin vMax bounds
414
428
}
415
429
return false ;
416
430
} ;
417
431
418
- var ok = [
419
- inRange ( xyzv [ 0 ] [ 3 ] , min , max ) ,
420
- inRange ( xyzv [ 1 ] [ 3 ] , min , max ) ,
421
- inRange ( xyzv [ 2 ] [ 3 ] , min , max )
422
- ] ;
423
-
424
- var interpolated = false ;
425
-
426
- if ( ! ok [ 0 ] && ! ok [ 1 ] && ! ok [ 2 ] ) {
427
- return false ;
428
- }
429
-
430
432
if ( ok [ 0 ] && ok [ 1 ] && ok [ 2 ] ) {
431
433
return tryDrawTri ( style , xyzv , abc ) || result ;
432
434
}
433
435
436
+ var interpolated = false ;
437
+
434
438
[
435
439
[ 0 , 1 , 2 ] ,
436
440
[ 2 , 0 , 1 ] ,
@@ -486,8 +490,6 @@ function generateIsosurfaceMesh(data) {
486
490
inRange ( xyzv [ 3 ] [ 3 ] , min , max )
487
491
] ;
488
492
489
- var interpolated = false ;
490
-
491
493
if ( ! ok [ 0 ] && ! ok [ 1 ] && ! ok [ 2 ] && ! ok [ 3 ] ) {
492
494
return result ;
493
495
}
@@ -499,6 +501,8 @@ function generateIsosurfaceMesh(data) {
499
501
return result ;
500
502
}
501
503
504
+ var interpolated = false ;
505
+
502
506
[
503
507
[ 0 , 1 , 2 , 3 ] ,
504
508
[ 3 , 0 , 1 , 2 ] ,
@@ -615,10 +619,14 @@ function generateIsosurfaceMesh(data) {
615
619
return result ;
616
620
}
617
621
618
- function addRect ( style , a , b , c , d , min , max , previousResult ) {
622
+ function addRect ( style , a , b , c , d , min , max
623
+ // , previousResult
624
+ ) {
619
625
return [
620
- ( previousResult [ 0 ] === true ) ? true : tryCreateTri ( style , getXYZV ( [ a , b , c ] ) , [ a , b , c ] , min , max ) ,
621
- ( previousResult [ 1 ] === true ) ? true : tryCreateTri ( style , getXYZV ( [ c , d , a ] ) , [ c , d , a ] , min , max )
626
+ // (previousResult[0] === true) ? true :
627
+ tryCreateTri ( style , getXYZV ( [ a , b , c ] ) , [ a , b , c ] , min , max ) ,
628
+ // (previousResult[1] === true) ? true :
629
+ tryCreateTri ( style , getXYZV ( [ c , d , a ] ) , [ c , d , a ] , min , max )
622
630
] ;
623
631
}
624
632
@@ -676,17 +684,14 @@ function generateIsosurfaceMesh(data) {
676
684
function begin3dCell ( style , p000 , p001 , p010 , p011 , p100 , p101 , p110 , p111 , min , max , isEven ) {
677
685
// used to create spaceframe and/or iso-surfaces
678
686
679
- var result = false ;
680
687
var cellStyle = style ;
681
688
if ( isEven ) {
682
689
if ( drawingSurface && style === 'even' ) cellStyle = null ;
683
- result = addCube ( cellStyle , p000 , p001 , p010 , p011 , p100 , p101 , p110 , p111 , min , max ) || result ;
690
+ return addCube ( cellStyle , p000 , p001 , p010 , p011 , p100 , p101 , p110 , p111 , min , max ) ;
684
691
} else {
685
692
if ( drawingSurface && style === 'odd' ) cellStyle = null ;
686
- result = addCube ( cellStyle , p111 , p110 , p101 , p100 , p011 , p010 , p001 , p000 , min , max ) || result ;
693
+ return addCube ( cellStyle , p111 , p110 , p101 , p100 , p011 , p010 , p001 , p000 , min , max ) ;
687
694
}
688
-
689
- return result ;
690
695
}
691
696
692
697
function draw2dX ( style , items , min , max , previousResult ) {
@@ -705,7 +710,7 @@ function generateIsosurfaceMesh(data) {
705
710
min ,
706
711
max ,
707
712
( i + j + k ) % 2 ,
708
- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
713
+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
709
714
)
710
715
) ;
711
716
n ++ ;
@@ -731,7 +736,7 @@ function generateIsosurfaceMesh(data) {
731
736
min ,
732
737
max ,
733
738
( i + j + k ) % 2 ,
734
- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
739
+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
735
740
)
736
741
) ;
737
742
n ++ ;
@@ -757,7 +762,7 @@ function generateIsosurfaceMesh(data) {
757
762
min ,
758
763
max ,
759
764
( i + j + k ) % 2 ,
760
- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
765
+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
761
766
)
762
767
) ;
763
768
n ++ ;
@@ -810,7 +815,7 @@ function generateIsosurfaceMesh(data) {
810
815
for ( var j = 1 ; j < height ; j ++ ) {
811
816
result . push (
812
817
beginSection ( style , i , j , k , min , max , distRatios [ q ] ,
813
- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
818
+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
814
819
)
815
820
) ;
816
821
n ++ ;
@@ -829,7 +834,7 @@ function generateIsosurfaceMesh(data) {
829
834
for ( var k = 1 ; k < depth ; k ++ ) {
830
835
result . push (
831
836
beginSection ( style , i , j , k , min , max , distRatios [ q ] ,
832
- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
837
+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
833
838
)
834
839
) ;
835
840
n ++ ;
@@ -848,7 +853,7 @@ function generateIsosurfaceMesh(data) {
848
853
for ( var i = 1 ; i < width ; i ++ ) {
849
854
result . push (
850
855
beginSection ( style , i , j , k , min , max , distRatios [ q ] ,
851
- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
856
+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
852
857
)
853
858
) ;
854
859
n ++ ;
0 commit comments