home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
i
/
iritsm3s.zip
/
irit
/
freeform.irt
< prev
next >
Wrap
Text File
|
1991-12-02
|
11KB
|
381 lines
#
# 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;