#! /bin/sh

# Copyright (C) 1991 The Geometry Center

case "$1" in
    [0-9]*) ;;
    *)
	echo "Usage:  mktorus   nholes  >torus.oogl
Constructs an N-holed torus using Bezier patch pieces in the data directory.
setenv GEOM_PATH  <OOGL-directory>/data  when displaying the resulting objects
if you're not already in the data directory." >&2
	exit 1
	;;
esac

awk '
 BEGIN {
	n = '$1';
	xfmt = "  1 0 0 0\n  0 %g 0 0\n  0 0 1 0\n  %g 0 0 1\n\n";
	print "GROUP"
	print " # Reflect about X and Z axes"
	print "  1 0 0 0\n  0 1 0 0\n  0 0 1 0\n  0 0 0 1\n";
	print "  1 0 0 0\n  0 1 0 0\n  0 0 -1 0\n  0 0 0 1\n";
	print "  -1 0 0 0\n  0 1 0 0\n  0 0 1 0\n  0 0 0 1\n";
	print "  -1 0 0 0\n  0 1 0 0\n  0 0 -1 0\n  0 0 0 1\n";
	print "unit { =";
	print " LIST";
	print " { = INST # Semicircular ends of torus";
	print "transform";
	printf xfmt, 1, 2*(n-1);
	print "unit < torus21A.bez";
	print " }"
	if(n > 1) {
	    print " { = GROUP # Joining pieces"
	    for(i = 0; i < n-1; i++) {
		printf xfmt, 1, 4*i - 2*n + 2
		printf xfmt, -1, 4*i - 2*n + 2
	    }
	    print " unit < torus21B.bez"
	    print " }"
	}
	print "}";
	exit
  }'

