@@ -393,14 +393,28 @@ function generateIsosurfaceMesh(data) {
393393 return xyzv ;
394394 }
395395
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 ;
397401
398402 abc = [ - 1 , - 1 , - 1 ] ; // Note: for the moment we override indices
399403 // to run faster! But it is possible to comment this line
400404 // to reduce the number of vertices.
401405
402406 var result = false ;
403407
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+
404418 var tryDrawTri = function ( style , xyzv , abc ) {
405419 if ( // we check here if the points are in `real` iso-min/max range
406420 almostInFinalRange ( xyzv [ 0 ] [ 3 ] ) &&
@@ -409,28 +423,18 @@ function generateIsosurfaceMesh(data) {
409423 ) {
410424 drawTri ( style , xyzv , abc ) ;
411425 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
414428 }
415429 return false ;
416430 } ;
417431
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-
430432 if ( ok [ 0 ] && ok [ 1 ] && ok [ 2 ] ) {
431433 return tryDrawTri ( style , xyzv , abc ) || result ;
432434 }
433435
436+ var interpolated = false ;
437+
434438 [
435439 [ 0 , 1 , 2 ] ,
436440 [ 2 , 0 , 1 ] ,
@@ -486,8 +490,6 @@ function generateIsosurfaceMesh(data) {
486490 inRange ( xyzv [ 3 ] [ 3 ] , min , max )
487491 ] ;
488492
489- var interpolated = false ;
490-
491493 if ( ! ok [ 0 ] && ! ok [ 1 ] && ! ok [ 2 ] && ! ok [ 3 ] ) {
492494 return result ;
493495 }
@@ -499,6 +501,8 @@ function generateIsosurfaceMesh(data) {
499501 return result ;
500502 }
501503
504+ var interpolated = false ;
505+
502506 [
503507 [ 0 , 1 , 2 , 3 ] ,
504508 [ 3 , 0 , 1 , 2 ] ,
@@ -615,10 +619,14 @@ function generateIsosurfaceMesh(data) {
615619 return result ;
616620 }
617621
618- function addRect ( style , a , b , c , d , min , max , previousResult ) {
622+ function addRect ( style , a , b , c , d , min , max
623+ // , previousResult
624+ ) {
619625 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 )
622630 ] ;
623631 }
624632
@@ -676,17 +684,14 @@ function generateIsosurfaceMesh(data) {
676684 function begin3dCell ( style , p000 , p001 , p010 , p011 , p100 , p101 , p110 , p111 , min , max , isEven ) {
677685 // used to create spaceframe and/or iso-surfaces
678686
679- var result = false ;
680687 var cellStyle = style ;
681688 if ( isEven ) {
682689 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 ) ;
684691 } else {
685692 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 ) ;
687694 }
688-
689- return result ;
690695 }
691696
692697 function draw2dX ( style , items , min , max , previousResult ) {
@@ -705,7 +710,7 @@ function generateIsosurfaceMesh(data) {
705710 min ,
706711 max ,
707712 ( i + j + k ) % 2 ,
708- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
713+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
709714 )
710715 ) ;
711716 n ++ ;
@@ -731,7 +736,7 @@ function generateIsosurfaceMesh(data) {
731736 min ,
732737 max ,
733738 ( i + j + k ) % 2 ,
734- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
739+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
735740 )
736741 ) ;
737742 n ++ ;
@@ -757,7 +762,7 @@ function generateIsosurfaceMesh(data) {
757762 min ,
758763 max ,
759764 ( i + j + k ) % 2 ,
760- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
765+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
761766 )
762767 ) ;
763768 n ++ ;
@@ -810,7 +815,7 @@ function generateIsosurfaceMesh(data) {
810815 for ( var j = 1 ; j < height ; j ++ ) {
811816 result . push (
812817 beginSection ( style , i , j , k , min , max , distRatios [ q ] ,
813- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
818+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
814819 )
815820 ) ;
816821 n ++ ;
@@ -829,7 +834,7 @@ function generateIsosurfaceMesh(data) {
829834 for ( var k = 1 ; k < depth ; k ++ ) {
830835 result . push (
831836 beginSection ( style , i , j , k , min , max , distRatios [ q ] ,
832- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
837+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
833838 )
834839 ) ;
835840 n ++ ;
@@ -848,7 +853,7 @@ function generateIsosurfaceMesh(data) {
848853 for ( var i = 1 ; i < width ; i ++ ) {
849854 result . push (
850855 beginSection ( style , i , j , k , min , max , distRatios [ q ] ,
851- ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ false , false ]
856+ ( previousResult && previousResult [ n ] ) ? previousResult [ n ] : [ ]
852857 )
853858 ) ;
854859 n ++ ;
0 commit comments