perm filename DOC5[GEM,BGB] blob sn#088716 filedate 1974-03-01 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	CONTROL - SUBROUTINE CALLS.
C00006 00003	CONTROL -
C00009 00004	CONTROL -
C00011 ENDMK
C⊗;
CONTROL - SUBROUTINE CALLS.

SHORT EXPLAINATION OF EACH SUBROUTINE.

	Unless  otherwise  noted,   all  arguments  and   values  are
integers; subroutines  executed for effect return integer value zero.

GEOMED;

	Passes control  to the geometric editor,  GEOMED; which has
own arcane jump table command scanner, display modes, I/O and  so on;
see the  GEOMED.BGB[S,DOC] operating  note for further  details. When
the  exit command "εE" is given, GEOMED  returns the address of 
the node which is at the top of its stack (or zero).

GEODPY;

Default GEOMED display. Refresh the "now" display of GEOMED.

[2] SHOW1(WINDOW,GLASS);

	Display all the edges of all the objects of  the world of the
given window (or  the "now" window if the window  argument is 0). The
GLASS is  an integer  between 0  and '17;  GLASS corresponds  to  the
system's pieces of glass; use GLASS set to 1  if you do not know what
a  piece of glass  is. The command  SHOW1(0,1) is the  fastest way to
display the "now" world.

SHOW2(WINDOW,GLASS);

	Display all the visible edges of all the objects of the world
of the given window (or the "now" window if the window argument is 0).
SHOW2 calls the hidden line eliminator OCCULT.

SHOW3(WINDOW,GLASS);

	Display all the faces that are towards the camera. SHOW3 is about
as fast as SHOW1, but with the back sides of everything being hidden.

BODY ← IGEM(STRING FILENAME);
OGEM(STRING FILENAME; BODY);

	Input and output routines for GEM file format polyhedra.
If the file isn't found then IGEM returns a zero.

FRAME ← TRANSLATE(ENTITY; REAL DELTAX,DELTAY,DELTAZ);
FRAME ←    ROTATE(ENTITY; REAL ABOUTX,ABOUTY,ABOUTZ);
FRAME ←    SHRINK(ENTITY; REAL SCALEX,SCALEY,SCALEZ);

	When  the  ENTITY argument  is  non-zero,  these  subroutines
perform   the   indicated   Euclidean  Transformation:   translation,
rotation, dilation and reflection. When the ENTITY argument  is ZERO,
then  a  FRAME  node   representing  the  desired  transformation  is
returned.
CONTROL -

FRAME ← APTRAN(ENTITY,FRAME);

	Apply a  Euclidean Transformation  to an  ENTITY; the  entity
may be a Body, Face, Edge, Vertex, Camera or Frame.

FRAME ← INTRAN(FRAME);
	
	Invert a  Euclidean Transformation; the invert of a Euclidean
Transformation will undo the given transformation.

REAL_DEL ← DISTAN(V1,V2);

	Given to vertices, return the distance between them.

NODE ← MKNODE(TYPE);

	Make (that is allocate)  a 12 word GEM node  with the integer
TYPE in it word 0.

KLNODE(NODE);

	Kill node (that is release) a 12 word GEM node.

WORLD ← MKWORLD;

	Make world,  adds  a new  world at  the end  of the  universe
node's  world  ring. The  first  world of  the  universe  is accessed
W1←PWRLD(UNIVERSE); the remaining  worlds are accessed  W2←PWRLD(W1);
W3←PWRLD(W2); until  the ring  points to the  first world  again. The
world ring is never empty.

CAMERA ← MKCAMERA(WORLD);

	Make a camera in a given world; if the world argument is zero
the default world is the "now" world.

NEW_WINDOW ← MKWINDOW(CAMERA,OLD_WINDOW);

	CAMERA  argument may  be  zero  (uses "now"  camera);  WINDOW
argument may be  zero to create a new display ring; otherwise the new
window is  placed into  the display  ring of  the  given window.  The
universe has a ring of displays;  only the "now" display is refreshed
by  the subroutine  GEODPY; a  display is  a ring  of windows;  and a
window merely points to a camera, which points at a world.
CONTROL -

INVERT(EDGE);

	An edge is a directed vector with a positive and a negative
vertex; INVERT flip the orientation of an edge vector and returns the
same edge.

EVERT(BODY);

	Evert  turns  a  body  inside  out,  or  vice  versa.  A  GEM
polyhedral  surface  has an  inside  and an  outside;  the  inside is
defined by the orientation of  the four wing pointers in edge  nodes;
the evert primitives  changes the order of these pointers  in all the
edges of the given body.

VNEW ← MKEV(FACE,VERTEX);

	Make a new edge and a new vertex in the given FACE from the 
given VERTEX; the new vertex is return, VNEW; the new edge can be
accessed by taking PED(VNEW).

ENEW ← MKFE(V1,FACE,V2);

	Make a new face and a new edge by joining V1 and V2 of FACE.
The new edge is returned, ENEW; the new face may always be obtained
by taking NFACE(ENEW).

VNEW ← ESPLIT(EDGE);

	Make a new edge and a new vertex, VNEW; the new edge may
be obtained by taking PED(VNEW); the new edge is place between
VNEW and PVT(EDGE).