Geodesica-SFX-OpenGL-x64 1-0-0-19-dev
Code name: Elstob
Compiled on Nov 20 2020 at 17:34:03
Copyright (c) Nicholas Shea 2000-2020
Most features are unimplemented in this version.
This snapshot is to test the parametric controller,
the undo mechanism and native file Save and Open.
The parametric controller is currently only intended
for surfaces of revolution about the Y axis.

Almost all the previous features of Geodesica-SFX are unimplemented in this
development snapshot. This version is to test the Parametric Controller, the
undo mechanism and native file Save and Open.

Be aware that the Parametric Controller is currently only intended for surfaces
of revolution about the Y axis. The Geodesic Controller is unimplemented.

Tested on Windows 10 1093 64 bit.

I wanted to extend the spaceframe mechanism for the next release to include more
than two targets. Targets are now called "Duplexes". A Duplex consists of a
Primal manifold and an optional Dual manifold. You can have up to four
Duplexes in a single Group. A group of four Duplexes is called an "OctaHull".
An OctaHull may contain up to four Primal and four Dual manifolds:

            |     |
            |     |---Primal
            |     |
            |     |---Dual
            |     |
            |     |---Primal
            |     |
            |     |---Dual
            |     |
            |     |---Primal
            |     |
            |     |---Dual
This schema allows up to eight manifolds that may be inter-connected using
spaceframe members. At the current time I cannot foresee a need for any more,
as it would only increase complexity without adding structural integrity.
Indeed, I am not aware of any dome that uses more than three inter-connected
manifolds. However, the schema could be extended to support any number of
Duplexes to create radiolaria type structures of manifolds within manifolds,
all connected by radial spaceframe members.
NOTE: The Objects tree now reflects the scenegraph data, so only Duplexes
created via the Controller appear in the tree.

To target a Duplex, click on 'Primal' or 'Dual' button in the Objects tree.
A bounding box appears around the corresponding manifold in the OpenGL view.
Alternatively, target a Duplex using the Object Select tool (the arrow cursor
with the small circle at the tip). Re-clicking a Duplex toggles the target.

The menu item 'Generate Dual' has been removed from the 'Modify Menu'. Instead,
use the check button 'Generate Dual' on the corresponding Primal manifold in the
Objects tree. The Dual widgets will then activate. Uncheck 'Generate Dual' to
destroy the Dual and deactivate the Dual widgets.

The 'Swap Dual' feature works as follows:
  1. Click 'Make Dual' to make the Dual.
  2. Click 'Swap Dual' to the make the Dual geometry Primal.
  3. You may now turn off 'Make Dual' and model the Dual geometry as if it
     were the Primal.
  4. For each 'Swap Dual' operation, any new Primal truncation floors/roofs
     are made into trifans so that the new Dual forms correctly around the
     truncation perimiters.
  5. Be sure the Primal is visible and is the target before editing.

When updating a Duplex, you must first select it. Specify the Duplex node you
want to use from the pop-up at the top of the Parametric Controller, then
click 'Update Selected' at the bottom of the controller. The button 'Create New'
generates a new OctaHull with the manifold attached to 'Duplex_A'.

NOTE: Selecting a Duplex updates the Parametric Controller with the model's
values, so be sure to select a Duplex _before_ entering new parameters,
otherwise your entries will be over-written with the previous values. 

Be sure to read 'Navigator Window Version 1.0'. A link to this document is
on the Geodesica-SFX home page.

NOTE: When the cursor enters the OpenGL view, the idle callback for redraw is
initiated. Conversely, when the cursor leaves the OpenGL view, the idle callback
is terminated. The arrow and function keys which change camera location/orbit,
only work when the view is idling (i.e., when the mouse is within the view).
This has an adverse side effect when editing text in parametric input fields:
if the mouse enters the OpenGL view, the focus is lost from the input field,
thus copying, cutting and pasting text using 'Control-C', 'Control-X' and
'Control-V' will not work. For this reason it is best to Navigate around the
scene using the Navigator window rather than the keyboard.

Instead of using an Attributes window (as in previous versions), attributes are
now applied using widgets in the Objects tree. Attributes are only applied to
selected elements. For example, select a face by clicking it in the OpenGL
view (the face turns red), then change its colour by clicking the FACE colour
well in the Object tree. To change the wireframe state of the entire manifold
use the 'SELECT ALL' toggle before clicking the wireframe radio button. You can
apply FACE attributes to individual facets, but EDGE and VERTEX attributes are
currently only applied to the entire manifold.

You may Save/Load native WMOF models created with this version. The model format
undergoes significant changes with each snapshot so do not attempt to load WMOF
models saved with previous versions: they will not open and may cause the app
to crash.

Even subdivisions with a moderate frequency can take a long time to load with
older Hardware. Currently, there is no progress feedback when loading a model,
only status text, so please be patient.

The distribution comes with a single WMOF file:

 1. Thing.wmof
    This was created using the modelling tools, swapping the Primal and Dual,
    and was to test stability.

 1. Click 'Log Array' in the Tree to log the UNIDs. This is found via a
    menu button beside the element type, VERTEX, EDGE, FACE, etcetera.
    The UNIDs of each element are now listed in the Log.
 2. Select a UNID in the Log; copy the UNID ('Control-C') and paste it
    ('Control-V') into the 'Search' field of the Log.
 3. Press the Return key or click the 'Locate' button.
 4. The element is displayed in the center of view and the Pick Target is
    set to the Parent manifold; all other OctaHulls/Duplexes are hidden
    and the Tree visibility switches are updated.
 5. For each element type, a green marker is displayed:
     a) On a found vertex.
     b) In the middle of a found edge.
     c) At the centroid/apex of a found face.  

These have yet to be implemented as in Geodesica-SFX-0-9-9-4. Currently only
unique edges are printed to the log, but without set grouping, colouring or
labelling. Click the 'ISOLATOR' button in the tree.

NOTE: the Unit Radius Scale Factor is currently set to 10 FEET and cannot be

Left Button: Pick
Middle Button: Tumble

Non-perspective camera frustums do not yet load correctly. This requires
expanding the Navigator window to its maximum extent and pressing the 'Reset'
button on the Frustum tab.

Before using the modelling tools on a manifold, ensure that you have selected a
pick target using the 'Primal' or 'Dual' buttons on the Tree.

Beware of creating "islands" such as face 'S' in the image below. If you try and
delete vertices on such a face, chances are the program will crash or cease to
respond. Checks have been put in place to ensure this condition is not reached,
but there are ways round it, so if you do reach it, please use the Undo
mechanism or 'Make Edge' to rectify the situation.



Geodesica-SFX does not use a single TriMesh for an entire manifold because it
targets individual cells within the lattice, and a cell is not necessarily a
simplex. E.g., Dual cells are commonly hexagons - but must be made into Trifans
because GL_POLYGON is no longer supported by OpenGL. However the underlying
geometry is still a single quad-edge manifold. Each cell is an individual
TriMesh object with its own texture and material state. This was one of the
prices to be paid when removing the legacy OpenGL functions, as each TriMesh
must be assigned to the graphics card using vertex buffers rather than rendered
on the fly using legacy Immediate Mode.

There are good reasons for using individual Trimesh cells but they are too
involved to describe here.