home *** CD-ROM | disk | FTP | other *** search
- #
- # Some routines to test surface/curve operators
- #
-
- #
- # Set display to on to view some results, off to view nothing.
- #
- display = on;
-
- #
- # Control the surface to polygons subdivison resolution, and isolines gen.
- #
- save_res = resolution;
- resolution = 20;
- if ( machine, "=", msdos, (resolution = 5));
- drawctlpt = red;
-
- #
- # Circular constructors
- #
-
- circ = circle( vector( 0.25, 0.5, 0.5 ), 1.5 );
- arc1 = arc( vector( 0.0, 0.0, 0.0 ),
- vector( 0.5, 2.0, 0.0 ),
- vector( 1.0, 0.0, 0.0 ) );
- arc2 = arc( vector( 0.0, 0.0, 0.0 ),
- vector( 0.0, 2.0, 0.5 ),
- vector( 0.0, 0.0, 1.0 ) );
-
- if ( display, "=", on, interact( list( axes, circ, arc1, arc2 ), 0 ) );
-
- #
- # Piecewise linear approximation to a curve using ceval:
- #
- cb = ceval( circ, 0.0 );
- cb_all = list( cb );
- for ( (t = 0.2), 0.2, 4.0,
- (
- (cb = ceval( circ, t ) ):
- snoc( cb, cb_all )
- )
- );
- cb_crv = cbspline( 2, cb_all, list( KV_OPEN ) );
- color( cb_crv, yellow );
- if ( display, "=", on, interact( list( cb_crv, circ, axes ), 0 ) );
- free( cb_crv ); free( cb_all ); free( cb );
-
- #
- # Ruled surface constructor examples.
- #
- arc3 = arc( vector( 0.0, 0.0, 1.0 ),
- vector( 0.5, -0.2, 1.0 ),
- vector( 1.0, 0.0, 1.0 ) );
- ruled = ruledsrf( arc3,
- ctlpt( E2, 0.0, 0.0 ) + ctlpt( E2, 1.0, 0.0 ) );
- if ( display, "=", on, interact( list( axes, ruled ), 0 ) );
- free( ruled );
-
- circ = circle( vector( 0.0, 0.0, 0.0 ), 0.25 );
- cyl = ruledsrf( circ, circ*trans( vector( 0.0, 0.0, 1.0 ) ) );
- if ( display, "=", on, interact( list( axes, cyl ), 0 ) );
- free( cyl );
-
- skewcyl = ruledsrf( circ, circ*trans( vector( 0.2, 0.0, 1.0 ) ) );
- if ( display, "=", on, interact( list( axes, skewcyl ), 0 ) );
- free( skewcyl );
-
- skew2cyl = ruledsrf( circ*rotx( 20 ),
- circ*rotx( -20 )* trans( vector( 0.0, 0.0, 1.0 ) ) );
- if ( display, "=", on, interact( list( axes, skew2cyl ), 0 ) );
- free( skew2cyl );
-
- drawctlpt = 0;
- free( arc1 ); free( arc2 ); free( arc3 ); free( circ );
-
- #
- # Curve constructors.
- #
- crv1 = ctlpt( E3, 0.5, 0.0, 1.0 ) +
- ctlpt( E3, 0.5, 0.0, 1.2 ) +
- ctlpt( E3, 1.0, 0.0, 1.2 );
- crv2 = crv1 +
- arc( vector( 1.0, 0.0, 0.75 ),
- vector( 0.75, 0.0, 0.7 ),
- vector( 0.5, 0.0, 0.85 ) ) +
- arc( vector( 0.5, 0.0, 0.75 ),
- vector( 0.75, 0.0, 0.8 ),
- vector( 1.0, 0.0, 0.65 ) );
- crv3 = crv2 +
- crv2 * trans( vector( -0.5, 0.15, -0.5 ) ) +
- crv2 * trans( vector( -1.0, 0.3, -1.0 ) );
- resolution = 60;
- if ( display, "=", on, interact( list( axes, crv3 ), 0 ) );
- resolution = 20;
- if ( machine, "=", msdos, (resolution = 5));
- free( crv1 ); free( crv2 ); free( crv3 );
-
- cross = arc( vector( 0.2, 0.0, 0.0 ),
- vector( 0.2, 0.2, 0.0 ),
- vector( 0.0, 0.2, 0.0 ) ) +
- arc( vector( 0.0, 0.4, 0.0 ),
- vector( 0.1, 0.4, 0.0 ),
- vector( 0.1, 0.5, 0.0 ) ) +
- arc( vector( 0.8, 0.5, 0.0 ),
- vector( 0.8, 0.3, 0.0 ),
- vector( 1.0, 0.3, 0.0 ) ) +
- arc( vector( 1.0, 0.1, 0.0 ),
- vector( 0.9, 0.1, 0.0 ),
- vector( 0.9, 0.0, 0.0 ) ) +
- ctlpt( E2, 0.2, 0.0 );
- if ( display, "=", on, interact( list( axes, cross ), 0 ) );
-
- #
- # Direct control points manipulation.
- #
- cb = cbezier( list( ctlpt( E3, -1, 0, 0 ),
- ctlpt( E3, 0, 0, 0 ),
- ctlpt( E3, 1, 0, 0 ) ) );
-
- cb1 = 0; # Define a dummy variable to use in loop.
- cb_all = list( axes );
- for ( (z = -0.9), 0.3, 0.9,
- (
- (cb1 = ceditpt( cb, ctlpt( E3, 0, 0, z ), 1 )):
- color( cb1, green ):
- snoc( cb1, cb_all )
- )
- );
- if ( display, "=", on, interact( cb_all, 0 ) );
- free( cb_all ); free( cb ); free( cb1 );
-
-
- sb = ruledSrf( cbezier( list( ctlpt( E3, -0.5, -0.5, 0.0 ),
- ctlpt( E3, 0.5, -0.5, 0.0 ) ) ),
- cbezier( list( ctlpt( E3, -0.5, 0.5, 0.0 ),
- ctlpt( E3, 0.5, 0.5, 0.0 ) ) ) );
- sb = sraise( sraise( sb, row, 3 ),
- col, 3 );
- sb = srefine( srefine( sb, row, false, list( 0.333, 0.667 ) ),
- col, false, list( 0.333, 0.667 ) );
- sb1 = 0; # Define a dummy variable to use in loop.
- sb_all = list( axes );
- for ( (z = -0.9), 0.6, 0.9,
- (
- (sb1 = seditpt( sb, ctlpt( E3, 0, 0, z ), 2, 2 )):
- color( sb1, green ):
- snoc( sb1, sb_all )
- )
- );
- if ( display, "=", on, interact( sb_all, 0 ) );
- free( sb_all ); free( sb ); free( sb1 );
-
- #
- # Curve order raise:
- #
- cb = cbezier( list( ctlpt( E2, -1, 0 ),
- ctlpt( E2, 0, 2 ),
- ctlpt( E2, 1, 0 ) ) );
-
- cb1 = 0; # Define a dummy variable to use in loop.
- cb_all = list( axes, cb );
- for ( (o = 4), 1, 8,
- (
- (cb1 = craise( cb, o )):
- color( cb1, green ):
- snoc( cb1, cb_all )
- )
- );
- if ( display, "=", on, interact( cb_all, 0 ) );
- free( cb_all ); free( cb ); free( cb1 );
-
- #
- # Extrusion examples.
- #
- cbzr = cbezier( list( ctlpt( E2, 0.0, 0.0 ),
- ctlpt( E2, 1.0, 0.0 ),
- ctlpt( E2, 1.0, 1.0 ) ) );
- color( cbzr, white );
-
- s = extrude( cbzr, vector( 0.0, 0.0, 1.0 ) );
-
- if ( display, "=", on, interact( list( axes, s, cbzr ), 0 ) );
- free( cbzr ); free( s );
-
- s = extrude( cross, vector( 0.0, 0.0, 1.0 ) );
- if ( display, "=", on, interact( list( axes, s ), 0 ) );
-
- s = extrude( cross, vector( 0.1, 0.2, 1.0 ) );
- if ( display, "=", on, interact( list( axes, s ), 0 ) );
-
- resolution = 10;
- ps = gpolygon( s );
- if ( display, "=", on, interact( list( axes, ps ), 0 ) );
- free( ps );
- free( s );
- resolution = 20;
- if ( machine, "=", msdos, (resolution = 5));
-
- #
- # Srf of revolution examples
- #
-
- cbzr = cbezier( list( ctlpt( E3, 0.0, 0.0, 0.0 ),
- ctlpt( E3, 1.0, 0.0, 0.0 ),
- ctlpt( E3, 1.0, 0.0, 1.0 ) ) );
- color( cbzr, white );
-
- sb = surfrev( cbzr );
-
- interact( list( sb, cbzr ), 0 );
-
- s45 = sin(pi / 4 );
- halfcirc = cbspline( 3,
- list( ctlpt( P3, 1.0, 0.0, 0.0, 1.0 ),
- ctlpt( P3, s45, -s45, 0.0, s45 ),
- ctlpt( P3, 1.0, -1.0, 0.0, 0.0 ),
- ctlpt( P3, s45, -s45, 0.0, -s45 ),
- ctlpt( P3, 1.0, 0.0, 0.0, -1.0 ) ),
- list( 0, 0, 0, 1, 1, 2, 2, 2 ) );
- color( halfcirc, white );
-
- sp = surfrev( halfcirc );
-
- interact( list( sp, halfcirc ), 0 );
-
- gcross = cbspline( 3,
- list( ctlpt( E3, 0.3, 0.0, 0.0 ),
- ctlpt( E3, 0.3, 0.0, 0.05 ),
- ctlpt( E3, 0.1, 0.0, 0.05 ),
- ctlpt( E3, 0.1, 0.0, 0.4 ),
- ctlpt( E3, 0.5, 0.0, 0.4 ),
- ctlpt( E3, 0.6, 0.0, 0.8 ) ),
- list( 0, 0, 0, 1, 2, 3, 4, 4, 4 ) );
- color( gcross, white );
- glass = surfrev( gcross );
- interact(list(axes, glass, gcross), 0);
-
- #
- # Sweep examples.
- #
-
- arc1 = arc( vector( 1.0, 0.0, 0.0 ),
- vector( 0.0, 0.0, 0.0 ),
- vector( 0.0, 1.0, 0.0 ) );
- s = sweepsrf( cross, arc1, 0.2 );
- if ( display, "=", on, interact( list( axes, s ), 0 ) );
-
- arc1 = arc( vector( -1.0, 0.0, 0.0 ),
- vector( 0.0, 0.0, 0.1 ),
- vector( 1.0, 0.0, 0.0 ) );
- arc1 = crefine( arc1, false, list( 0.25, 0.5, 0.75 ) );
- scalecrv = cbezier( list( ctlpt( E2, 0.0, 0.1 ),
- ctlpt( E2, 1.0, 0.5 ),
- ctlpt( E2, 2.0, 0.1 ) ) );
- s = sweepsrf( cross, arc1, scalecrv );
- if ( display, "=", on, interact( list( axes, s ), 0 ) );
-
- circ = circle( vector( 0.0, 0.0, 0.0 ), 1.0 );
-
- s = sweepsrf( circ, circ, 0.25 );
- if ( display, "=", on, interact( list( axes, s ), 0 ) );
-
- resolution = 10;
- ps = gpolygon( s );
- if ( display, "=", on, interact( list( axes, ps ), 0 ) );
- free( ps );
- resolution = 20;
- if ( machine, "=", msdos, (resolution = 5));
-
- s = sweepsrf( circ, circ, scalecrv );
- if ( display, "=", on, interact( list( axes, s ), 0 ) );
-
- free( cross );
- free( circ );
- free( arc1 );
-
- #
- # Boolean sum examples.
- #
- cbzr1 = cbezier( list( ctlpt( E3, -0.2, 0.1, 0.5 ),
- ctlpt( E3, 0.0, 0.5, 1.0 ),
- ctlpt( E3, 0.1, 1.0, -0.2 ) ) );
- cbzr2 = cbezier( list( ctlpt( E3, 1.0, 0.0, -0.3 ),
- ctlpt( E3, 0.8, 0.5, -1.0 ),
- ctlpt( E3, 1.0, 1.0, 0.2 ) ) );
- cbzr3 = cbezier( list( ctlpt( E3, -0.2, 0.1, 0.5 ),
- ctlpt( E3, 0.5, 0.0, -1.0 ),
- ctlpt( E3, 1.0, 0.0, -0.3 ) ) );
- cbzr4 = cbezier( list( ctlpt( E3, 0.1, 1.0, -0.2 ),
- ctlpt( E3, 0.5, 1.0, 1.0 ),
- ctlpt( E3, 1.0, 1.0, 0.2 ) ) );
-
- s = boolsum( cbzr1, cbzr2, cbzr3, cbzr4 );
- color(s, green);
- if ( display, "=", on, interact( list( axes, s, cbzr1, cbzr2, cbzr3, cbzr4 ), 0 ) );
-
- cbzr1 = cbezier( list( ctlpt( E3, -0.1, 0.1, 0.2 ),
- ctlpt( E3, 0.0, 0.5, 1.0 ),
- ctlpt( E3, 0.1, 1.0, 0.2 ) ) );
- cbzr2 = cbezier( list( ctlpt( E3, 1.0, 0.2, -0.1 ),
- ctlpt( E3, 1.0, 0.5, -1.0 ),
- ctlpt( E3, 1.1, 1.1, 0.1 ) ) );
- cbzr3 = cbezier( list( ctlpt( E3, -0.1, 0.1, 0.2 ),
- ctlpt( E3, 0.2, 0.1, -1.0 ),
- ctlpt( E3, 0.4, 0.0, 2.0 ),
- ctlpt( E3, 0.5, -0.1, -1.0 ),
- ctlpt( E3, 1.0, 0.2, -0.1 ) ) );
- cbzr4 = cbezier( list( ctlpt( E3, 0.1, 1.0, 0.2 ),
- ctlpt( E3, 0.5, 0.8, 1.0 ),
- ctlpt( E3, 0.7, 0.9, -2.0 ),
- ctlpt( E3, 0.8, 1.0, 1.0 ),
- ctlpt( E3, 1.1, 1.1, 0.1 ) ) );
- s = boolsum( cbzr1, cbzr2, cbzr3, cbzr4 );
- color(s, green);
- if ( display, "=", on, interact( list( axes, s, cbzr1, cbzr2, cbzr3, cbzr4 ), 0 ) );
-
- cbzr1 = cbezier( list( ctlpt( E3, 0.1, 0.1, 0.1 ),
- ctlpt( E3, 0.0, 0.5, 1.0 ),
- ctlpt( E3, 0.4, 1.0, 0.4 ) ) );
- cbzr2 = cbezier( list( ctlpt( E3, 1.0, 0.2, 0.2 ),
- ctlpt( E3, 1.0, 0.5, -1.0 ),
- ctlpt( E3, 1.0, 1.0, 0.3 ) ) );
- cbsp3 = cbspline( 4,
- list( ctlpt( E3, 0.1, 0.1, 0.1 ),
- ctlpt( E3, 0.25, 0.0, -1.0 ),
- ctlpt( E3, 0.5, 0.0, 2.0 ),
- ctlpt( E3, 0.75, 0.0, -1.0 ),
- ctlpt( E3, 1.0, 0.2, 0.2 ) ),
- list( KV_OPEN ) );
- cbsp4 = cbspline( 4,
- list( ctlpt( E3, 0.4, 1.0, 0.4 ),
- ctlpt( E3, 0.25, 1.0, 1.0 ),
- ctlpt( E3, 0.5, 1.0, -2.0 ),
- ctlpt( E3, 0.75, 1.0, 1.0 ),
- ctlpt( E3, 1.0, 1.0, 0.3 ) ),
- list( KV_OPEN ) );
-
- s = boolsum( cbzr1, cbzr2, cbsp3, cbsp4 );
- color(s, green);
- if ( display, "=", on, interact( list( axes, s, cbzr1, cbzr2, cbsp3, cbsp4 ), 0 ) );
-
- free( cbzr1 ); free( cbzr2 ); free( cbzr3 ); free( cbzr4 );
- free( cbsp1 ); free( cbsp2 );
-
- #
- # Surface from curves constructor.
- #
-
- c1 = cbspline( 3,
- list( ctlpt( E3, 0.0, 0.0, 0.0 ),
- ctlpt( E3, 1.0, 0.0, 0.0 ),
- ctlpt( E3, 1.0, 1.0, 0.0 ) ),
- list( KV_OPEN ) );
- c2 = cbspline( 3,
- list( ctlpt( E3, 0.0, 0.0, 1.0 ),
- ctlpt( E3, 1.0, 0.0, 1.0 ),
- ctlpt( E3, 1.0, 2.0, 1.0 ) ),
- list( KV_OPEN ) );
- c3 = cbspline( 3,
- list( ctlpt( E3, 0.0, 0.0, 1.5 ),
- ctlpt( E3, 2.0, 0.0, 1.5 ),
- ctlpt( E3, 1.0, 0.5, 1.5 ),
- ctlpt( E3, 1.0, 1.0, 1.5 ) ),
- list( KV_OPEN ) );
- c4 = cbspline( 3,
- list( ctlpt( E3, 0.0, 0.0, 2.5 ),
- ctlpt( E3, 1.0, 0.0, 2.5 ),
- ctlpt( E3, 1.0, 1.0, 2.5 ) ),
- list( KV_OPEN ) );
-
- s = sfromcrvs( list( c1, c2, c3, c4 ) );
- color( s, green );
- interact( list( s ), 0 );
- free( c1 ); free( c2 ); free( c3 ); free( c4 );
-
- display = off;
-
- resolution = save_res;
- drawctlpt = 0;
-
-