Class Hierarchy
This page details the general internal structure of the Group Explorer
program. For those who may have happened upon this page and are not
computer programmers, each section below describes a topically organized group
of operations that needed to be built in order to form the whole of Group
Explorer. This list is not comprehensive, but includes all major pieces.
Components
A "component" in Delphi is a reusable (usually graphical) item with its
associated functionality. For example, in Group Explorer, each Cayley
diagram is an instance of the TGLCayleyDiagram component,
discussed below.
Delphi allows programmers to organize a group of units into a "package,"
and all the components described below I put into one package called
GroupsComponents.dpk, and if one were to want to build a different
application using these components (say, an interface for creating .gp
files) then one could import this package and have access to all the following
classes.
| Class |
Superclass |
Description |
TPermutation |
----- (when a class lists no superclass, its superclass
is TObject) |
Objects of this class store an array with indices between
0 and n, for n < 20, where each entry is in the same range.
Contains routines for turning converting a permutation in Sn
to and from its index in an enumeration of the n! elements of Sn.
Contains routines for composing and representing permutations. |
TGroupDisplay |
----- |
Objects of this class represent how a group is to be
displayed, i.e. how the elements should be represented. Each item on
the Group | Change Representation submenu is represented internally as a
TGroupDisplay object. |
TGroup |
----- |
Internal representation of a group. Holds the n
such that the group is embedded in Sn, and holds each
list of generators and each TGroupDisplay object associated with the
group. Also stores miscellaneous information like group name,
author, etc. Contains routines for composing and inverting elements of
the group. |
TArcingInfo |
----- |
Objects of this class record how arcs in Cayley diagrams
are shaped (i.e. whether they arc, how much, and if they do arc, where the
center of the circle they trace is). |
TCayleyDiagram |
----- |
Objects of this class associate elements of the group
with points in space at which they should be drawn. They also retain
any information generated during layout of the group, provided that the
group was laid out by Group Explorer and not by the author of the .gp
file.The TCayleyDiagram class depends on the TGroup class, because
Cayley diagrams are only definable in terms of groups. |
| The next three classes define the
building blocks needed for the TGLWireframePicture class, which
simply makes a visual component associated with a wireframe.
Wireframes in the Group Explorer world are arcs and lines with or without
arrowheads, accompanied by spheres (nodes) and potentially labels.
This is what underlies both Cayley diagrams and objects of symmetry.
The letters "GL" begin to appear here to indicate that OpenGL libraries
are used in the implementation. |
TNode3D |
----- |
Internal representation of a visible node (sphere) in a
wireframe. Contains data on position, color, size, shape, and fill. |
TLine3D |
----- |
Internal representation of a visible line (arc) in a
wireframe. Contains data on starting and ending points, color,
thickness, whether or not there is an arrowhead, and if there is one,
where it is. |
TGLWireframe |
----- |
A list of TNode3D objects and a list of TLine3D objects,
with routines for adding and removing them, and for rotating the whole
wireframe in space. |
TSymmetryObject |
----- |
Objects of this class contain a TGLWireframe object
within them, and also contain definitions for how it could be manipulated
according to various symmetries (rotations) that generate a group. |
TVisualGroup |
----- |
This class unites Groups, Cayley diagrams, and objects of
symmetry together. That is, a TVisualGroup object contains one group
and any number of custom Cayley diagrams and objects of symmetry. It
is created from a .gp file by the group parsing routines
discussed immediately below. |
GroupParsing.pas
(a file, not a class) |
No classes are present in this unit. Rather, it
contains routines for reading from a file the definitions of groups,
diagrams, nodes, lines, rotations, etc. These routines make it easy
to write the algorithm for loading a .gp file.The result
of loading such a file is a TVisualGroup object, and thus the TVisualGroup
class contains a routine for loading such an object from a given file.
The format of .gp files is discussed on
the Group Authoring page. |
TRegExpr |
----- |
This class was not written by me. Rather, I
downloaded it free from the internet. Its copyright information is
as follows. Copyright 1999-2000 Andrey V. Sorokin,
anso@mail.ru
It encapsulates regular expression utilities, and is of very great use
to the GroupParsing unit, above. |
My3DUnit.pas
(a file, not a class) |
A collection of functions related to points in
three-dimensional Euclidean space. |
ColorSpectrum.pas
(a file, not a class) |
A collection of functions related to the color spectrum,
e.g. creating a bright color given a hue between 0 and 1, or for
brightening or darkening a color, or converting among different color
representations. |
TGLWireframePicture |
TCustomControl(a Borland class) |
Each TGLWireframePicture object contains within it a
TGLWireframe object that contains the data about the wireframe itself.
The TGLWireframePicture object is responsible for maintaining information
about the drawing context, the viewpoint, the current state of animation,
the various options one can change or toggle, etc. It contains
routines for rendering frames of the image and for adjusting its options. |
MyGLUtils.pas
(a file, not a class) |
A collection of miscellaneous utilities related to
OpenGL. This is an area where (I confess) the design is inefficient,
in that there are routines in this unit for, e.g., drawing a disc.
It would be far faster (drawing time) to make such a thing an OpenGL
display list and call it when needed. But this is an optimization I
have not yet gotten around to (see Vision and
Goals). |
TGLCayleyDiagramPicture |
TGLWireframePicture |
Subclass of TGLWireframePicture, this class adds the
functionality for animation and labeling specific to Cayley diagrams, as
well as the ability to highlight nodes by shape or color, and to draw
chunks around cosets. (Refer to the documentation on
Editing Cayley Diagrams for the
uses of these various functions in the program.) This graphical
component is the only thing visible in
the Cayley diagram windows
within Group Explorer. |
TGLSymmetryObjectPicture |
TGLWireframePicture |
Subclass of TGLWireframePicture, this class adds the
functionality for labeling and circling homes and labeling nodes.
This graphical component is the only thing visible in
the Symmetry Object windows
within Group Explorer. |
TPermPicture |
TGraphicControl(a Borland class) |
A visual component for representing permutations.
This is the component that is visible in
the Permutation View.
It stores a permutation to display, and can reset it to the identity or
compose it with another. |
TMultiplicationTable |
TDrawGrid(a Borland class) |
A visual component for representing multiplication
tables. This is the largest component that is visible in
the Multiplication
Table. It has the ability to draw itself according to several
color, order, and spacing parameters. How the user can manipulate
these is discussed in the Editing
Multiplication Tables documentation. |
Forms
A "form" in Delphi is a window that the user may eventually see.
For example, in Group Explorer, the main program has its own window, and is
therefore a form, but so are all its subwindows, and any message boxes that
may pop up during the course of program execution.
| Class |
Superclass |
Description |
TMainForm |
TForm(a Borland
class) |
This form is the main Group Explorer window, which is
first displayed when the program opens. It handles the main menu and
all of its actions, the containing of subwindows, and the closing of all
other windows when the program terminates. It has a status bar at
the bottom that gives messages relevant to the current state of the
application. |
| Here follow the four single-instance
subwindows of the main Group Explorer window, the Permutation View, the
History View, the Navigator, and the Multiplication Table.
Associated with the latter two are a few related forms, which are also
mentioned here. |
TPermutationForm |
TForm |
This is a subwindow of the main Group Explorer window,
and contains one component, the TPermPicture documented above. The
main form notifies this form of the user's navigation within the group, to
which this form responds by modifying the TPermPicture's contents
appropriately. This class also has only one instance created per
Group Explorer session. |
THistoryForm |
TForm |
This is a simple subwindow of the main Group Explorer
window, documented in the User Manual
here. It consists
of just one scrollable text pane, and provides routines the main program
uses to notify it of the user's navigation within the group. It
responds to this by appending textual representations of that information
to the end of its contents. This class also has only one instance
created per Group Explorer session. |
TNavigator |
TForm |
This component is the sum of all visible controls within
the Navigator subwindow of the main Group Explorer window. It
provides an interface so that the main program can tell it what generators
are currently active, and when the user navigates using one, the Navigator
informs the main window of this event, so that the main window can
dispatch this information to all other subwindows. |
TNavigatorForm |
TForm |
This is an important subwindow of the main Group Explorer
window. It is documented
here in the User Manual. It contains simply one instance of the
above documented TNavigator component. This class also has only one
instance created per Group Explorer session. |
TEditNavKeysDialog |
TOKBottomDlg(a
Borland class) |
An instance of this is created by TNavigator to allow the
user to edit the assignment of keyboard shortcuts to group generators.
It is documented together with the Navigator in the User Manual,
here. |
TMultiplicationForm |
TForm |
The subwindow of the main Group Explorer window whose
contents are a TMultiplicationTable component and some controls for
manipulating it. It provides to the main program the interface for
moving an indicator around within the table indicating the user's
navigation within the group. |
TMTEditDialog |
TForm |
The window that is displayed when the user clicks the
"Edit table..." on the Multiplication Table window. The workings of
this window are documented here. |
| The Group Information window is also a
single-instance window, but does not appear as a subwindow of the main
application. Rather, it appears off to the side, so that the user
may close it or obscure it at will. |
TGroupInfoForm |
TForm |
This form is instantiated only once, and its contents are
just one scrollable text pane. The one instance of this class is
filled with information about the currently loaded group each time a new
group is loaded. |
| There remain the two multiple-instance
subwindows of the Group Explorer main window, Cayley diagrams and objects
of symmetry. Each of these has at least one associated class, also
described here. |
TSymmetryObjectForm |
TForm |
The form that contains a TGLSymmetryObjectPicture
component. Many copies of this may exist during a Group Explorer
session, created by user commands from
the Group menu. It
provides the main program an interface for applying the user's navigation
to manipulate the symmetry object. It provides the user a popup menu
for changing the options by which the symmetry object is displayed.
Thus the next class is useful. |
TSymmetryObjectFormOptions |
----- |
One such object exists for each TSymmetryObjectPicture
object that exists. It is a record of all the settings on that
picture, and can read/write its contents to/from such a picture or a
settings (GroupExplorer.INI) file. |
TCayleyDiagramForm |
TForm |
The form that contains a TGLCayleyDiagramPicture
component. Many copies of this may exist during a Group Explorer
session, created by user commands from
the Group menu. It
provides the main program an interface for applying the user's navigation
to move around within the Cayley diagram. It provides the user a
popup menu for changing the options by which the Cayley diagram is
displayed. Thus the next class is useful. |
TCayleyDiagramFormOptions |
----- |
One such object exists for each TCayleyDiagramPicture
object that exists. It is a record of all the settings on that
picture, and can read/write its contents to/from such a picture or a
settings (GroupExplorer.INI) file. |
TCDEditDialog |
TForm |
The window that is displayed when the user clicks "Edit
diagram..." on the popup window of a Cayley diagram. The
workings of this window are documented
here. |
|