1
2
3
4Geomview(5gv)					      Geomview(5gv)
5
6
7NAME
8       Geomview - Geomview command language
9
10NOTE
11       The  material  in  this	manual	page  also appears in the
12       Geomview manual.
13
14DESCRIPTION
15       gcl: the Geomview Command Language
16       **********************************
17
18       Gcl has the syntax of lisp -- i.e. an expression of the form (f a b
19	...) means pass the values of a, b, ... to the function f.
20       Gcl is very limited and is by no means an implementation of lisp.  It
21       is simply a language for expressing commands to be executed in the order
22       given, rather than a programming language.  It does not support variable
23       or function definition.
24
25       Gcl is the language that Geomview understands for files that it loads
26       as well as for communication with other programs.
27       To execute a gcl command interactively, you can bring up the
28       *Commands* panel which lets you type in a command; Geomview
29       executes the command when you hit the return key.  Output from such
30       commands is printed to standard output.	Alternately, you can invoke
31       Geomview as `geomview -c -' which causes it to read gcl commands
32       from standard input.
33
34       Gcl functions return a value, and you can nest function calls in ways
35       which use this returned value.  For example
36	    (f (g a b))
37       evaluates `(g a b)' and then evaluates `(f x)' where `x'
38       is the result returned by `(g a b)'.  Geomview maintains these
39       return values internally but does not normally print them out.
40       To print out a return value pass it to the `echo' function.
41       For example the `geomview-version' function returns a string
42       representing the version of Geomview that is running, and
43	    (echo (geomview-version))
44       prints out this string.
45
46       Many functions simply return `t' for success or `nil' for
47       failure; this is the case if the documentation for the function does not
48       indicate otherwise.  These are the lisp symbols for true and false,
49       respectively.  (They correspond to the C variables `Lt' and
50       `Lnil' which you are likely to see if you look at the source code
51       for Geomview or some of the external modules.)
52
53       In the descriptions of the commands below several references are made to
54       "OOGL" formats.	OOGL is the data description language that Geomview
55       uses for describing geometry, cameras, appearances, and other basic
56       objects.	 For details of the OOGL formats, *Note OOGL File Formats::.
57       (Or equivalently, see the oogl(5) manual page, distributed with Geomview
58       in the file man/cat5/oogl.5.
59
60       The gcl commands and argument types are listed below.  Most
61
62
63
64Geometry Center	   Thu Dec 12 02:41:23 CST 1996			1
65
66
67
68
69
70Geomview(5)					      Geomview(5)
71
72
73       of the documentation in this section of the manual is available within
74       Geomview via the `?' and `??' commands.	The command `(?
75       COMMAND)' causes Geomview to print out a one-line summary of the
76       syntax of COMMAND, and `(?? COMMAND)' prints out an
77       explanation of what COMMAND does.  You can include the wild-card
78       character `*' in COMMAND to print information for a group of
79       commands matching a pattern.  For example, `(?? *emodule*)' will
80       print all information about all commands containing the string
81       `emodule'.  `(? *)' will print a short list of all commands.
82
83       Conventions Used In Describing Argument Types
84       =============================================
85
86       The following symbols are used to describe argument types
87       in the documentation for gcl functions.
88
89
90       `APPEARANCE'
91	    is an OOGL appearance specification.
92
93       `CAM-ID'
94	    is an ID that refers to a camera.
95
96       `CAMERA'
97	    is an OOGL camera specification.
98
99       `GEOM-ID'
100	    is an ID that refers to a geometry.
101
102       `GEOMETRY'
103	    is an OOGL geometry specification.
104
105       `ID'
106	    is a string which names a geometry or camera.  Besides
107	    those you create, valid ones are:
108
109
110	    ``World, world, worldgeom, g0''
111		 the collection of all geom's
112
113	    `target'
114		 selected target object (cam or geom)
115
116	    `center'
117		 selected center-of-motion object
118
119	    `targetcam'
120		 last selected target camera
121
122	    `targetgeom'
123		 last selected target geom
124
125	    `focus'
126		 camera where cursor is (or most recently was)
127
128
129
130Geometry Center	   Thu Dec 12 02:41:23 CST 1996			2
131
132
133
134
135
136Geomview(5)					      Geomview(5)
137
138
139	    `allgeoms'
140		 all geom objects
141
142	    `allcams'
143		 all cameras
144
145	    ``default, defaultcam, prototype''
146		 future cameras inherit default's settings
147
148
149	    The following IDs are used to name coordinate systems,
150	    e.g. in `pick' and `write' commands:
151
152
153	    ``World, world, worldgeom, g0''
154		 the world, within which all other geoms live.
155
156	    `universe '
157		 the universe, in which the World, lights and cameras live.  Cameras'
158		 world2cam transforms might better be called universe2cam, etc.
159
160	    `self'
161		 "this Geomview object".  Transform from an object to `self' is the
162		 identity; writing its geometry gives the object itself with no
163		 enclosing transform; picked points appear in the object's coordinates.
164
165	    `primitive'
166		 (for `pick' only) Picked points appear in the coordinate system of the
167		 lowest-level OOGL primitive.
168
169
170	    A name is also an acceptable id.  Given names are made unique by
171	    appending numbers if necessary (i.e. `foo<2>'). Every geom is also
172	    named g[n] and every camera is also named c[n] (`g0' is always the
173	    worldgeom): this name is used as a prefix to keyboard commands and can
174	    also be used as a gcl id.  Numbers are reused after an
175	    object is deleted. Both names are shown in the Object browser.
176
177       `STATEMENT'
178	    represents a function call.	 Function calls have the form `(func arg1
179	    arg2 ... )', where `func' is the name of the function and `arg1',
180	    `arg2', ... are the arguments.
181
182       `TRANSFORM'
183	    is an OOGL 4x4 transformation matrix.
184
185       `WINDOW'
186	    is an OOGL winddow specification.
187
188
189
190       Gcl Reference Guide
191       ===================
192
193
194
195
196Geometry Center	   Thu Dec 12 02:41:23 CST 1996			3
197
198
199
200
201
202Geomview(5)					      Geomview(5)
203
204
205       `! is a synonym for `shell''
206
207       `(< EXPR1 EXPR2)'
208	    Returns t if EXPR1 is less than EXPR2.  EXPR1 and EXPR2 should
209	    be either both integers or floats, or both strings.
210
211       `(= EXPR1 EXPR2)'
212	    Returns t if EXPR1 is equal to EXPR2.  EXPR1 and EXPR2 should
213	    be either both integers or floats, or both strings.
214
215       `(> EXPR1 EXPR2)'
216	    Returns t if EXPR1 is greater than EXPR2.  EXPR1 and EXPR2 should
217	    be either both integers or floats, or both strings.
218
219       `(?  [command])'
220	    Gives one-line usage summary for `command'.
221	    Command may include `*'s as wildcards; see also `??'
222	    One-line command help; lists names only if multiple commands match.
223	    ? is a synonym for `help'
224
225       `(?? command)  `command' may include `*' wildcards'
226	    Prints more info than `(? command)'.  ?? is a synonym
227	    for `morehelp'.
228
229       `| is a synonym for `emodule-run'.'
230
231       `(all geometry)	returns a list of names of all geometry objects.'
232	    Use e.g. `(echo (all geometry))' to print such a list.
233       `(all camera)  returns a list of names of all cameras.'
234       `(all emodule defined)  returns a list of all defined external modules.'
235       `(all emodule running)  returns a list of all running external modules.'
236
237       `(ap-override [on|off])'
238	    Selects whether appearance controls should override objects' own
239	    settings.  On by default.  With no arguments, returns current setting.
240
241       `(backcolor	CAM-ID R G B)'
242	    Set the background color of CAM-ID; R G B are numbers
243	    between 0 and 1.
244
245       `(background-image CAM-ID [FILENAME])'
246	    Use the given image as the background of camera CAM-ID (which must be a
247	    real camera, not `default' or `allcams'). Centers the image on
248	    the window area.  Works only with GL and OpenGL graphics.
249	    Use "" for filename to remove background.  With no filename argument,
250	    returns name of that window's current background image, or "".
251	    Any file type acceptable as a texture is allowed, e.g. .ppm.gz, .sgi, etc.
252
253       `(bbox-color	GEOM-ID R G B)'
254	    Set the bounding-box color of GEOM-ID; R G B are numbers
255	    between 0 and 1.
256
257       `(bbox-draw	GEOM-ID [yes|no])'
258	    Say whether GEOM-ID's bounding-box should be drawn; `yes' if omitted.
259
260
261
262Geometry Center	   Thu Dec 12 02:41:23 CST 1996			4
263
264
265
266
267
268Geomview(5)					      Geomview(5)
269
270
271       `(camera		CAM-ID [CAMERA])'
272	    Specify data for CAM-ID; CAMERA is a string giving an OOGL
273	    camera specification.  If no camera CAM-ID exists,
274	    it is created; in this case, the second argument is optional,
275	    and if omitted, a default camera is used.  See also: new-camera.
276
277       `(camera-draw	CAM-ID [yes|no])'
278	    Say whether or not cameras should be drawn in CAM-ID; `yes' if omitted.
279
280       `(camera-prop { geometry object }   [projective])'
281	    Specify the object to be shown when drawing other cameras.
282	    By default, this object is drawn with its origin at the camera,
283	    and with the camera looking toward the object's -Z axis.
284	    With the `projective' keyword, the camera's viewing projection is
285	    also applied to the object; this places the object's Z=-1 and Z=+1 at
286	    near and far clipping planes, with the viewing area -1<={X,Y}<=+1.
287	    Example:  (camera-prop { < cube } projective)
288
289       `(camera-reset	CAM-ID)'
290	    Reset CAM-ID to its default value.
291
292       `(car LIST)'
293	    returns the first element of LIST.
294
295       `(cdr LIST)'
296	    returns the list obtained by removing the first element of LIST.
297
298       `(clock)'
299	    Returns the current time, in seconds, as shown by this stream's clock.
300	    See also set-clock and sleep-until.
301
302       `(command	INFILE [OUTFILE])'
303	    Read commands from INFILE; send corresponding responses
304	    (e.g. anything written to filename `-') to OUTFILE, stdout
305	    by default.
306
307       `(copy [ID] [name])'
308	    Copies an object or camera.	 If ID is not specified, it
309	    is assumed to be targetgeom.  If name is not specified, it
310	    is assumed to be the same as the name of ID.
311
312       `(cursor-still [INT])'
313	    Sets the number of microseconds for which the cursor must not
314	    move to register as holding still.	If INT is not specified,
315	    the value will be reset to the default.
316
317       `(cursor-twitch	   [INT])'
318	    Sets the distance which the cursor must not move (in x or
319	    y) to register as holding still.  If INT is not specified,
320	    the value will be reset to the default.
321
322       `(delete		ID)'
323	    Delete object or camera ID.
324
325
326
327
328Geometry Center	   Thu Dec 12 02:41:23 CST 1996			5
329
330
331
332
333
334Geomview(5)					      Geomview(5)
335
336
337       `(dice		GEOM-ID N)'
338	    Dice any Bezier patches within GEOM-ID into NxN meshes; default 10.
339	    See also the appearance attribute `dice', which makes this command
340	    obsolete.
341
342       `(dimension [N])'
343	    Sets or reads the space dimension for N-dimensional viewing.
344	    (Since calculations are done using homogeneous coordinates,
345	    this means matrices are (N+1)x(N+1).)
346	    With no arguments, returns the current dimension, or 0 if
347	    N-dimensional viewing has not been enabled.
348
349       `(dither	 CAM-ID {on|off|toggle})'
350		     Turn dithering on or off in that camera.
351
352       `(draw		CAM-ID)'
353	    Draw the view in CAM-ID, if it needs redrawing.  See also `redraw'.
354
355       `(echo	       ...)'
356	    Write the given data to the special file `-'.  Strings are written
357	    literally; lisp expressions are evaluated and their values written.
358	    If received from an external program, `echo' sends to the program's
359	    input.  Otherwise writes to geomview's own standard output
360	    (typically the terminal).
361
362       `(emodule-clear)'
363	    Clears the geomview application (external module) browser.
364
365       `(emodule-define	 NAME  SHELL-COMMAND ...)'
366		    Define an external module called NAME, which then appears in the
367		    external-module browser.  The SHELL-COMMAND string
368		    is a UNIX shell command which invokes the module.
369		    See emodule-run for discussion of external modules.
370
371       `(emodule-defined `modulename')'
372	    If the given external-module name is known, returns the name of
373	    the program invoked when it's run as a quoted string; otherwise
374	    returns nil.  `(echo (emodule-defined `name'))' prints the string.
375
376       `(emodule-isrunning NAME)'
377	    Returns Lt if the emodule NAME is running, or Lnil
378	    if it is not running.  NAME is searched for in the
379	    names as they appear in the browser and in the shell commands
380	    used to execute the external modules (not including arguments).
381
382       `(emodule-path)'
383	    Returns the current search path for external modules.
384	    Note: to actually see the value returned by this function
385	    you should wrap it in a call to echo: (echo (emodule-path)).
386		    See also set-emodule-path.
387
388       `(emodule-run  SHELL-COMMAND ARGS...)'
389	    Runs the given SHELL-COMMAND (a string containing a UNIX shell
390	    command) as an external module.  The module's standard output
391
392
393
394Geometry Center	   Thu Dec 12 02:41:23 CST 1996			6
395
396
397
398
399
400Geomview(5)					      Geomview(5)
401
402
403	    is taken as geomview commands; responses (written to filename
404	    `-') are sent to the module's standard input.  The shell
405	    command is interpreted by /bin/sh, so e.g. I/O redirection may
406	    be used; a program which prompts the user for input from the
407	    terminal could be run with:
408	      (emodule-run  yourprogram	 <&2)
409	    If not already set, the environment variable $MACHTYPE is set
410	    to the name of the machine type.  Input and output
411	    connections to geomview are dropped when the shell command
412	    terminates.	 Clicking on a running program's module-browser entry
413	    sends the signal SIGHUP to the program.  For this to work, programs
414	    should avoid running in the background; those using FORMS or GL
415	    should call foreground() before the first FORMS or winopen() call.
416	    See also emodule-define, emodule-start.
417
418       `(emodule-sort)'
419		    Sorts the modules in the application browser alphabetically.
420
421       `(emodule-start	NAME)'
422		    Starts the external module NAME, defined by emodule-define.
423		    Equivalent to clicking on the corresponding module-browser entry.
424
425       `(emodule-transmit NAME LIST)'
426	    Places LIST into external module NAME's standard input.  NAME is
427	    searched for in the names of the modules as they appear in the
428	    External Modules browser and then in the shell commands used to
429	    execute the external modules.  Does nothing if modname is not
430	    running.
431
432       `(escale		 GEOM-ID FACTOR)'
433	    Same as scale but multiplies by exp(scale).	 Obsolete.
434
435       `(event-keys {on|off})'
436		     Turn keyboard events on or off to enable/disable keyboard shortcuts.
437
438       `(event-mode	MODESTRING)'
439	    Set the mouse event (motion) mode; MODESTRING should be one of
440	    the following strings:
441                1. "[r] Rotate"
442                2. "[t] Translate"
443                3. "[z] Cam Zoom"
444                4. "[s] Geom Scale"
445                5. "[f] Cam Fly"
446                6. "[o] Cam Orbit"
447                7. "[le] Edit Lights"
448
449       `(event-pick {on|off})'
450	    Turn picking on or off.
451
452       `(evert		GEOM-ID [yes|no])'
453	    Set the normal eversion state of GEOM-ID.  If the second argument
454	    is omitted, toggle the eversion state.
455
456       `(exit)'
457	    Terminates geomview.
458
459       `(ezoom		GEOM-ID FACTOR)'
460	    Same as zoom but multiplies by exp(zoom).  Obsolete.
461
462       `(freeze		CAM-ID)'
463
464
465
466Geometry Center	   Thu Dec 12 02:41:23 CST 1996			7
467
468
469
470
471
472Geomview(5)					      Geomview(5)
473
474
475	    Freeze CAM-ID; drawing in this camera's window is turned off
476	    until it is explicitly redrawn with `(redraw CAM-ID)', after
477	    which time drawing resumes as normal.
478
479       `(geometry	GEOM-ID [GEOMETRY])'
480	    Specify the geometry for GEOM-ID.  GEOMETRY is a string
481	    giving an OOGL geometry specification.  If no object
482	    called GEOM-ID exists, it is created; in this case the
483	    GEOMETRY argument is optional, and if omitted, the new
484	    object GEOM-ID is given an empty geometry.
485
486       `(geomview-version)'
487	    Returns a string representing the version of geomview that is
488	    running.
489
490       `(hdefine  `geometry'|`camera'|`transform'|`window'  name  value)'
491	    Sets the value of a handle of a given type.
492		   (hdefine  <type>  <name>  <value>)
493	    is generally equivalent to
494		   (read <type>	 { define <name> <value> })
495	    except that the assignment is done when hdefine is executed,
496	    (possibly not at all if inside a conditional statement),
497	    while the `read ... define' performs assignment as soon as the
498	    text is read.
499
500
501       `(help	      [command])'
502	    Command may include `*'s as wildcards; see also `??'
503	    One-line command help; lists names only if multiple commands match.
504
505       `(hmodel CAMID {virtual|projective|conformal})'
506	    Set the model used to display geometry in
507	    this camera; see also `space'.
508
509       `(hsphere-draw	CAMID [yes|no])'
510	    Say whether to draw a unit sphere: the sphere at infinity in
511	    hyperbolic space, and a reference sphere in Euclidean and spherical
512	    spaces.  If the second argument is omitted, `yes' is assumed.
513
514       `(if TEST EXPR1 [EXPR2])'
515	    Evaluates TEST; if TEST returns a non-nil value, returns the
516	    value of EXPR1.  If TEST returns nil, returns the value of
517	    EXPR2 if EXPR2 is present, otherwise returns nil.
518
519       `(inhibit-warning STRING)'
520	    Inhibit warning inhbits geomview from displaying a
521	    particular warning message determined by STRING.
522	    At present there are no warning messages that this
523	    applies to, so this command is rather useless.
524
525       `(input-translator  "#prefix_string"  "Bourne-shell-command")'
526	    Defines an external translation program for special input types.
527	    When asked to read a file which begins with the specified string,
528	    geomview invokes that program with standard input coming from the given file.
529
530
531
532Geometry Center	   Thu Dec 12 02:41:23 CST 1996			8
533
534
535
536
537
538Geomview(5)					      Geomview(5)
539
540
541	    The program is expected to emit OOGL geometric data to its standard output.
542	    In this implementation, only prefixes beginning with # are recognized.
543	    Useful as in
544		   (input-translator "#VRML" "vrml2oogl")
545
546       `(interest (COMMAND [args]))'
547
548	    Allows you to express interest in a command.  When geomview
549	    executes that command in the future it will echo it to the
550	    communication pool from which the interest command came.
551	    COMMAND can be any command.	 Args specify restrictions on the
552	    values of the arguments; if args are present in the interest
553	    command, geomview will only echo calls to the command in which
554	    the arguments match those given in the interest command.  Two
555	    special argument values may appear in the argument list.  `*'
556	    matches any value. `nil' matches any value but supresses the
557	    reporting of that value; its value is reported as `nil'.
558
559	    The purpose of the interest command is to allow external
560	    modules to find out about things happening inside geomview.
561	    For example, a module interested in knowing when a geom called
562	    `foo' is deleted could say `(interest (delete foo))' and would
563	    receive the string `(delete foo)' when foo is deleted.
564
565	    Picking is a special case of this.	For most modules
566	    interested in pick events the command `(interest (pick
567	    world))' is sufficient.  This causes geomview to send a string
568	    of the form `(pick world ...)' every time a pick event (right
569	    mouse double click).  See the `pick' command for details.
570
571       `(lines-closer	CAM-ID DIST)'
572	    Draw lines (including edges) closer to the camera than polygons
573	    by DIST / 10^5  of the Z-buffer range.  DIST = 3.0 by default.
574	    If DIST is too small, a line lying on a surface may be
575	    dotted or invisible, depending on the viewpoint.
576	    If DIST is too large, lines may appear in front of surfaces
577	    that they actually lie behind.  Good values for DIST vary with
578	    the scene, viewpoint, and distance between near and far clipping
579	    planes.  This feature is a kludge, but can be helpful.
580
581       `(load  filename	 [command|geometry|camera])'
582	    Loads the given file into geomview.	 The optional second argument
583	    specifies the type of data it contains, which may be `command'
584	    (geomview commands), `geometry' (OOGL geometric data), or
585	    `camera' (OOGL camera definition).	If omitted, attempts to guess
586	    about the file's contents.
587	    Loading geometric data creates a new visible object; loading a camera
588	    opens a new window; loading a command file executes those commands.
589
590
591       `(load-path)'
592	    Returns the current search path for command, geometry, etc. files.
593	    Note: to actually see the value returned by this function
594	    you should wrap it in a call to echo: (echo (load-path)).
595
596
597
598Geometry Center	   Thu Dec 12 02:41:23 CST 1996			9
599
600
601
602
603
604Geomview(5)					      Geomview(5)
605
606
607	    See also set-load-path.
608
609       `(look [objectID] [cameraID])'
610	    Rotates the named camera to point toward the center of the
611	    bounding box of the named object (or the origin in hyperbolic or
612	    spherical space).  In Euclidean space, moves the camera
613	    forward or backward until the object appears as large
614	    as possible while still being entirely visible.  Equivalent to
615	    progn (
616		 (look-toward [objectID] [cameraID] {center | origin})
617		 [(look-encompass [objectID] [cameraID])]
618	    )
619	    If objectID is not specified, it is assumed to be World.  If
620	    cameraID is not specified, it is assumed to be targetcam.
621
622       `(look-encompass [objectID] [cameraID])'
623	    Moves cameraID backwards or forwards until its field of view
624	    surrounds objectID. This routine works only in Euclidean space.
625	    If objectID is not specified, it is assumed to be the world.
626	    If cameraID is not specified, it is assumed to be the targetcam.
627	    See also (look-encompass-size).
628
629       `(look-encompass-size [view-fraction  clip-ratio	 near-margin far-margin])'
630	    Sets/returns parameters used by (look-encompass).
631	    view-fraction is the portion of the camera window filled by the object,
632	    clip-ratio is the max allowed ratio of near-to-far clipping planes.
633	    The near clipping plane is 1/near-margin times closer than the near
634	    edge of the object, and the far clipping plane is far-margin times
635	    further away.  Returns the list of current values.
636	    Defaults: .75  100	0.1  4.0
637
638
639       `(look-recenter [objectID] [cameraID])'
640	    Translates and rotates the camera so that it is looking in the
641	    -z direction (in objectID's coordinate system) at the center of
642	    objectID's bounding box (or the origin of the coordinate system
643	    in non-Eudlidean space).  In Euclidean space, the camera is also
644	    moved as close as possible to the object while allowing the
645	    entire object to be visible.  Also makes sure that the y-axes of
646	    objectID and cameraID are parallel.
647
648       `(look-toward [objectID] [cameraID] [origin | center])'
649	    Rotates the named camera to point toward the origin of the
650	    object's coordinate system, or the center of the object's
651	    bounding box (in non-Euclidean space, the origin will be used
652	    automatically).  Default objectID is the world, default camera
653	    is targetcam, default location to point towards is the center
654	    of the bounding box.
655
656       `(merge		{window|camera} CAM-ID	{ WINDOW or CAMERA ... } )'
657	    Modify the given window or camera, changing just those properties
658	    specified in the last argument.  E.g.
659		 (merge camera `Camera' { far 20 })
660	    sets Camera's far clipping plane to 20 while leaving
661
662
663
664Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       10
665
666
667
668
669
670Geomview(5)					      Geomview(5)
671
672
673	    other attributes untouched.
674
675       `(merge-ap	GEOM-ID APPEARANCE)'
676	    Merge in some appearance characteristics to GEOM-ID.
677	    Appearance parameters include surface and line color, shading
678	    style, line width, and lighting.
679
680       `merge-base-ap is a synonym for merge-baseap.'
681
682       `(merge-baseap	APPEARANCE)'
683	    Merge in some appearance characteristics to the base default
684	    appearance (applied to every geom before its own apperance).
685	    Lighting is typically included in the base appearance.
686
687       `(morehelp    command)'
688	    `command' may include `*' wildcards.
689	    Prints more info than `(help command)'.
690
691       `(name-object	ID NAME)'
692	    Assign a new NAME (a string) to ID.	 A number is appended if
693	    that name is in use (for example, `foo' -> `foo<2>').  The new
694	    name, possibly with number appended, may be used as object's
695	    id thereafter.
696
697       `(ND-axes CAMID [CLUSTERNAME [Xindex Yindex Zindex]])'
698	    In our model for N-D viewing (enabled by (dimension)), objects in
699	    N-space are viewed by N-dimensional *camera clusters*.
700	    Each real camera window belongs to some cluster, and shows &
701	    manipulates a 3-D axis-aligned projected subspace of the N-space seen
702	    by its cluster.  Moving one camera in a cluster affects its siblings.
703
704	    The ND-axes command configures all this.  It specifies a camera's
705	    cluster membership, and the set of N-space axes which become the
706	    3-D camera's X, Y, and Z axes.  Axes are specified by their indices,
707	    from 0 to N-1 for an N-dimensional space.  Cluster CLUSTERNAME is
708	    implicitly created if not previously known.
709	    To read a camera's configuration, use `(echo (ND-axes CAMID))'.
710
711
712       `(ND-color CAMID'
713		 [ (( [ID] (x0 x1 x2 ... xn) v r g b a	 v r g b a  ... )
714		    ((x0 ... xn)  v r g b a  v r g b a ...) ...)] )
715	    Specifies a function, applied to each N-D vertex, which determines the
716	    colors of N-dimensional objects as shown in camera CAMID.
717	    Each coloring function is defined by a vector (in ID's coordinate system)
718	    [x0 x1 ... xn] and by a sequence of value (v)/color(r g b a) tuples,
719	    ordered by increasing v.  The inner product v = P.[x] is linearly
720	    interpolated in this table to give a color.
721	    If ID is omitted, the (xi) vector is assumed in universe coordinates.
722	    The ND-color command specifies a list of such functions; each vertex
723	    is colored by their sum (so e.g. green intensity could indicate
724	    projection along one axis while red indicated another.
725	    An empty list, as in (ND-color CAMID ()), suppresses coloring.
726	    With no second argument, (ND-color CAMID) returns that camera's
727
728
729
730Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       11
731
732
733
734
735
736Geomview(5)					      Geomview(5)
737
738
739	    color-function list.
740	    Even when coloring is enabled, objects tagged with the `keepcolor'
741	    appearance attribute are shown in their natural colors.
742
743
744       `(ND-xform OBJID [ntransform { idim odim	 ... }])'
745	    Sets or returns the N-D transform of the given object.
746	    In dimension N, this is an (N+1)x(N+1) matrix.
747	    Note that all cameras in a camera-cluster have the same N-D transform.
748
749
750       `(ND-xform-get ID [from-ID])'
751	    Returns the N-D transform of the given object in the coordinate system
752	    of from-ID (default `universe'), in the sense
753	      <point-in-ID-coords> * Transform = <point-in-from-ID-coords>
754
755
756       `(new-alien	name [GEOMETRY])'
757	    Create a new alien (geom not in the world) with the given name
758	    (a string).	 GEOMETRY is a string giving an OOGL geometry
759	    specification.  If GEOMETRY is omitted, the new alien
760	    is given an empty geometry.	 If an object with that name
761	    already exists, the new alien is given a unique name.  The
762	    light beams that are used to move around the lights are an
763	    example of aliens. They're drawn but are not controllable the
764	    way ordinary objects are: they don't appear in the object
765	    browser and the user can't move them with the normal motion
766	    modes.
767
768       `(new-camera	name [CAMERA])'
769	    Create a new camera with the given name (a string).	 If a
770	    camera with that name already exists, the new object is given
771	    a unique name.  If CAMERA is omitted a default camera is used.
772
773       `(new-center [id])'
774	    Stop id, then set id's transform to the identity.  Default id
775	    is target.	Also, if the id is a camera, calls
776	    (look-recenter World id).  The main function of the call to
777	    (look-recenter) is to place the camera so that it is pointing
778	    parallel to the z axis toward the center of the world.
779
780       `(new-geometry	name [GEOMETRY])'
781	    Create a new geom with the given name (a string).  GEOMETRY is
782	    a string giving an OOGL geometry specification.  If
783	    GEOMETRY is omitted, the new object is given an empty geometry.
784	    If an object with that name already exists, the new object is
785	    given a unique name.
786
787       `(new-reset)'
788	    Equivalent to (progn (new-center ALLGEOMS)(new-center ALLCAMS))
789
790       `(NeXT)'
791	    Returns t if running on a NeXT, nil if not
792
793
794
795
796Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       12
797
798
799
800
801
802Geomview(5)					      Geomview(5)
803
804
805       `(normalization	GEOM-ID {each|none|all|keep})'
806	    Set the normalization status of GEOM-ID.
807	    `none'
808		 suppresses all normalization.
809	    `each'
810		 normalizes the object's bounding box to fit into the unit
811		 sphere, with the center of its bounding box translated
812		 to the origin.	 The box is scaled such that its long diagonal,
813		 sqrt((xmax-xmin)^2 + (ymax-ymin)^2 + (zmax-zmin)^2), is 2.
814	    `all'
815		 resembles `each', except when an object is changing
816		 (e.g. when its geometry is being changed by an external program).
817		 Then, `each' tightly fits the bounding box around the
818		 object whenever it changes and normalizes accordingly,
819		 while `all' normalizes the union of all variants of the object
820		 and normalizes accordingly.
821	    `keep'
822		 leaves the current normalization transform unchanged
823		 when the object changes.  It may be useful to apply `each' or
824		 `all' normalization apply to the first version of a changing
825		 object to bring it in view, then switch to `keep'.
826
827       `(pick COORDSYS GEOMID G V E F P VI EI FI)'
828	    The pick command is executed internally in response to pick
829	    events (right mouse double click).
830
831	    COORDSYS = coordinate system in which coordinates of the following
832		arguments are specified.   This can be:
833		 world: world coord sys
834		 self:	coord sys of the picked geom (GEOMID)
835		 primitive: coord sys of the actual primitive within
836		     the picked geom where the pick occurred.
837	    GEOMID = id of picked geom
838	    G = picked point (actual intersection of pick ray with object)
839	    V = picked vertex, if any
840	    E = picked edge, if any
841	    F = picked face
842	    P = path to picked primitive [0 or more]
843	    VI = index of picked vertex in primitive
844	    EI = list of indices of endpoints of picked edge, if any
845	    FI = index of picked face
846
847	    External modules can find out about pick events by registering
848	    interest in calls to `pick' via the `interest' command.
849
850       `(pick-invisible [yes|no])'
851	    Selects whether picks should be sensitive to objects whose appearance
852	    makes them invisible; default yes.
853	    With no arguments, returns current status.
854
855       `(pickable	GEOM-ID {yes|no})'
856	    Say whether or not GEOM-ID is included in the pool of objects
857	    that could be returned from the pick command.
858
859
860
861
862Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       13
863
864
865
866
867
868Geomview(5)					      Geomview(5)
869
870
871       `(position	objectID otherID)'
872	    Set the transform of objectID to that of otherID.
873
874       `(position-at	objectID otherID [center | origin])'
875	    Translate objectID to the center of the bounding box or the
876	    origin of the coordinate system of otherID (parallel translation).
877	    Default is center.
878
879       `(position-toward objectID otherID [center | origin])'
880	    Rotate objectID so that the center of the bounding box
881	    or the origin of the coordinate system of the otherID
882	    lies on the positive z-axis of the first object.  Default is
883	    the center of the bounding box.
884
885       `(progn STATEMENT [ ... ])'
886	    evaluates each STATEMENT in order and returns the value of the
887	    last one.  Use progn to group a collection of commands together,
888	    forcing them to be treated as a single command.
889
890       `quit is a synonym for `exit''
891
892       `(quote EXPR)'
893	    returns the symbolic lisp expression EXPR without evaluating it.
894
895       `(rawevent	dev val x y t)'
896	    Enter the specified raw event into the event queue.	 The
897	    arguments directly specify the members of the event structure
898	    used internally by geomview.  This is the lowest level event
899	    handler and is not intended for general use.
900
901       `(rawpick CAMID X Y)'
902	    Process a pick event in camera CAMID at location (X,Y) given in
903	    integer pixel coordinates.	This is a low-level procedure not
904	    intended for external use.
905
906       `(read {geometry|camera|transform|command} {GEOMETRY or CAMERA or ...})'
907	    Read and interpret the text in ... as containing the
908	    given type of data.	 Useful for defining objects using OOGL
909	    reference syntax, e.g.
910
911	      (geometry	 thing { INST  transform : T	geom : fred })
912	      (read  geometry  { define fred QUAD 1 0 0	 0 1 0	0 0 1  1 0 0 })
913	      (read  transform { define T <myfile})
914
915       `(real-id ID)'
916	    Returns a string canonically identifying the given ID,
917	    or `nil' if the object does not exist.  Examples:
918	     (if (real-id fred) (delete fred))
919	    deletes `fred' if it exists but reports no error if it doesn't, and
920	     (if (= (real-id targetgeom) (real-id World)) () (delete targetgeom))
921	    deletes `targetgeom' if it is different from the World.
922
923
924       `(redraw		CAM-ID)'
925
926
927
928Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       14
929
930
931
932
933
934Geomview(5)					      Geomview(5)
935
936
937	    States that the view in CAM-ID should be redrawn on the
938	    next pass through the main loop or the next invocation of `draw'.
939
940       `(regtable) --- shows the registry table'
941
942       `(rehash-emodule-path)'
943	    Rebuilds the application (external module) browser by reading
944	    all .geomview-* files in all directories on the emodule-path.
945	    Primarily intended for internal use; any applications defined
946	    by (emodule-define ...) commands outside of the .geomview-*
947	    files on the emodule-path will be lost.  Does not sort the
948	    entries in the brower; see (emodule-sort) for that.
949
950       `(replace-geometry GEOM-ID PART-SPECIFICATION GEOMETRY)'
951	    Replace a part of the geometry for GEOM-ID.
952
953       `(rib-display	[frame|tiff] FILEPREFIX)'
954	    Set Renderman display to framebuffer (popup screen window) or a
955	    TIFF format disk file. FILEPREFIX is used to construct
956	    names of the form `prefixNNNN.suffix'. (i.e. foo0000.rib)
957	    The number is incremented on every call to `rib-snapshot' and
958	    reset to 0000 when `rib-display' is called. TIFF files are given
959	    the same prefix and number as the RIB file (i.e. foo0004.rib
960	    generates foo0004.tiff). The default FILEPREFIX is `geom' and
961	    the default format is TIFF. (Note that geomview just generates a
962	    RIB file, which must then be rendered.)
963
964       `(rib-snapshot	CAM-ID	[filename])'
965	    Write Renderman snapshot (in RIB format) of CAM-ID to <filename>.
966	    If no filename specified, see `rib-display' for explanation of
967	    the filename used.
968
969       `(scale		GEOM-ID FACTOR [FACTORY FACTORZ])'
970	    Scale GEOM-ID, multiplying its size by FACTOR.  The factors
971	    should be positive numbers.	 If FACTORY and FACTORZ are
972	    present and non-zero, the object is scaled by FACTOR in x, by
973	    FACTORY in y, and by FACTORZ in z.	If only FACTOR is present,
974	    the object is scaled by FACTOR in x, y, and z.  Scaling only
975	    really makes sense in Euclidean space.  Mouse-driven scaling in
976	    other spaces is not allowed;  the scale command may be issued
977	    in other spaces but should be used with caution because it may
978	    cause the data to extend beyond the limits of the space.
979
980       `(scene		CAM-ID [GEOMETRY])'
981	    Make CAM-ID look at GEOMETRY instead of at the universe.
982
983       `(set-clock TIME)'
984	    Adjusts the clock for this command stream to read TIME (in seconds)
985	    as of the moment the command is received.  See also sleep-until, clock.
986
987       `(set-conformal-refine CMX [N [SHOWEDGES]])'
988	    Sets the parameters for the refinement algorithm used in drawing
989	    in the conformal model.  CMX is the cosine of the maximum angle
990	    an edge can bend before it is refined.  Its value should be between
991
992
993
994Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       15
995
996
997
998
999
1000Geomview(5)					      Geomview(5)
1001
1002
1003	    -1 and 1; the default is 0.95; decreasing its value will cause less
1004	    refinement.	 N is the maximum number of iterations of refining;
1005	    the default is 6.  SHOWEDGES, which should be `no' or `yes',
1006	    determines whether interior edges in the refinement are drawn.
1007
1008       `(set-emodule-path      (PATH1 ... PATHN))'
1009	    Sets the search path for external modules.	The PATHi should
1010	    be pathnames of directories containing, for each module, the
1011	    module's executable file and a .geomview-<modulename> file
1012	    which contains an (emodule-define ...) command for that
1013	    module.  This command implicitly calls (rehash-emodule-path)
1014	    to rebuild the application brower from the new path setting.
1015	    The special directory name `+' is replaced by the existing path,
1016	    so e.g. (set-emodule-path (mydir +)) prepends mydir to the path.
1017
1018       `(set-load-path	    (PATH1 ... PATHN))'
1019	    Sets search path for command, geometry, etc. files.	 The PATHi
1020	    are strings giving the pathnames of directories to be searched.
1021	    The special directory name `+' is replaced by the existing path,
1022	    so e.g. (set-load-path (mydir +)) prepends mydir to the path.
1023
1024       `(set-motionscale X)'
1025	    Set the motion scale factor to X (default value 0.5).  These
1026	    commands scale their motion by an amount which depends on the
1027	    distance from the frame to the center and on the size of the
1028	    frame.  Specifically, they scale by
1029		    dist + scaleof(frame) * motionscale
1030	    where dist is the distance from the center to the frame and
1031	    motionscale is the motion scale factor set by this function.
1032	    Scaleof(frame) measures the size of the frame object.
1033
1034       `(setenv	 name string)  sets the environment variable `name' to the value'
1035
1036	    STRING;
1037	    the name is visible to geomview (as in pathnames containing `$name')
1038	    and to processes it creates, e.g. external modules.
1039
1040       `(sgi)'
1041	    Returns t if running on an sgi machine, nil if not
1042
1043       `(shell	       SHELL-COMMAND)'
1044	    Execute the given UNIX SHELL-COMMAND using /bin/sh.	 Geomview
1045	    waits for it to complete and will be unresponsive until it does.
1046	    A synonym is `!'.
1047
1048       `(sleep-for  TIME)'
1049	    Suspend reading commands from this stream for TIME seconds.
1050	    Commands already read will still be executed; `sleep-for' inside
1051	    `progn' won't delay execution of the rest of the progn's contents.
1052
1053       `(sleep-until TIME)'
1054	    Suspend reading commands from this stream until TIME (in seconds).
1055	    Commands already read will still be executed; `sleep-until' inside
1056	    `progn' won't delay execution of the rest of the progn's contents.
1057
1058
1059
1060Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       16
1061
1062
1063
1064
1065
1066Geomview(5)					      Geomview(5)
1067
1068
1069	    Time is measured according to this stream's clock, as set by
1070	    `set-clock'; if never set, the first sleep-until sets it to 0
1071	    (so initially (sleep-until TIME) is the same as (sleep-for TIME)).
1072	    Returns the number of seconds until TIME.
1073
1074       `(snapshot	CAM-ID	   FILENAME [FORMAT [XSIZE [YSIZE]]])'
1075	    Save a snapshot of CAM-ID in the FILENAME (a string).  The
1076	    FORMAT argument is optional; it may be `ppmscreen',
1077	    `sgi', `ps', or `ppm'.  A `ppmscreen' snapshot is created by reading
1078	    the image directly from the given window; the window is popped above
1079	    other windows and redrawn first, then its contents are written as a
1080	    PPM format image.  With `ps', dumps a Postscript picture representing
1081	    the view from that window; hidden-surface removal might be incorrect.
1082	    With `ppm', dumps a PPM-format image produced by geomview's internal
1083	    software renderer; this may be of arbitrary size.  If the FILENAME
1084	    argument begins with the vertical bar `|', it's interpreted as a
1085	    /bin/sh command to which the PPM or PS data should be piped.
1086	    Optional XSIZE and YSIZE values are relevant only for `ppm' format,
1087	    and render to a window of that size (or scaled to that size,
1088	    with aspect fixed, if only XSIZE is given)
1089
1090       `(soft-shader  CAM-ID  {on|off|toggle})'
1091	    Select whether to use software or hardware shading in that camera.
1092
1093       `(space {euclidean|hyperbolic|spherical})'
1094	    Set the space associated with the world.
1095
1096       `(stereowin CAM-ID  [no|horizontal|vertical|colored] [gapsize])'
1097	    Configure CAM-ID as a stereo window.
1098	    no: entire window is a single pane, stereo disabled
1099	    horizontal: split left/right: left is stereo eye#0, right is #1.
1100	    vertical: split top/bottom: bottom is eye#0, top is #1.
1101	    colored: panes overlap, red is stereo eye#0, cyan is #1.
1102
1103	    A gap of `gapsize' pixels is left between subwindows;
1104	    if omitted, subwindows are adjacent.
1105	    If both layout and gapsize are omitted, e.g. (stereowin CAM-ID),
1106	    returns current settings as a `(stereowin ...)' command list.
1107	    This command doesn't set stereo projection; use `merge camera' or
1108	    `camera' to set the stereyes transforms, and `merge window' or
1109	    `window' to set the pixel aspect ratio & window position if needed.
1110
1111       `(time-interests deltatime initial prefix [suffix])'
1112	    Indicates that all interest-related messages, when separated by at
1113	    least `deltatime' seconds of real time, should be preceded by
1114	    the string `prefix' and followed by `suffix'; the first message
1115	    is preceded by `initial'.  All three are printf format strings,
1116	    whose argument is the current clock time (in seconds) on that stream.
1117	    A `deltatime' of zero timestamps every message.  Typical usage:
1118	    (time-interests .1 `(set-clock %g)' `(sleep-until %g)')  or
1119	    (time-interests .1 `(set-clock %g)'
1120		 "(sleep-until %g) (progn (set-clock %g)" ")")	  or
1121	    (time-interests .1 "(set-clock %g)"
1122			 "(if (> 0 (sleep-until %g)) (" "))".
1123
1124
1125
1126Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       17
1127
1128
1129
1130
1131
1132Geomview(5)					      Geomview(5)
1133
1134
1135       `(transform	objectID centerID frameID [rotate|translate|translate-scaled|scale] x y z [dt] [`smooth'])'
1136	    Apply a motion (rotation, translation, scaling) to object `objectID';
1137	    that is, construct and concatenate a transformation matrix with
1138	    objectID's transform  The 3 IDs involved are the object
1139	    that moves, the center of motion, and the frame of reference
1140	    in which to apply the motion.  The center is easiest understood
1141	    for rotations: if centerID is the same as objectID then it will
1142	    spin around its own axes; otherwise the moving object will orbit
1143	    the center object.	Normally frameID, in whose coordinate system
1144	    the (mouse) motions are interpreted, is `focus', the current camera.
1145	    Translations can be scaled proportional to the
1146	    distance between the target and the center. Support for
1147	    spherical and hyperbolic as well as Euclidean space is
1148	    built-in: use the `space' command to change spaces.	 With type
1149	    `rotate' x, y, and z are floats specifying angles in RADIANS.
1150	    For types `translate' and `translate-scaled' x, y, and z are
1151	    floats specifying distances in the coordinate system of the
1152	    center object.  The optional `dt' field allows a simple form of
1153	    animation; if present, the object moves by just that amount during
1154	    approximately `dt' seconds, then stops.  If present and followed by
1155	    the `smooth' keyword, the motion is animated with a 3t^2-2t^3
1156	    function, so as to start and stop smoothly.	 If absent, the motion is
1157	    applied immediately.
1158
1159       `(transform-incr	 objectID centerID frameID [rotate|translate|translate-scaled|scale] x y z [dt])'
1160	    Apply continuing motion: construct a transformation matrix and
1161	    concatenate it with the current transform of objectID every
1162	    refresh (sets objectID's incremental transform). Same syntax
1163	    as transform.  If optional `dt' argument is present,
1164	    the object is moved at each time step such that its average motion
1165	    equals one instance of the motion per `dt' seconds.	 E.g.
1166	      (transform-incr  World World World  rotate  6.28318 0 0  10.0)
1167	    rotates the World about its X axis at 1 turn (2pi radians) per 10 seconds.
1168
1169
1170       `(transform-set objectID centerID frameID [rotate|translate|translate-scaled|scale] x y z)'
1171	    Set objectID's transform to the constructed transform.
1172	    Same syntax as transform.
1173
1174       `(ui-center	ID)'
1175		    Set the center for user interface (i.e. mouse) controlled
1176		    motions to object ID.
1177
1178       `ui-emotion-program is an obsolete command.'
1179	    Use its new eqivalent `emodule-define' instead.
1180
1181       `ui-emotion-run is an obsolete command.'
1182	    Use its new eqivalent `emodule_start' instead.
1183
1184       `(ui-freeze [on|off])'
1185		    Toggle updating user interface panels. Off by default.
1186
1187       `(ui-panel	PANELNAME  {on|off} [ WINDOW ] )'
1188		    Do or don't display the given user-interface panel.
1189
1190
1191
1192Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       18
1193
1194
1195
1196
1197
1198Geomview(5)					      Geomview(5)
1199
1200
1201		    Case is ignored in panel names.  Current PANELNAMEs are:
1202			    geomview	    main panel
1203			    tools	    motion controls
1204			    appearance	    appearance controls
1205			    cameras	    camera controls
1206			    lighting	    lighting controls
1207			    obscure	    obscure controls
1208			    materials	    material properties controls
1209			    command	    command entry box
1210			    credits	    geomview credits
1211		    By default, the `geomview' and `tools' panels appear when
1212		    geomview starts.  If the optional Window is supplied, a
1213		    `position' clause (e.g. (ui-panel obscure on { position xmin
1214		    xmax ymin ymax }) sets the panel's default position.  (Only
1215		    xmin and ymin values are actually used.)  A present but empty
1216		    Window, e.g.  `(ui-panel obscure on {})' causes interactive
1217		    positioning.
1218
1219       `(ui-target	ID [yes|no])'
1220		    Set the target of user actions (the selected line of the
1221		    target object browser) to ID.  The second argument specifies
1222		    whether to make ID the current object regardless of its type.
1223		    If `no', then ID becomes the current object of its type
1224		    (geom or camera).  The default is `yes'.  This command may
1225		    result in a change of motion modes based on target choice.
1226
1227       `(uninterest (COMMAND [args]))'
1228	    Undoes the effect of an `interest' command.	 (COMMAND [args]) must
1229	    be identical to those used in the `interest' command.
1230
1231       `(update [timestep_in_seconds])'
1232	    Apply each incremental motion once.	 Uses timestep if it's present and
1233	    nonzero; otherwise motions are proportional to elapsed real time.
1234
1235       `(update-draw	CAM-ID	[timestep_in_seconds])'
1236	    Apply each incremental motion once and then draw CAM-ID.
1237	    Applies `timestep' seconds' worth of motion, or uses elapsed real
1238	    time if `timestep' is absent or zero.
1239
1240       `(window		CAM-ID	WINDOW)'
1241	    Specify attributes for the window of CAM-ID, e.g. its size
1242	    or initial position, in the OOGL Window syntax.
1243	    The special CAM-ID `default' specifies
1244	    properties of future windows (created by `camera' or
1245	    `new-camera').
1246
1247       `(winenter	CAM-ID)'
1248	    Tell geomview that the mouse cursor is in the window
1249	    of CAM-ID.	This function is for development purposes
1250	    and is not intended for general use.
1251
1252       `(write {command,geometry,camera,transform,window} FILENAME [ID|(ID ...)] [self|world|universe|otherID])'
1253	    write description of ID in given format to FILENAME.  Last
1254	    parameter chooses coordinate system for geometry & transform:
1255
1256
1257
1258Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       19
1259
1260
1261
1262
1263
1264Geomview(5)					      Geomview(5)
1265
1266
1267	    self: just the object, no transformation or appearance (geometry only)
1268	    world: the object as positioned within the World.
1269	    universe: object's position in universal coordinates;
1270	    includes Worldtransform
1271	    other ID: the object transformed to otherID's coordinate system.
1272
1273	    A filename of `-' is a special case: data are written to the
1274	    stream from which the 'write' command was read.  For external
1275	    modules, the data are sent to the module's standard input.
1276	    For commands not read from an external program, `-' means
1277	    geomview's standard output.	 (See also the `command'
1278	    command.)
1279
1280	    The ID can either be a single id or a parenthesized list of
1281	    ids, like `g0' or `(g2 g1 dodec.off)'.
1282
1283       `(write-comments FILENAME GEOMID PICKPATH)'
1284	    write OOGL COMMENT objects in the GEOMID hierarchy at the
1285		 level of the pick path to FILENAME. Specifically, COMMENTS
1286		 at level (a b c ... f g) will match pick paths of the form
1287		 (a b c ... f *) where * includes any value of g, and also
1288		 any values of possible further indices h,i,j, etc. The pick
1289		 path (returned in the `pick' command) is a list of
1290		 integer counters specifying a subpart of a hierarchical
1291		 OOGL object. Descent into a complex object (LIST or INST)
1292		 adds a new integer to the path. Traversal of simple objects
1293		 increments the counter at the current level.
1294		 Individual COMMENTS are enclosed by curly braces, and the
1295		 entire string of zero, one, or more COMMENTS (written in
1296		 the order in which they are encountered during hierarchy
1297		 traversal) is enclosed by parentheses.
1298
1299		    Note that arbitrary data can only be passed through the OOGL
1300		 libraries as full-fledged OOGL COMMENT objects, which can be
1301		 attached to other OOGL objects via the LIST type as described
1302		 above. Ordinary comments in OOGL files (i.e. everything after
1303		 '#' on a line) are ignored at when the file is loaded and
1304		 cannot be returned.
1305
1306       `(write-sexpr	 FILENAME LISPOBJECT)'
1307	    Writes the given LISPOBJECT to FILENAME. This function is intended
1308	    for internal debugging use only.
1309
1310       `(xform		ID TRANSFORM)'
1311	    Concatenate TRANSFORM with the current transform of the object
1312	    (apply TRANSFORM to object ID).
1313
1314       `(xform-incr	ID TRANSFORM)'
1315	    Apply continual motion: concatenate TRANSFORM with the current
1316	    transform of the object every refresh (set object ID's
1317	    incremental transform to TRANSFORM).
1318
1319       `(xform-set	ID TRANSFORM)'
1320	    Overwrite the current object transform with TRANSFORM (set
1321
1322
1323
1324Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       20
1325
1326
1327
1328
1329
1330Geomview(5)					      Geomview(5)
1331
1332
1333	    object ID's transform to TRANSFORM).
1334
1335       `(zoom		CAM-ID FACTOR)'
1336	    Zoom CAM-ID, multiplying its field of view by FACTOR.
1337	    FACTOR should be a positive number.
1338
1339
1340
1341       Info file: geomview,    -*-Text-*-
1342       produced by texinfo-format-buffer
1343       from file: geomview.tex
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390Geometry Center	   Thu Dec 12 02:41:23 CST 1996		       21
1391
1392
1393