#
# A modern cup.
#
#				Gershon Elber, November 1995
#

save_mat = view_mat;
view_mat = rotx( -90 ) * tx( -0.5 ) * ty( -1.0 ) * sc( 0.8 );
viewobj( view_mat );

PtList = nil();
for ( i = 0, 1, 7,
    snoc( point( cos( i * 2 * Pi / 8 ), sin( i * 2 * Pi / 8 ), 0.0 ),
	  PtList ) );

C1 = coerce( cbspline( 3, PtList, list( KV_PERIODIC ) ), KV_OPEN ) * rz( -22.5 );
C2 = coerce( cbspline( 2, PtList, list( KV_PERIODIC ) ), KV_OPEN ) * sc( 1.1 );

MinSize = 0.01;
Body = sFromCrvs( list( C2 * sc( MinSize ) * tz( 0.05 ),
			C2 * sc( 0.7 ) * tz( 0.05 ),
			C2 * sc( 0.8 ) * tz( 0.05 ),
			C2 * sc( 0.9 ),
			C2,
			C2 * tz( 2.0 ),
			C2 * tz( 2.2 ),
			C1 * tz( 2.2 ),
			C1 * tz( 2.0 ),
			C1 * tz( 0.4 ),
			C1 * sc( 0.5 ) * tz( 0.2 ),
			C1 * sc( MinSize ) * tz( 0.2 ) ),
		  3 );

cBody = cSurface( coerce( Body, KV_OPEN ), COL, 1 );

cBodyIn = cregion( cBody, 6.0, 10.0 );
color( cBodyIn, red );
cBodyOut = -cregion( cBody, 0.0, 6.0 );
color( cBodyOut, green );

ruled1 = ruledSrf( cBodyIn, cBodyOut );
interact( list( cBodyOut, cBodyIn, ruled1 ) );

cBodyIn2 = ffmatch( cBodyOut, cBodyIn, 30, 100, 2, false, -1 );
ruled2 = ruledSrf( cBodyIn2, cBodyOut );
interact( list( cBodyOut, cBodyIn2, ruled2 ) );

cBodyIn3 = ffmatch( cBodyOut, cBodyIn, 30, 100, 2, false, -2 );
ruled3 = ruledSrf( cBodyIn2, cBodyOut );
interact( list( cBodyOut, cBodyIn3, ruled3 ) );

cBodyIn4 = ffmatch( cBodyOut, cBodyIn, 30, 100, 2, false, -3 );
ruled4 = ruledSrf( cBodyIn4, cBodyOut );
interact( list( cBodyOut, cBodyIn4, ruled4 ) );

view_mat = save_mat;
