******************************************************************************** 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 www.neolithicsphere.com/geodesica/index.htm WARNING: THIS IS A DEVELOPMENT SNAPSHOT OF VERSION 1. 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. OUTLINE 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: OctaHull | | |---Duplex_A | | | |---Primal | | | |---Dual | |---Duplex_B | | | |---Primal | | | |---Dual | |---Duplex_C | | | |---Primal | | | |---Dual | |---Duplex_D | |---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. TARGETS 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. GENERATING THE DUAL 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. SWAPPING DUAL 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. MODIFYING/CREATING AN OCTAHULL 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. NAVIGATOR WINDOW 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. USING ATTRIBUTE WIDGETS IN THE OBJECT TREE 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. WMOF NATIVE SAVE/LOAD 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. HOW TO USE LOCATE ELEMENT IN THE LOG 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. ISOLATE SETS 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 changed. MOUSE Left Button: Pick Middle Button: Tumble PROBLEMS 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. MODELLING TOOLS 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.
IMPLEMENTATION NOTES FOR THIS VERSION 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.