  The Mops V0.42d
  Randolf Schultz (rschultz@informatik.uni-rostock.de)
  14. Feb 2000

  This is the documentation of The Mops - a free 3D modeling environ-
  ment.  This document has been written using the SGML-Tools formatting
  system to generate files in a variety of text formats from one source
  file.  There are plain ASCII, HTML and PostScript versions of this
  document prepared for you.  In addition, you can use the provided
  SGML-source to generate other formats.  Note, that the plain ASCII
  version probably misses a lot of formatting information.  Please note
  also, that this document is intended to be a reference manual, more
  detailed explanations of how to actually model with The Mops are given
  in the tutorials.
  ______________________________________________________________________

  Table of Contents

















































  1. Introduction

  2. The Mops GUI

     2.1 Anatomy of the Main Window
        2.1.1 The Hierarchy Listbox
        2.1.2 The Properties Listbox
        2.1.3 The Property GUI
        2.1.4 The Console
        2.1.5 The Menu
     2.2 Anatomy of a View
        2.2.1 The View Menu
        2.2.2 View Window Shortcuts and Actions
     2.3 The Tool Box Window

  3. Mops Objects and Properties

     3.1 The Scene Object
        3.1.1 Preferences
        3.1.2 RiOptions
     3.2 Views
        3.2.1 Camera
        3.2.2 ViewAttrib
     3.3 Standard Properties
        3.3.1 Transformations
        3.3.2 Using the Rotation Property
        3.3.3 Attributes
        3.3.4 Tags
           3.3.4.1 RiAttrib
           3.3.4.2 OI - Object ID
        3.3.5 Shaders
     3.4 Box
        3.4.1 BoxAttrib
     3.5 Sphere
        3.5.1 RiSphereAttr
     3.6 Disk
        3.6.1 RiDiskAttr
     3.7 Cone
        3.7.1 RiConeAttr
     3.8 Cylinder
        3.8.1 RiCylinderAttr
     3.9 Torus
        3.9.1 RiTorusAttr
     3.10 Paraboloid
        3.10.1 RiParabAttr
     3.11 Hyperboloid
        3.11.1 RiHyperbAttr
     3.12 Union, Intersection, Difference, Primitive, Level, TrimLoop
     3.13 Light
        3.13.1 Custom Lights
        3.13.2 Point-, Distant- and Spotlights
        3.13.3 LightAttribute
        3.13.4 AreaLights
     3.14 NURBCurve
        3.14.1 NCurveAttrib
     3.15 NURBPatch
        3.15.1 NPatchAttrib
     3.16 Trim Curves
     3.17 Instance Objects
     3.18 Custom Objects
     3.19 The Revolve Custom Object
        3.19.1 RevolveAttr
     3.20 The Extrude Custom Object
        3.20.1 ExtrudeAttr
        3.20.2 Using Holes and Bevels
     3.21 The Sweep Custom Object
        3.21.1 SweepAttr
     3.22 The Skin Custom Object
        3.22.1 SkinAttr
     3.23 The ICurve Custom Object
        3.23.1 ICurveAttr
     3.24 Shell
        3.24.1 RIB export
        3.24.2 Shell Custom Menu
        3.24.3 SLControl
        3.24.4 SLShape, SLResolution, SLNodule1, SLNodule2, SLNodule3

  4. NURB Modeling Tools

     4.1 The NURBCircle Tool
     4.2 The NURBSphere Tool
     4.3 The NURBSphere2 Tool
     4.4 The TrimRect Tool
     4.5 The Closed BSpline Tool
     4.6 The ICurve Tool
     4.7 The Revolve Tool
     4.8 The Extrude Tool
     4.9 The Sweep Tool
     4.10 The Skin Tool
     4.11 The Revert Tool
     4.12 The Concat Tool
     4.13 The Split to Curves Tool
     4.14 The Build from Curves Tool
     4.15 The Elevate Tool
     4.16 The Refine Tool
     4.17 The Clamp Tool
     4.18 The Insert Knot Tool
     4.19 The Collapse Tool
     4.20 The Explode Tool

  5. Interactive Actions

  6. The Tcl Scripting Interface

     6.1 Index of Procedures and Commands
        6.1.1 Creating Objects
        6.1.2 Manipulating the Selection
        6.1.3 Clipboard Operations
        6.1.4 Hierarchy Operations
        6.1.5 Transformations
        6.1.6 Manipulating Shaders
        6.1.7 Manipulating NURB Curves and Surfaces
        6.1.8 Updating the GUI
        6.1.9 Custom Objects
        6.1.10 Manipulating Properties
        6.1.11 Applying Commands to a Number of Objects
        6.1.12 Scene IO
        6.1.13 Miscellaneous

  7. Miscellaneous

     7.1 The Mopsrc File
     7.2 The Mfio (3DMF Import/Export) Plugin
     7.3 Limitations of The Mops
     7.4 Using The Mops compiled without libslcargs
     7.5 Increasing drawing speed
     7.6 How can you help?
     7.7 Acknowledgements

  8. Index


  ______________________________________________________________________

  1.  Introduction

  What is The Mops?

  The Mops is a free 3D modeling environment for the RenderMan
  Interface.

  What platforms does The Mops run on?

  The Mops is primarily aimed at the platforms BMRT (Blue Moon Rendering
  Tools, a RenderMan compliant renderer by Larry Gritz) runs on (Linux,
  IRIX).  Win32 support should be considered experimental (even though
  an executable is provided) because it is largely untested! Due to
  limitations in the Win32 operating system(s) (no backlinking) and the
  current implementation of The Mops, dynamic loading of custom objects
  is currently not available on Win32!

  For platforms where BMRT is not available (e.g. the little red devil)
  The Mops may be compiled with code from the Affine Toolkit with
  limited functionality, see the file INSTALL. In this case no parsing
  of shaders will be possible.

  What are the features of The Mops?

  Here is a short summary:

  o  RIB (RenderMan Interface Bytestream) export.

  o  Support for NURB curves and (trimmed) NURB surfaces, Boxes,
     Quadrics (Sphere, Disk, Cylinder, Cone, Hyperboloid, Paraboloid and
     Torus).  All primitives may be combined with the common CSG
     operations Intersection, Difference and Union.

  o  NURB modeling includes extrude (with caps, holes and bevels),
     revolve (with caps), sweep and skin operations.

  o  Custom objects that may freely implement their representations
     (using OpenGL and RIB) and even small GUIs to edit their type
     specific parameters may be written by the user and dynamically
     loaded at runtime.

  o  Scripting interface: Tcl.

  o  Misc: instancing, arbitrary number of modeling views, object
     clipboard, independent property clipboard, console, single level
     undo, 3DMF import/export.


  2.  The Mops GUI


  2.1.  Anatomy of the Main Window

  The main window is split into four large areas.  A listbox named
  "Hierarchy:" plus some buttons, a listbox named "Properties:", an area
  labeled "Arguments:" and a text widget (the so called "Console").


  2.1.1.  The Hierarchy Listbox

  The hierarchy listbox, you guessed it already, displays the object
  hierarchy of the current scene.  Using this listbox you may browse
  through the hierarchy of the scene with your mouse and you may select
  one or more objects.
  Browsing and selecting should be very intuitively: Use a double-click
  to enter a level (or an object with child objects), and a single click
  to select objects, multiple objects may be selected using click and
  drag, or holding down the Shift or Control key while clicking.
  Keyboard operation is also possible if the listbox has the input
  focus.

  A ".." is displayed as the first element of the current level if you
  are "inside" a level or another object.  Doubleclicking on the ".."
  brings you up a level.  The buttons below may be used to change the
  selection or to quickly jump through the hierarchy. They should be
  self explanatory.

  You will notice, that there is a first object called "Scene" in the
  top level, even though the scene seems to be empty.  See section ``The
  Scene Object'' for more information regarding this special object, and
  what it is good for.  Note, that you cannot delete or copy this
  object.


  2.1.2.  The Properties Listbox

  This listbox displays the properties of the currently selected object.

  If there are multiple selected objects in the hierarchy listbox, the
  properties listbox will display no properties at all.

  Unlike the hierarchy listbox, where you can select multiple entries,
  only one property may be selected.  If a property is selected, it's
  associated GUI will be shown in the appropriate area.


  If a property is selected and a different object is selected using the
  Hierarchy listbox the property GUI that has the same index as the
  previously selected GUI in the properties listbox will be shown. To
  avoid that or to clear the property GUI for fast browsing through the
  scene you can use the "None"-button.


  2.1.3.  The Property GUI

  What properties exactly will be shown, and how the GUIs look alike
  depends on the selected object and the selected property.  This is
  documented in section ``Mops Objects and Properties''.

  Here are some general remarks:

  The various things that may be changed using a property GUI will
  normally not be applied until the "Apply"-button is pressed!

  You can undo all changes to the arguments of a property that have been
  made after the last click on "Apply" with the "Reset" button.  This
  is, however, not an undo mechanism!

  Note, that property GUIs of custom objects may also offer interactive
  elements that do an instant "Apply". All GUIs of the core objects of
  The Mops and the Scene object do not change anything until the "Apply"
  button is used, however.

  Also note, that the property-GUI may also offer ways to destroy
  information, operations that cannot be undone! The NURB properties
  e.g. let you switch from a curve/patch with weights to a curve/patch
  without weight information, switching weights off will destroy the
  current weights. There is no way to get them back, as switching to a
  curve/patch with weights again sets all weights to 1.0.

  A property may be copied and pasted to another object, see the Edit-
  menu. But, you cannot paste a property of type NURBPatchAttribute to a
  NURBCurve.  The object you are pasting to, should have a property of
  the correct type.  In other words, you cannot enrich objects with all
  sorts of properties this way.

  Pasting a property to multiple selected objects does work too.  This
  is a great way to apply e.g. a surface shader to a big number of
  objects, without going the long way of setting a new shader and
  entering parameters for it for every object.

  Since the granularity of the properties may be too low, read you do
  not want to copy and paste whole properties all the time, you may mark
  single parameters with a double click on the labels of the parameters.
  The marked parameters will then be preceded by an exclamation mark.

  If you now copy this property all marked parameters will be omitted.

  It is also possible to copy just the parameters you marked using "Copy
  Marked Prop".

  A simple example:

  Our task is to give a big number of objects the same color, but they
  already have different opacity settings. We can accomplish this by
  copying just the color attribute, but leave all other attributes as
  they are:


  1. Change the color of a first object using the "Attributes" property
     GUI.

  2. Mark the color parameter as to be copied using a double-click on
     the text "Color"; it should read "!Color" now.

  3. Copy just the color parameter to the property clipboard, using
     "Copy Marked Prop" in the "Edit" menu or the hot key <Ctrl+I>.

  4. Select all other objects.

  5. Paste the property using "Paste Property" or <Ctrl+V>.

  6. All done!

  Care must be taken when pasting incomplete properties to objects which
  do not have complete properties already.  Do not paste an incomplete
  shader property to an object which does not already have the same
  shader!


  2.1.4.  The Console

  The fourth part of the main window is the console.  The console is
  mainly for text output (informative, warning and error messages). For
  this, the console captures the stderr and stdout channels of the Tcl-
  Interpreter The Mops is running in.

  You can also enter commands, new Tcl procedures and so on in the
  console.

  The size of the console is managed by a so called paned window
  management. Move your mouse to the upper border of the console until
  the mouse pointer changes. Now you may drag the border to adjust the
  space (relative to the upper part of the main window) that is consumed
  by the console.

  The console has a (initially hidden) menu that you may open with the
  right mouse button.

  Another important thing that should not be forgotten is that the
  keyboard shortcuts for the various main menu entries do not work if
  the console has the input focus! Instead, other keyboard shortcuts are
  in effect!

  Simply press <Shift+TAB> to move the focus away if you intend to use
  main menu shortcuts.

  Note, that the <TAB> key does not move the focus away from the
  console.  <TAB> instead completes names of commands, files, variables
  and widgets.  You may try this out by typing tip in the console, then
  press <TAB>.  The console automagically completes tip to tipoftheDay
  (the procedure that prints out the tip of the day, try it).


  Another simple demonstration of the consoles capabilities:

  o  Create a box.

  o  Copy and paste this box 10 times (press <Ctrl+c> once; then
     <Ctrl+v> 10 times).

  o  De-select all objects (press the None button).

  o  Go to the console by clicking into it.

  o  Enter the following: forAll 0 {movOb $i 0 0; rotOb [expr $i*10] 0
     0}

  This example uses three procedures:

  o  forAll: allows to execute a command for each of the selected
     objects, or for each object in the current level if no objects are
     selected.

  o  movOb: moves the selected object(s).

  o  rotOb: rotates the selected object(s).

  See section ``The Tcl Scripting Interface'' for a listing of all the
  available commands.

  Note, that the example uses a side effect (the variable i that holds
  the index of the currently processed object) to calculate the amount
  of the movement and rotation.

  For more information regarding the console, please refer to the
  appropriate documentation by the original author Jeffrey Hobbs (see
  the console-menu).


  2.1.5.  The Menu

  Another important part of the main window has not been discussed so
  far, this is the main menu bar. Note, that many menu entries have
  keyboard shortcuts that are displayed in each entry. You can adapt the
  shortcuts using the file "mopsrc".

  The File menu deals with standard file operations:

  o  New, clears the current scene (deletes all objects).


  o  Replace, clears the current scene and closes all views, then loads
     a new scene from disk.

  o  Insert, inserts the objects and views of a mops file into the
     current scene.

  o  Save as, saves the current scene asking for a new file name.

  o  Save, saves the scene. If the scene has not been saved before
     (read, you have not given it a file name) you will be asked for a
     file name.

  o  Export RIB, exports the current scene to a RIB, asking which camera
     (which view) to use.  If the scene contains no light a simple
     distant light located at camera position will be added.

  o  Load Custom, loads a file containing a custom object.  Depending on
     the OS The Mops is running on, these are files with the extension
     so or dll.  See section ``Custom Objects'' for more information
     about custom objects.

  o  Save Prefs, safe the current Preference settings (from
     "Scene/Prefs") to the mopsrc file (see section ``The Mopsrc File''
     for more information about this file).  This includes position and
     size of the main window, the first view and the tool box. Be
     warned, that the settings are appended to the mopsrc file thus
     overriding any future changes that you could make manually in the
     first part of this file!

  o  Quit, do I need to explain this one?

  The Edit menu contains standard clipboard operations:

  o  Copy, copies the currently selected object(s) into the clipboard.

  o  Cut, moves the currently selected object(s) into the clipboard.

  o  Paste, copies the object(s) from the clipboard to the current level
     of the scene.  Note, that the content of the clipboard remains
     intact after this operation, this means that you can paste multiple
     times!

  o  Delete, removes the selected object(s) from the scene.

  o  Copy Property, copies the currently selected property of the
     currently selected object to the property clipboard (the property
     clipboard is completely independent from the normal object
     clipboard!).  Marked parameters will be omitted!

  o  Inverse Copy Prop, copies the currently marked parameters of the
     currently selected property of the currently selected object to the
     property clipboard (the property clipboard is completely
     independent from the normal object clipboard!).

  o  Paste Property, copies a property from the property clipboard to
     the currently selected object(s).

  o  Name; name objects (except scene and view objects!).

  o  Swap; exchange the position of two selected objects in the
     hierarchy.

  o  Undo; perform undo operation, just applicable to changes made with
     interactive actions, see section ``Interactive Actions''.


  The Create menu entries let you create objects:

  o  NURBCurve, create a new NURB curve. A small dialog box will pop up,
     where you may specify the length of the new curve.

  o  NURBPatch, create a new NURB patch. A small dialog box will pop up,
     where you may specify the width and height of the new patch.

  o  Solid, create a new solid primitive object, for use in CSG.  Box,
     Sphere, Disk, Cone, Cylinder, Torus, Hyperboloid or Paraboloid may
     be selected.

  o  Level, create a new hierarchy object. Union, Intersection,
     Difference and Primitive may be selected.  Another type, Level, is
     not a CSG operation. It is used to build a level of the attribute
     hierarchy. Finally, you may create levels of type TrimLoop to mark
     a loop of trimcurves for a NURB patch.

  o  Light, create a new light source.

  o  Custom Object, create a new custom object.

  o  Instance, create an instance of the currently selected object, see
     section ``Instance Objects'' for more information regarding
     instances.

  o  View, a new View window will be opened.

  The Tools menu:

  o  The Tools menu contains two sub menus NURBCurve and NURBPatch with
     various NURB based modeling tools that are explained in depth in
     section ``NURB Modeling Tools''.

  o  Show, Hide set and unset the Visibility-Editor attribute of the
     selected object(s) thus making them invisible.

  o  Convert starts the convert action that has been registered for the
     type of the selected object. Instances are e.g. resolved. Sweep,
     Revolve or Extrude objects will be converted to simple NURB
     patches.

  o  Force Notification force the notification callbacks of all selected
     objects (or all objects in the scene if no objects are selected) to
     be called.

  The Custom menu is initially empty. Custom objects and PlugIns, may
  create entries here.


  2.2.  Anatomy of a View

  The view window is split into a menu bar and a OpenGL-widget, where
  interaction and drawing takes place.  The title of the view window
  gives information about name, current type and action of the view.


  2.2.1.  The View Menu

  Here are all meny entries of the View menu:

  o  Quick Render, the scene is exported to a RIB using the camera
     settings of the current view; then the "QRender" command (see the
     preferences) will be called.


  o  Render, the scene is exported to a RIB using the camera settings of
     the current view; then the "Render" command (see the preferences)
     will be called.

  o  Redraw, forces the OpenGL-widget to be drawn, this is particularly
     useful if automatic redrawing of the view has been disabled.

  o  Close, the View window will be removed.

  The Configure menu may be used to change preferences of the view.  All
  possible preferences are outlined in section ``Views''.


  2.2.2.  View Window Shortcuts and Actions

  Important keyboard commands of a View:

  o  <Left>, <Up>, <Right>, <Down> rotate viewer around origin.

  o  <Add>, <Sub> (on the numeric keypad) zoom view.

  Interactive actions:

  o  Using <v> you may move the view with your mouse.

  o  <R> (note the case!) starts rotating the virtual camera around the
     point it is looking to.

  o  <o> starts zooming the view. Moving the mouse up zooms in and
     moving the mouse down zooms out.

  You may also move the view by dragging with the rightmost mouse button
  and zoom the view with the middle mouse button.

  Additionally, if you hold down the Shift button while dragging with
  the rightmost mouse button you can move the camera in the direction it
  is looking. Note, that this affects both from and to. Furthermore,
  this movement will have no visible effect in parallel views.

  If you have a wheel mouse and it is configured to send Mouse4 and
  Mouse5 button events, The Mops will zoom the view when you turn the
  wheel (Linux only).

  Using the menu entry Zoom to Object or the shortcut <Ctrl+o> you can
  change the views from to and zoom settings so that the selected
  objects will be displayed centered in the view window.  This is handy,
  if you are e.g. searching for objects or simply lost in space.



  2.3.  The Tool Box Window

  The tool window displays some buttons that start interactive modeling
  actions or other modeling tools or create objects.

  Note, that in contrast to the keyboard shortcuts of the view windows
  the buttons switch to the modeling actions for all available views.
  For more information about the actions see section ``Interactive
  Actions''.


  The tool window may be configured by the user using the preference
  setting toolBoxList in the mopsrc file.  You may select from the
  groups and change the order in which they appear in the tool window.


  3.  Mops Objects and Properties

  This section informs you about the property GUIs that appear in the
  Argument-canvas if a single object and a property have been selected
  in the appropriate listboxes.

  All property GUIs use more or less standardized GUI elements, that are
  organized in list form. The lists may be scrolled if they get too
  long.


  3.1.  The Scene Object

  This object is something special in that it cannot be deleted or
  copied. It holds scene specific preferences, options, atmosphere and
  image shaders. Finally, all current views are child objects of the
  scene object.


  3.1.1.  Preferences

  The first section of the preferences contain two GUI elements that
  help you to manage shaders.

  o  "Shaders" contains a number of paths (separated by ":" on Unix and
     ";" on Win32) where The Mops looks for compiled shaders (files with
     the extension ".slc" that have been compiled with BMRTs slc). Using
     the "Add" button, you may add another path, simply press it and
     select a file inside the directory you want to add. Note, that
     currently the filenames may contain just two "." at maximum.

  o  "Scan for Shaders!" initiates a rebuild of the internal shaders
     database. All shaders in the directories specified by the "Shaders"
     entry will be scanned and entered in that database.

  The next section contains GUI (user interface) related settings.

  o  You may find the borderwidths of the property GUIs too small, if
     you operate in large resolution on a small monitor (e.g. 1280x1024
     on a 17inch monitor).  You may choose a bigger "BorderWidth" (2) to
     get the same borderwidth, as all other GUI elements.

  o  "AutoResize" toggles, whether the main window should be resized
     horizontally according to the property GUI whenever a new GUI is
     displayed.

  Modeling related settings follow.

  o  "PickEpsilon" is used by the single point editing actions to
     determine which point (vertice) of an object has been selected.  A
     smaller "PickEpsilon" means more exact picking.  If you set it to
     0.0, however, the picking code will always return the nearest point
     (vertice) to the picking coordinates.

  o  "UpdateTrafos" determines whether The Mops should update the
     transformation property after an interactive modeling action.

  o  "LazyNotify" determines whether notification shall occur on all
     mouse movements or just on release of the mouse button, for the
     interactive modeling actions.  (Notification is the mechanism used
     to inform objects that rely on certain child objects (e.g. the
     Revolve custom object) about changes of their childs, so that the
     parent can adapt to the childs automagically.)

  What should be included in the saved scenes?

  o  "SaveViews" toggles whether The Mops should save the view
     information in the scene files. Switching it off results in
     slightly smaller scenes, and makes the scenes compatible with the
     load a first scene on startup that contains just 3 standard views
     approach. The default, however, is on.

  What happens if The Mops encounters an Error?

  o  "OnError" toggles the behaviour of The Mops in an error condition,
     the default "Stop" will break every operation immediately.  But you
     may toggle it to "Continue"; now The Mops will try to go on and
     finish the operation.

  The next section deals with RIB-Export specific settings.

  o  "RIBFile" allows to set the file The Mops is exporting RenderMan
     Interface Bytestreams (RIBs) to. Note, that some filenames have
     special meaning. If you set "rendrib" as filename libribout.a does
     not create a file at all, but immediately pipes the resulting
     ByteStream into rendrib (the BMRT renderer) for rendering.  When
     you use these options of direct rendering, be warned, that for the
     time of the rendering The Mops will be frozen (it will neither
     respond to mouseclicks nor will it update any windows), until
     rendribs window is closed.  "Ask" is another special filename, that
     allows to select a different filename each time you export a RIB
     file.  A file selection dialog will pop up, after the selection of
     the export view, if the initial filename is "Ask".  The same effect
     may be achieved by leaving the entry totally empty!  Filenames that
     start with a pipe symbol "|" will cause the program behind the
     symbol to be started by libribout and the written RIB to be piped
     into. This works e.g.  with Photorealistic RenderMan, try it out
     with "|render".  Last but not least, "Scene" (the default file
     name) will cause the RIB file to be named as the currently loaded
     scene with the last extension replaced by ".rib".

  o  "Image" specifies the image file that will be created, when you
     render the exported RIB file.  You may set it to "RIB", this will
     create image files that are named as the exported RIB file (with
     the last file extension replaced by ".tiff"). Again, setting it to
     "Ask" will cause a dialog box to appear, each time you export to a
     RIB file.  Note, that in contrast to the "RIBFile" option leaving
     the field totally empty is not equal to entering "Ask" but
     generates RIB files that will be set up to render to the display.

  o  "ResInstances", if this is enabled all instance objects are
     resolved before being written to the RIB file.

  o  "CheckLights", if this is enabled The Mops will check the current
     scene for lights and if no lights or no lights that are actually
     switched on are to be found in the scene a distant head light will
     be added to the scene automatically for RIB export.

  o  "RIStandard" determines whether The Mops should omit all non
     standard RenderMan interface options and attributes on RIB export.

  The next settings determine what happens on direct rendering of a
  view:

  o  "QRender" determines the command that should be executed, upon
     quick rendering, %s denotes the name of the RIB file.

  o  "Render" determines the command that should be executed, upon
     normal rendering, %s denotes the name of the RIB file.



  3.1.2.  RiOptions

  RenderMan Interface options.  Both, standard and BMRT specific options
  may be set.  Please refer to the documentation of the RenderMan
  Interface and the documentation of BMRT for more detailed information
  about the options.


  o  "Width", "Height", if greater than zero this value will be used for
     the image-size instead of the corresponding dimension of the view
     window, but only for real RIB exports and not for the QuickRender
     and Render actions in view windows.  These will always use the
     dimensions of the view window.

  o  "Variance", maximum allowed variance of two pixel values.  The
     default 0.0 causes no setting in the RIB. If the variance is > 0.0
     no pixel samples setting will be written to the RIB.

  o  "Samples_X", "Samples_Y" number of samples taken per pixel.

  o  "FilterFunc", function used to filter final pixel values.

  o  "FilterWidth", "FilterWidth" size of the filter.

  o  "ExpGain",

  o  "ExpGamma",

  o  "RGBA_ONE",

  o  "RGBA_MIN", "RGBA_MAX",

  o  "RGBA_Dither",

  o  "MinSamples", "MaxSamples", minimum and maximum number of samples
     per pixels.

  o  "MaxRayLevel", maximum number of recursive rays.

  o  "ShadowBias", minimum distance that one object has to be in order
     to shadow another object.

  o  "PRManSpec", toggles behaviour of BMRT's specular() function
     between PRMan compatible (default) and RiStandard compatible.

  o  "RadSteps", number of radiosity steps, the default 0 leads to no
     radiosity calculations to be performed.

  o  "PatchSamples", minimum number of samples per patch to calculate
     the radiosity form factors for this patch.


  3.2.  Views

  Every 3D-View is a child object of the Scene object.  You can change
  camera settings, the type of the view and other things related to the
  view using it's properties.  Note, that deleting the object that
  represents a view, will not close the view window. You will just lose
  a way to configure it.  Please, do not mess with the objects in other
  ways (e.g. copy them), you are asking for trouble otherwise!


  3.2.1.  Camera



  o  "From" is the point from which the camera (that is attached to the
     view) is looking from.

  o  "To" is the point the camera is looking to.

  o  "Roll" defines an angle by which the camera is rotated around the
     axis that is defined by the points from and to.

  o  "Zoom" is a zoomfactor.

  Note, that while it is possible with the interactive rotate view
  actions to create views with an up-vector pointing down, this is not
  possible with this property.

  Whenever you apply this property the up-vector will be reset to the
  up-vector that is normally used; depending on the type of the view
  this is <0,1,0> (Front, Side, Perspective, Trim) or <0,0,-1> (Top).


  3.2.2.  ViewAttrib

  The view is associated with a virtual camera.  The type of the view
  determines the Up-vector of that camera.  If the type is "Top" the Up-
  vector corresponds to the world Z-axis, else the world Y-axis.  The
  type of the view additionally determines the so called input-plane of
  the view. Interactive actions in a view are limited to that input-
  plane. The input planes are as following: Front - XY-plane, Side - ZY-
  plane, Top - XZ-plane, Trim - XY-plane.  In perspective views, no
  interactive actions are possible.  You may just position the camera
  and draw or render.

  Views of type trim are very special. They are used to edit trimcurves
  of NURBPatch objects only. They display that trimcurves as normal
  NURBCurves when the current level is inside a NURBPatch.  The
  extensions of the patch in parameter-space are drawn as a rectangle.
  The trimcurves should completely lie inside this rectangle.

  Finally, here are all elements of the ViewAttrib property:

  o  "Type" specifies the type of the view. Front, Side, Top (all
     parallel), Perspective and Trim may be selected. Note, that
     changing the type alone does not move the camera. Consider the
     following example: when switching from a default Front view to a
     Side view using the view property, the From and To parameters of
     the camera will not change, it still looks from 0,0,10 to 0,0,0.
     Since Front and Side view have the same Up vector no (visible)
     change will be made to the view. It is better to use the menu of
     the view window (perhaps even better the shortcuts to this menu) to
     switch view types!

  o  "Width" and "Height" control the size of the view window.

  o  "Grid" is the grid size, 0.0 means no grid is in use.

  o  "DrawWire" toggles drawing of wireframes (wireframes is a synonym
     for a low quality representation in this context).

  o  "DrawSurf" toggles drawing of curves and surfaces (surfaces is a
     synonym for a high quality representation in this context).

  o  "DrawGrid" toggles drawing of the current grid.

  o  "DrawSel" toggles drawing of selected objects. If this is enabled,
     only the current selected objects will be drawn.


  o  "Lighting" toggles lighting.  Note that the lighting is in no way
     an exact (or even similar) representation of the light information
     you specified with Light objects!  Instead, a single light source,
     located at the camera origin (a headlight), will be used!

  o  "Redraw" toggles automatic redrawing of the view.  If this is
     disabled no drawing takes place in the view until an explicit
     redraw is requested (using the view menu, or the shortcut
     <Ctrl+d>).


  3.3.  Standard Properties

  Most Mops objects have standard properties, they are used to control
  transformations and attributes of objects and to attach shaders to
  objects.


  3.3.1.  Transformations

  Use this property to edit the location, orientation and size of an
  object.

  o  "Translation_X (_Y, _Z)" is the displacement of the object from the
     world origin in X (Y, Z) direction.

  o  "Rotation_X (_Y, _Z)" is the angle (in degrees) of the rotation of
     the object around the X (Y, Z) axis.  Read the next section for
     more information on how to use these entries. Read it!

  o  "Scale_X (_Y, _Z)" determines a scale factor that will be applied
     to the object in the direction of the local X (Y, Z) axis.

  o  "Quat0 (1, 2, 3)" the quaternion that is used to determine the
     orientation of the object in space. This quaternion is not here to
     be edited directly! The sole purpose of its appearance here is to
     allow copying and pasting of rotations.

  Tcl commands to get and set the transformation property are:

  o  getTransfProp:

  o  Synopsis: "getTransfProp"

  o  Description: Get the transformation property from the currently
     selected object and put it into the global array "transfPropData".

  o  setTransfProp:

  o  Synopsis: "setTransfProp"

  o  Description: Set the transformation property of the currently
     selected object from the global array "transfPropData".

  Note, that because of the two different methods of orientation
  specification that are contained in "transfPropData" (Rotate_X,Y,Z vs.
  Quaternion) you need to decide whether you want to simply set a new
  orientation using "setTransfProp" or whether you rather want to mimic
  the behaviour of the Transformation property GUI. Use the following
  construct to overwrite the orientation using "setTransfProp":






  ______________________________________________________________________
  global prefs
  set prefs(pasteProp) 1
  setTransfProp
  set prefs(pasteProp) 0
  ______________________________________________________________________


  Using "setTransfProp" without precautions will do the same as if the
  "Apply" button in the Transformation property GUI had been used.


  3.3.2.  Using the Rotation Property

  The orientation of an object in space may be expressed using so called
  Euler angles. This notation (simply three angles determining a
  rotation about the axes of the coordinate system) suffers from a
  phenomenon called gimbal lock.

  To avoid gimbal locks, The Mops internally holds the orientation of an
  object in a quaternion.

  This quaternion not only holds information about the angles but also
  about the order in which partial rotations occured.

  It is important to know, that the values of the angles of the rotation
  property must not be read in a way that the object will first be
  rotated around X by x-angle degrees then around Y y-angle degrees then
  around Z z-angle degrees.  In fact, no information about the order in
  which partial rotations occured may be determined from that three
  values.  This implies, that e.g. the values 0 0 45 may denote a
  different orientation than the very same values 0 0 45 (no joke)!

  But how do you get the three entries to do what you want?  You either
  want to rotate the object around an axis by a given amount or you want
  to undo a rotation or undo all rotations.

  Rotating an object is easy, simply add the amount about which you want
  to rotate the object to the value currently displayed in the
  appropriate entry. If you want to rotate about 45 degrees about X and
  the x-angle entry displays a 30, enter 75.  Then press the apply
  button.  If you change multiple entries the rotations made will be in
  the order X (if changed) then Y (if changed) then Z (if changed).  I
  urge you to not change more than one entry at once until you exactly
  know what you are doing.

  Undoing a rotation made e.g. with the rotate action is simple, but
  requires you to know which value was displayed in the entry
  corresponding to the axis of the rotation before the rotation occured.
  Simply enter the old value after an unsuccessful rotation, then press
  apply.  Since the action does not change the value displayed in the
  entry while rotating, you may just open the transformation property of
  that object, and if the rotation failed, simply press apply.

  If you want to undo multiple rotations you have to undo them in single
  steps in exactly the reverse order in which you made them.  Lets say,
  you rotated around X 45, then around Y 90 then around X another 45
  degrees. You will not get back to your original orientation if you
  rotate back around X 90, then around Y 90 degrees. You have to rotate
  back around X 45, then around Y 90 then around X another 45 degrees!
  This example unfortunately works, if you start from 0 0 0, in this
  special case the last rotation back (to 0 0 0) undoes all rotations
  anyway (see below), but try it once starting from 30 0 0.

  Undoing all rotations (resetting the object to its original state) is
  simple too: enter 0 for all three entries at once, then press apply.
  3.3.3.  Attributes

  Both, standard and BMRT specific attributes may be set.  Please refer
  to the documentation of the RenderMan interface and the documentation
  of BMRT for more detailed information about the attributes.


  o  "Color", the color of the object. If you set one of the entries to
     a negative value (e.g. -1), the color will not be set at all for
     this object.

  o  "Opacity", the opacity of the object, the default 255 255 255 means
     total opaque. If you set one of the entries to a negative value
     (e.g. -1), the opacity will not be set at all for this object.

  o  "ShadingRate",

  o  "Interpolation",

  o  "TrueDisp", toggles true displacements on or off. Default off.

  o  "BoundCoord", sets the coordinatesystem in which the displacement
     bound is expressed.

  o  "Bound", displacement bound.

  o  "CastShadows", determines how the object casts shadows: the default
     "Os" means the object casts shadows according to it's opacity;
     "None" object does not cast any shadows; "Opaque" the object is
     completely opaque and casts shadows; "Shade" the object has a
     complex opacity pattern determined by it's surface shader, that is
     used in shadow calculations.

  o  "AverageColor", average color of surface, to be used if your
     surface shader sets a completely different color as specified by
     the color attribute.

  o  "EmissionColor", color and amount of emitted light.

  o  "SpecularColor", to be used, if this object is a specular reflector
     that generates the well known caustic effects. Note, that
     additionally you need to add a lightsource with a shader named
     "bouncer" to your scene to obtain caustics.

  o  "PatchSize", "ElemSize", "MinSize" determine how fine the radiosity
     mesh should be calculated for this primitive.

  o  "Zonal" determines the radiosity calculation performed on this
     primitive.

  Tcl commands to get and set the attributes property are:

  o  getAttrProp:

  o  Synopsis: "getAttrProp"

  o  Description: Get the attributes property from the currently
     selected object and put it into the global array "attrPropData".

  o  setAttrProp:

  o  Synopsis: "setAttrProp"

  o  Description: Set the attributes property of the currently selected
     object from the global array "attrPropData".

  3.3.4.  Tags

  Use this property to edit the tags of an object.

  Tags are an easy way to attach arbitrary information to objects. A tag
  consists of two strings, one defining the type and one defining the
  value of the tag.

  The Tags property GUI is a simple text widget where you may enter the
  two aforementioned strings separated by a space, one tag per line.
  Note, that each line must contain exactly one space to separate name
  and value. Multiple spaces e.g. in the value string (even if
  surrounded by quotes) are illegal.

  Tags may also be set or get using the commands setTags and getTags
  respectively.


  o  setTags:

  o  Synopsis: "setTags [type value]"

  o  Description: Set the tags described by a number of type value pairs
     to the currently selected object(s).  All old tags will be deleted
     from the selected object(s).  If called without arguments all old
     tags will be removed from the selected object(s).

  o  getTags:

  o  Synopsis: "getTags varname1 varname2"

  o  Description: Get the tags from the currently selected object and
     put the type strings of all tags as list into the variable varname1
     and the value strings of all tags as list into the variable
     varname2.

  The next sub-sections describe the available tag types.

  3.3.4.1.  RiAttrib

  The tag type "RiAttrib" can be used to attach arbitrary RenderMan
  interface attributes to objects.

  In order to create a tag of type RiAttrib the type string must be
  "RiAttrib". The syntax of the value string is as following:

  attrname,paramname,paramtype,param

  where attrname is the name of the attribute (e.g. "render") paramname
  is the name of the parameter (e.g. "displacementbound") paramtype is a
  single character defining the type of the parameter (it may be one of
  f - float,i - integer, s - string, c - color, p - point) and finally
  param is the value of the parameter itself (a float: "1", a string:
  "on", a color: "1,1,1" or a point: "0.4,0.5,1.0").

  Examples:

  RiAttrib render,truedisplacement,i,1

  RiAttrib radiosity,specularcolor,c,0.5,0.5,0.5

  Note:

  The RiAttrib tag handles just a single parameter at once.


  3.3.4.2.  OI - Object ID

  This tag is used by the RIB exporter and the scene storage facility to
  establish links between instance objects and the original objects they
  are pointing to.

  The tag type OI is not meant to be used by the end user.  Furthermore,
  changing the IDs avails to nothing as the tags are rebuilt before
  every export/save operation.


  3.3.5.  Shaders

  Shader properties are used to attach a shader of a certain type to an
  object.  Each shader property, even if no shader is attached to an
  object, starts with the "Set new shader." button. This button allows
  to select a new shader of the appropriate type.  Below this button is
  the "Delete shader." button which, consequently, deletes the current
  shader from the selected object.

  After a new shader has been set, the arguments of the shader will be
  parsed and a GUI will be generated to allow the arguments of the
  shader to be filled with values.

  Tcl commands to set and get shader properties are:

  o  getSProp:

  o  Synopsis: "getSProp shadertype arrayname [subtype]"

  o  Description: Get the complete description of the shader of type
     shadertype that has been assigned to the currently selected object
     and write it in the global array arrayname.  If shadertype is
     volume then a subtype must be specified.  Use "parray arrayname" to
     see how the array is organized.

  o  setSProp:

  o  Synopsis: "setSProp shadertype arrayname [subtype]"

  o  Description: Apply the shader of type shadertype whose description
     is in the global array arrayname to the currently selected object.
     If the entry "Name" in this array is "" then the shader of type
     shadertype will be deleted from the object instead. If shadertype
     is volume then a subtype must be specified.


  3.4.  Box

  A solid box, centered at the origin of the object coordinate system.
  This object will always be exported as solid primitive in RIBs;
  consisting of six polygons.

  3.4.1.  BoxAttrib


  o  "Width" is the width of the box (size of the box in direction of
     the X axis of the objects coordinate system).

  o  "Length" is the length of the box (size of the box in direction of
     the Z axis of the objects coordinate system).

  o  "Height" is the height of the box (size of the box in direction of
     the Y axis of the objects coordinate system).


  Tcl commands to get and set the BoxAttrib property are:

  o  getBoxAttr:

  o  Synopsis: "getBoxAttr"

  o  Description: Get the BoxAttrib property from the currently selected
     object and put it into the global array "BoxAttrData".

  o  setBoxAttr:

  o  Synopsis: "setBoxAttr"

  o  Description: Set the BoxAttrib property of the currently selected
     object from the global array "BoxAttrData".


  3.5.  Sphere

  A sphere, centered at the origin of the object coordinate system.
  This object will be exported as solid primitive or as simple sphere
  (depending on the "Closed" parameter of the SphereAttrib property) in
  RIBs.  Note, that the OpenGL representation of this object does not
  reflect the settings of the following parameters of the SphereAttrib
  property: "Closed", "ZMin", "ZMax" and "ThetaMax".


  3.5.1.  RiSphereAttr


  o  "Closed" toggles whether the object should be automatically sealed
     (closed) when exported to RIB.  Note, that if this option is in use
     and "ZMin", "ZMax" or "ThetaMax" have other than the default
     values, a single sphere will be written (in the worst case) as a
     CSG hierarchy of two spheres, two cylinders and eight disks!  But
     it may be used in CSG operations, safely.

  o  "Radius" is the radius of the sphere, default is 1.

  o  "ZMin" may be used to chop the sphere off at a certain place at Z.

  o  "ZMax" may be used to chop the off at a certain place at Z.

  o  "ThetaMax" is the sweeping angle of the sphere default is 360.

  Tcl commands to get and set the object type specific attribute
  property of any quadric (sphere, disk, cone, cylinder, hyperboloid,
  paraboloid, torus) are:

  o  getQAttr:

  o  Synopsis: "getQAttr type"

  o  Description: Get the type specific attribute property from the
     currently selected object and put it into the global array
     "QAttrData". Type may be one of "sphere", "disk", "cone",
     "cylinder", "paraboloid", "hyperboloid" and "torus".

  o  setQAttr:

  o  Synopsis: "setQAttr type"

  o  Description: Set the type specific property of the currently
     selected object from the global array "QAttrData".  Type may be one
     of "sphere", "disk", "cone", "cylinder", "paraboloid",
     "hyperboloid" and "torus".
  3.6.  Disk

  A disk, centered at the origin of the object coordinate system.  This
  object will always be exported as simple disk in RIBs.  Note, that the
  OpenGL representation of this object does not reflect the setting of
  the following parameter of the RiDiskAttr property: "ThetaMax".


  3.6.1.  RiDiskAttr


  o  "Radius" is the radius of the disk, default is 1.

  o  "ZMin" displaces the disk along the Z axis, default is 0.

  o  "ThetaMax" is the sweeping angle of the disk, default is 360.

  For information on how to set or get this property with the Tcl
  scripting interface see section ``RiSphereAttr''.


  3.7.  Cone

  A cone, centered at the origin of the object coordinate system, with
  the base at the XY plane.  This object will be exported as solid
  primitive or as simple cone (depending on the "Closed" parameter of
  the ConeAttrib property) in RIBs.  Note, that the OpenGL
  representation of this object does not reflect the settings of the
  following parameters of the RiConeAttr property: "Closed" and
  "ThetaMax".

  3.7.1.  RiConeAttr


  o  "Closed" toggles whether the object should be automatically sealed
     (closed) when exported to RIB.  Note, that if this option is in use
     and "ThetaMax" has a different than the default value, a single
     cone will be written (in the worst case) as a CSG hierarchy of a
     cone, a disk and two polygons!  But it may be used in CSG
     operations, safely.

  o  "Radius" is the radius of the cone at the base, default is 1.

  o  "Height" is the height of the cone, default is 1.

  o  "ThetaMax" is the sweeping angle of the cone, default is 360.

  For information on how to set or get this property with the Tcl
  scripting interface see section ``RiSphereAttr''.


  3.8.  Cylinder

  A cylinder, centered at the origin of the object coordinate system.
  This object will be exported as solid primitive or as simple cylinder
  (depending on the "Closed" parameter of the RiCylinderAttr property)
  in RIBs.  Note, that the OpenGL representation of this object does not
  reflect the settings of the following parameters of the CylinderAttrib
  property: "Closed" and "ThetaMax".

  3.8.1.  RiCylinderAttr


  o  "Closed" toggles whether the object should be automatically sealed
     (closed) when exported to RIB.  Note, that if this option is in use
     and "ThetaMax" has a different than the default value, a single
     cylinder will be written (in the worst case) as a CSG hierarchy of
     a cylinder, two disks and two polygons!  But it may be used in CSG
     operations, safely.

  o  "Radius" is the radius of the cylinder, default is 1.

  o  "ZMin" determines the Z location of the base, default is -1.

  o  "ZMax" determines the Z location of the top, default is 1.

  o  "ThetaMax" is the sweeping angle of the cylinder, default is 360.

  For information on how to set or get this property with the Tcl
  scripting interface see section ``RiSphereAttr''.


  3.9.  Torus

  A torus, centered at the origin of the object coordinate system.  A
  torus is a donut like shape, that results from sweeping a small circle
  ( that has been displaced along X sufficiently ) around the Z axis.
  This object will be exported as solid primitive or as simple torus
  (depending on the "Closed" parameter of the RiTorusAttr property) in
  RIBs.  Note, that the OpenGL representation of this object does not
  reflect the settings of the following parameters of the RiTorusAttr
  property: "Closed", "PhiMin", "PhiMax" and "ThetaMax". Tori have no
  shaded (surface) representation in the modeler, currently.

  3.9.1.  RiTorusAttr


  o  "Closed" toggles whether the object should be automatically sealed
     (closed) when exported to RIB.  Note, that if this option is in use
     and "PhiMin", "PhiMax" or "ThetaMax" have different than the
     default values, a single torus will be written (in the worst case)
     as a CSG hierarchy of a torus, two disks and two hyperboloids!  But
     it may be used in CSG operations, safely.

  o  "MajorRad" is the radius of the torus, measured from the Z axis to
     the center of the swept smaller circle, default is 0.75.

  o  "MinorRad" is the radius of the swept circle, default is 0.25.

  o  "PhiMin" determines an angle to limit the swept circle, default is
     -180.

  o  "PhiMax" determines an angle to limit the swept circle, default is
     180.

  o  "ThetaMax" is the sweeping angle of the torus, default is 360.

  For information on how to set or get this property with the Tcl
  scripting interface see section ``RiSphereAttr''.


  3.10.  Paraboloid

  A paraboloid, centered at the origin of the object coordinate system.
  This object will be exported as solid primitive or as simple
  paraboloid (depending on the "Closed" parameter of the
  RiParaboloidAttr property) in RIBs.  Note, that the OpenGL
  representation of this object does not reflect the settings of the
  following parameters of the RiParabAttrib property: "Closed" and
  "ThetaMax".  Paraboloids have no shaded (surface) representation in
  the modeler, currently.

  3.10.1.  RiParabAttr


  o  "Closed" toggles whether the object should be automatically sealed
     (closed) when exported to RIB.  Note, that if this option is in use
     and "ZMin", "ZMax" or "ThetaMax" have different than the default
     values, a single paraboloid will be written (in the worst case) as
     a CSG hierarchy of a paraboloid, two disks and two bicubic patches!
     But it may be used in CSG operations, safely.

  o  "RMax" is the radius of the paraboloid at a Z of "ZMax", default is
     1.

  o  "ZMin" determines the Z location of the base, default is -1.

  o  "ZMax" determines the Z location of the top, default is 1.

  o  "ThetaMax" is the sweeping angle of the paraboloid, default is 360.

  For information on how to set or get this property with the Tcl
  scripting interface see section ``RiSphereAttr''.


  3.11.  Hyperboloid

  A hyperboloid, centered at the origin of the object coordinate system.
  This shape will be created by sweeping a line specified by two points
  in space around the Z axis.  This object will be exported as solid
  primitive or as simple hyperboloid (depending on the "Closed"
  parameter of the RiHyperbAttr property) in RIBs.  Note, that the
  OpenGL representation of this object does not reflect the settings of
  the following parameters of the RiHyperbAttrib property: "Closed" and
  "ThetaMax". Hyperboloids have no shaded (surface) representation in
  the modeler, currently.

  3.11.1.  RiHyperbAttr


  o  "Closed" toggles whether the object should be automatically sealed
     (closed) when exported to RIB.  Note, that due to a bug in BMRT
     that is still present in V2.3.6 this option does not work properly
     when "ThetaMax" has a different than the default value and the
     hyperboloid has no displacement shader. In fact, using a
     displacement shader with a km (amount of displacement) of 0.0 is a
     work-around for this bug (found by T. E. Burge).  Also note, that
     if this option is in use and "ThetaMax" has a different than the
     default value, a single hyperboloid will be written (in the worst
     case) as a CSG hierarchy of a hyperboloid, two disks and two
     bilinear patches!

  o  "P1_X", "P1_Y" and "P1_Z", define point one, default is (0, 1,
     -0.5).

  o  "P2_X", "P2_Y" and "P2_Z", define point two, default is (1, 0,
     0.5).

  o  "ThetaMax" is the sweeping angle of the hyperboloid, default is
     360.

  For information on how to set or get this property with the Tcl
  scripting interface see section ``RiSphereAttr''.





  3.12.  Union, Intersection, Difference, Primitive, Level, TrimLoop

  Objects of type Union, Intersection, Difference, Primitive, Level and
  TrimLoop are used to build object hierarchies and perform CSG
  operations.  Note, that child objects of a level inherit the levels
  transformations attributes and shaders, except for TrimLoop levels.
  If you have a NURB patch in a level that is translated to 10,0,0, the
  origin of the local coordinate system of the NURB patch will be
  situated at 10,0,0. If you decide to move the patch by a value of 5 in
  X direction, you will finally arrive at 15,0,0.

  Levels do not have object type specific properties, just standard
  properties (See section ``Standard Properties'').  It is not possible
  to change the type of a level.

  New solid primitives may be created with levels of type Primitive.
  Note, that The Mops is not able to check whether your new primitive
  obeys the rule of total closeness.

  TrimLoop levels should only be used inside NURB patches. They mark a
  set of NURB curves (all child objects of the TrimLoop level) to be a
  trim loop. See section ``Trim Curves'' for a more in depth discussion
  of trim curves.  Note, that the transformation and other attribute
  settings of a TrimLoop are not inherited by it's childs.


  3.13.  Light

  The behaviour of a light source object depends heavily on it's type.
  There are four different types available: custom, point, distant and
  spot.


  3.13.1.  Custom Lights

  Light sources of type custom are the only types of light object a
  light shader may be attached to.

  Note, that The Mops is trying to guess from the names of the light
  shader arguments to draw the light.  The names "from" and "to" denote
  location and destination of the lightsource. You should not use these
  names for other things in your light shaders!


  3.13.2.  Point-, Distant- and Spotlights

  These (standard) light sources have well defined parameters that will
  be displayed in the "LightAttribute" property.

  However, their from and to values are fixed to from: (0,0,0) and to:
  (0,0,-10). These may not be changed.  The only way to position these
  lights is through the Transformations property. To change the distance
  of the light from it's origin use the Scal_Z action/property.


  3.13.3.  LightAttribute

  Depending on the type of the light source, the LightAttribute property
  contains different parameters. Parameters that are not displayed will
  not be used on RIB export, however.


  "IsOn" allows you to switch the light off or on. The default value is
  on.


  With the light attribute "Shadows" you may determine whether the
  lightsource should cast shadows. The default is off, no shadows!


  The attribute "Samples" determines the number of times to sample an
  area light source, independent of pixel samples, the default value is
  1.  This attribute is available for custom lights only!


  All other parameters that may appear are the standard parameters for
  the standard RenderMan lightsources distantlight, pointlight and
  spotlight. Please refer to the RenderMan documentation if you are not
  sure what they mean.


  Tcl commands to get and set the LightAttrib property are:

  o  getLAttrProp:

  o  Synopsis: "getLAttrProp"

  o  Description: Get the LightAttrib property from the currently
     selected object and put it into the global array "lattrPropData".

  o  setLAttrProp:

  o  Synopsis: "setLAttrProp"

  o  Description: Set the LightAttrib property of the currently selected
     object from the global array "lattrPropData".


  3.13.4.  AreaLights

  The common light sources itself have no geometry, this means shadows
  resulting from it have sharp borders. Soft shadows may be generated
  using AreaLights.


  How do you create AreaLights?

  You simply have to create a single object as child object of a custom
  light object that has the "arealight" shader attached, this child
  object determines the geometry of the lightsource. Objects that work
  best as childs are Disks and simple (e.g. 2x2) NURB patches.

  An example:

  o  Create a custom light object.

  o  Assign the arealight light shader to it.

  o  Enter the light by double clicking.

  o  Create a Disk or a NURB patch.

  o  Transform the object to your hearts content; the position and size
     of the object determines the position and size of the lightsource!


  3.14.  NURBCurve

  NURB curves are used to build more complex smoothly shaped objects
  using operations like extrude, revolve or sweep.  They can be closed
  and used to emulate Bezier and B-Spline curves easily.

  NURB curves support so called multiple points. These are control
  points that have the same coordinates. Those points will be drawn with
  a bigger handle, than normal points. See sections ``The Collapse
  Tool'' and ``The Explode Tool'' for more information regarding
  multiple points.


  3.14.1.  NCurveAttrib

  The first section of the NCurveAttrib property contains curve specific
  settings:


  o  "Length" is the number of controlpoints of the curve.

  o  "Order" is the order of the curve.

  o  "Knot-Type": Using "Knot-Type" you may select from NURB, Bezier, B-
     Spline and Custom knot sequences.  If the knot type is not Custom,
     the next setting "Knots" will be ignored. Instead, knots of type
     NURB, Bezier or B-Spline will be generated.  How do the different
     knot types affect the curve?

     The knot type NURB will generate knot values from 0.0 to 1.0, where
     the multiplicity of the knots at the ends will be of order of the
     curve.  This guarantees that the curve will touch the controlpoints
     at the ends of the curve.

     The knot type Bezier will generate just 0.0 and 1.0 values. Note,
     that the order of the curve has to be equal to the length of the
     curve, if Bezier knots are generated. Otherwise, the generated knot
     sequence is illegal. The resulting curve looks and behaves exactly
     like a real Bezier curve, interpolating it's ends and so on.

     The knot type B-Spline will generate values without any multiple
     knots. The resulting curve looks and behaves like a B-Spline curve.

  o  "Knots" lets you enter your own custom knot sequences.  Note, that
     "Knots" are not in use if "Knot-Type" is of type NURB, B-Spline or
     Bezier!

  o  "Has-Weights" determines whether weights should be used.  Note,
     that switching weights off will destroy the current weight
     information.

  o  "Closed" toggles the closeness of the curve.  If this is enabled,
     the last p controlpoints of the curve will be made identical to the
     first p (where p is the degree of the curve, read order-1). All
     those points will be multiple points and single point editing
     actions will edit both points from now on.

     Note, that for a cubic spline (order 4) you will need atleast 6
     controlpoints to close it. It is important to know, that the
     multiple points alone can not guarantee that the curve is closed if
     the knot type of the curve is Custom, if you really want a closed
     curve switch to type B-Spline.

     Also note, that a NURB circle as created by the NURBCircle tool is
     not a closed curve following this definition, it is nevertheless a
     closed curve.

     The next section controls the handles of the curve.

  o  "Handlesize" is the size of the handles.


  o  "W-Handles" determines whether the weight information of a vertice
     should be used to draw a handle of the appropriate size.

     The GLU-Parameters control the appearance of the curve when
     curve/surface display is enabled.

  o  "Tolerance" is in fact GLU sampling tolerance, used to control the
     quality of the sampling when rendering a curve.  Smaller tolerance
     settings lead to higher quality.

  When changing more than one of the above values the changes will be
  applied in the order of the values in the property. The sum of the
  changed values should describe a valid NURB curve.  It is perfectly
  legal to change the length of the curve, it's order, switch to a
  custom knot vector (be sure to actually enter a valid new knot vector)
  and switch off weights at once.  The Mops will check your changes and
  fall back to certain default values if e.g. your knot sequence is
  wrong.  Check the console for any messages!

  Tcl commands to get and set the NCurveAttrib property are:

  o  getNCAttrProp:

  o  Synopsis: "getNCAttrProp"

  o  Description: Get the NURBCurveAttrib property from the currently
     selected object and put it into the global array "ncattrPropData".

  o  setNCAttrProp:

  o  Synopsis: "setNCAttrProp"

  o  Description: Set the NURBCurveAttrib property of the currently
     selected object from the global array "ncattrPropData".



  3.15.  NURBPatch


  3.15.1.  NPatchAttrib

  The first section of the NPatchAttrib property contains patch specific
  settings:


  o  "Width" and "Height" control the dimensions of the patch.

  o  "Order_U" and "Order_V" set the orders of the patch.

  o  "Knot-Type" and "Knots": For a discussion of the "Knot-Type" and
     "Knots" parameters, please see section ``NCurveAttrib''.

  o  "Has-Weights" determines whether weights should be used.  Note,
     that switching weights off will destroy the current weight
     information.

     The next section controls the handles of the patch.

  o  "Handlesize" is the size of the handles.

  o  "W-Handles" determines whether the weight information of a vertice
     should be used to draw a handle of the appropriate size.

     The GLU-Parameters control the appearance of the patch when
     curve/surface display is enabled.
  o  "Tolerance" is in fact GLU sampling tolerance, used to control the
     quality of the sampling when rendering the patch.

  o  "Display" sets the display mode, either the full patch is drawn as
     a surface (Fill) or just the outlines of the polygons created by
     the tesselation (OutlinePoly), or just the outlines of the patch
     (OutlinePatch).

  Tcl commands to get and set the NPatchAttrib property are:

  o  getNPAttrProp:

  o  Synopsis: "getNPAttrProp"

  o  Description: Get the NURBPatchAttrib property from the currently
     selected object and put it into the global array "npattrPropData".

  o  setNPAttrProp:

  o  Synopsis: "setNPAttrProp"

  o  Description: Set the NURBPatchAttrib property of the currently
     selected object from the global array "npattrPropData".


  3.16.  Trim Curves

  Trim curves may be used to cut out certain parts of a NURB patch.
  They are simple NURB curves, but some special restrictions apply.

  How do you define a trim curve?

  Create a NURB patch. Enter it by double clicking in the hierarchy
  listbox. Now you may create a NURB curve, that will then be a trim
  curve. You wonder why the curve is not displayed in any of your
  modeling views? Well, thats simple, a trim curve is always defined in
  the parameter space (u,v) of the NURB patch. But the normal modeling
  views display the (x,y,z) space.  Switch one of your modeling views to
  type Trim.  A rectangle (representing the parameter space of the NURB
  patch) and your trim curve should be displayed.  Note, that views of
  type Trim will display nothing unless you are inside a NURB patch
  (with the current level in the hierarchy listbox, that is).  You may
  now model the trim curve just as you do it with a normal NURB curve in
  a normal view.  Note, that the direction of the trim curve determines
  which part of the NURB patch should be cut out. You can use the Revert
  tool (Tools/NURBCurve menu) to easily change the direction of a trim
  curve.

  What are the restrictions, that have been mentioned earlier?

  o  All trim curves should entirely lie in the (u,v) parameter space of
     the NURB patch (remember the rectangle in the Trim view).  Note,
     that this restriction does not apply to the controlpoints, but the
     curves! It is ok to have controlpoints outside the rectangle if the
     defined curve is inside the rectangle.

  o  The last controlpoint of a trim curve must be identical to the
     first controlpoint.

  o  Trim loops (multiple trim curves that form loops) are possible too;
     the last controlpoint of each curve in the loop must be identical
     to the first controlpoint of the next curve in the loop and the
     first controlpoint of the first curve of a loop must be identical
     to the last controlpoint of the last curve of that loop.


  o  To mark a set of curves to be a loop, they must be placed in a
     level of type TrimLoop. The order of the curves in this level is
     the order of the loop.

  o  Drawing trimmed NURB patches with certain implementations of OpenGL
     may require a special trim curve (a piecewise linear curve that
     encloses the whole NURB patch) to be present. Such a curve may be
     generated with the TrimRect tool. You can find this tool in the
     Tools/Create menu. This curve is needed if you want to cut out a
     hole with a single trim curve. This curve is generally not needed
     if you want to render the patch with BMRT but it should not hurt if
     it is present.

  o  If there are nested trim curves, their direction must alternate.

  o  Trim curves may not intersect each other or themself.

     Note, that The Mops is not checking whether your trim curves follow
     these rules!

  Warning, certain OpenGL implementations may be easily crashed with
  trimmed NURB patches with curves that do not follow the aforementioned
  rules! When in doubt or while heavy modeling, switch off drawing of
  curves and surfaces temporarily and you will be on the safe side.

  Also note, that MesaGLU is currently not able to draw trimmed NURB
  patches.  If you need this, you should use a better or real OpenGL.


  3.17.  Instance Objects

  The term instance is unfortunately misleading (and can be very
  confusing if you are accustomed to the terminology of object oriented
  programming), but it is the term that seems to be used and understood
  by most computer graphic artists. A better term would be link, as an
  instance object has the same basic properties as a link in a Unix file
  system.  A link is just a pointer to an original file, the same goes
  for an instance object: it is just a pointer to an original object.  A
  link can be placed anywhere on the file system, an instance object can
  be placed anywhere in the hierarchy, and additionally, it can be
  transformed (otherwise it would be pretty useless).

  The sole purpose of instance objects is to save storage.  The amount
  of saved diskspace can be very high, but this depends heavily on the
  scene. If there are no similar objects in the scene you can hardly use
  instancing. Similar means "the same except for the transformation
  property" in this context.


  Some simple rules for instancing:

  o  No instances may be created of objects of the following types:
     View, Scene, Instance.

  o  The original object may not be deleted or cut from the scene as
     long as there are instances of that object in the scene or in the
     object clipboard.

  o  Instancing cannot be used with trim curves/loops.

  If you cannot delete/cut an object, and the error message tells you
  something about a reference counter, then you were about to violate
  the second rule.



  You can resolve an instance object at any time using the converter
  registered for objects of type Instance (simply select the instance
  object and use the menu entry "Tools/Convert").


  The RIB export of instances does not use the RiInstance facility of
  the RenderMan interface, but the ReadArchive mechanism.  This means,
  every original object in the scene will be written in a separate
  archive (RIB file) on disk, and every instance will cause that archive
  file to be read. You can change that behaviour using the preference
  setting "ResInstances".  If "ResInstances" is enabled, all instances
  will be resolved before being exported to RIB.


  3.18.  Custom Objects

  What is a custom object?

  Think of it as a plugin that extends The Mops's capabilities by
  defining totally new types of objects.  A simple example is the
  CSphere custom object, which implements a sphere and has a new
  property named "CSphereAttr".  This property contains all parameters
  of a simple RenderMan Interface quadric sphere.

  Since a custom object has total control over properties and
  representations, you should refer to the documentation of the custom
  object for more information regarding it's properties.

  The following sections describe some built in custom objects.


  3.19.  The Revolve Custom Object

  The revolve custom object forms a surface of revolution from a NURB
  curve.


  The object has the generating NURB curve as child object and watches
  its movements and adapts to it automagically.


  The axis of revolution is always the Y axis of the coordinate system
  that is defined by the next higher level in the object hierarchy (the
  Y axis of the revolve object itself). The generating curve should lie
  in the XY plane of this coordinate system. If not, it will be squashed
  down to this plane!


  The following simple experiment should make the last statements more
  clear, during all steps watch the movements of the revolution:


  o  Create a NURBCurve. Select it.

  o  Create a Revolve custom object using the menu entry
     (Tools/NURBCurve/Revolve).

  o  Select the Revolve object, and rotate it around Z. (The axis of the
     revolution changes. The generating NURB curve, as child object,
     will also be rotated.)

  o  Now enter the Revolve object, select the child curve and edit the
     control points (Note, how the Revolution changes).

  o  Rotate the curve around Z (Note, how the Revolution changes).

  o  Switch to a Side view, edit the generating curve here in Z
     direction only (Revolution does not change!).

  Using the command "revolveCNP" (revolveConvert to NURB Patch) you may
  export the current surface of revolution and the caps, if there are
  any, to ordinary NURB patches.


  3.19.1.  RevolveAttr

  Using the parameter "ThetaMax" you can specify the sweeping angle of
  the revolution just like with an ordinary RenderMan quadric. If you
  use a different angle than 360.0, be warned, that the caps will not be
  created correctly anymore (the resulting object will never be fully
  closed!).

  The revolve object can automatically generate caps, which are trimmed
  NURB patches. Using "HasUpperCap" and "HasLowerCap" you determine
  whether such caps should be generated, default is off (no caps).


  See section ``NPatchAttrib'' for a description of the other two
  attributes.


  3.20.  The Extrude Custom Object

  The extrude custom object forms an extrusion from a number of NURB
  curves.


  The first curve determines the outline, and the other curves determine
  holes in the extrusion object. Holes may be used by objects that form
  e.g. letters.


  The object has the generating NURB curves as child objects and watches
  them and adapts to them automagically.


  The extrude object can generate caps, if the generating curves are
  closed. Cap generation may fail, if the outer curve has weights and
  the curve itself leaves the convex hull of the control polygon. Be
  careful when using curves with weights!


  The sharp corners between caps and extrusion may be beveled.


  The axis of the extrusion is always the Z axis of the coordinate
  system that is defined by the next higher level in the object
  hierarchy (the Z axis of the extrude object itself). The generating
  curves should lie in the XY plane of this coordinate system. If not,
  they will be squashed down to this plane!


  Using the command "extrudeCNP" (extrudeConvert to NURB Patch) you may
  export the current surface of extrusion and the caps and bevels, if
  there are any, to ordinary NURB patches.


  3.20.1.  ExtrudeAttr

  Using the parameter "Height" you determine how big in Z direction the
  extrusion should be. Note, that the height of the bevels will not be
  taken into account here, if you have an extrusion with height 1.0 and
  you switch on beveling (upper and lower) with radius 0.1 you end up
  with an object that is 1.2 whatever big in Z direction.

  The extrude object can automatically generate caps, that are trimmed
  NURB patches. Using "HasUpperCap" and "HasLowerCap" you determine
  whether such caps should be generated, default is off (no caps). Note,
  that this feature does only work properly, if the generating NURB
  curves are closed and not self intersecting, this is because the
  generating curves themself are used as trim curves for the caps.
  Warning, The Mops will not check whether your curves conform to this
  criteria. The Mops, however, detects the correct orientation of the
  curves (and reverts them if necessary).

  Using "LowerBevel" and "UpperBevel" you determine whether bevels
  should be created to round the otherwise sharp corners of the
  extrusion with the cap. The bevels may be controlled using "BevelType"
  and "BevelRadius".  "BevelType" allows to choose from "Round" (a
  complete round bevel, built using a quarter circle), "Linear" (not
  round at all, but just a connecting linear patch) and "Ridge" which
  forms a more complex beveling similar to some frames for (real world)
  images.  The "BevelRadius" determines the size of the bevels. It is
  expressed in untransformed object coordinates of the generating curve,
  but the resulting radius of the bevel may differ a bit (depending on
  the shape of the curve).

  See section ``NPatchAttrib'' for a description of the other two
  attributes.


  3.20.2.  Using Holes and Bevels

  All curves forming holes in the extruded object must be defined inside
  (geometrically) the first curve (the outline curve). Additionally,
  they may not intersect each other or themself and you cannot have hole
  curves inside hole curves.  The Mops will not check whether your
  curves conform to these criteria!

  With the direction of the curve you decide the direction of the bevel
  as well (should it round outwards or inwards?).  If the bevels of the
  holes look wrong try to revert the generating curves of the holes.
  Note, that beveling does not work well with open curves.  You should
  always use closed curves for beveling!


  3.21.  The Sweep Custom Object

  The sweep custom object forms a surface that results from moving a
  NURB curve (cross section) along a second NURB curve (trajectory).


  The object has the generating NURB curves as child objects and watches
  their movements and adapts to them automagically.  The first curve is
  the cross section and the second is the trajectory.


  Note, that the "Translate" attributes of the cross section curve will
  be fully ignored. All other transformation attributes (of cross
  section and trajectory!) will be used to determine place, orientation
  and size of the sweep object!


  Using the command "sweepCNP" (sweepConvert to NURB Patch) you may
  export the current sweep to an ordinary NURB patch.



  3.21.1.  SweepAttr

  If "Interpolation" is enabled, all section curves will be interpolated
  by the swept surface.

  The second parameter "Sections" determines how many sections (in u
  direction) should be used, when generating the sweep NURB patch. The
  NURB patch always has sections+1 control points in u direction.

  If "Rotate" is enabled, the cross sections will be rotated so that
  they are always perpendicular to the trajectory, this is the default.

  See section ``NPatchAttrib'' for a description of the other two
  attributes.


  3.22.  The Skin Custom Object

  The skin custom object forms a surface that results from lying a
  surface through a set of curves, where the first and last curve will
  be interpolated by the surface.

  Note, that the curves may be of arbitrary length and order.  If the
  curves are of different length or order, they will all be converted
  internally until they match. Be warned, that this process may consume
  a considerable amount of time (for the ones of you who know NURBS
  better: all unclamped curves have to be converted to clamped ones;
  then, for every curve with low order degree elevation has to be done;
  then a uniform knot vector has to be found; then all curves have to be
  refined using this new knot vector; interpolation adds another
  dimension of complexity...). If you experience lags when editing the
  child curves of a Skin try to switch to lazy notification.

  Also note, that the resulting patch may be quite big even though the
  curves are not if their orders do not match.  A skinned patch from two
  curves of length 4 but one with order 4 and the other with order 2
  will result in a patch with a width of 2 and a height of 10!

  The skin custom object has the generating NURB curves as child objects
  and watches their movements and adapts to them automagically.

  Using the command "skinCNP" (skin Convert to NURB Patch) you may
  export the currently selected skin to an ordinary NURB patch.


  3.22.1.  SkinAttr

  The first parameter "Interpolation" controls, whether the inner curves
  should be interpolated by the skinning surface.

  The second parameter "Order_U" determines the order of the resulting
  surface in u direction (the order in v direction is determined by the
  curves). The order may not be lower than the number of curves used. If
  the specified value is lower than the number of curves the order of
  the generated surface will be silently set to the number of curves.

  Using the next parameter "Knot-Type_U", you can adapt the type of the
  knot vector that should be used in the u direction of the skin. Note,
  that this setting will have no effect if interpolation is switched on
  because then a chord length parameterisation will be used. If the knot
  type is Bezier and the specified order does not match the number of
  skinned curves, then the order will be silently adapted to the number
  of skinned curves.

  See section ``NPatchAttrib'' for a description of the other two
  attributes.
  3.23.  The ICurve Custom Object

  The ICurve custom object creates an interpolating spline which is
  either a C2 cubic with n+2 control points or a curve with n points
  with arbitrary order from a set of control points.

  The global interpolation generates a bit smoother curves which look
  best with an order of 3, your mileage may vary however.

  In both interpolation modes chord length parameterization will be used
  to determine the knot vector of the interpolating curve.

  This object is the first to make use of the new provide mechanism for
  custom objects. It marks itself as providing a NURBCurve (it creates
  and uses NURB curves internally anyway) and all other objects that
  work with the provide mechanism (revolve, sweep, extrude) are able to
  work with an ICurve object instead of an object of type NURBCurve.


  3.23.1.  ICurveAttr


  o  Using "Length" you determine the number of points to interpolate.

  o  The curve can be closed with the parameter "Closed".

  o  The parameter "Mode" determines whether the curve should be a C2
     cubic curve (with n+2 control points (n+3 if the curve is closed))
     or a so called global interpolating curve (with n control points
     (n+3 if the curve is closed) and arbitrary order).

  o  The next parameter "Order" is used only if the mode is Global4D. It
     determines the order of the interpolating curve. If the specified
     order is bigger than the number of control points used by the
     interpolating curve, then the order is silently changed to match
     the number of control points.

  o  The parameter "IParam" is used to control the position of the
     second and last-1 controlpoint of the interpolating curve.  It
     scales the vectors used to position the aforementioned points.  You
     can try to change (decrease) this value, if you are not satisfied
     with the shape of the curve near the first or last interpolated
     point.  This parameter has no effect on open curves when the mode
     is Global4D.

  o  See section ``NCurveAttrib'' for a description of the last
     attribute: "Tolerance" .


  3.24.  Shell

  The shell custom object that is distributed with The Mops is just a
  demo version. Please, keep this in mind.  The objects functionality
  has been crippled a bit, read, it will not appear in any RIBs and the
  export to NURB patch feature has been disabled too.

  The documentation given here is not complete in terms of ShellyLib
  parameters, please refer to the original ShellyLib documentation.



  3.24.1.  RIB export

  The Shell object always exports as NURB patch.  Note, that the shell
  object searches all shaders for parameters named "mys" and puts
  additional texture coordinate information into RIBs if it finds such a
  parameter.  The "mys" parameter is used (as varying float with per
  vertex information) in the SLtxtmyssrf shader from ShellyLib to map
  textures on shells with generation curves with unevenly distributed
  control points more accurately.


  3.24.2.  Shell Custom Menu

  The Shell custom object creates two entries in a submenu (named Shell)
  of the custom menu.  "Export to NPatch" exports the current shell to a
  NURB patch (this feature is disabled in the demo version!).


  "Export GCurve" creates a NURB curve child object of the current
  shell. This curve may be used as generation curve if ShellyLib is in
  GCurve mode.


  3.24.3.  SLControl

  "ApplyMode" controls the behaviour of the sliders of the other
  properties. If it is set to the default value of "Manual" the sliders
  will change nothing until the "Apply" button is pressed. If set to
  "OnMouseUp" or "Continuous" movements of the sliders will lead to
  immediate apply operations (whenever the slider is released or while
  the slider is moved, respectively).


  Using "SLMode" you can control, wether ShellyLib is in Normal or
  GenCurve mode while generating the shell.

  GenCurve mode allows to use an arbitrary curve instead of an ellipse
  (as in Normal mode) as cross section.  The generation curve has to be
  a child NURB curve of the shell custom object. The shell object will
  automatically adapt to this curve. You may create such a curve easily
  using the export GenCurve feature.

  Note, that the parameters "a", "b" and "A" change the generation curve
  as they do it in Normal mode. With a freshly exported curve you need
  to set "a" and "b" to 1.0 and "A" to 0.0, consequently. Otherwise, the
  exported generation curve would be scaled and moved inappropriately,
  and the new shell would be e.g. much bigger than expected.


  If "CacheShell" is enabled, the shell generator will just be used when
  a parameter has been changed, the full geometric representation of the
  shell will be cached in memory, allowing to be drawn multiple times
  withot re generation but with memory overhead.


  If "Display" is set to "NURB", the shell will be drawn as NURB surface
  (with a sampling tolerance of "Tolerance") when draw surface is
  enabled in a view. Otherwise it is drawn as a bunch of polygons.

  "WatchSurf" and "WatchDisp" control whether the shell object should
  search its surface and displacement shaders (while RIB export) for
  parameters labeled "O" and "W" and fill in appropriate values.  This
  feature allows the shaders that come with ShellyLib to detect the
  aperture of the shell, and handle the interior appropriately. If you
  use shaders that use "O" and "W" for other things you should not
  enable this feature.


  Using "Import Shell" you may import any ShellyLib data files, written
  e.g. by the Shell Laboratory.  When importing a shell with a
  generation curve, you need to export the generation curve manually
  using "Export GCurve" in the custom menu after import but before
  switching to GCurve mode!


  3.24.4.  SLShape, SLResolution, SLNodule1, SLNodule2, SLNodule3

  All parameters displayed in these properties are ShellyLib parameters.
  In contrast to the other standard GUI elements that are used
  throughout The Mops, the Shell object uses more comfortable sliders.

  A slider may be reconfigured using a double click on any of the two
  labels beside the slider. Reconfiguration is necessary if you want to
  set parameters that are not allowed by the current min, max or
  stepsize parameters of the slider.

  Depending on the ApplyMode in the SLControl property the slider may do
  an automatic apply leading to an immediately updated shell when you
  drag it, or when you let it go.  The default, however, is no automatic
  apply at all.  The entries do not change a value until the focus
  leaves the entry (always press <Tab> if you are finished with an
  entry!).


  4.  NURB Modeling Tools

  You can find all NURB modeling tools in the "Tools" menu.


  4.1.  The NURBCircle Tool


  o  Arguments: None.

  o  Operation: The NURBCircle tool creates a full circle NURB curve of
     radius 1 in the XY plane located at the origin.

  o  Note: You can use this circle to easily create a NURB-Torus by
     moving the circle along X and then revolving it. The amount of
     movement determines the radius of the Torus, whereas the radius of
     the circle determines the thickness.


  4.2.  The NURBSphere Tool


  o  Arguments: None.

  o  Operation: The NURBSphere tool creates a half circle NURB curve and
     revolves it about the Y axis thus forming a sphere of radius 1.

  o  Note: The NURB curve is deleted afterwards.


  4.3.  The NURBSphere2 Tool


  o  Arguments: None.

  o  Operation: The NURBSphere tool creates a Cobb-NURBSphere,
     consisting of 6 NURBPatches.

  o  Note: The NURBPatches are of high order (5).




  4.4.  The TrimRect Tool


  o  Arguments: None

  o  Operation: Creates a piecewise linear NURB curve of rectangular
     shape, that fits in the (u,v) parameter space of a NURB patch, for
     use as trim curve.

  o  Note: If the current level is not inside a NURB patch a simple
     rectangular curve will be created instead.


  4.5.  The Closed BSpline Tool


  o  Arguments: Number of control points

  o  Operation: Creates a closed B-Spline curve with numcontrolpoints+3
     control points.

  o  Note: Numcontrolpoints must be atleast 3. The first three control
     points of the new curve will be identical to the last three.
     Additionally, the curve will be marked as closed, so that single
     point edit actions know that they may need to move two points.


  4.6.  The ICurve Tool


  o  Arguments: none

  o  Operation: Creates an ICurve custom object with 4 control points.

  o  Note: See section ``The ICurve Custom Object'' for more information
     about this object.


  4.7.  The Revolve Tool


  o  Arguments: The revolve tool takes a single NURB curve from the
     selection.

  o  Operation: It creates a Revolve custom object, and moves the
     selected curve to it.

  o  Note: See section ``The Revolve Custom Object'' for more
     information regarding the revolve object.


  4.8.  The Extrude Tool


  o  Arguments: The revolve tool takes the selected NURB curves from the
     selection.

  o  Operation: It creates an Extrude custom object, and moves the
     selected curves to it.

  o  Note: See section ``The Extrude Custom Object'' for more
     information regarding the extrude object.




  4.9.  The Sweep Tool


  o  Arguments: The sweep tool takes two NURB curves from the selection.

  o  Operation: It creates a Sweep custom object, and moves the selected
     curves to it.

  o  Note: See section ``The Sweep Custom Object'' for more information
     regarding the sweep object.


  4.10.  The Skin Tool


  o  Arguments: The skin tool takes all NURB curves from the selection.

  o  Operation: It creates a Skin custom object, and moves the selected
     curves to it.

  o  Note: See section ``The Skin Custom Object'' for more information
     regarding the skin object.


  4.11.  The Revert Tool


  o  Arguments: The revert tool takes all NURB curves from the
     selection.

  o  Operation: The direction of the selected NURB curves will be
     reversed.

  o  Note: The direction of a NURBCurve will be shown in the wireframe
     drawing mode using a small arrow at the end of the curve.


  4.12.  The Concat Tool


  o  Arguments: The concat tool takes two NURB curves from the
     selection.

  o  Operation: The selected NURB curves will be concatenated and a new
     third curve will be created.

  o  Note: If one of the curves has weights, the resulting curve will
     have weights too. If the knot type of the first curve is custom, it
     will be converted to NURB, otherwise the knot type of the new curve
     will be that of the first selected curve. The selected NURB curves
     will not be deleted.


  4.13.  The Split to Curves Tool


  o  Arguments: The split to curves tool takes a single NURB patch from
     the selection.

  o  Operation: The selected NURB patch will be split into NURB curves,
     along direction u or v.

  o  Note: The NURB patch is not deleted afterwards.



  4.14.  The Build from Curves Tool


  o  Arguments: The build from curves tool takes a number of NURB curves
     from the selection.

  o  Operation: The selected NURB curves will be parsed, all curves that
     are of equal length or longer (reference is the first selected
     curve) will be used to form a new NURB patch of the following
     dimensions: Width: length of the first selected curve, Height:
     number of used curves. Other parameters (Knot-Type_U, Knots_U etc.)
     are taken from the first curve.

  o  Note: The NURB curves are not deleted afterwards.


  4.15.  The Elevate Tool


  o  Arguments: The elevate tool takes a number of NURB curves from the
     selection.

  o  Operation: The order of the selected NURB curves will be raised by
     the specified value without changing the shape of the curve.

  o  Note: If the knot vector of the curve is not clamped, it will be
     clamped automatically. The knot type of the curve will be changed
     to custom.


  4.16.  The Refine Tool


  o  Arguments: The refine tool takes a number of NURB curves from the
     selection.

  o  Operation: The knot vectors of the selected NURB curves will be
     refined by inserting a knot in the middle of each inner knot
     interval without changing the shape of the curve. The knot type of
     the curve will be changed to custom.


  4.17.  The Clamp Tool


  o  Arguments: The clamp tool takes a number of NURB curves from the
     selection.

  o  Operation: The knot vectors of the selected NURB curves will be
     changed using knot insertion so that the first and the last knot
     have a multiplicity equal to the order of the curve, without
     changing the shape of the curve. The curve will interpolate the
     first and the last control point afterwards.  The knot type of the
     curve will be changed to custom.


  4.18.  The Insert Knot Tool


  o  Arguments: The insert knot tool takes a number of NURB curves from
     the selection.

  o  Operation: The specified knot will be inserted a specified number
     of times into the knot vector of the selected curves.  The knot
     type of the curve will be changed to custom.

  4.19.  The Collapse Tool


  o  Arguments: The collapse tool expects a selected NURB curve and a
     number of selected (tagged) control points.

  o  Operation: The selected control points will be made a single
     multiple point, all points will get the coordinate values of the
     last tagged point.


  4.20.  The Explode Tool


  o  Arguments: The explode tool expects a selected NURB curve and a
     number of selected (tagged) multiple points.

  o  Operation: The points forming the selected multiple points will be
     made to simple points again and may be edited separately.


  5.  Interactive Actions

  The interactive actions should be considered to be one of the worst
  flaws of the current version of The Mops (for several reasons).


  Before invoking any action you should select one or more objects in
  the main window!


  Every action can be started with a keypress (a shortcut) when the
  focus is in a view window or by pressing the associated button in the
  tool window.  Using a shortcut starts that action in the current view
  only, the other views are not affected. Starting an action from the
  tool window will cause the action to be started in all view windows
  simultaneously.


  Note, that most actions (except for camera related) are not available
  in perspective views.


  If an action is in effect for a view, the views title will be changed
  appropriately.


  Generally, an action is performed by clicking into the view to mark a
  point in space or to pick a vertex, then dragging the mouse.

  You may undo the effects of an action using <Ctrl+u>.  Note, that this
  is a single level undo facility only. This means only the effects of a
  single click-drag can be made undone.



  o  Move objects (shortcut: <m>): moves selected object(s) in the
     current input plane.



  o  Rotate objects (shortcut: <r>): rotates the selected object(s)
     around an axis of the local coordinate system. The axis is Z in
     front/trim views, Y in top views and X in side views.


  o  Rotate About (shortcut: <a>): rotates the selected object(s) around
     an axis that has to be specified by a first single click into the
     view. The axis is parallel to Z in front/trim views, Y in top views
     and X in side views.



  o  Scale objects 3D (shortcut: <S>, note the case!): Scale all three
     axes of the selected object(s) by the same factor.



  o  Scale objects 2D (shortcut: <s>): Scale just two axes of the
     selected object(s).



  o  Stretch objects 2D (shortcut: <Alt+s>): This action works much like
     Scale2D but the scalefactor for each axis may be different. Never
     start this action by a click near one of the axes to be changed, as
     this will cause very big scale factors for the other axis. Try it
     first with a centered box by starting from one of the vertices,
     then try it once starting on the X axis.



  o  Scale objects 1D (shortcuts: <x>,<y> and <z>): Scale just one axis
     of the selected object(s).



  o  Scale selected points about a world coordinate system axis
     (shortcuts: <X>,<Y> and <Z>): These actions may just be applied to
     selected points!



  o  Single point editing (moving vertices) (shortcut: <e>): May be
     applied to a single NURB curve, NURB patch or custom object that
     supports single point editing only.  This action works much like
     the move action, but it moves single control points instead of
     objects.  If the NURB curve is marked closed, the action will move
     the control points of the curve, that have the same coordinates
     simultaneously (not breaking up the curve).



  o  Single point weight editing (shortcut: <w>): May be applied to a
     NURB curve, NURB patch or custom object that supports single point
     editing and has weight information only.  Using this action you may
     change the w coordinate of a single control point by dragging the
     mouse left or right.



  o  Single point direct editing (shortcut: <p>): May be applied to a
     NURB curve, NURB patch or custom object that supports single point
     editing only.  After the pick (the selection of a control point), a
     window will pop up, where you may change the coordinates of the
     selected point directly by entering numbers.  Note, that the w
     coordinate setting will be ignored if the selected object does not
     have weight information.




  o  Select Points (shortcut: <t>; tag points): May be applied to a NURB
     curve, NURB patch or custom object that supports single point
     editing only.  After the pick (the selection of a point), the
     selected point will be added to the list of selected points for the
     selected object (selected points will be drawn in dark red).  If
     the selected point is already in that list it will be removed from
     the list instead. Note that the list of selected points will not be
     deleted from the object until a deselect is performed. The list is
     not copied, if the object is copied using the clipboard, however.
     The list is not reconstructed upon undo too!  It is perfectly legal
     to select some points, move them using the move action, then switch
     to single point editing, edit some other or even one of the
     selected points, switch back to the selection action, add other
     points to the selection or delete some points from the selection,
     switch to rotate, rotate the selected points and so on. You may
     also add a bigger number of points to the selection using a click
     and drag operation. All points that lie in the rectangular region
     defined by the click and drag will be added to the selection. The
     click and drag selection may take some time, depending on the size
     of the region!



  o  Insert point (shortcut: <i>): May be applied to NURB curves only.
     A new control point will be inserted in the curve right after the
     picked point. Knot insertion will be performed where applicable.
     Otherwise the new point will be inserted in the middle between the
     selected point and the next point.  Knot insertion will take place
     if The Mops can guess a parameter value that corresponds to the
     selected points.  Knot insertion will move the surrounding control
     points of the new point and calculate its position and new knots so
     that the shape of the curve is not changed by the insertion
     process.

     Due to the fact that the type of the knot vector is not changed,
     the shape of the curve may change slightly even if knot insertion
     was used when the knot type is Bezier, B-Spline or NURB (in this
     case the knots need to be re calculated to conform to the knot type
     thus destroying the new knots calculated by the knot insertion).
     For real knot insertion use the insKn command in the console.



  o  Delete point (shortcut: <d>): May be applied to NURB curves only.
     The selected control point will be deleted from the curve.
     Deleting points from a curve with knot type custom may lead to an
     incorrect knot sequence, currently, please check the new sequence.



  o  FindU (no shortcut): May be applied to NURB curves only.  This
     action may be used to get the corresponding parametric value u from
     a point on a curve. If this action is invoked drawing of control
     points is disabled to remind you to actually pick a point on the
     curve, and not a control point. If this is done, the appropriate
     value for u is calculated and stored in the global variable u, and
     additionally written to the console.  A small cross is drawn at the
     position of the picked point.  Remember to exactly pick a point on
     the curve or nearby otherwise the calculation may fail, and no
     value will be written to the console.

     Unfortunately, you may not break this action with the <Esc> key,
     because then drawing of control points will not be enabled again.



  o  SplitCurve (shortcut <c>): May be applied to NURB curves only.
     Using this action you may split a NURB curve into two new curves at
     a point on the curve that may be specified by picking a point on
     the curve.

     Remember to exactly pick a point on the curve or nearby otherwise
     the calculation of the parametric value for the split will fail.

     Unfortunately, you may not break this action with the <Esc> key,
     because then drawing of control points will not be enabled again.
     The selected curve will be changed by this action, and a new curve
     will be created. It is currently not possible to undo the changes
     of a split.



  To break an action, the <Esc> key may be used.


  6.  The Tcl Scripting Interface

  The scripting interface is mainly a bunch of Tcl procedures and Tcl
  commands that a big part of The Mops uses internally.

  Using Tcl, you could directly modify the code The Mops consists of.
  This is, however, not recommended for good reasons.  So watch out for
  already existing procedures and commands when implementing your own!

  Using procedures and commands not listed in this documentation is
  dangerous too. Implementation and interfaces of that commands may
  change in future versions.

  The scripting interface may be used directly from the console of The
  Mops. You can, of course, also write procedures in your own Tcl script
  files, that may be loaded at any time into The Mops using the console
  and the command "source".

  Note, that most of the listed commands work in background, without
  changing anything to the Mops GUI and Mops view windows, for execution
  speed. If you want your changes to become visible you have to update
  the various parts of the GUI explicitly.


  From scripts it may be necessary to check wether an error occured
  during the execution of a command. All commands return TCL_OK in any
  case so checking their return value avails to nothing, but they set
  the global Tcl variable mops_error to 1 if an error occured. You need
  to set it to zero before and check it after the operation in question
  to see whether the operation performed successfully.



  6.1.  Index of Procedures and Commands



  6.1.1.  Creating Objects

  To create new objects the "crtOb" command can be used.

  o  Synopsis: "crtOb type [args]"

  o  Description: New objects may be created with the command "crtOb",
     type must be one of "ncurve", "npatch", "light", "level",
     "quadric", "custom", "box", "nsphere", "ncircle", "revolve",
     "extrude", "sweep", "cbsp", "concatnc", "instance", "trimrect".
     Depending on the type, further arguments may (or have to) be given,
     other types expect objects to be selected:


  o  "ncurve": NURB curves accept a single integer as length of the new
     curve, the length defaults to 4.

  o  "npatch": NURB patches accept two integers as width and height of
     the new patch, width and height both default to 4.

  o  "level": Levels must be given an additional argument determining
     the type of the new level, this argument may be one of: "union"
     (union), "int" (intersection), "diff" (difference), "prim"
     (primitive), "tloop" (trim loop) and "level" (simple level).

  o  "quadric": Quadrics must be given an additional argument
     determining the type of the new quadric, this argument may be one
     of: "sphere", "disk", "cone", "cylinder", "torus", "hyperboloid"
     and "paraboloid".

  o  "custom": Custom objects must be given an additional argument
     determining the type of the new custom object.  The available types
     depend on what custom objects are currently loaded;
     "getCustomObjects" tells you what objects are loaded.

  o  "ncircle": NURB circles can be given an additional argument, that
     determines the sweeping angle of the circular arc.  The default
     angle is 360.

  o  "revolve" creates a NURBPatch that results from revolving the
     selected NURBCurve.

  o  "extrude" creates a NURBPatch that results from extruding the
     selected NURBCurve.

  o  "sweep" creates a NURBPatch that results from sweeping the first
     selected NURBCurve along the second.  Two additional arguments are
     expected, the number of sections and a boolean (1 true, or 0 false)
     that determines, whether the sections should be rotated to be
     perpendicular to the trajectory.

  o  "concatnc" creates a NURBCurve that results from concatenating the
     two selected NURBCurves.

  o  "instance" creates an instance of the selected object.

  o  "trimrect" creates a rectangular NURBCurve to use as trim curve for
     the NURBPatch that must be the parent object of the current level.

  o  "cbsp": Closed B-Splines accept a single argument, that determines
     the number of points in the closed curve (without the first three
     double control points that are necessary to close a cubic B-
     Spline). "crtOb cbsp 4" creates a closed B-Spline with 4 points but
     the created NURBCurve has 7 control points!

  o  Examples:

  o  "crtOb ncurve 5", creates a NURBCurve of length 5

  o  "crtOb level level", creates a level of type level

  o  "crtOb ncircle 45", creates a NURB-circle-arc of 45 degrees




  6.1.2.  Manipulating the Selection

  These functions are probably the most important ones, because a lot of
  the other commands operate on selected objects only.

  setSelect:

  o  Synopsis: "setSelect [index]"

  o  Description: Use this command to set or clear the current
     selection, index may be an ordered list of indizes, a single index
     or empty.  If no index is given, the current selection will be
     cleared.

  selectNext:

  o  Synopsis: "selectNext"

  o  Description: Given a selected object, selectNext will clear the
     current selection (deselect the currently selected object(s)) and
     select the next object.


  6.1.3.  Clipboard Operations


  copOb - copy object:

  o  Synopsis: "copOb"

  o  Description: Copy the selected object(s) to the object clipboard.

  o  cutOb - cut object:

  cutOb - cut object:

  o  Synopsis: "cutOb"

  o  Description: Move the selected object(s) into the object clipboard.

  pasOb - paste object:

  o  Synopsis: "pasOb"

  o  Description: Copy the selected object(s) from the object clipboard
     to the current level.

  delOb - delete object:

  o  Synopsis: "delOb"

  o  Description: Delete the selected object(s) from the scene.


  6.1.4.  Hierarchy Operations


  goDown:

  o  Synopsis: "goDown index"

  o  Description: Enter the object determined by index. If index is 0
     and the current level is inside some other object (not the root)
     the upper level will be entered instead.


  goUp:

  o  Synopsis: "goUp"

  o  Description: Go one level up in the object hierarchy.

  goTop:

  o  Synopsis: "goTop"

  o  Description: Go to the top level of the object hierarchy.

  swapOb:

  o  Synopsis: "swapOb"

  o  Description: Swap the positions of the two first selected objects
     in the current level.

  reverseOrder:

  o  Synopsis: "reverseOrder"

  o  Description: reverse the order of the selected objects in the
     current level.

  o  Note: This command is implemented in Tcl in the standard mopsrc.



  6.1.5.  Transformations


  movOb - move objects:

  o  Synopsis: "movOb dx dy dz"

  o  Description: Move the selected object(s) by dx in direction of the
     objects X axis, by dy in direction of the objects Y axis and by dz
     in direction of the objects Z axis.

  rotOb - rotate objects:

  o  Synopsis: "rotOb dx dy dz"

  o  Description: Rotate the selected object(s) by dx degrees around the
     objects X axis then by dy degrees around objects Y axis and then by
     dz degrees around the objects Z axis. Note the order of the
     rotations!

  scalOb - scale objects:

  o  Synopsis: "scalOb dx dy dz"

  o  Description: Scale the selected object(s) by a factor of dx in
     direction of the objects X axis, by a factor of dy in direction of
     the objects Y axis and by a factor of dz in direction of the
     objects Z axis.

  o  Note: A scale factor of zero is generally a bad idea and thus will
     be changed to 1.0 silently!

  movSel - move selected points:

  o  Synopsis: "movSel dx dy dz"

  o  Description: Move the selected points by dx in direction of the
     objects X axis, by dy in direction of the objects Y axis and by dz
     in direction of the objects Z axis.

  rotSel - rotate selected points:

  o  Synopsis: "rotSel dx dy dz"

  o  Description: Rotate the selected points by dx degrees around the
     objects X axis then by dy degrees around objects Y axis and then by
     dz degrees around the objects Z axis. Note the order of the
     rotations!

  scalSel - scale selected points:

  o  Synopsis: "scalSel dx dy dz"

  o  Description: Scale the selected points by a factor of dx in
     direction of the objects X axis, by a factor of dy in direction of
     the objects Y axis and by a factor of dz in direction of the
     objects Z axis.

  o  Note: A scale factor of zero is generally a bad idea and thus will
     be changed to 1.0 silently!

  delegateTran - delegate transformations:

  o  Synopsis: "delegateTran"

  o  Description: delegates the transformations associated with the
     selected objects to their childs. The transformations of the
     selected objects will be reset to the default values.


  6.1.6.  Manipulating Shaders


  delShader:

  o  Synopsis: "delShader shadertype"

  o  Description: Delete the shader of type shadertype from the selected
     object(s). Type may be one of "surface", "displacement", "light",
     "imager", "atmosphere", "exterior" or "interior".

  scanAllShaders:

  o  Synopsis: "scanAllShaders"

  o  Description: This command scans all paths given in the environment
     variable SHADERS for compiled shaders (.slc) and builds some lists,
     so that the shaders that have been found are available to the "Set
     new Shader" buttons of the shader property GUI's.


  6.1.7.  Manipulating NURB Curves and Surfaces


  clampNC:

  o  Synopsis: "clampNC"

  o  Description: Clamp the knot vector of the selected NURB curves
     without changing the shape of the curves.  The knot type of the
     clamped curve will be changed to custom and the knots will have o
     equal values at start and end (where o is the order of the curve).
  elevateNC:

  o  Synopsis: "elevateNC n"

  o  Description: Elevate the order of the selected NURB curves without
     changing the shape of the curves by n.  The knot type of the
     elevated curves will be changed to custom.

  getNCPoint:

  o  Synopsis: "getNCPoint index varx vary varz varw"

  o  Description: Get the controlpoint index of the currently selected
     NURB curve and write it's coordinates into the variables varx,
     vary, varz and varw.

  setNCPoint:

  o  Synopsis: "setNCPoint index x y z w"

  o  Description: Set the controlpoint index of the currently selected
     NURB curve to the coordinates x, y, z and w. If the curve has no
     weight information the value in w is simply discarded.

  getNPPoint:

  o  Synopsis: "getNPPoint indexu indexv varx vary varz varw"

  o  Description: Get the controlpoint (indexu, indexv) of the currently
     selected NURB patch and write it's coordinates into the variables
     varx, vary, varz and varw.

  setNPPoint:

  o  Synopsis: "setNPPoint indexu indexv x y z w"

  o  Description: Set the controlpoint (indexu, indexv) of the currently
     selected NURB patch to the coordinates x, y, z and w.  If the patch
     has no weight information the value in w is simply discarded.

  insKn - insert knot:

  o  Synopsis: "insKn u r"

  o  Description: Insert a new knot at the position specified by u (u
     must be in the valid range of the knot vector of the selected
     curves) r times. The valid range is determined by the current knot
     vector U as follows: U[p] <= u <= U[n], where p is the degree
     (order-1) of the curve and n is the length of the curve.  The knot
     type of the curves will always be changed to custom but the shape
     of the curves will not change!

  refineNC:

  o  Synopsis: "refineNC [{u1 u2 un}]"

  o  Description: Refine the knot vector of the selected NURB curve
     without changing the shape of the curve with n new knots {u1 u2
     un}.  Or, if no list of new knots is given, add a new knot into
     each interval in the old knot vector.  The knot type of the refined
     curve will be changed to custom.

  revertNC:

  o  Synopsis: "revertNC"

  o  Description: Revert the direction of the selected NURB curves.

  rpNC - reparam NURB curve:

  o  Synopsis: "rpNC mode"

  o  Description: Changes the knot vector of the selected curves
     according to mode which must be "-rs" - rescale the knot vector to
     the range 0.0, 1.0 without changing the shape of the curves.




  splitNPatch:

  o  Synopsis: "splitNPatch u|v"

  o  Description: splits the selected NURBPatch into NURB curves, along
     u or v.

  buildNPatch:

  o  Synopsis: "buildNPatch"

  o  Description: builds a NURBPatch from the selected NURB curves.



  6.1.8.  Updating the GUI


  redrawAllViews:

  o  Synopsis: "redrawAllViews"

  o  Description: Redraws all currently open views, except for iconified
     views and views where automatic redraw has been turned off.

  updateMopsSelect:

  o  Synopsis: "updateMopsSelect"

  o  Description: Get the names of all objects of the current level and
     display them in the hierarchy listbox.

  updateMopsPList:

  o  Synopsis: "updateMopsPList"

  o  Description: Clear the current property GUI, ask the selected
     object for a list of properties and insert them in the property
     listbox, then rebuild the property GUI.


  6.1.9.  Custom Objects


  lc - load custom:

  o  Synopsis: "lc filename"

  o  Description: Load the custom object from file filename.

  getCustomObjects:


  o  Synopsis: "getCustomObjects varname"

  o  Description: Get a list of all available custom objects and write
     the list in the variable varname.


  6.1.10.  Manipulating Properties


  All properties need to be copied from the Tcl context (the GUI) to the
  C context (the scene storage) and vice versa while The Mops is
  running. There is a pair of two commands for each property that
  manages this. The commands are e.g. named "setSProp" (set shader
  property) and "getSProp" (get shader property), set denotes transport
  from Tcl to C and get denotes transport from C to Tcl.

  They always need a selected object (C context), and a global arrray
  that holds the data of the property in the Tcl context.  Each property
  uses it's own global array, an example for the aforementioned shader
  properties is e.g. surfaceShaderData.


  Example:

  You are welcome to apply a surface shader (try matte) to an object,
  keep object and SurfShader property selected, then type in the
  console:


  "parray surfaceShaderData"

  to see how this special array is organized.

  See how the entry of Ka changes (in the property GUI!), while you
  type:

  "set surfaceShaderData(Ka) 5"

  To apply the changed Ka value back to the C context type:

  "setSProp surface surfaceShaderData".

  Check whether the property has really been updated by clicking on
  SurfShader in the properties listbox.

  Always call the get property procedure before the set property
  procedure to initialize the array with correct values!

  For more details (exact names of commands and arrays) please see the
  documentation of the properties in section ``Mops Objects and
  Properties''.


  6.1.11.  Applying Commands to a Number of Objects

  There are two commands that help to apply arbitrary commands to a
  number of objects, forAll and forAllT.

  forAll:

  o  Synopsis: "forAll recursive command"

  o  Description: The forAll command executes command for all objects
     that have been selected currently, or for every object of the
     current level if nothing has been selected. If recursive is 1 then
     forAll will recurse into every object (if it has childs) prior to
     the execution of command. Note, that a recursive forAll will e.g.
     also descent into NURB patches (if they have trim curves) and apply
     the command to the trim curves, which might not exactly be what you
     want. Use forAllT in this case. Also note, that the recursive form
     of forAll does not descent into the Scene object (selected or not)
     and mess with view objects; to do this you have to enter the Scene
     object explicitly. Warning, the command will not be executed as
     commands that are typed in the console.  The difference is the
     procedure level, commands will not have access to global arrays
     unless e.g. the following construct is in use for the command:
     "uplevel #0 command"

  forAllT:

  o  Synopsis: "forAllT type recursive command"

  o  Description: The forAllT works the same way as forAll, with an
     additional type check. The command will not be executed if the type
     of the current object does not match the argument type.

     Note, that the recursive form of forAll does not descent into the
     Scene object (selected or not) and mess with view objects; to do
     this you have to enter the Scene object explicitly.

     As with forAll, special precautions are needed if command shall be
     able to access global arrays.


  6.1.12.  Scene IO


  newScene:

  o  Synopsis: "newScene"

  o  Description: clears the current scene.

  replaceScene:

  o  Synopsis: "replaceScene filename"

  o  Description: clears the current scene, then loads a new scene from
     filename.

  insertScene:

  o  Synopsis: "insertScene filename"

  o  Description: inserts a scene from filename.

  saveScene:

  o  Synopsis: "saveScene filename"

  o  Description: saves the current scene to filename.


  6.1.13.  Miscellaneous


  getType:

  o  Synopsis: "getType varname"

  o  Description: This command writes the type of the selected object
     into the variable varname. The types are the well known strings
     that are displayed in the hierarchy list box if the objects are not
     named (NURBPatch, NURBCurve, Sphere, etc.).

  getTmpFile:

  o  Synopsis: "getTmpFile tmpdir varname"

  o  Description: This command calculates a name for a temporary file in
     tmpdir and puts the complete name into varname.

  hasChild:

  o  Synopsis: "hasChild"

  o  Description: This command returns 0 if the selected object has no
     child objects, otherwise it returns 1.

  setON:

  o  Synopsis: "setON [newname]"

  o  Description: This command sets the name of the selected object to
     newname. If newname is not present, the current name will be
     cleared from the object.

  saveUndo:

  o  Synopsis: "saveUndo"

  o  Description: This command copies all selected objects to the undo
     buffer.

  undo:

  o  Synopsis: "undo"

  o  Description: This command copies all objects from the undo buffer
     back to the scene.

  convOb:

  o  Synopsis: "convOb"

  o  Description: This command calls the registered converter for the
     selected object.

  forceNot:

  o  Synopsis: "forceNot"

  o  Description: This command calls the registered notification
     callback for the selected object(s) and their parents, or if no
     object is selected for all objects of the scene.


  7.  Miscellaneous



  7.1.  The Mopsrc File

  To customize The Mops the mopsrc file may be used.  This file is
  either pointed to by the environment variable MOPSRC or is determined
  as following, on Unix it is "~/.mopsrc" on the Win32 platforms it is
  "$(HOME)/mopsrc" if the environment variable HOME exists, else
  "$(TEMP)/mopsrc".
  There is an example mopsrc file provided in the distribution (located
  in the src directory) that provides also some helpful little Tcl-
  procedures for various otherwise difficult tasks. These are in short:

  o  "reverseOrder": shuffle the currently selected objects, so that the
     first will be the last and the last will be the first and so on

  o  "el": (eazy light) create a distant lightsource situated at
     (10,10,10) and pointing to (0,0,0)

  o  "deColorTree": descend into the selected objects and change all
     their red color attributes to "-1" so that the objects are in fact
     without color

  o  "squashNCXY": squash all coordinates of all selected NURB curves to
     the XY plane

  o  "appendNCP": append a point to a NURB curve

  Furthermore you may adapt the shortcuts used in the GUI to your
  special needs using the mopsrc file.  Note, that if you do that the
  GUI (the menu entries) will adapt to your changes but certainly not
  this documentation and the tutorials!

  Note also, that mopsrc carries also preference settings saved by the
  main menu entry "File/Save Prefs", in a way that the saved settings
  override the manually made changes in the mopsrc file.


  7.2.  The Mfio (3DMF Import/Export) Plugin

  This plugin is based on the free 3DMF parser by Apple (Duet
  Development Corp.). I tried to use this code to write 3DMF's as the
  basic file format for The Mops, but I failed for several reasons.  I
  abandoned the idea to have a standard file format as scene storage and
  recycled my code to this plugin.

  Unfortunately, not every feature and every attribute The Mops supports
  can be expressed in standard 3DMF. This means, when
  exporting/importing Mops scenes to/from 3DMF you will most possibly
  lose information.  On the other hand, the import filter does not
  support all possible 3DMF objects and attributes, currently.  You will
  not be warned if the import filter encounters such objects, they will
  be silently ignored.

  Note, that the code of the 3DMF parser is not very stable, another
  reason to put in in a plugin.  It is for instance not possible to
  compile it with optimization (breaks the compiler (SGI-cc), or breaks
  the code (gcc)).  You should try to compile it once with -Wall...

  Anyway, I (hopefully) fixed reading of ASCII 3DMFs for the MIPS and
  SPARC platform (it did just run on Intel in the first place).  But it
  is currently not possible to read binary 3DMFs across different byte-
  order platforms. If you want to change this, you could look for (and
  debug) the handling of the MF3DBinaryFilePosition, which seems to be
  broken in the swapped case.

  What objects may be currently exported?


  o  NURBCurves

  o  NURBPatches with their first trim loop. All other loops are
     ignored!


  o  Boxes

  o  Spheres, but the parameters "ZMin", "ZMax" and "ThetaMax" will be
     ignored.

  o  Disks, but the parameter "ThetaMax" will be ignored.

  o  Cylinders, but the parameter "ThetaMax" will be ignored.

  o  Cones, but the parameter "ThetaMax" will be ignored.

  o  Tori, but the parameters "PhiMin", "PhiMax" and "ThetaMax" will be
     ignored.

  o  Objects that provide otherwise exportable objects.

  All other objects, views and lights will be ignored.

  Import is currently not working very well.  What objects may be
  currently imported?


  o  NURBCurves

  o  NURBPatches

  o  Boxes

  Not all possible types of transformations are supported by the import
  filter, missing transforms are e.g. quaternions and rotate around
  point.



  7.3.  Limitations of The Mops

  The Mops imposes some special limitations (when compared with other
  professional expensive modelers) that helped to keep the code a bit
  simpler, but limit you in a way that the number of possible different
  routes (modeling steps) to achieve a certain shape is smaller.  This,
  of course, does not limit the number of shapes you can model.  You
  just have to think a bit more before modeling, or, the number of
  modeling steps may be a bit higher to achieve the same results.

  Now, what are these limitiations?

  First, modeling is only possible in parallel views. And the input
  plane is always restricted to the viewing plane of the view you are
  modeling in.

  In other words, in a view of type Front you move objects in the
  direction of the XY plane and rotate about Z _and nothing else_.  If
  you want to move about Z, choose a different type of view.  These
  limitations do not apply if you move your objects using the
  Transformations property, of course.

  Second, certain tools to create more complex shapes, like the revolve
  tool, operate in a similar limited fashion.  The revolve tool, for
  instance, does only revolve curves that lie in the XY plane about the
  Y axis.  Note, that all limitations of this kind have been choosen to
  let you happily model your lower level primitives (curves) in a Front
  view (the extrude tool extrudes curves that lie in the XY plane along
  the Z axis etc. pp.). Therefore, your major view type for creation of
  simple objects should be Front.  For a complete reference of the
  limitations of these tools refer to the according sections in the
  documentation.
  7.4.  Using The Mops compiled without libslcargs

  If The Mops has been compiled without libslcargs certain functions of
  The Mops will get crippled. This section should help you to get around
  some limitations.


  Since no library is available for parsing compiled shaders, it is not
  possible to assign shaders to objects using the "Set new Shader"
  buttons in the shader property GUI's.  It is still possible to assign
  shaders to objects, but you have to use the property clipboard
  instead.

  This implies that there are objects in your scene that already have
  shaders assigned so that you can copy the shaders from them.

  There are two Mops scene files available for exactly that purpose.
  They contain a number of objects each with one of the most basic
  shaders assigned to. If you get to the point to assign shaders to your
  objects, insert one of the shader scenes, then copy the shader to your
  object.

  The scene "stdshd.mop" contains all shaders from the shaders directory
  of BMRT, this are all shaders required by the RenderMan standard.  The
  scene "exampleshd.mop" contains all shaders from the example directory
  of BMRT. This should get you going for your first steps.

  You can also create your own scene files with the help of the Tcl
  script in the file "crtshdscn.tcl" (create shader scene).

  How do you use that script?


  1. You need a Mops that has access to libslcargs.

  2. Adapt your environment variable SHADERS, to point to the shaders
     you want in your new scene. You do not have to leave The Mops to do
     this, simply type "set env(SHADERS) <newshaderpath(s)>" in the
     console; then let The Mops scan for shaders using "scanAllShaders".

  3. Load the file crtshdscn.tcl in the interpreter using "load
     <path>/crtshdscn.tcl".

  4. Create a level and enter it now.

  5. Type "crtshdscn". A lot of spheres and lights should be created now
     automagically.

  6. Save the scene. Thats all.


  7.5.  Increasing drawing speed


  There are numerous ways to increase drawing speed:

  o  Hide objects or complete object hierarchies using "Hide" and "Show"
     in the "Tools" menu.

  o  Disable drawing of curves/surfaces, if you can.

  o  If you need to see curves/surfaces, try to increase the (GLU)
     sampling tolerance of the objects.

  o  For NURB patches you can also switch their drawing mode from fill
     to outline polygon and outline patch (outline patch not available
     with Mesa!) to increase drawing speed.

  o  Switch the primary modeling view to draw just the selected
     object(s).

  o  Iconify views you do not need, they won't be redrawn then.

  o  Switch off automatic redrawing of slow redrawing views, and control
     their redraw by pressing Ctrl+d manually.

  o  A last hint: rgl is generally much faster than The Mops in
     previewing complex NURB surfaces.


  7.6.  How can you help?

  You can do a lot of different things, that would make me really happy
  and help me to actually get The Mops to V0.42.


  1. Implement custom objects. This will be discussed a bit more later
     on.

  2. Donate source to improve several critical parts of the modeler, a
     better picking code or an own (better than the current Mesa-GLU)
     NURB tesselation would be something I'd really appreciate.  More
     ideas: better (more exact) lighting simulation (is this possible to
     do with OpenGL at all?), CSG-preview with OpenGL, Import of RIB's
     using the Affine Toolkit, support for subdivision surfaces.

  3. Debugging the MF3D code, which is currently not working well with
     binary files from different byte-order platforms would help too.

  4. Donate money by registering ShellyLib.  ShellyLibs source will be
     converted to a first high level custom object that creates objects
     of type seashell for The MopsV0.42. This object, however, will be
     Shareware!

  You can help by implementing more different high level objects like
  Trees, Landscape, Sky, Text, whatever you can think of.  Note, that
  the license of The Mops does not prevent you from implementing your
  object as Shareware, Freeware or even full Commercial ware.

  But please do me a favour and do not implement objects like simple
  triangles or polygons. This would be something that really is not
  intended by me, and it would surely show the limits of the current
  design of all code operating on the scene structure.  Mops objects
  should be high-level objects!

  Reading the last paragraph you might think that I am a bit biased
  against polygonal models. I am not. Polygonal models are the only way
  to preview complex geometry using hardware accellerated graphics, for
  the moment. But even while RenderMan supports rendering of polygonal
  models their use as a primitive is not recommended for good reasons.
  In other words, use polygonal models in the modeler as quick
  representation of your higher level objects, but please, if you are
  going to actually render something, do not use that polygonal
  representation.  If you want to go a complete polygonal way instead,
  voila, there are good modelers out there.


  7.7.  Acknowledgements

  First of all, I would like to express a big "Thank you!" to Bernd
  (Pink) Sieker. He is the first real Mops user and beta tester, who
  urged me during the last year via E-Mail and on IRC to fix this
  particular bug, add some essential features, move the lights again
  etc. pp. in countless iterations.  Pink, without your help I surely
  would not be that far, thanks!

  Furthermore, I would like to thank the following people:


  o  Larry Gritz: BMRT

  o  Benjamin Bederson, Brian Paul et. al.: The Togl Widget

  o  Jeffrey Hobbs: tkMegaWidget set

  o  Jan Nijtmans: Tcl/Tk PlusPatches, tcl2c, Wrap

  o  Thomas E. Burge: The Affine Toolkit

  o  Apple, Duet Development Corp.: 3DMF parser

  o  M. J. Kilgard: GLUT

  o  L. Piegl and W. Tiller: The NURBS Book

  o  W.T. Hewitt and D. Yipp: The NURBS Procedure Library

  o  Philippe Lavoie: The NURBS++ Library

  o  Everyone involved in the development of Tcl/Tk, OpenGL, The
     RenderMan Interface

  OpenGL (R) is a registered trademark of Silicon Graphics, Inc.

  The RenderMan (R) Interface Procedures and Protocol are: Copyright
  1988, 1989, Pixar All Rights Reserved

  RenderMan (R) is a registered trademark of Pixar

  The Affine Libraries and Tools are Copyright (c) 1995, 1996, 1997,
  1998 Thomas E. Burge All rights reserved.

  Affine (R) is a registered trademark of Thomas E. Burge.


  8.  Index



  o  3DMF: ``Mfio, 3DMF import export plugin''

  A

  o  Action: ``interactive actions''

  o  Apply: ``apply property GUI''

  o  ApplyMode: ``seashell custom object control''

  o  Area Light: ``creation of''

  o  Arguments: ``property GUI''

  o  Attributes: ``RenderMan/BMRT attributes property''

  o  AutoResize: ``preference setting''


  o  AverageColor: ``RenderMan/BMRT attribute''

  B

  o  Bevel: ``using bevels''

  o  BevelRadius, BevelType: ``extrude attribute''

  o  BorderWidth: ``preference setting''

  o  Bound: ``RenderMan/BMRT attribute''

  o  BoundCoord: ``RenderMan/BMRT attribute''

  o  Box: ``main menu entry'', ``object and properties''

  o  Build: ``build from curves tool''

  o  buildNPatch: ``scripting interface command''

  C

  o  CacheShell: ``seashell custom object control''

  o  Camera: ``view property''

  o  CastShadows: ``RenderMan/BMRT attribute''

  o  CheckLights: ``preference setting''

  o  Circle: ``NURB circle tool''

  o  clampNC: ``scripting interface command'', ``clamp tool''

  o  Closed: ``sphere attribute'', ``cone attribute'', ``cylinder
     attribute'', ``torus attribute'', ``paraboloid attribute'',
     ``hyperboloid attribute'', ``NURBCurve attribute'', ``ICurve
     attribute''

  o  Closed BSpline: ``closed BSpline tool''

  o  Collapse: ``Collapse tool''

  o  Color: ``RenderMan/BMRT attribute''

  o  copOb: ``scripting interface command''

  o  Copy: ``main menu entry''

  o  Copy Property: ``main menu entry'', ``copying properties''

  o  Concat: ``Concat tool''

  o  Cone: ``main menu entry'', ``object and properties''

  o  Console: ``what is''

  o  Convert: ``main menu entry''

  o  convOb: ``scripting interface command''

  o  crtOb: ``scripting interface command''

  o  Custom: ``light type''


  o  Custom Object: ``what is''

  o  Cut: ``main menu entry''

  o  cutOb: ``scripting interface command''

  o  Cylinder: ``main menu entry'', ``object and properties''

  D

  o  delegateTran: ``scripting interface command''

  o  Delete: ``main menu entry'', ``delete points''

  o  delOb: ``scripting interface command''

  o  delShader: ``scripting interface command''

  o  Difference: ``main menu entry'', ``object and properties''

  o  Direct Editing: ``direct editing of points''

  o  Disk: ``main menu entry'', ``object and properties''

  o  Display: ``NURBPatch attribute'', ``seashell custom object
     control''

  o  Distant: ``light type''

  o  DrawWire, DrawSurf, DrawGrid, DrawSel: ``view attribute''

  E

  o  Edit: ``single point editing''

  o  ElemSize: ``RenderMan/BMRT attribute''

  o  elevateNC: ``scripting interface command'', ``elevate tool''

  o  EmissionColor: ``RenderMan/BMRT attribute''

  o  ExpGain, ExpGamma: ``RenderMan interface option''

  o  Explode: ``Explode tool''

  o  Export RIB: ``main menu entry''

  o  Extrude: ``object and properties'', ``Extrude tool''

  F

  o  FilterFunc: ``RenderMan interface option''

  o  FilterWidth: ``RenderMan interface option''

  o  FindU: ``view action''

  o  forAll, forAllT: ``scripting interface command''

  o  forceNot: ``scripting interface command''

  o  From: ``camera property''

  G


  o  getCustomObjects: ``scripting interface command''

  o  getNCPoint: ``scripting interface command''

  o  getNPPoint: ``scripting interface command''

  o  getTmpFile: ``scripting interface command''

  o  getType: ``scripting interface command''

  o  Gimbal Lock: ``avoiding''

  o  goDown: ``scripting interface command''

  o  goTop: ``scripting interface command''

  o  goUp: ``scripting interface command''

  H

  o  Handlesize: ``NURBCurve attribute''

  o  hasChild: ``scripting interface command''

  o  HasUpperCap, HasLowerCap: ``revolve attribute'', ``extrude
     attribute''

  o  Has-Weights: ``NURBCurve attribute''

  o  Height: ``RenderMan interface option'', ``view attribute'', ``box
     attribute'', ``cone attribute'', ``NURBPatch attribute'', ``extrude
     attribute''

  o  Hide: ``main menu entry''

  o  Hierarchy: ``hierarchy listbox''

  o  Hole: ``using holes''

  o  Hyperboloid: ``main menu entry'', ``object and properties''

  I

  o  ICurve: ``object and properties'', ``ICurve tool''

  o  Image: ``preference setting''

  o  ImportShell: ``seashell custom object control''

  o  Insert: ``insert points''

  o  insKn: ``scripting interface command''

  o  Insert Knot: ``insert knot tool''

  o  insertScene: ``scripting interface command''

  o  Instance: ``object and properties''

  o  Interpolation: ``RenderMan/BMRT attribute'', ``interpolating
     curve'', ``sweep attribute'', ``skin attribute''

  o  Intersection: ``main menu entry'', ``object and properties''

  o  Inverse Copy Prop: ``main menu entry''

  o  IParam: ``ICurve attribute''

  o  IsOn: ``light attribute''

  J

  o

  K

  o  Knots: ``NURBCurve attribute''

  o  Knot-Type: ``NURBCurve attribute''

  o  Knot-Type_U: ``skin attribute''

  L

  o  LazyNotify: ``preference setting''

  o  lc: ``scripting interface command''

  o  Length: ``box attribute'', ``NURBCurve attribute'', ``ICurve
     attribute''

  o  Level: ``main menu entry'', ``object and properties''

  o  Light: ``main menu entry'', ``object and properties''

  o  Lighting: ``view attribute''

  o  Load Custom: ``main menu entry''

  o  LowerBevel: ``extrude attribute''

  M

  o  MajorRad: ``torus attribute''

  o  MaxRayLevel: ``RenderMan interface option''

  o  Mfio: ``3DMF import export plugin''

  o  MinorRad: ``torus attribute''

  o  MinSamples, MaxSamples: ``RenderMan interface option''

  o  MinSize: ``RenderMan/BMRT attribute''

  o  Mode: ``ICurve attribute''

  o  mopsrc: ``The Mopsrc File''

  o  Move: ``view action'', ``move object''

  o  movOb, movSel: ``scripting interface command''

  N

  o  Name: ``main menu entry''

  o  New: ``main menu entry''

  o  newScene: ``scripting interface command''


  o  NURBCircle: ``NURB circle tool''

  o  NURBCurve: ``main menu entry'', ``object and properties''

  o  NURBPatch: ``main menu entry'', ``object and properties''

  o  NURBSphere: ``NURB sphere tool''

  O

  o  OI: ``tag type''

  o  OnError: ``preference setting''

  o  Order: ``NURBCurve attribute'', ``NURBPatch attribute'', ``ICurve
     attribute''

  o  Order_U: ``skin attribute''

  P

  o  P1, P2: ``hyperboloid attribute''

  o  Paraboloid: ``main menu entry'', ``object and properties''

  o  pasOb: ``scripting interface command''

  o  Paste: ``main menu entry''

  o  Paste Property: ``main menu entry''

  o  PatchSamples: ``RenderMan interface option''

  o  PatchSize: ``RenderMan/BMRT attribute''

  o  PhiMin, PhiMax: ``torus attribute''

  o  PickEpsilon: ``preference setting''

  o  Point: ``light type''

  o  Preferences: ``preferences property''

  o  Properties: ``properties listbox'', ``property GUI''

  o  Primitive: ``main menu entry'', ``object and properties''

  o  PRManSpec: ``RenderMan interface option''

  Q

  o  QRender: ``preference setting''

  o  Quat: ``transformation property''

  o  Quick Render: ``view menu entry''

  R

  o  Radius: ``sphere attribute'', ``disk attribute'', ``cone
     attribute'', ``cylinder attribute''

  o  RadSteps: ``RenderMan interface option''

  o  Redraw: ``view menu entry'', ``speeding up'', ``view attribute''

  o  redrawAllViews: ``scripting interface command''

  o  Reference Counter: ``Instance Objects''

  o  refineNC: ``scripting interface command'', ``refine tool''

  o  Render: ``view menu entry'', ``preference setting''

  o  Replace: ``main menu entry''

  o  replaceScene: ``scripting interface command''

  o  Reset: ``reset property GUI''

  o  ResInstances: ``preference setting''

  o  reverseOrder: ``scripting interface command''

  o  Revert: ``Revert tool''

  o  revertNC: ``scripting interface command''

  o  Revolve: ``object and properties'', ``Revolve tool''

  o  RGBA_ONE, RGBA_MIN, RGBA_MAX, RGBA_Dither: ``RenderMan interface
     option''

  o  RiAttr: ``tag type''

  o  RIBFile: ``preference setting''

  o  RiOptions: ``RenderMan interface options property''

  o  RIStandard: ``preference setting''

  o  RMax: ``paraboloid attribute''

  o  Roll: ``camera property''

  o  Rotate: ``view action'', ``sweep attribute'', ``rotate object''

  o  Rotation: ``transformation property'', ``using the transformations
     property''

  o  rotOb, rotSel: ``scripting interface command''

  o  rpNC: ``scripting interface command''

  S

  o  Samples: ``light attribute''

  o  Samples_X: ``RenderMan interface option''

  o  Samples_Y: ``RenderMan interface option''

  o  Save: ``main menu entry''

  o  Save as: ``main menu entry''

  o  Save Prefs: ``main menu entry''

  o  saveScene: ``scripting interface command''

  o  SaveViews: ``preference setting''

  o  Scale: ``transformation property'', ``scale object''

  o  scalOb, scalSel: ``scripting interface command''

  o  scanAllShaders: ``scripting interface command''

  o  Scene: ``object and properties''

  o  Sections: ``sweep attribute''

  o  Select: ``select objects'', ``select points''

  o  selectNext: ``scripting interface command''

  o  setON: ``scripting interface command''

  o  setNCPoint: ``scripting interface command''

  o  setNPPoint: ``scripting interface command''

  o  setSelect: ``scripting interface command''

  o  Shader: ``property''

  o  Shaders: ``preference setting''

  o  ShadingRate: ``RenderMan/BMRT attribute''

  o  ShadowBias: ``RenderMan interface option''

  o  Shadows: ``light attribute''

  o  Shell: ``object and properties''

  o  Show: ``main menu entry''

  o  Skin: ``object and properties'', ``Skin tool''

  o  SLMode: ``seashell custom object control''

  o  SLNodule, SLResolution, SLShape: ``seashell custom object
     property''

  o  SpecularColor: ``RenderMan/BMRT attribute''

  o  Sphere: ``main menu entry'', ``object and properties'', ``NURB
     sphere tool''

  o  Split: ``split to curves tool'',

  o  SplitCurve: ``view action''

  o  splitNPatch: ``scripting interface command''

  o  Spot: ``light type''

  o  Stretch: ``stretch object''

  o  Swap: ``main menu entry''

  o  swapOb: ``scripting interface command''

  o  Sweep: ``object and properties'', ``Sweep tool''

  T

  o  Tags: ``property''

  o  ThetaMax: ``sphere attribute'', ``disk attribute'', ``cone
     attribute'', ``cylinder attribute'', ``torus attribute'',
     ``paraboloid attribute'', ``hyperboloid attribute'', ``revolve
     attribute''

  o  To: ``camera property''

  o  Tolerance: ``NURBCurve attribute''

  o  Tool: ``tool box window''

  o  Torus: ``main menu entry'', ``object and properties''

  o  Transformations: ``transformations property''

  o  Translation: ``transformation property''

  o  Trim Curve: ``defining''

  o  TrimLoop: ``main menu entry'', ``object and properties''

  o  TrimRect: ``TrimRect tool''

  o  TrueDisp: ``RenderMan/BMRT attribute''

  o  Type: ``view attribute''

  U

  o  Undo: ``main menu entry'', ``undoing rotations using the
     transformations property''

  o  Union: ``main menu entry'', ``object and properties''

  o  updateMopsPList: ``scripting interface command''

  o  updateMopsSelect: ``scripting interface command''

  o  UpdateTrafos: ``preference setting''

  o  UpperBevel: ``extrude attribute''

  o  Up Vector: ``camera property''

  V

  o  Variance: ``RenderMan interface option''

  o  View: ``main menu entry'', ``object and properties''

  o  ViewAttrib: ``view property''

  W

  o  WatchDisp, WatchSurf: ``seashell custom object control''

  o  Weight: ``single point weight editing''

  o  W-Handles: ``NURBCurve attribute''

  o  Width: ``RenderMan interface option'', ``view attribute'', ``box
     attribute'', ``NURBPatch attribute''


  X

  o

  Y

  o

  Z

  o  ZMin, ZMax: ``sphere attribute'', ``disk attribute'', ``cylinder
     attribute'', ``paraboloid attribute''

  o  Zonal: ``RenderMan/BMRT attribute''

  o  Zoom: ``camera property'', ``view action''

  o  Zoom to Object: ``view action''
















































