Solidviews User's Manual
Last edited by: Bier on August 18, 1985 10:11:22 pm PDT
Introduction
Solidviews is an interactive three-dimensional illustrator. Objects are represented as the union, intersection, and difference of simple primitives. Because Solidviews is built on top of Cedar Graphics, it inherits device independence; pictures can be drawn on the bitmap display, on the color display, and on a variety of printers. Solidviews currently supports wire-frame drawings, shaded plane-faced approximations, and smoothly shaded ray-tracing drawings.
To obtain solidviews, type BringOver -p [Cedar]<CedarChest6.0>Top>SolidViews.df to a command tool. Type "Solidviews". Three viewers and two icons will take over your screen: The solidviews EditTool appears in the right column. This is the control panel. The Solidviews Typescript window below that will display warnings and helpful messages. Your first solid viewer appears at the top of the left column. Solid viewers are your windows onto three dimensional scenes. The two icons are 1) a two-dimensional scratchpad, and 2) an artwork viewer. New solid viewers can be made from the edittool's New Viewer button, and new Output viewers with the New Typescript button. Try not to delete the scratchpad and artwork tool. The function of each of these classes of viewers will be described below.
Concepts
Saving and Storing Scenes
Solidviews takes advantage of some of the paradigms of interaction used in some modern text editors. In particular:
1) There is a menu of command buttons grouped into categories which make all of the facilities of Solidviews visible at a glance.
2) Solidviewers can be split to create two different views onto the same scene.
3) Scenes can be stored, saved, and loaded just as text documents can.
4) New viewers are created with an empty default scene.
5) The user can add and edit objects in a solidviewer and then "store" the new scene under a name which the user provides.
Scenes
The term "scene" in Solidviews does not have the meaning standard to some graphics literature of "a collection of objects viewed from a particular point of view". In Solidviews, a scene is a collection of objects positioned with repect to a WORLD coordinate system (independent of viewpoint). Each solidviewer provides a view onto a scene from a particular camera position. A scene can include some stock camera positions (think of them as tripods) on which the viewers may place their cameras.
A scene is made up of three important parts:
1) A list of master objects. Master objects will be described in detail below. Briefly, a master object is a shape. A scene may contain many parts having the same shape. All of these parts will probably refer to the same master object.
2) A hierarchically structured set of assemblies. The leaves of this tree, primitive assemblies, refer to 1) a master object, 2) a triplet of scalars which describe how much to scale the master object in x, y, and z before drawing it in the scene, and 3) a coordinate system which describes the position and orientation of the assembly in the scene. The intermediate nodes of this tree, cluster assemblies, refer to any number of children which may be either primitive assemblies or composite assemblies themselves. A cluster assembly also has a coordinate system to describe its position in space. Nothing is drawn at this position. However, if a cluster assembly is rotated or translated, all of its children rotate or translate to maintain their position with respect to this coordinate system.
3) A list of light sources, each of which has a position and color.
4) A list of tripods as described above.
Master Objects and Master Object Classes
At any point in its development, Solidviews will provide a certain set of Master Object Classes (classes of shapes) which it knows how to draw and manipulate. Currently these classes are:
1) Linear Sweeps ("cookie cutter shapes"). The volume swept out by a given polygon as it moves along a line segment normal to its plane. A particular polygon, and a particular sweep distance result in a master object (an instance of this master object class). The coordinate frame of a linear sweep is mid-way between its defining-polygon faces, with z-axis normal to these faces.
2) Revolute Sweeps (solids of revolution, or "lathe shapes"). The volume swept out by a polygon in the xy plane, one of whose sides is on the y axis, when it is rotated in 3-space around the y axis. A particular polygon of this sort produces a particular master object. The coordinate frame of a revolute sweep has its y-axis on the symmetry axis of the sweep.
3) Spheres. Each sphere has a radius. The coordinate frame of a sphere is centered on its origin.
4) Cylinders. This class is a subset of revolute sweeps. It is included for performance and convenience of design. Each cylinder has a radius and a height. The coordinate frame of a cylinder is on its of symmetry, mid-way up its height.
5) Cones. This class is a subset of revolute sweeps. It is included for performance and convenience of design. Each cone has a radius and a height. Its coordinate frame is centered on its base.
6) Blocks. This class is a subset of linear sweeps. Its coordinate system is centered in the block, with axes aligned with the edges of the block.
7) Tori. Each inner radius, cross sectional radius ratio produces a master object. Ray tracing is not yet debugged for tori. The torus has symmetry of revolution about the y axis of its coordinate frame.
8) Half-spaces. The volume on the negative y side of the xz plane of its coordinate frame.
Point Set Operations
A cluster assembly C in the scene tree possesses a point set operator which is either union, difference, or intersection. The operator describes the manner in which the sons of C should be combined in order to form the shape which C represents. This gives the user of a solid modelling system a flexibility not available to someone working in clay. For example, a cross can be made by taking the union of two rectangles placed at right angles, without worry about cutting away any part of one of them, using glue, etc. It is as though the shapes are made of mist and can pass through each other as they are being positioned. In Fig. 1 <not yet available>, a simple scene is shown, where a pawn has been created as the union of a lathed shape and a sphere. The rook has been formed as the diffence of a lathed shape and three blocks.
This is not limited to primitive assemblies. A cluster assembly can be added to, subtracted from, or intersected with any other assembly.
Order of operands. If a cluster assembly uses the union operator, its volume its the union of the volume of its sons. Ordering of the sons is irrelevant. Similarly, intersection indicates that the volume of the cluster is that volume which all of its sons occupy. Order is irrelevant. Finally, with the difference operator, the volume of the cluster assembly is the volume of its first son minus the volume taken up by the union of all of its other sons. The user must be careful to specify the correct ordering of sons. See Creating and Deleting Assemblies--Point Set Operations below.
Names and Trees
Assemblies, lightsources, and master objects are referred to by name. Once created, they can also be refered to by pointing. The user must bear the burden of naming the first instance of each assembly in the scene tree. Solidviews will help out a bit for copying operations, where it will add numbers at the end of each name so as to give each part of the copy a unique name. Often, this means that the user will have to ask Solidviews what the copies have been named. The author ends up using the ListAssemblies! command a lot (See Listing Scene Information below). A better interim solution might be a command which lists all objects whose names contain a certain stem (we'll see).
Artworks (Decals)
An artwork is a two-dimensional image which is to be "wrapped around" an assembly by some mapping. Or in other words. it is a description of the surface of the assembly to be used when the assembly is drawn. By default, all assemblies use an artwork which is a solid color. The current implementation also supports artworks which are a sampled image (either color or black and white) on a solid colored background. Future implementations should allow arbitrary synthetic or sampled images.
The mapping from 2d image to 3d surface is a two-part bidirectional mapping via a group of simple surfaces. The currently implemented simple surfaces are: tube and box.
The Tube Mapping. You can imagine that the 2d image is transfered to the tube by rolling the tube along the picture until the tube has rolled one full revolution (images are assumed to be infinite planes so this is always possible). Remove the rolling pin and imagine that each point on the tube is projecting a beam of light of its own color directly toward the axis of the tube. Any object placed within this tube will be colored accordingly (note: inner surfaces will get painted too. Nothing stops the beams of light).
The Box Mapping. Imagine that a box has been unfolded into six rectangles in a plane so that four of the rectangles are adjacent horizontally (number them left to right as 1,2,3 and 4) and rectangles 5 and 6 are above and below rectangle 2 respectively. Rectangles 2 and 4 correspond to the front and rear of the box respectively (as seen from its own positive z axis), rectangles 1 and 3 to the left and right respectively, and rectangles 5 and 6 to the top and bottom respectively.
The Viewers
Solidviews currently uses five classes of viewers. There are several reasons for having so many viewers. Solidviews needs to provide facilities for editting and viewing three dimensional objects, two dimensional objects, and text. Rather than make one or two "modal" viewers, I opted to have several viewers which behave very differently and do not have to rely heavily on modes for interpreting input or for displaying.
Solid Viewer
Each solidviewer is a view (camera position) onto a three dimensional scene. Because these viewers are "display" areas I have tried to keep their menus as small as possible. The buttons that remain are involved with camera position dependent operations (such as hardcopy, or casting rays), display options (such as scene style or double buffer) and file operations (ie Get, Store, and Save).
The Edit Tool
The Solidviews EditTool is currently an important part of editing. Many buttons that were once part of the solidviewers have been thrown into the EditTool to increase the amount of display space. The EditTool must know which solid viewer it currently applies to. Usually it is informed fairly naturally. Whenever the user points to a new solidviewer (e.g. to select an object), that viewer becomes selected. To select a viewer without pointing inside it, click the "Selected" button in that viewer (this also steals the Input Focus). In either case, the EditTool will update its "scene" line to show that it will now edit the appropriate scene. The edittool provides facilities for constructing an assembly tree, positioning, orienting and scaling assemblies, pasting on decals, creating and positioning lightsources, etc. These facilities are discussed in depth below.
The Scratchpad
The scratchpad is a simple two dimensional polygon editor. It will only display and edit a single polygon at a time. The polygons designed in the scratchpad are intended to be used as the outlines for "cookie cutter shapes" known hereafter as linear sweeps (a 3d shape is created by "sweeping" a polygon along a line perpendicular to the plane of the polygon), and "lathed shapes" or "solids of revolution" refered to herein as revolute sweeps (a 3d shape is created by "sweeping" a polygon in a circle around an axis contained in the plane of the polygon). The scratchpad has two modes: "linSweep" and "revoSweep". linSweep mode allows arbitrary polygon creation. revoSweep mode allows aids creation of polygons with mirror symmetry.
The Typescript
A typescript is created at load time and whenever the New Typescript button is clicked in the EditTool. This is a simple text viewer in which the edittool displays data about the coordinate systems, assemblies, master objects and light sources in the current scene. This information is printed when one of the EditTool "List" buttons is clicked. (note: Clicking any list button will open an output viewer if necessary.)
The Artwork Tool
The artwork tool displays a two dimensional image which is to be mapped onto a surface. It is triggered automatically by the "SetColorArtwork!", "SetTubeArtwork!", "SetBoxArtwork!" and "GetArtwork!" commands.
Currently, artworks are AIS files at some translation from the origin (intersection of crosshairs), some rotation, and with some background color.
Creating and Deleting Assemblies
Perhaps the most important piece of text in the EditTool is the name placed next to "Source: " since it is this assembly on which most of the commands operate. Call this assembly Source. Second in importance is the "Target: " slot which names the assembly which is to be the base coordinate system for a scaling, translation, or rotation. When creating assemblies, the important names are next to New: (the name of the new assembly) and Parent:. (the composite assembly which is to be the parent of the new assembly).
Adding Assemblies
References to clicking in this section mean using the left or middle buttons of the mouse. This results in adding a new assembly with a new unique name.
To add a cluster assembly "Comp" under a parent assembly "Par", type the name "Comp" next to "New:" and the name "Par" next to "Parent:" and hit "Add Composite!".
When a new scene is created, it contains the single assembly "sceneAssembly". The user's top level assemblies will be defined with "sceneAssembly" as their parent.
To add a new primitive assembly as the son of an existing cluster assembly, set the parameters next to the "Add" button for the appropriate shape, put a new name next to "New:", and click that "Add" button. This is all you need do for half-spaces, spheres, blocks, cylinders, cones and tori. For linear sweeps and revolute sweeps, you must design a polygon in the scratchpad before clicking the add button (See Using The Scratchpad below).
Each primitive assembly refers to a master object. In the case of linear sweeps, revolute sweeps, and tori, you are adding a new master object to the scene whenever you create a new assembly of these shapes (unless you are using the copy! button). On the other hand, the master object for sphere, block, cone and cylinder are part of the system and are reused each time you add an assembly of these types.
Replacing Assemblies
When any of the above "Add" commands are clicked with the blue (rightmost) button of the mouse, an existing primitive assembly (Source) will lose its old shape and take on the new shape. Its position and orientation in the scene will remain unchanged. These commands print an error message if Source is a cluster assembly.
Conceptually, these commands add a new master object to the scene (for revolute sweeps, linear sweeps, and tori only) and allow the old assembly to refer to this new master object.
You may replace an object which was formerly a sweep shape with a cone, cylinder, sphere, block, or torus, or with another sweep shape.
Point Set Ops
When Source, a cluster assembly, is created, its point set op (see Concepts) takes on the value currently shown next to "Op:". Click "Op:" to cycle through the possiblilities (union, intersection, and difference). To change the point set op of Source to the value currently next to "Op:", click "Set Pointset Operation!".
If the point set op of a cluster assembly is "difference", then the order of its sons is significant. To set the first son, let the first son be Source. Click "First!".
Restructuring the Tree
If you change your mind about the structure of the tree (Perhaps you wish you had inserted assemblies "spout", "handle", and "body" under a composite assembly "teapot" instead of directly under "sceneAssembly"), you can make some changes using the "NewParent!" button. When the "NewParent!" button is clicked, Source is added as a son of Parent:, and is removed from the list of sons of the assembly which was its parent before. Note that you may wish to add a new composite assembly to your tree and then move an old node to it. (In my example you would "Add Composite!" with "New: teapot" and "Parent: sceneAssembly" and then "NewParent!" with "Source: spout" and "Parent: teapot").
Copying
Any assembly in a scene, be it cluster or primitive can be copied. In the case of linear and revolute sweeps, this saves space over Adding! twice without changing the contents of the scratchpad. It is also vastly more convenient to copy a cluster assembly than to build it over. Unfortunately, because of my current reliance on names, the names created must be unique at every level. Solidviews adds a dot and a number (e.g. ".12") to make the new name unique.
To copy an assembly, make it the Source. Make sure that the name in "Parent:" is the name of the assembly you wish this copy to be a son of. Now press "Copy!". The copy will have the same coordinate system relationship to its parent as the original had to its parent. Hence, if they have the same parent, you will see no change to your picture. But, of course, as soon as you translate, rotate, or scale the copy, there will be a difference. A description of these transform facilities is given in the Transforming Assemblies section.
Deleting
Any assembly, primitive or cluster can be deleted from the scene. When "Delete!" is clicked, the entire Source assembly is plucked off the tree and thrown into oblivion. There is no Undelete. Proceed with caution.
Transforming Assemblies
All references to clicking in the sections below on translation, scaling and rotation assume you are using the left or middle mouse button. Using the right button undoes an operation as described below in the Inverses section.
Coordinate Systems
All of the coordinate systems in Solidviews are right handed coordinate systems. The default camera position is at [0,0,1800] in WORLD coordinates. Hence the axes of WORLD are aligned as follows: positive x runs horizontal to the right, positive y runs vertical up, positive z runs horizontal out of the screen. The "sceneAssembly" is initially normalized with respect to WORLD coordinates (ie their coordinate systems are exactly the same). When a new assembly is added, its coordinates are normalized with respect to its parent's coordinates. Note: Any translations, rotations, or scalings may be done with Target = WORLD, however WORLD cannot be transformed, renamed, moved, added, etc.
Translation
Set the translation parameters. They are currently in screen units (72 units per inch). When "Translate!" is clicked, Source will be translated with respect to the coordinate system of Target. Note that the later assembly does not have to be the parent of the former; any assembly can be translated with respect to the coordinate system of any other (including itself). The three numbers x, y, and z represent the distance to move the assembly parallel to the x axis of Target, the distance to move the assembly parallel to the y axis of Target, and the distance to move the assembly parallel to the z axis of Target, respectively.
Rotation
Set the number of degrees of rotation. When "RotX!" is clicked, Source is rotated around the x axis of Target using the right hand rule to determine positive direction of rotation. Similarly for "RotY!" and "RotZ!". Again note that Target need not be the parent of Source and may, in fact, be any assembly including Source itself.
Scaling
The mathematics of scaling often produces some very unintuitive effects. In particular, if a parent assembly performs an "uneven" scaling (also known as a "differential" scaling. For example [x = 1, y = 2, z = 3]) then rotating the son with respect to his own coordinate system will cause the son to change shape as it rotates. To cut down on these effects I have reduced the available scaling operations to two simple operations:

1) Scaling a primitive with respect to its own coordinates. Blocks can be made longer/shorter, wider/narrower, taller/shorter. Spheres can be made into oblate spheroids, Cylinders can be lengthened, made elliptical, given a larger radius, and so forth. This uneven scaling has no unexpected side effects since primitives have no children.

