File: SolidviewsDoc.tioga
Last edited by Bier on January 4, 1985 4:43:19 pm PST
The New Interactive Solidviews
by Eric Bier
The original Solidviews manual is in [Indigo]<SolidViews>Documentation>SolidViewsManual.tioga. You will still find this manual handy for understanding how to invoke Solidviews commands from the edittool and for learning Solidviews concepts. This file attempts to document the sweeping changes which have been made this summer to make Solidviews more interactive. These commands make it much easier to create scenes quickly.
This section should probably be read with a working version of Solidviews nearby.
Bringover -p /Indigo/Solidviews/Solidviews.df
Solidviews.load
Solidviews
should do the trick. If you want a sample scene to start with, select the words "primitives.pic" from somewhere and double click Get in the solid viewer. Solidviews brings primitives.pic over with it.
Adding New Objects
Type the name of the new object next to New: in the edittool. Type the name of the composite assembly which should be the parent of this new object in the Parent: slot in the edittool. Use "sceneAssembly" as the parent for top level objects. Now click the desired Add! button after typing in the needed shape information (e.g. radius and height for cylinders).
Mouse Terms
Most Solidviews commands which use the mouse start the command when the button is pressed down, continue it while the button is held down and stop when it is release. I will use left-hold, middle-hold, and right-hold to describe this way to invoke commands using the left, middle, and right buttons on the mouse respectively. Shift-left-hold means first press the shift button, then do a left-hold, then release the shift button. Ctrl-left-hold is the same except with the CTRL key.
Pointing: The Skitter
CoordFrame Select. Move the mouse over an object and left-hold. A coordinate system object called The Skitter will appear at the position of the object's defining coordinate system. Move from object to object and watch different coordinate systems be highlighted. Notice that the text next to the word Skitter: in the edittool changes as you move around to show you which object you are pointing to.
Surface Select. Now try shift-left-hold. This time the skitter tracks around on the front surface of the nearest object to you that the mouse is over. You may have to wait a little while for the skitter to appear while Solidviews computes an interactive ray tracing tree.
Back Surface Select. Now try ctrl-left-hold. Again the skitter moves around on the surfaces of objects, but this time, it moves around on the back face of the nearest primitive object under the mouse.
Top Level Surface Select. L-left-hold (holding down the L key) is useful with more complicated objects. This selects the last surface point hit on the nearest top-level (possibly composite) object under the mouse.
Extending the Skitter
With the exception of Top Level Select, all of the skitter commands only allow pointing to primitive objects in the scene tree. The skitter can be made to refer to a composite assembly by extending the selection in any of the following ways:
Keyboard Extension. After pointing at an assembly with the skitter, type E. Watch the Skitter: blank in the edittool to see what the skitter assembly has become. Repeat as necessary.
Skitter Extension. right-hold and shift-right-hold behave like CoordFrame Select and Surface Select except that the resulting skitter assembly is constantly computed as the common ancestor in the scene tree of the previous skitter assembly and the current primitive under the mouse. So for instance, left-hold over the leaf of a tree and right-hold over a leaf on the same branch might select that branch, while right-hold over a leaf on a different branch might select the whole tree.
Making Jacks
SkitterMakesJack. Once you have positioned the skitter in a useful place, you may wish to create a persistent object at that spot as a placeholder. Type ESC.
If the skitter is positioned on the surface of an object, Solidviews will create a Jack object at that spot. Jacks draw themselves in wireframe as their defining coordinate frame. In shaded polygon and ray tracing styles they do not appear.
If the skitter was selecting a defining coordinate frame, nothing is done since this coordinate frame itself is a persistent record of the skitter position.
The Selection commands S and T also make jack objects as described below.
Making Selections
The user may select assemblies to be used in commands. An assembly may be selected as a source, a target, or a plane. Solidviews maintains three stacks of assemblies to be used as arguments to commands, one stack for each kind of selection. A special mark appears on each selected assembly. The marks are different for source, target, and plane selections. Some commands will use only the top assembly (called the distinguished assembly) on one of the stacks. Some will use all of them. Some commands leave each stack as it was. Others clear some stacks. The name of the top item of each of the three stacks is displayed in the edittool next to Source: Target: and Plane: respectively.
Each selection also has a referent type, which is either hook, or coordSys. An assembly A can only be selected as a hook if it is on the surface of another object B. In this case, the selection remembers both A and B for use in tugboat positioning. A will be refered to as the coincident object, B as the indirect object. A coordSys selection can be made on any object A and remembers only A.
SkitterMakesSource. Make any kind of skitter selection. Type S. If the skitter was made with one of the Surface selections on an object B, a jack A is added at the skitter location and the (A, B) pair is pushed on the source stack as a hook selection. Given a CoordFrame skitter instead, the selected assembly A is pushed onto the source stack.
SkitterMakesTarget. Like SkitterMakesSource except pushes on the target stack. Type T.
SkitterMakesPlane. Like SkitterMakesSource except pushes on the plane stack. Type P.
CoordSys selections can be made from the editTool as well as interactively. To select an assembly named ButterBall, type "ButterBall" in the text1: slot of the editTool and click Source! or Target! depending on the type of selection desired. Alternatively, select the name "ButterBall" from any Tioga viewer and click Plane!, Source!, or Target! on the Selected Text line of the edittool.
Cycling Thru Planes
Once you have selected a plane (as with SkitterMakesPlane), type U. The plane selection will cycle thru the possible plane directions.
Constrained Skitter Motion in Empty Space
Once you have a plane selection, you can move the skitter in constrained ways.
Tightrope Walk. R-left-hold. Moves the skitter along the line normal to the last plane which was selected.
Wall Walk. W-left-hold. Moves the skitter in the selected plane.
Dragging Assemblies in a Plane
Similarly, you can drag (interactively translate) assemblies in a constrained fashion.
Camera Drag. F-left-hold. Drags the distinguished source in a plane parallel to the plane of the screen.
Wall Drag. D-left-hold. Drags the distinguished source in a plane parallel to the distinguished plane.
Moving
MoveToTarget. Type M. Moves the distinguished source to the distinguished target. There are some subtle (but pleasant) fine points.
If the source is a hook (an (A, B) pair), then both A and B are moved as a unit. The coincident assembly A aligns itself with the coincident assembly D of the target and the indirect assembly B follows along.
If the source is a coordSys selection, A is made coincident to D.
Furthermore, the transformation between A and D is either the Identity or RotY(180) depending on the hook/coordSys type of both the source and the target. Usually, these settings will do what you hope for. If not, rotate afterwards.
Copying
CopyToAllTargets. Type C. Effectively creates as many copies of the distinguished source S as there are targets, inserts them into the scene at exactly the same position as S, then performs a MoveToTarget using a different target each time. However, if S is a hook, then each MoveToTarget returns S's coincident (A) to its starting position so that A can be used as a tugboat for all of the new copies B.
CopyToAllTargetsRandom. Type shift-C. Like CopyToAllTargets, except that after each copy is moved to its target, it is randomly scaled and rotated about its tugboat (for hook selections) or its own origin (for coordSys selections). The scaling values will be uniformly distributed in a range [a,b] where a, b are the first two numbers in the ScalePrimitive! slot of the edittool.
Both of the above operations attach each copy to the scene tree as follows: If the source and target are from the same scene, then each such copy adopts source's parent as its own. If the source and target are from different scenes then each such copy adopts target's parent as its own.
CopyToAllTargetsTree. Type ctrl-C. Like CopyToAllTargets, except that each copy adopts target's parent as its own even if the copy is performed within a single scene. This is good for building tree structures.
CopyRotate. Type N. Makes n-1 copies of the distinguished source and positions them evenly distributed around a circle whose center is the origin of the distinguished plane, whose plane is the distinguished plane, and whose radius is such that the distinguished source is on the circumference. n is currently (yucko!) the first number in the x,y,z: slot of the solid viewer from which the command is invoked.
Adding Cylinders
AddCylinder. Type G. Adds a cylinder which joins the origin of the distinguished source to the origin of each the targets. The radius of the cylinders is taken from the radius: slot in the AddCylinder! line of the edittool.
Rotations, Translations and Scaling
All of these edittool operations still work. They take all of the sources and rotate, translate or scale them with respect to the coordinate system of the distinguished target. If there is no distinguished target, then each source is transformed relative to its own axes.
Delete
Type DEL or click Delete! in the edittool. Deletes all of the source objects.
Fine Points of the Input Focus
Many solidviews commands require holding down alphabetic keys while pointing with the mouse. Solidviews will not hear the alphabetic keys unless it has the input focus. Most skitter commands seize the input focus. If you are unsure, click the word "Selected" at the top of the solid viewer. This will seize the input focus into that viewer. If the tioga caret is blinking somewhere, solidviews doesn't have the input focus.
Final Hints
I haven't documented all of the new solidviews features here, but here are some hints for the others. Commands that really ought to take a single argument probably use the distiguished source. First! DrawCS! Edit! and GetArtwork! do for instance. DestroyAll! destroys all of the solidviews windows.