Geo STUDIO 3.3 Release Notes
Application & Geo format VERSION have increased to 3300 (3.3)
The GenPrimSets plugin was not working properly as a Pre or Post execution-step plugin (i.e. automatically being called before or after an import or export plugin was called). This has been fixed.
Added a new geoConsole.h file to the SDK (also accessable through GeoScript - Geo's Lua-based embedded Scripting language). The console allowes plugins and scripts to create and manage the application console. This is usefull when developing a Geo plugin
Revamped the GeoScript code editor within Geo. Added line numbers and a toolbar among other improvements and fixes.

Added a new geoTraverse and geoTraverseMultiFunc to GeoScript. The geoTraverseMultiFunc allows scripts to traverse the scene graph and execute user lua functions on all nodes of an exact type or nodes of that type and all types derived from it. The function also allows users to provide other functions that will be called under specific traversal criteria - such as prior to visiting a node's children and after the child list traversal (i.e. push and pop level).
Added a new Scripts folder which contains (or will contain) many useful (functionality-wise) Geo scripts. These files have a ".gs" file extension buy convention, but a ".lua" extension is also valid. If a particular script doesn't have a corresponding ".gsd" file - it indicates that the script has more educational, than functional, value.
Geo will attempt to load all the scripts in this folder at startup and add them to the Scripts menu in the GUI. If Geo finds a similarily named ".gsd" file (a GeoScript Definition file). It will use that information to put the script in the appropriate menu and toolbar. This effectively allows you to make and use GeoScript "plugins". Here's what the make polygon.gsd file looks like...

The simple definition file provides a useful tooltip, menu description and intended location for the script "plugin" within the application GUI. In this case the button will be available in the "Create" toolbar (and corresponding menubar). If no TYPE token is found the script will be added to the scripts toolbar and menu. The definition also specifies an image file (which currently must be in Gif format) to display on the toolbar button. If none is provided Geo will provide a default image.
Added a new GSD File Format Description.pdf document in the Scripts folder that fully documents the .gsd file format and how it's meta-data is used by Geo to integrated GeoScripts into the application.
GeoScripts can also be used in the import/export Plugin pre & post execution list.
Added the following new (or improved) GeoScripts..
Renumber Group-Type Node Names.gs and Renumber Poly-Type Node Names.gs. These scripts rename Group and Group-derived classes) and Poly (& poly-derived classes) sequentially so Groups are renamed g1, g2, l3 etc. and Polys are renamed p1, m2, lp3 etc. Geo doesnt enforce unique node names but some other formats do. This is am easy way to fix this before export. The scripts also reset the internal NextId values so that subsequent created nodes will be auto-named correctly.
Select DWB Underlay Gomertry.gs and Select DWB Overlay Geomertry.gs. DWB (Designer's Workbench) These scripts select geometry (in .dwb format) that was intended to be written into the underlay or overlay planes. This was done using special underlay/overlay color palettes. Using these scripts users can re-organize their databases to simulate this behavior. The first step is identifying the geometry!
Select RenderGroups with Normal Maps - this finds RenderGroups that are referencing a ExtendedMaterial in the material palette that has defined a Normal Map. The script can easily be modified to query the new
Extended Materials in any number of ways as the geoMaterialBundle and geoExtendedMat classes have now been exposed to GeoScript.
Added Interactive Script Plugin Template.gs - this is a bare bones script that shows how to configure and setup a script plugin that looks for and interacts with the 3D scene.
Added a Concatinate Transform Lists.gs GeoScript that searches for Group nodes with transform lists and builds a concatinated matrix instead.
Added a number of specialized LightPt selection scripts...
⦁ Select Beacon LightPts.gs
⦁ Select Halo LightPts.gs
⦁ Select Lights by LightGroup.gs
⦁ Select All Linear LightPts.gs
⦁ Select No-Attenuation LightPts.gs
⦁ Select Rabbit LightPts.gs
⦁ Select LightPts by Pixel Size.gs
⦁ Select All Bi-Directional LightPts.gs
Added a number of other useful/interesting scripts - all of which can be modified and extended in the Geo Script Editor...
⦁ Change Extended Material Property.gs
⦁ Traverse Selection List.gs
The GeoScript Reference Guide document has been revised and updated with all the new exposed functionality
Geo now uses standard windows dialogs rather than the windowing library's built-in variants. The Message, Alert, Ask, Choice and Input dialogs have changed. See the Ask dialog (old/new) below...

There was a bug in the save/load of a geoExtendedMatAlpha record in .geo format. Under some circumstances the alpha value, if it was set to 1.0 (fully opaque) was loaded back into Geo as 0.0 (fully transparent). This has been fixed.
In Geo 3.2 when selecting a Group type node (other than a RenderGroup) in the tree view, the tree view only showed the Group's RenderGroup children as selected (as this is what is actually in the selection list). This has been fixed so anything selected in the Tree View will give visual feedback that it, and any of its children are selected. The selection color is also now consistent with the 3D scene also. Below are a couple of examples: The first is selecting a polygon ("p4"), the second is selecting a group ("toplevl")...

In the 3D view if you click on nothing (just the scene background) you deselect everything. The Tree view does the same now if you click on whitespace that doesn't have a node being displayed.
We uncovered a bug with the event and notification system. When tracking edit changes there were some situations that the tracker would be notified on individual edits rather than on tool completion. What this meant was that the "number_edit_ops" required before an autosave could be reached multiple times during the tool completion - causing multiple auto-saves and portentially a slow-down in performance. This has been fixed and the logic overhauled.
We have improved the right-mouse Tree View pop-up menu. The Set Parent option in the Tree View pop-up menu did nothing if the selected item was a Node with no drawable decendents (basically a childless leaf node). This was unfortunate as the user may have wanted to create new hierarchy beneath it. This has been fixed. We also added Expand Level and Collapse Level options to the pop-up menu. See the new menu below...

Finally, there was a bug that reset the Tree View node open/close state for all nodes when a new node was selected. This no longer happens, with the behavior now being as expected.
The Geo STUDIO ClipRegion node was previously provided as an example of a Geo User extension node. This has changed with the ClipRegion node being promoted to a first-class internal node type and the removal of the need for a separate ClipRegion.dll. A number of long-standing bugs were fixed during this transition as well as functionality improvements.
Here is the new ClipRegion tool icon:

and here is an example of a KC10 panel ADI using a clip region in the tree view..

The Translate tool now correctly translates the clip-points of a ClipRegion as well as ClipRegion children. This means, for example, that an avionics instrumement uitilizing clip regions can be copied/translated seamlessly.
There is also a new ModifyClipRegion plugin that's easier to use and comes with new visual aids.
Fixed a bug in the OpenFlight Export Plugin that would under certain conditions write out the wrong size (in the size field) of the FLT_VERTEX_LIST record.
There has been a complete overhaul of how Geo does User Node extensibility (i.e. the ability of users to add their own Node types to Geo). This has been paired with, and in fact can only be accomplished with the new concept of Private Data. Private Data is for organizations, company sites or individuals that wish to extend Geo STUDIO Node types with specific attributes but wish to keep the semantics of the data private (or hidden) if the .geo file containing private data is being viewed outside the organization. Private Data can be added to any existing Geo Node type and is treated as a special case of the Geo's existing Node attribute extensions mechanism. The general ability to augment Geo types with additional data remains but those extensions are deemed public data and will be saved in the .geo file with all associated meta-data.
A new geoPrivateDataPlugin type has been added to facilite this. An organization creates a plugin of this type and puts it in the Geo/Plugins folder. When Geo starts up it loads all PrivateData plugins and if files are subsequently loaded that contain that organization's Private Data it will a) allows all Private Data fields to be edited within Geo and b) displays the organization's field labels, default values, range values etc. matching the in-file data with the attribute data found in the plugin. If a .geo file containing an organization's Private Data fields is opened externally (to the organization) and the appropriate Geo PrivateData plugin is not found then no data will be loaded.
Currently PrivateData property types can be any of the following Geo data types...

VEC3D is a double[3] array and is typically used to represent an XYZ coordinate value (but users can use it for any purpose). Here are some snapshots of the new Private Data editor...

In the above example a (ficticious) SimulationCompany Inc. has created 1 User Node type called a DamageGroup that has 5 property fields as well as defining 1 PrivateData extension to an existing Geo Node type. In the image below a property called "SimCo Type" will be available on all Geo RenderGroups (and derived types) and lists all properties added to their DamageGroup.

If the field is a string or an XML snippet you can open a rich text editor for easier editing of default values. Defining complex defaults means that (for example) you can specify particular XML defaults for particular Node types. Data presentation can be text input fields, check boxes, text boxes or option menus.
When a Geo file is load and the accompanying PrivateData plugin is present a selected Polygon (p17) will show the extension attributes on the left. If the same file is loaded into Geo and no PrivateData plugin is present them the polygon extension tab will provide generic names (as seen on the right).

Organizations, User Nodes and Extension Fields are identified with unique GUID values. Generating and managing the GUIDs is handled internally by Geo.
Private Data definitions from multiple organization can be handled.
Creating a Geo Private Data plugin is also incredibly easy. Use the Private Data Editor to define your extension data or user extension nodes and when satisfied simply click on the Write Code button and Geo will generate the C++ source code (all plugin .h and .cpp files), along with Visual Studio solution and project files (all .sln and .vcxproj files). In addition QtCreator IDE pro files are generated (as Geo STUDIO is actually built using this IDE). The code is immediately compilable into Geo PrivateData and UserNode Plugins. No additional "coding" is required (unless you want to) - only a development environment setup to compile and deploy the plugins. The site plugins are managed, updated and versioned in the PrivateData editor and a mechanism is provided that allows plugin re-generation without overwriting user code that may have been written.
When a file is loaded that contains extension nodes (and no suitable plugin has been loaded) Geo will load the extension nodes as the appropriate Geo base type (i.e. DamageGroup instances above will become basic Group nodes but without any extension data.
An example PrivateData plugin (for "Simulation Company Inc.") can be found in the Plugins/Src/SimCo folder along with all generated Geo SDK source code.
See the new PrivateData section in the Geo STUDIO User Manual for more information.
The Geo format is updated to support Private Data with this release. This is "version 1.0" of this functionality - and it can be extended in many different directions in the future. Please reach out to us if this capability is of interest and you would like to help drive our development efforts.
Many of the application icons have been refreshed in this release.
This release now supports import and export of OpenFlight 16.4 files. This means that we fully support the new (as of OpenFlight 16.4) Extension GUID Palette and Extension Field Records. This functionality maps onto Geo's new PrivateData capability.
If an OpenFlight file is loaded into Geo which contains User Extension data then per-node extension field values will appear in the Group extensions tab as in the left image below and in the User Node & Private Data Editor in the image on the right.

Geo will not permit the extension definition to be modified or removed in the Geo Node Extension Editor (i.e. the Node type the extension is associated with, the data type of the extension, the field default value and label) however the per Node extension values can be modified. Note: the actual intended default value, field labels and data constraints are guesses in this situartion since this information is not provided in the OpenFlight format (this is just for convenience withing the Geo STUDIO editor and does not effect output if the file is resaved in OpenFlight format).
NOTE: If an organization is using Geo STUDIO Pro alongside Creator* (a common scenario) then it is now extremely easy to auto-generate Geo PrivateData Plugins and expose all their site-specific User Extension data and Nodes between the products, making interoperability seamless.
Geo would crash if saving a file in Designers Workbench (.dwb) format if no vars-file existed (and it was referenced in the file). This no longer happens.
The scenegraph toolbar has been split into 2 distinct toolbars - one for hierarchy node creation (i.e new LOD, DCS, Instance, Externals etc.) and another for hierarchy modification tools. Below are the new toolbars..

The user favorites toolbar is now functional and works as expected. This is configured by the favorites.ini text file found in the Geo STUDIO install folder. Any Geo plugin or GeoScript can be added here so that all your commonly used "favorite" tools can be accessed in one toolbar to minimize clicks required to access functionality.
If Geo tries to save/export a file and that file already exists on disk in the save location, Geo will now alert the user and ask if it should continue. Previously this did not happen possibly resulting in a user-file being overwritten unintentionally.
The Per-Face Texture Mapping tool would only start if a Multi-Texture shader Group was selected. This has been fixed.
Updated the tool GUI widget elements and fixed some edge-case bugs in the Scale Tool. Also added a new pop-out Help-Box widget with per-tool help.
Added a new Scale Along Vector plugin.
Added 3 new useful keyboard shortcuts which can be used during tool operation to reset the Grid.
⦁ F1-key snaps the grid to the YZ plane (Grid normal along X axis)
⦁ F2-key snaps the grid to the XZ plane (Grid normal along Y axis)
⦁ F3-key snaps the grid to the XY plane (Grid normal along Z axis)
Added a new geoPoint Node. This node specifies a 3D point in space (and optionally) a local coordinate system being defined by a Normal vector and XAxis vector (the cross product of these providing the other axis vector). This was implemented as a User Prim Extension Node (a drawable geometry node) with the new PrivateData extensibility mechanism discussed previously. User Prim Nodes differ slightly as geometry nodes (polygons, meshes etc.) are typically created via a user-interactive tool. Due to this, Geo STUDIO also writes plugin code for an interactive create tool.

The geoPoint plugin source code (both the original auto-generated and final geoPoint implemention are provided as examples in the Plugins/Src folder).
With the addition of the Point node and a few other enhancements - Geo STUDIO now supports the import/export of OpenFlight 16.6 files.
Cleaned up and revised the Keyboard Shortcuts Dialog
Added two new keyboard shortcuts that have particular benefit during interactive tool operation...
The q-key now snaps the Grid origin to the current tool position. This is typically the active grabber being manipulated by the user.
The w-key cycles through the grid plane-alignment orientations with each press. If you press the w-key repeatedly the grid orientation will cycle between the YZ, XZ and XY planes before repeating.
The combination of the q-key snapping the Grid origin to the current tool position and being able to snap the grid's orientation (using the w-key) at that point means that you can manipululate that point (be it, for example, a tool grabber or a newly entered vertex) and move it controllably in 3D space.
Every tool now implements the tool base class function - bool fitSelection(float* ll,float* ur);. If the user presses the f-key (typically to "fit" the current selection in the viewport) during a tool operation - each tool will "fit" the in-progress geometry that currently exists or is currently being manipulated/changed by the tool in some way (i.e. entering vertices, being rotated, translated etc.).
Fixed a bug in the Extrude tool. After extruding all selected polygons along their face normals- clicking [Done] would move the original polygons to their extruded locations but, unfortunately, also delete the extrusion polygons. This no longer happens. :-)
Comments