GLG 3.0 Release: New Features and Enhancements
Overview
The major features of the new release are related
to the GLG Graphics Builder look
and feel and interface improvements, enhanced tag data access
interface, new GIS capabilities,
gradient rendering, control over the resize policy and coordinate system, as well as
many other new features.
New Look and Feel of the
Graphics Builder
The new GLG
Graphics Builder uses highlighting icons, gradients, dimming and
shading to provide cleaner and sharper visual appearance, as shown
in the picture on the right.
New icons for common object transforming actions, such as
flipping, rotation and scaling, were added to the control panel on
the left of the drawing area.
The Data, History, Aliases
and Xform indicators in
the status panel at the bottom of the Builder were replaced with
buttons that allow direct access to the corresponding object
properties.
New Tag Interface
The new tag interface introduces additional tag
properties to facilitate the process of remapping tags defined in
the drawing to the fields of the process database or PLC at run
time.
Previously, a tag had only one attribute that defined a tag
source, while the new release introduced a Tag Name attribute in
addition to the Tag Source.
A persistent Tag Name
makes it possible to uniquely identify the tag even after its Tag Source has been changed
by assigning a database variable to it. An additional Tag Comment attribute has
also been added for storing user comments and any axillary
information.
All tag properties are now stored in a tag object, which has to be
explicitly created and attached to a resource object. In the
Graphics Builder, a new dialog is provided to display and edit all
tag object properties.
The Tag Browser interface has been changed to display both the Tag Name and Tag Source attributes of each
tag. New toggles have been added to the Tag Browser to browse tags
by either Tag Name or Tag Source.
The Tag Import/Export
features have been extended to export TagName/TagSource pairs, which allows for more
precise handling of tags with the same tag sources.
The String Import/Export
features have also been extended to export string Name/Value
pairs, which allows the application to use different translations
for similar strings used in different places in the drawing.
Compatibility Note: The Tag attribute has been
changed to TagSource.
The name "Tag" is still
supported for backward compatibility and mapped to the TagSource.
Panning by Dragging the
Drawing or Map with the Mouse
Panning the drawing by dragging it with the mouse
is now possible by using the Ctrl-drag
binding. It is supported both in the Graphics Builder when editing
a drawing, as well as at run-time (if enabled by the viewport's ZoomEnabled attribute). In
the GIS Zoom Mode, the feature may be used to drag the map with
the mouse.
A programmatic interface to start dragging under the control of
the application, when certain conditions are met, is also provided
via the GlgSetZoom()
method.
New Options for
Creating Widgets and SubDrawings with Different Resize Policies
New options for creating drawings with different
resize policies were added to the Graphics Builder. The New Widget option creates a
widget with a drawing surface that uses world coordinates and
stretches when the widget is resized. This resizing behavior is
commonly used by process control and monitoring applications which
still want to display the whole drawing with a bigger or smaller
magnification when a widget is resized.
The New Widget (No
Stretch/Resize) option creates a widget with the drawing
area that uses screen coordinates and does not stretch when the
widget is resized. When the widget's window is resized, it shows a
bigger or smaller portion of the drawing area, which is the
default behavior of many GUI and image-editing tools. The
non-resizable drawings may still be zoomed in or out.
These convenient options may be used without learning the advanced
attributes of a viewport, as it was the case in the previous
releases. The coordinate system of the Builder's Drawing Area is
also adjusted to match a widget's resize policy. This allows the
user to define a precise screen size in pixels for widgets with
the No Stretch resize
policy. The Set Width
and Set Height options
of the Layout Toolbox may be used for setting the widget's width
and height in pixels.
Two new options for creating subdrawings are also introduced. The
New SubDrawing option is
used to create resizable subdrawings for widgets with the Stretch resize policy. The New SubDrawing (No Stretch/Resize)
option may be used to create subdrawings for widgets with the No Stretch resize policy or
to create fixed size subdrawings. These options set the coordinate
system of the Builder' Drawing Area to an appropriate value for
the selected subdrawing creation mode. The coordinate system
setting is saved with the subdrawing's drawing and is restored
when it is loaded in the Builder.
In a program, the resize policy of the viewport's drawing area may
be controlled by the CoordSystem
attribute of the viewport's screen.
Setting Coordinate
System on Per-Object Basis
This feature allows mixing world and screen
coordinate systems in the GLG drawing by setting an object's CoordFlag attribute. The
available coordinate systems include the GLG-standard world
coordinate system, as well as two screen coordinate systems.
The screen coordinate systems define coordinates in screen pixels
relatively to a drawing area's upper left corner. Screen
coordinates may be used to specify an absolute object position on
the screen which does not change when the drawing is zoomed or
resized. This provides a convenient mechanism for positioning text
message overlays by specifying a fixed offset from the edge of the
drawing.
There are two screen coordinate systems that differ in the
direction of the Y axis.
Fixed Size Icons
Support for fixed size icons that do not change
their size when the drawing is zoomed or resized has been added to
the Toolkit via the FixedSize
attribute of the reference and container objects. Fixed size icons
use the screen coordinate system for rendering their graphics,
while providing a user-friendly editing interface that
transparently handles all complexities of the coordinate
system settings.
The fixed size icons automatically maintain their pixel size and
X/Y ratio when the drawing is zoomed or resized, while they may
still be independently scaled under the program control to
increase or decrease the icons' size.
The GIS and AirTraffic Control demos have been updated to use
fixed-size airplane icons. The updated Map demo uses the fixed
size icons to automatically maintain the icon's X/Y ratio when the
drawing is resized, with no source code required. These demos
provide examples of using fixed size icons in an application.
New GIS Editing Mode
A new GIS Editing
Mode has been added to the Graphics Builder, allowing the
user to draw polygons and place dynamic icons on top of the GIS
map using the GIS lat/lon coordinates directly. In the GIS Editing
mode, the user simply draws GLG objects with the mouse, and the
Builder positions them on the map, converting the screen
coordinates of the mouse to the GIS lat/lon. The converted lat/lon
coordinates are then stored as the coordinate values of the
objects' points. The GIS Editing Mode transparently handles GIS
projections, allowing the user to draw objects on the globe in the
orthographic projection. To start the GIS Editing mode, the user
goes down "into" the GIS object by selecting it and pressing the Hierarchy Down button.
Positioning Objects in
GIS Lat/Lon Coordinates
With this new functionality, the GIS object now
serves as a container object which holds icons, polygons and other
objects drawn on top of the map. The GLG API may be used to add
dynamic icons at run time and position them on the map by setting
their lat/lon coordinates.
The coordinates of control points of objects added to the map as
children of the GIS object are specified directly in lat/lon
coordinates with no coordinate conversion required in previous
releases. When the map is resized, zoomed or panned, the objects
maintain their position on the map automatically. Specifying
coordinates directly using lat/lon with no coordinate conversion
greatly simplifies and reduces the amount of code for GIS
applications.
The objects drawn on top of the map inside the GIS Object are
automatically clipped to the GIS Object's boundaries, which
eliminates a need for workarounds for wrap-around problems of the
GDI driver in the previous releases. In the ORTHOGRAPHIC projection, the
icons and lines drawn on top of the map inside the GIS Object are
also clipped to the visible side of the globe, eliminating the
objects located on the invisible back side.
Persistent GIS Zoom Mode
and New GIS Pan Options
In the GIS Editing Mode, the Zoom and Pan controls
of the Graphics Builder automatically switch to the GIS Zoom Mode, zooming and
panning the map instead of the whole drawing. This allows the user
to zoom and pan the map during editing, without the need to start
the Run mode. The map may also be dragged with the mouse via the Ctrl-drag binding, both in
the Edit mode and at run time if enabled by the viewport's ZoomEnabled attribute.
The GIS Zoom Mode may be permanently stored in the drawing by
using the new "Set as parent
viewport's GISObject" option of the Arrange menu. Once it is
done, the viewport containing the GIS Object will always use the
GIS Zoom Mode while being edited or prototyped.
Integrated pan scrollbars of the viewport can now be used in the
GIS Zoom mode to pan the map. They are activated by the viewport's
Pan attribute.
New Line Fill Attribute
and Line Width Gradient
A new EDGE_WITH_LINE_FILL
fill type was added to polygons and all other objects that inherit
polygon attributes, such as arcs or splines. When this fill type
is used for lines with LineWidth
greater than 3, the outline of the line is drawn using the EdgeColor, and the middle
part of the line will be drawn using the FillColor, as shown in the first picture on the
right.
A new Line Width
gradient was added to facilitate easier rendering of fixed-width
3D pipes. In the earlier versions of the Toolkit, 3D pipes were
rendered using filled polygons with gradient, which was tedious to
create. In the new release, all segments of a 3D pipe may be
rendered as a single polygon with FillType=EDGE and the Line Width gradient.
The Line Width
gradient works with arrows, as shown in the second picture on the
right.
Elliptical Gradient
An elliptical gradient is similar to the spherical
gradient, but it also stretches with the object to create more
realistic rendering. The spherical gradient did not change its
shape when the object was stretched and always maintained a
perfectly circular shape even when the object was stretched.
Independent X and Y
Panning and Custom Scrollbars
Support for independent activation of the X and Y
panning scrollbars was added to a viewport object. Previously, the
X and Y scrollbars could be enabled or disabled only
simultaneously.
Support for custom panning scrollbars has been added. It allows an
application to use any GLG slider or scrollbar widget instead of
the default native scrollbars for the integrated viewport
scrolling. This is especially important for Qt and GTK integration
where native scrollbars may not be available.
The use of the custom scrollbars is controlled by the GlgNativeScrollbars global
configuration resource. If this resource is set to 1, custom
GLG scrollbars will be used. The GlgVScrollbarRef and GlgHScrollbarRef global configuration
resources may be used to provide the filenames of drawings that
contain custom panning controls.
String
Concatenation Transformation
A string concatenation transformation has been
introduced to facilitate an easier creation of text labels that
display several strings, where each string may be controlled by a
separate resource. One such example is a text object used in GLG
gauges to display a label, value and units in one object.
Previously, such text label had to be assembled using nested
format transformations. The string concatenation transformation
simplifies the process of creating such labels.
Viewport Gradients
Support for rendering attributes has been extended
to the viewport objects, making it easier to use gradients for the
viewport's background. In the new release, the gradient may be
used for the viewport's background using viewport's rendering
attributes, the same way as for other objects. This yields proper
rendering with no gaps regardless of how much the drawing is
zoomed in or out.
Alternative
Behavior for Sliders and Knobs
Support for the IncrementOnClick
resource was added to the slider and knob interaction handlers to
provide an alternative run-time behavior. If the resource is set
to 0, the slider will move to the position of the mouse click,
which was the only choice in previous versions.
Setting this resource to 1 changes behavior of the slider and knob
controls. If the mouse click occurs outside of the slider's moving
element, it is moved in the direction of the mouse click by the
amount of the slider's increment resource, doing it repeatedly
until either the mouse is released or the slider reaches the mouse
location. The user can still move the slider or knob with the
mouse by clicking on its moving element and dragging it with the
mouse.
Support for the PageIncrement
resource and PageIncrease/PageDecrease
buttons and key bindings has been also added to the Slider and
Knob interaction handlers.
All slider widgets have been changed to support SliderSize, StartPosition and EndPosition resources. The SliderSize resource controls
the size of the slider's moving element, while the StartPosition and EndPosition resources control
the extent of its movement. When these resources are modified, all
other resources of the slider widgets get adjusted automatically.
Referenced Fonttable
A new FonttableFile
viewport attribute may be used to specify a fonttable from an
external file to be used for the drawing. A fonttable may be
edited in the Builder, saved into a file and referenced by
multiple drawings. The font changes applied to the fonttable will
be reflected in all drawings that reference it. This feature
enables applications to modify fonts used at run-time by simply
changing a single external fonttable file using the GLG Graphics
Builder.
The FonttableFile
attribute may be edited in the Properties
dialog of the viewport's Screen
object.
New Widgets
The following new widgets were added to the
Controls Widget Set:
- The GLG scrollbar widgets were added to the Sliders palette
- Several new custom gauges were added to the Dials and Meters
palette
- An icon button with gradient highlight was added to the
Buttons and Indicators palette
- A value display text object with separate resources to control
its Label, Value and Units was added to the Buttons and
Indicators palette
An alarm bar widget was added to the Special
Widgets palette.
Miscellaneous New
Features
Support for string transformations was added to LabelString resource of
native buttons as well as the TooltipString
resource. The transformation may be used to provide a list of
strings for the button's label or tooltip, so that they may be
dynamically changed by selecting a desired string from the list
depending on some condition.
Added support for the OnState
resource for native push buttons to allow using them as toggles
with changing labels.
Added support for handling MouseOverState
for invisible objects to allow making them visible on
mouse-over via the MouseOverState
resource.
Support for handling new line ('\n')
and quoted strings was added to the GLG Script.
A new ZoomRectangle
subaction was added for the ZoomTo
action to allow the program to change attributes of the ZoomTo dragging rectangle.
The "Empty history"
message was disabled at run-time to allow setting Factors of the Series object
to 0, which is useful for the graph widgets.
Miscellaneous
Graphics
Builder Interface Improvements
A new button for immediate editing of all objects
in a group was added to the group properties dialog. The new
button saves an extra mouse click by allowing the user to start
editing a group of similar objects without selecting an object to
define an attribute set for editing. The old option which allows
selecting the set of attributes for editing is available as well.
The Add/Delete buttons
of the group dialog were reordered to the end of the group
properties' list.
A new interface has been added to allow the user to mark and reuse
text boxes, rendering attributes, light objects and font tables,
as well as adding constrained copies of them to groups of objects.
A toggle was added to the Layout Toolbox to allow the user to
apply the width, height and other settings to either all objects
in a group or to the group itself.
A feedback indicator was added to the Select Anchor Object icon in the Layout Toolbox.
The color of the icon changes to green when the layout anchor is
defined.
The interface of browsing all resources of the drawing was changed
to show resources of the viewport with the editing focus instead
of the resources of the whole top-level drawing.
The new Builder makes a better use of spinners in the resource
dialog, allowing the user to use them to set values of many
additional resources such as Factors
of the series, and other resources with integer values.
New buttons were added to the Scale,
Rotate and some other
transformation dialogs to set the Center attribute to the center of the object, as
well as to reset the Center
to (0,0,0).
New logic has been added for detection of constraint loop
problems. Constraint loops may be created in the Builder when the
user constrains the Buffer attributes of two Transfer
transformations. This condition is now checked and reported, which
makes it easier to diagnose and correct.
In the new Builder, separate ZoomBy
and ScaleBy factors are
maintained for convenience. This allows the user to set factors
for zoom and scale operations independently.
The GIS Object interface has been changed to regenerate the map
when the object's Verbosity
value was changed. This eliminates the need to reset the drawing
to see the verbose output after changing the Verbosity value.
A new "Save Direct OpenGL
Image" option for saving images was added to get around
limitations of OpenGL drivers which may use a low-quality
software-based OpenGL renderers when rendering into an off-screen
pixmap. Instead of rendering into the off-screen pixmap, the new
image saving option copies bits from the screen, preserving the
quality of the hardware-accelerated OpenGL rendering in the
generated image.
The move point display of non-resizable viewports has been fixed.
The display of an inoperative move point for viewports with HandlerDisabled has been
eliminated to avoid confusion.
Drawing area scrollbars are now disabled in the Run Mode to
eliminate confusion.
The Save Image Full
option for saving the image of the whole drawing (instead of just
the visible part of it) was changed to automatically exclude the
drawing's pan sliders from being rendered in the saved image.
The menus presenting choices of attribute values and
transformations are now scrollable for greater convenience.
When widgets are added to the drawing from a palette, they are now
inserted at the center of the visible portion of the drawing
instead of the origin of the coordinate system, which may be
scrolled out.
The Hierarchy Down
operation for series and reference objects in a non-resizable
drawing was improved by placing the origin of the coordinate
system in the center of the drawing for more convenient editing of
their templates.
The initial grid size is now automatically adjusted when a new
widget is created depending on the type of the widget's coordinate
system.
The display of the buffer attribute of the transfer transformation
was improved to show the updated buffer value when the UseValue attribute changes.
Performance Improvements
and Bug Fixes
Clipping performance for objects that are
completely clipped out was improved to speed up rendering of
drawings with huge zoom factors.
A more detailed error message is now provided for SetResource methods to
facilitate debugging. The new error message provides a complete
resource path and differentiates between default attribute names
and named resources.
OpenGL Renderer: Detection
of the GLXBadDrawable X
error message was added on Linux systems, with a message that
describes possible remedies.
OpenGL Renderer: A check
for the GLX BadMatch
error was added to catch a depth mismatch between the default
visual and the supported OpenGL visuals. If a depth mismatch is
detected, GLG switches to the GDI renderer and generates a warning
message describing possible remedies.
A coordinate overflow at very high zoom factors in the GDI
renderer was eliminated for objects that were completely clipped
out. The OpenGL renderer (which uses double coordinate values)
presents an even better solution.
The zoom limit check that prevented coordinate overflow was
eliminated for the OpenGL renderer.
The widget's minimum width/height in Qt integration was set to a
default value different from 0 to avoid problems with some
layout managers.
The value of the Z coordinate of the points outside of the visible
part of the globe, returned as a result of the GlgGISConvert() method, was
changed from -1.0 to the GLG_GIS_OUTSIDE_VALUE
defined constant equal -2000., to be consistent with the default
extent of the GLG coordinate system.
OpenGL Renderer: Line caps
were fixed for lines with even line width.
OpenGL Renderer: Rendering
of line arrows was fixed for ARROW
FILL & EDGE, and rendering of arrows with FILL arrow style was improved
by using anti-aliasing.
Arrow rendering was improved by making the arrow ends always
round, even for lines with an even line width.
process_subobjects
parameter was added to the GlgLayoutObjects()
method to control the method's behavior for groups. If the
parameter is set to True,
the layout action is applied to all elements of the group. If the
parameter is set to False,
the method applies the action (such as SET_WIDTH) to the group itself.
Due to the new tag object interface, the GlgHasTagObject method was replaced with the GlgHasTagName and GlgHasTagSource methods. The
by_name parameter has
been added to the GlgGetTagObject
method to allow to query a tag object by either its TagName or TagSource.
Windows ActiveX Control:
The UpdateGlg method has
been added to avoid using the Update
method that conflicts with OLE interfaces in the new versions of
the VisualStudio.NET. The new GetGlgMajorVersion
and GetGlgMinorVersion
methods provide GLG version information.
Windows ActiveX Control:
Persistence of the UseOpenGL
and UseMapServer
properties on saving the ActiveX control was fixed.