#
# Coverage of iso surfaces of trivariates using curves.
#
#					Gershon Elber, March 1997
#

ThreeCyls = tbspline( 4, 4, 4,
	list( list( list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ) ),
	      list( list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ) ),
	      list( list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 1 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 1 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ) ),
	      list( list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ) ),
	      list( list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 1 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ),
	            list( ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ),
	                  ctlpt( E1, 0 ) ) ) ),
	list( list( 0, 0, 0, 0, 2, 4, 4, 4, 4 ),
	      list( 0, 0, 0, 0, 2, 4, 4, 4, 4 ),
	      list( 0, 0, 0, 0, 2, 4, 4, 4, 4 ) ) );
attrib( ThreeCyls, "color", red );

RefList = list( 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8,
	        2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8 );

ThreeCyls = trefine( trefine( trefine( ThreeCyls, row, false, RefList ),
			      col, false, RefList ),
		     depth, false, RefList );
free( RefList );

IsoVal = 0.12;
Size = 0.04;
Srf1 = mrchcube( list( ThreeCyls, 1, TRUE, TRUE ), point( Size, Size, Size ),
	         1, IsoVal );
color( Srf1, red );
interact( Srf1 );

Cover1 = CoverIso( ThreeCyls, 100, 1, vector( 1, 5, 1.0 ), 0.2, IsoVal,
		   vector( 0, 0, 1 ) ) * sc( Size );
color( Cover1, yellow );
viewobj(Cover1);
save( "tvcover1", list( Srf1, Cover1 ) );
pause();

Cover1 = CoverIso( ThreeCyls, 100, 2, vector( 1, 5, 1.0 ), 0.2, IsoVal,
		   vector( 0, 0, 1 ) ) * sc( Size );
color( Cover1, yellow );
viewobj(Cover1);
save( "tvcover2", list( Srf1, Cover1 ) );
pause();

Cover1 = CoverIso( ThreeCyls, 100, 4, vector( 1, 5, 1.0 ), 0.2, IsoVal,
		   vector( 0, 0, 1 ) ) * sc( Size );
color( Cover1, yellow );
viewobj(Cover1);
save( "tvcover3", list( Srf1, Cover1 ) );
pause();

free( Cover1 );
free( Srf1 );
free( IsoVal );
free( Size );
free( ThreeCyls );