2) If Source is a cluster assembly, it can be scaled evenly (x=y=z). This has the effect of scaling each of the primitives evenly and then translating all coordinate systems proportionately so that the composite object represented by the Source exactly maintains its shape. Once again, this scaling can be done with respect to any assembly in the scene including Source itself.
Inverses
Each of the transforms described above has an inverse. Clicking the function button with the rightmost button of the mouse performs this inverse. In particular, inverse translation is done as though all the displacements were negated. Rotations are done as if the angle in degrees were negated. Primitive scaling and even scaling are done as if each argument x had become 1/x. Of course, you can do the inverse of a transform even if you have never done it forward.
Normalizing Transformations
Often in manipulating a scene, the user has forgotten the sequence of rotations or translations which have been performed between some pair of coordinate systems, or, if he remembers them, he is not keen to do them all backwards to align the coordinate systems. Solidviews provides a number of normalizing operations which align two coordinate systems into a simple known state. I call these "Normalize", "Normalize Rotation", "Align", "Abut", "AbutX", "AbutY", and "AbutZ". All of these move Source to align it in some fashion with Target.
The Normalize! button puts Source on top of Target. Their is now no rotation or translation between them.
The Normalize Rot! button leaves any translation between Source and Target but removes all rotation between them. All of their corresponding axes are now parallel.
The Align! button rotates Source as little as possible so that its axes will be parallel to some set of the axes of Target. For example, the positive x of Source may be parallel to the positive z of Target, positive z to negative x and positive y to positive y. This is like the Normalize Rot! operation in that it preserves translations and aligns rotation. However the alignment may leave the coordinate systems at right angles instead of parallel.
The Abut! button removes all translations between Source and Target leaving rotations as they are.
The AbutX! button removes any translations in the x direction between Source and Target so that the origins of their coordinate systems will now be in the same plane x = x0.
The AbutY! button removes any translations in the y direction between Source and Target so that the origins of their coordinate systems will now be in the same plane y = y0.
The AbutZ! button removes any translations in the z direction between Source and Target so that the origins of their coordinate systems will now be in the same plane z = z0.
Editing Assemblies
It is often useful to retrieve the size and shape information of a primitive assembly before trying to change it. The Edit! function of the Edittool provides this capablility. The precise behavior of the Edit! function depends on the type of master object Source refers to as described below.
Edit
If Source is a cylinder, its radius and height will be stuffed in the radius and height areas to the right of Add Cylinder! and three 1's are stuffed into the X,Y,Z slot to the right of Scale Primitive! unless an uneven scaling has given it an elliptical cross section. In this case, the number 1 is stuffed in the radius and height areas to the right of Add Cylinder! and its three scalars are stuffed in the X,Y,Z slot to the right of Scale Primitive!.
If Source is a cone, its radius and height will be stuffed in the radius and height areas to the right of Add Cone! and three 1's are stuffed into the X,Y,Z slot to the right of Scale Primitive! unless an uneven scaling has given it an elliptical cross section. In this case, the number 1 is stuffed in the radius and height areas to the right of Add Cone! and its three scalars are stuffed in the X,Y,Z slot to the right of Scale Primitive!.
If Source is a block, its x, y, and z dimensions will be stuffed in the x,y,z area to the right of Add Block! and three 1's are stuffed into the X,Y,Z slot to the right of Scale Primitive!.
If Source is a sphere, its radius will be stuffed in the radius area to the right of Add Sphere! unless uneven scaling has made it an oblate spheroid. In this case, the number 1 is stuffed in the radius slot and its three scalars are stuffed in the X,Y,Z slot to the right of Scale Primitive!.
If Source is a torus, its big radius and cross sectional radius will be stuffed into the appropriate areas to the right of Add Torus! and any scaling which has been performed on it since its creation (even or uneven) will be indicated by suitable values in the X,Y,Z slot to the right of Scale Primitive!.
If Source is a linear sweep, its depth will be stuffed into the depth area to the right of Add Linear! and its defining polygon will be displayed in the scratchpad viewer. Any scaling which has been performed on it since its creation (even or uneven) will be indicated by suitable values in the X,Y,Z slot to the right of Scale Primitive!.
If Source is a revolute sweep, its defining polygon and that polygon's mirror image will be displayed in the scratchpad viewer. Any scaling which has been performed on it since its creation (even or uneven) will be indicated by suitable values in the X,Y,Z slot to the right of Scale Primitive!.
Saving and Restoring Pictures
Clear, Reset, Get, Store, and Save
As mentioned in Concepts above, the facilities for saving and retrieving pictures are much like the Tioga facilities for saving and retrieving documents.
Clear. This button flushes the current scene (losing any edits since the last Save) and loads a new scene called NoName.pic.
Reset. Use this button to cancel all edits made since the last time this scene was saved. The old version of the file is simply reloaded.
Get. Use this button to load an existing picture into a viewer. First select the name of the file you wish to load. You may select the name from any text viewer on the screen. The scene viewer contains a slot labeled "Text:" which you may use to type the name. Get works whether or not there is a named scene in the viewer. After your first click, the MessageWindow asks you to confirm discard of edits, if there are any, or to confirm the load, if not. Second click loads the picture into the viewer unless there is some problem with the pic file. Some possible problems are discussed below.
Store. Use this button when the viewer's header says No Name, ie when you have just created a new scene. Select the name of the new scene (perhaps a name with a ".pic" extension) in any text viewer. (You may type the name in the "Text:" slot of the scene viewer if you like.) Click any mouse button. On the first click, you will be told if this pic name already exists. On the second click the scene will be stored overwriting any previous files of the same name.
Save. Use this button for saving updates to an already existing file. This button ignores the contents of the current selection, saving to the same file named in the viewer's header.
Details of Loading a File
There are several reasons why a picture file may have trouble being loaded:
1) Because the pic files are human readable, minor edits can be made by hand directly on the text. These edits may have errors in syntax or may not preserve the consistency of the file (for instance, adding a new master object to the scene without incrementing the number in "Master Objects: [<num>]"). The parser is not very sophisticated and will send a message to the message window complaining that X was expected at position Y in the file but Z was found instead. That is, if you are lucky. If you aren't lucky, you will get an uncaught error from the parser. Sorry about that.
2) Changes in the pic file format occur from time to time making old pic files obsolete. Usually, updating them is a simple application of the Tioga edit tool. The obsolete files will usually cause syntax errors.
3) The solidviews fileout and filein routines may be out of synch. If you think this is the case, send a message to SolidviewsSupport^.pa.
4) If the picture takes advantage of AIS file type artworks (See Creating an Artwork below) then the AIS files it relies on must be present at load time. The message window should tell you that a mapping file could not be opened.
Using the Scratchpad
The scratchpad is a viewer which provides a facility for editting a single polygon. Points can be added in sequence, spliced in out of sequence, repositioned, and deleted.
Displaying
The scratchpad has three display modes:
1) Off. Nothing is displayed. Polygons cannot be drawn. This is the initial mode.
2) Linear Sweep mode. The polygon is displayed exactly as you draw it. One point at a time. The crosshairs show how the cross section of the drived three dimensional linear sweep will look with respect to the x and y axes of its 3d coordinate system. Click "NewLin" to enter this mode and clear the current polygon. When already in this mode, the Scratchpad respends to "NewLin" by clearing the current polygon.
3) Revolute Sweep mode. The scratchpad reminds you that you are designing a shape with revolute symmetry by reflecting each point you add about the y axis. The effect is that you are adding symmetric pairs of points with each click. The x axis of the cross hairs shows how the derived 3d revolute sweep will be positioned with respect to the xz plane of its own 3d coordinate system. Click "NewRevo" to enter this mode and clear the current polygon. When already in this mode, the Scratchpad respends to "NewRevo" by clearing the current polygon.
The other buttons are of less interest to the designer. Erase, erases the scratchpad but leaves its polygon intact. CrossHairs redraws the crosshairs. Normals, draws a line normal to each edge of the current polygon. Currently this does not work properly in revo sweep mode. Other buttons are for debugging and should be left alone.
Manipulating Points
Adding. Clicking the leftmost mouse button adds a point onto the end of the current polygon's path. The natural way to define a shape initially is to add points sequentially in this fashion.
Moving. Pushing down the middle mouse button "picks up" the nearest point of the polygon so that it will follow the mouse while this button is held down. When the button is released this point takes on the final position of the mouse at the time of release.
Splicing. Holding down the CTRL key and clicking the left mouse button will "splice" a point into the polygon, splitting the edge nearest the mouse point into two edges.
Deleting. Clicking the rightmost mouse button in the scratchpad deletes the point nearest to the mouse point. Beware. "Nearest" here is taken literally. Even if the mouse isn't particularly near any vertex, somebody is going to be deleted. (This won't be too hard to fix.)
Limits. The current implementation limits the number of points in the defining polygon of both types of sweeps. Linear sweeps cannot have more than 30 points. Revolute sweeps cannot have more than 20 points.
Editing Camera Parameters
Multiple Named Camera Settings
Each new scene comes with a set of named camera settings. Currently there are seven: Front, Top, Bottom, Right, Left, UpLeft, and UpRight. Each of these settings will view the scene from a different, predefined point of view, and with different viewing parameters. To list the names of the predefined settings, click ListCameras! in the EditTool.
To change the camera setting of a particular viewer to a predefined setting, proceed as follows.
1) Make sure that it is the selected viewer; its Selected button should be displayed with white letters on a black background. Click the button to make this true (all other viewers will now have black on white "Selected" buttons).
2) Select the name of the camera you would like to use with the mouse. Click Use! in the EditTool. The new settings should take effect immediately.
To edit a predefined setting:
1) Again, make sure that the correct viewer is selected.
2) Select the name of the setting you would like to edit. Click Get! to load the current information about that camera into the camera section of the EditTool.
3) Edit the information slightly, using Tioga normally. The syntax for various entries will be discussed below. When you are done
4) Click Set! to change the old setting to include the new information. If the setting changed is the same as the setting currently in use in the selected viewer, then that viewer will be redrawn to reflect the change.
To create a new setting of your own:
1) Type the name of your new setting next to "Camera name:" in the EditTool.
2) Edit the information in the camera section of the EditTool as you like, using Tioga normally. The syntax for various entries will be discussed below. When you are done
3) Click Set! to add the new setting to the scene.
4) To use your new setting, select its name and click Use! as before. Your new setting should appear when you ListCameras! and should appear in your picture file when you Save or Store your scene.
If you read in a scene made before version 3.0 of Solidviews, the above seven camers will be added to them.
The different parts of a camera setting are discussed below.
Origin, Focus Point, Slant and Focal Length
The origin is that point in WORLD coordinates where the camera is to be placed. In particular, the center of the solid viewer window is "placed" at this point with respect to WORLD. Each predefined setting comes with a different origin.
The focus point (also in WORLD coordinates) is a point in the scene that you wish the z axis of the camera coordinate system to go through (the focus of attention). All of the predefined cameras focus their attention on [0 0 0].
Slant. Origin and focus point constrain the z-axis of the camera, but the camera is still free to rotate about that axis. Slant takes up this degree of freedom. If slant is 0, the x axis of the camera is chosen to be horizontal (i.e. parallel to the xz plane of WORLD). If slant is equal to A degrees, then the camera is rotated from this initial position by A degrees about the z axis of this camera. If A is positive, the effect is like tilting your head to the left; if negative, like tilting your head to the right. All of the predefined cameras have slant = 0.
Focal Length is the distance from the eyepoint to the screen. Increasing the focal length makes the lens more like a telephoto. Decreasing the focal length makes the lens more wide angle. However, increasing the focal length, say from 1800 to 3600 will actually make objects look smaller because the effect of the eyepoint moving away from the scene overwhelms the effect of a narrower angle of view. Likewise, decreasing the focal length makes objects appear larger.
Resolution
The user can specify the resolution at which images will be sampled. The sampling resolution is specified in samples per inch. The default is 72 (screen resolution). You can change the resolution by editing the number next to "resolution:" in the EditTool. Clicking "resolution:" selects this number pending-delete. But before you edit the resolution number, be sure to Get! the camera setting you wish to edit (probably the setting you are currently using). When you have changed the resolution, Set! the camera setting to the new value. You must be using this camera in order to take advantage of the new resolution setting. Click Use! if you want to be sure.
The Picture Frame
The user can specify an aligned clipping box for the current scene. Once this box is specified, ray tracing pictures will be clipped to this box (see Ray Tracing below). To specify a bounding box, position the cursor in a solidviewer. The down transition of the middle mouse button sets the upper left hand corner of the box. The up transition sets the lower right hand corner. If you don't like it, do it again. The frame rubber-bands as you drag.
It is also possible to edit the bounding box numerically. Notice the keyword "frame:" in the camera section of the EditTool. Get! the camera you are using. If you have already defined a clipping box interactively, the coordinates of this clipping box will appear in the frame slot in the order UpperLeft point, LowerRight point. You may edit these coordinates and Set! the camera to this new setting. The effect of the change should become apparent immediately. The syntax of the "frame" clause should be left as it is. If "fullScreen:" is followed by TRUE, then the clipping box coordinates are ignored and the system computes a tight fitting bounding box for ray tracing.
To get rid of the clipping box interactively (i.e. to set fullScreen to TRUE), hold down the SHIFT key and middle-click in the viewer.
All of the predefined camera settings have fullScreen = TRUE (no clipping box).
Clipping Planes
If Solidviews is being used in wireframe or shaded drawing styles, the polygonal approximations will be clipped against any number of clipping planes. The planes are specified in the form [A, B, C, D] where [A, B, C] is the surface normal of the plane and Ax + By + Cz + D = 0 is the plane equation in CAMERA coordinates. All matter on the normal side of the plane is clipped away.
All of the predefined camera settings have a "hither" clipping plane [0,0,1,0], corresponding to the plane of the screen itself. It is recommended that this plane, or one similar, be left around to prevent objects from hitting the camera (and producing nasty error messages).
Visible Assemblies
At the bottom of the camera section is a slot labeled "visible assemblies:". The user may specify a list of those assemblies which should be visible in the camera named next to "Camera name:". Wireframe, shaded, and normals drawing modes will only draw those assemblies, reducing drawing time when only part of the scene is of interest. The user can always view the entire scene by putting "sceneAssembly" in the list.
The Camera Order
Just below the camera section of the EditTool is a slot labeled "camera order:". To the right of the label, is a list of camera names with commas between them, e.g. Front, Left, Top. Someday, when you load a scene, a viewer will be opened for each name in this list.
For now, Solidviews only looks at the first camera name on the list and opens a viewer with that camera whenever the scene is opened. It is perhaps a little hard to remember to set this parameter during a session of editing a scene, since the parameter only does you good at the beginning of the session. However, once you have done it, you will have the joy of opening up your scene to exactly the point of view which you prefer.
Shadows
Just below the camera order section of the EditTool are the shadows buttons. Whether or not a scene is to be rendered with shadows is still a property of the entire scene rather than of a particular camera setting. Clicking "Shadows:" toggles this option between TRUE and FALSE. Clicking Set! in the shadows section of the EditTool sets or resets the shadows option for the scene in question. In this mode, Solidviews casts secondary rays to see, for each object surface point, if each lightsource is visible from that point. If not, than that lightsource has no effect on the surface color at that point.
Possible problem: I believe that Set! may only turn on shadows in the Selected viewer. For now, select the viewer and click Set! to be sure. Feedback is coming.
Bounding spheres are now available to speed up ray tracing with shadows. Shadows seem to slow down ray tracing by a factor of 2 (without tori) or 10 (with tori -- this is a bug).
Simultaneous Multiple Views
Multiple Views on a Single Scene
In order to view a scene from more than one view at once, click the button marked "Split" at tahe top of a solidviewer containing the scene in question. Another viewer will open with a view onto the same scene (from the same point of view). To look at the scene from a different point of view, you have three choices. You may use a different pre-defined camera as it is, you may use a predefined camera and edit it slightly, or you may create a new camera of your own.
Refresh for Split views is not synchronized properly. Expect to be annoyed, and to have to Refresh a lot to see what's really going on.
Adding and Deleting Lightsources
The EditTool provides a section for defining, viewing, adding and deleting lightsources. Lightsources will be added to or deleted from the Selected scene.
To see what lights are currently in the scene use the Listing Facilities described below in Listing Scene Information.
Adding a Lightsource
To add a new lightsource, type its name next to "light name:". Enter a point in WORLD coordinates to be its position. (See Concepts for a description of WORLD coordinates). <Someday there will be interactive facilities for moving a point around in three space until it looks right. For now, position the lights until the scene looks right>. Enter a red, green, blue triplet next to color: in the same section. Click AddLight! with left or middle mouse button.
Deleting a Lightsource
Type the name of an old lightsource next to "light name:". Click "DeleteLight!". It should go away.
Editing a Lightsource
Clicking EditLight! with the name "SomeLight" next to "light name:" will stuff SomeLight's position and color into the appropriate slots in the same EditTool section. You may change these parameters and then click AddLight! with the rightmost mouse button, which replaces the old parameters with the new ones.
Creating an Artwork (Colors and Patterns)
Pure Color Artworks
When an object is created, its surface is modelled as white shiny plastic. The color of Source can be changed by putting red, green, blue values next to: "r,g,b:" (values from 0 to 1) and clicking "SetColorArtwork!". Source is now considered to have a "pure color" artwork. The relectivity of the surface can be changed by clicking "material:" until the desired material type is shown.
Background Color
For purposes of the user interface, it is possible to put the word "background" next to Source: (ie let Source be a mythical background object) before clicking SetColor as above. This background color will be used in ray-tracing and shaded modes but not in the line drawing modes. Futhermore, you are only setting the background color of the "Selected" viewer (select a viewer by clicking its "Selected" button. Only this viewer will refresh when you change background color.
AIS File Artworks
The other kind of artwork currently supported is an AIS file (or three registered AIS files representing color seperations) drawn on a colored background. Again, enter the background color as "r,g,b" and set the material type. Give the name of an ais file next to "Source name:". If you are using three color seperations, "isColorFile:" must have "TRUE" next to it. Click it until it does. Otherwise, it must have FALSE. Also, if you are using color separations they must have names of the form: <base>-red.ais, <base>-green.ais, <base>-blue.ais. Enter <base> or <base>.ais next to "Source name:". Now enter a real number next to "resolution:". The idea here is that the user may not always want to treat an AIS file (Array of Intensity Samples) as samples at screen resolution (72 dots per inch). In practice, this gives the user a form of scaling (ie resolution: 36 doubles the size of the image over screen resolution). Again, make sure that the material type is as desired. Finally, click SetTubeArtwork! or SetBoxArtwork! depending on the type of mappings desired (see below). The scene database will be updated and the artwork will be displayed in the Artwork Tool.
Mappings
In Concepts/Artworks above, the tube and box simple surfaces were described. Once we have transfered the AIS image to these simple surfaces there are an unlimited number of ways we can map it onto an arbitrary object in the scene. The currently implemented schemes are
1) The Shrinkwrap tube mapping. The picture is projected radially inward from the tube simple surface to the surface of the object.
2) The Orthogonal box mapping. The picture is projected perpendicularly from the six faces of the box. Since two or more faces of the box may try to paint the same point on the object, we resolve conflicts by comparing the surface normal of object point with the surface normals of the conflicting faces and pick the face whose surface normal most closely matches.
3) The Radial box mappings. To paint a particular object point, find the ray which starts at the centerpoint of the box and passes through the object point. Look at the intersection of this ray with the box. Whatever color the box is at this point should be the color of the object point. If the object is a sphere, this mapping works best when the box is a cube with side of length the square root of 2 times the radius of the sphere.
To use the Shrinkwrap mapping, type values into tubeH and tubeR so that the tube fits around the object snugly. Click "SetTubeArtwork!".
To use the Orthogonal mapping, type values into X,Y,Z so that the box will fit around the object snugly. Click "OMap" until the word "Orthogonal" appears next to it. Click "SetBoxArtwork!".
To use the Radial mapping, type values into X,Y,Z so that the box will fit around the object snugly. Click "OMap" until the word "Radial" appears next to it. Click "SetBoxArtwork!".
Retrieving and Displaying
To retrieve the current artwork of any primitive Source, click Get Artwork! Its background color, picname, isColor, material and resolution information will be stuffed into the artwork form. Also, depending on the type of simple surface in the mapping, the size and shape of the simple surface will be retrieved as well (ie the radius and height of a tube or the three dimensions of a box). Finally, the artwork will be displayed in the artwork tool.
When displaying an artwork, the Artwork Tool will try to draw an outline of the simple surface projected backwards onto the plane (ie if the simple surface is a box, the Artwork Tool will draw an unfolded box).
Postioning the AIS file
Currently there is a rudimentary facility for moving the AIS file with respect to the domain of the mapping (ie the unfolded box is the domain when the range (simple surface) is a box). Simply position the mouse where you want the center of the ais file to go and click the middle button. The artwork tool will redraw the artwork. To rotate the current ais file around its center, enter the desired number of degrees (counter-clockwise) next to "degrees:" on the "Rotate!" line of the artwork section of the EditTool. Click Rotate!. The artwork should redraw. Clicking Normalize! will return the ais file to its default upright position.
Warning
The artwork displayed in the artwork tool is the artwork of the object. If you move the artwork in the middle of ray-tracing, Solidviews will probably do something very weird to your picture.
Display Modes
A display mode is a style for displaying the objects in a scene. Solidviews currently supports four display modes:
The Current Four Modes
1) Wire frame. A quick line drawing display for feedback.
2) Plane-faced approximation. This is a very "rough" picture made by appromating each object as a mesh of planar polygons and then drawing the polygons back to front by the depth of their centers. Blocks do not currently break themselves up finely enough. Some parts show through which shouldn't and vice-versa. Gives a rough idea of shading, color, and shapes. Does not try to handle point set operations properly. Assumes that all objects are unioned together.
3) Normals mode. Mostly for debugging. Shows the surface normals of the plane-faced approximations. Depending on my mood, may suppress back-facing normals. In any case, if shown, backfacing normals will have empty arrow heads, forward-facing normals will have filled arrow heads.
The above three display modes can be triggered by clicking the "style:" button in a solidviewer until it displays the desired mode next to it.
4) Ray tracing mode. This is the only mode which shows mapped artwoks, displays objects with true shape, and properly interprets all three Boolean operations. Because it takes a while (30 seconds to 2 hours, or more), it is not a style; rather, it is invoked by clicking the RayCast button on the Solid Viewer. Ray tracing can be aborted by hitting the Stop button at the top of the solidviewer. For more details, see the Ray Tracing section.
Double Buffering
<double buffering is currently broken -- June 20, 1985 0:15:33 am PDT -- Eric>
Any of the first three drawing modes can be combined with double buffering. Double buffering is activated by clicking the DoubleBuffer button in the solidviewer menu. This button toggles. With double buffering activated, the scene is drawn first onto a 1 bit per pixel bitmap and then that bitmap is drawn onto the solidviewer. This really only makes sense when using the bitmap display, for two reasons. First, you are losing resolution; on the 8 bit or 24 bit display, the stipple patterns are unwanted. Second, only the bitmap display refreshes fast enough to give you the smooth, flashy transitions that double buffering is all about.
Listing Scene Information
There are six List! buttons on the EditTool. Clicking these buttons causes information to be displayed in the output viewer. An output viewer will be created if one does not already exist (if the program has been loaded a second time, it will not know about the old output viewer). Any information which depends on choosing a particular scene will use the scene named in "Scene:" at the top of the EditTool. The information provided is of the following form:
The Six List Buttons
ListScenes! is not particularly useful. It lists the names of all of the scenes which a viewer has been open unto, listing some more than once they have been loaded more than once. This button will probably go away.
ListAssemblies! lists the names of all of the assemblies, cluster or primitive which are in the current scene, along with the names of their coordinate systems (usually the same as their own names), the name of the assembly which they are defined with respect to, and whether they are cluster or primitive.
ListCoordSystems! lists all of the coordinate systems in the current scene, including the coordinate system they are defined with respect to (the parent of the corresponding assembly), and the matrix describing the transforms between the assembly and its parent. This is a bit long winded for casual use.
ListLights! lists the lights sources in the current scene including their name, position, and color.
ListMasterObjects! list the master objects in the current scene. You will notice that this list may contain names with number extensions such as "body.2". These result from the replace option described in Adding and Deleting Assemblies--Replacing Assemblies above. The only way to get rid of the master objects which are no longer in use at present is to save the picture, delete the entries from the file (remember to lower the number next in Master Objects [<num>] and load it back in again.
ListViews! lists the viewers which are currently open and names the scene which they are open onto. This function is mostly for debugging purposes.
ListCameras! lists the names of all of the currently defined camera positions (tripods).
Color and Color Maps
Solidviews is prepared to accept and produce output suitable for display on any of: A 24 bit color device, an 8 bit gray scale device, an 8 bit color device, and a bit map display. To set the color of an object see Creating an Artwork above.
Grays and Color For the Three Display Modes
If an 8 bit device is in use, the user can swap between gray scale and color modes using the ColorMap! and BWMap! (Black and White Map) buttons near the top of the EditTool. The picture will have to be redrawn after changing color maps since the frame buffer is actually written differently depending on the color mode (ie more is going on that just a change of color map). There are some holes in the current scheme. I will describe the input and output options here.
Line drawing output. The lines are black and should be drawn that way regardless of the output device.
Shaded output. Stipple patterns are used on the bitmap display. 8 bit gray converts colors to intensities and displays a gray scale image. 8 bit color finds the closest color in the default color colormap and displays that. 24 bit color is beautiful.
Ray Tracing output. Ray tracing produces 4 AIS files: 1 black and white separation and 3 color separations (red, green, and blue). On a bitmap device, draw the black and white separation by clicking #B&W on the solidviewer menu (with the name of the ais file next to "AIS:" in the solidviewer menu). On an 8 bit gray scale device, do the same.
On an 8 bit color device, you must produce a dithered AIS file after ray tracing. If someScene.ais is in the "AIS:" spot, then clicking "Dither" on the top menu line will produce someScene-std.ais (it uses someScene-red.ais, someScene-green.ais, and someScene-blue.ais so they must be on the local disk). The resulting dithered picture will be drawn. To redraw it later on without recomputing it, click Dither on the Draw: line.
Finally, on a 24 bit device, click #Color! in the solidviewer menu and the big beautiful full-color version of your ray-traced image will be displayed.
Solid Viewer Draw Options
There are several buttons on the solidviewer Draw: line. Clicking one of these buttons will cause an image to be drawn on top of the image currently displayed.
The Eight Draw Buttons
BBox. Draws the bounding box of each assembly (including both cluster and primitive assemblies). Notice that if the difference or intersection point set operators are in use, a cluster's bounding box may be smaller than the bounding box which would bound all of the bounding boxes of its children.
Scene. Draws the entire scene using the current display style. Can be used to draw a wire frame scene on top of a ray tracing scene to see what's going on etc.
Coords. Draws the three axes of each of the coordinate systems in the scene (ie one for each assembly). Does not currently label them.
Point. Interprets the numbers next to x,y,z: in the solidviewer as a point in CAMERA coordinates and draws an x at that point on the screen.
Cross. Draws cross hairs which meet at the current origin of the camera coordinate system.
Color. Takes the AIS file name next to AIS: (say someScene.ais) and interprets it as three color separations (someScene-red.ais, someScene-green.ais, and someScene-blue.ais) which are drawn so that a full color picture is shown. Note that this only has the right effect in 24 bit per pixel mode, though it behaves more or less properly on a bitmap or 8 bit gray scale device. Each AIS image is scaled to just fit in the bounding box of the current scene.
B&W. Takes the AIS file name next to AIS: and draws it as a black and white image. The AIS image is scaled to just fit in the bounding box of the current scene.
Dither. Takes the AIS file name next to AIS:. If the name is "Somename.ais", then "Somename-std.ais" is drawn (presumably on the color display). This provides a way to view color pictures on an 8-bit per pixel color mapped display. Before pressing this button, you should have already pressed "Dither" on the top line to create "Somename-std.ais". And before pressing "Dither" you should have pressed "ColorMap!" in the EditTool to load the dither color map.
Hardcopy
There are many ways to produce hardcopy of Solidviews pictures. I describe here several methods to produce press files and AIS files.
Printing AIS files and Press Files
Press files can be printed by sending them to a printer with the Cedar Print command which I will not describe further.
AIS files can be printed
1) By FTPing the AIS files to a raven or platemaker and using MakePress. See Appendix A for the recipe.
2) Using the TiogaArtwork machinery (see TSetterDoc.tioga for details).
The Press Buttons
The Press Button draws the scene using the current style into a press file whose name will be the name next to AIS: except that .ais will be replaced with .press. Warning: Shaded approximation style drawings involving even a moderate (small?) number of objects will produce too many color changes in the press file for the press software at the printers to handle. The printer will crash reporting core overflow.
Ray Tracing
Ray tracing is invoked by the RayCast button on the Solid Viewer. For every pixel on a grid of specified resolution on the screen, Solidviews casts a beam of light to find which object is visible at that pixel, calculates lighting and comes up with a color to paint the pixel.
Using Ray Tracing
To perform ray tracing, click twice over the RayCast button in the solidviewer. Left-clicking causes four AIS files to be constructed: a black and white separation, and 3 color separations (red, green, and blue). If the name next to "AIS:" in the solidviewer is FooFum.pic, these files will be named FooFum-red.ais, FooFum-green.ais, FooFum-blue.ais, and FooFum.ais.
Right-clicking causes only the black and white file FooFum.ais to be constructed. When ray-tracing is done, FooFum.ais is automatically drawn for you. Clicking #B&W will cause it to be drawn again later in the same fashion.
To set the grid resoution, see Changing the Camera Parameters above.
Details
The first thing to know about ray tracing is that it is currently slow. It is not the technique of choice for feedback. A sphere of radius 100, made of plastic takes about 1 minute to ray trace these days at screen resolution. Times are improving but not dramatically.
Interactive speeds can be achieved by reducing the grid resoution resolution. You can make the quality/speed trade-off as you like.
Is is also possible to ray trace a small part of a scene at a time, so critical details of it can be debugged reasonably fast. Edit the scene bounding box (See Changing the Camera Parameters above) and invoke ray-tracing normally. Only the interior of this box will be traced.
Once you have your AIS files, you will want to display them. To do this, you must use some appropriate subset of the Draw:Color, Dither, and Draw:B&W buttons; for more details, see Solid Viewer Draw Options below. These files also can be shipped to remote printers; see Hardcopy.
The procedures which draw ais files in a solidviewer (#Color and #B&W) center the image in the current bounding box of the scene. Thus if a ray tracing is performed and a simple even scaling of the whole scene or translation of the whole scene is performed, the ray tracing image may no longer correspond to the wire frame, shaded, and normals images. It will redraw at the same size, perhaps translated. Currently, Solidviews is unable to read the comment in the AIS file telling what resolution it was scanned at. Hence, this information is read from the resolution: slot of the EditTool. Therefore, changing this entry will cause AIS files to redraw with a different size.
It is possible to cast a single ray at the scene for debugging purposes. Pointing to a pixel in the scene and clicking the rightmost button of the mouse will send out a ray corresponding to that pixel. Also, entering two numbers in the first two positions of the "x,y,z" slot of the solidviewer and clicking ARay! will send out a ray at this camera point (z = 0 is assumed). The result of casting a single ray is a printed report in the Output Viewer describing which surfaces the ray hit and what the final color would be at that point.
Ray tracing can be aborted by hitting the Stop button at the top of the solidviewer. The AIS files are saved as they are at that point. During ray tracing, a bar indicator at the left margin of the bounding box shows how many lines of the image have been scanned so far.
Interactive Editing With the Mouse
Pointing
You can refer to solidviews objects by pointing at them. Place the mouse over an object and hold down the left mouse button. The name of the object which you are pointing to will be stuffed into the "Source:" slot of the EditTool and a three dimensional coordinate system will appear which tracks the surface of the object. When you release the mouse button, the 3D cursor (called a skitter) sticks to the object surface.
What is really going on. You are casting a ray into the scene. Solidviews finds the nearest surface which is hit and calculates the surface normal at that point. Hence, if you are using difference or intersection operators, your rays may go right through those surfaces of primitives which are not part of the final constructed volume. The coordinate system which appears has the properties that: Its z axis is the surface normal of the surface found by ray tracing. The x axis is chosen to be one of the directions perpendicular to the y axis of the selected object, if possible. This works out very naturally in most cases.
For more information on surface pointing operations, see SolidviewsDoc.tioga and SolidviewsTutorial.tioga
Extending the Selection
Pointing as described above only permits the user to point at primitives, since Solidviews has no way of knowing what level of the tree you are interested in. To extend to selection to refer to the parent of the currently selected node, type E. Repeatedy typing E will exend the skitter closer and closer the the sceneAssembly root node.
Making Objects Tangent
See SolidviewsDoc.tioga and SolidviewsTutorial.tioga.
Hints
Ray Tracing
Don't be afraid to use difference (and intersection) just because the shaded drawing style doesn't support them. The ray tracing pictures are often worth a little extra confusion.
Learn to read the human-readable files which Solidviews saves and loads. In particular, a quick read-through of the Assemblies section of a human-readable file to make sure that the right point set operations and picture structure are present is often useful. You can even read it while ray tracing is going on. If you find a bug, hit Stop (Draw:B&W will draw what you had so far), edit and try again.
Known Bugs
In addition to the lack of a shaded approximation drawing mode for the difference and intersection operations (see Display Modes above), the following bugs are present in the current implementation:
Viewer Split
Sometimes when two viewers are split, they share the same camera when the column is refreshed, producing two pictures from the same point of view (or in the same display mode) when the camera points (or display modes should be different). Click "Erase" and "DrawScene" in the offending viewer to correct the display. (Split also repaints more than it has to.) Finally, if you see a viewer which says "[Split]" when it shouldn't, don't "Destroy" it. This has been known to stop Cedar dead in its tracks. Tell me if this happens.
Floating Point Errors
Solidviews sometimes triggers floating point errors during refresh. Abort the error and hit "Draw:Scene". Hopefully, the error will not be repeated. If it is, try closing a window in the same column.
Half Spaces
"Clipping to clipping planes" is not yet implemented for half spaces.
Refresh Bugs
Sometimes the screen does not update properly after an object motion. This is a hold-over from a battle I had in January 1985 with XOR. Michael Plass is right: "XOR is a crock."
APPENDIX A - Printing color pictures on Lilac
This section describes the recipe to print the AIS files produced by SolidViews on Lilac, a color xerographic printer in CSL.
Step 0: Create the AIS files
Generate the color separation files for the scene (see Ray Tracing above). If the "AIS:" field of the Solid Viewer says FooBar.ais, ray tracing should have produced three files on your disk, FooBar-red.ais, FooBar-green.ais, and FooBar-blue.ais. Save those files on a remote server.
A message giving the size of the scanned image (pixels per line and number of lines) will be written on the Output viewer. Take note of these numbers, they will be needed later.
Note: better keep the file names reasonably short, otherwise Lilac may crash.
Step 1: Get hold of Lilac
Go to Lilac and press SWAT (the upper unmarked key at the right of the keyboard) while holding the left SHIFT key down. This will abort Lilac's server, and bring up the Alto Executive. Frustrated users may come yelling at you; try to ignore them.
Step 2: Get space on Lilac's disk
This step may not be necessary, but it will put you on the safe side, and you will be contributing to a Good Cause.
Type Neptune<CR> to the Alto Executive. The display will show two columns of file names, labeled DP0:<SysDir>*.* and NoDisk:<SysDir>*.*. Click the NoDisk: label on the right column. Three disk pack names will appear below it; click TP0. The directory of Lilac's Trident disk pack will then be displayed in the right column.
Any files with extension ".ais" are fair game for deletion. Select them with the blue mouse button, and then click Start at the top left corner of the screen. Once the files have been deleted, you can get out of Neptune by clicking the Quit button
Step 3: Bring your AIS files over to the Trident disk
Type FTP/t <CR> to the Alto Executive, and retrieve FooBar-*.ais (-red, -green, -blue) from your remote server. The "/t" switch tells FTP to write them on Lilac's Trident disk instead of DP0.
Step 4: Check AIS file parameters
If you know the dimensions of your AIS image (as printed by SolidViews in step 0), proceed to step 5. If not, or if you just want to be sure, type AISAtrributes<CR> to the Alto Executive. This will bring up a screenful of buttons and fields.
Click the "File" field and type FooBar-red.ais<CR> there. The file attributes will be displayed; the Scan Lines and Pixels/line fields are all you need to know. All three files have the same dimensions, so you only have to check one of them. Click Quit to exit.
Step 5: Create the Press file
Type MakePress<CR> to the Alto Executive This will bring up a screenful of buttons and parameter fields. Fill them as follows:
File name: click this button and then type FooBar.press.
Header Name and Header Date: click these buttons until both say No (You don't want headers on each printed page).
Sequence: click this button and then type 0<CR> (You don't want page numbers).
X Input Samples: click this button and type the number of pixels per scan line of your AIS files, followed by <CR>. .
Y Input Samples: click this button and type the number of scan lines in your AIS files, followed by <CR>
Magenta: click the button next to it (in the column labeled File Name) and type FooBar-green.ais<CR>
Yellow: click and type FooBar-blue.ais<CR>
Cyan: click and type FooBar-red.ais<CR>
Copies: click and type the number of copies you want to print.
The Black field should be left empty. Note: setting X Input Samples also sets the Y Input Samples, so the two must be given in this order.
When all the fields above have been filled and checked, click the large Write Press File button in the center of the screen. FooBar.press will then be written on DP0. Clck Quit to exit.
Step 6: Print it
Type Press print FooBar.press<CR> to the Alto Executive. The screen should go blank, and the cursor will show some status codes: the normal sequence is F, FO, S1, FO, C1, and finally P. C1 will slowly crawl three times across the screen, presumably to give you something interesting to watch while you wait. At this point, the color printer will wake up, and after a few seconds of dramatic suspense, the creature of your efforts will slowly crawl out of it.
Step 7: Wait! You aren't done yet!
Type @Server.cm<CR> to the Alto Executive to restart Lilac's printing server. We won't be responsible for anything that may happen to you or your family in case you forget this last step.
Many thanks to Jorge Stolfi for writing Appendix A.