Sfere2 is written in C++ and assembler, and makes extensive use of the Win32-, MFC- and OpenGL-APIs.
At the core of Sfere2 lies a purpose-built document-view framework, that allows an easy setup of nearly all ideas and concepts.
The real-time mechanics engine and the interface are built on top of this framework, heavily using it's plugin structure and notifier/listener features.
- object oriented; run-time extendable.
The framework allows plugins to register new plugins types. Largest benefit of this is the complete separation of application specific features and the framework code.
- cross-module singletons
Creation and static referencing of singleton objects cross multiple plugin-modules.
- run-time extendable classes.
- optimized many-to-many reference management.
fast and robust. At the core of this system lies a pool of doubly-linked reference nodes that -if destructed- automatically destroy any nodes that define the same relationship.
- run-time class-IDs.
allows class-ID checking to be done in a single 32bit comparison.
- 32-bit characterstrings.
using a defragged pool of 32-bit aligned characterstrings, copy, move and compare functions perform near 4 times faster.
NOTE: most features are implemented in the cornerstone-project as well, often in a much improved form.
The real-time mechanics calculation is implemented using a continuous iteration using a low-priority thread. Each iteration step consists of two fases:
- determining the reaction forces due to the deformation of the elements
- determining the sum of all forces applied to the joints, determining acceleration, speed and finally position of the joints.
The animation of the deformation is realized using a timer that triggers a view-refresh. Each view-refresh automatically acquires the latest results from the calculation engine, and draws the deformed structure using OpenGL.
To enhance the insight into the mechanics of structures, all E-moduli of the elements are reduced by a factor. This has two advantages:
- realistic enlargement of displacements.
the standard method of enlargement by multiplying the actual displacements by a factor, can lead to confusing images (- beams that cross each other that should not be able to do so in reality. - lengthening of rods that are actually under pressure)
- faster convergence of the iteration.
the time-step assumed with each iteration-step can be enlarged without causing the iteration to diverge into infinity.
This technique also has some disadvantages:
- earlier occurance of second order effects like buckling.
note: most applications can't predict the occurance of buckling at all; Sfere2 can, and even accurately, but sometimes the calculation will be somewhat slow.
- numerical displacements results are not realistic.
the calculated forces and stresses, however, are!
Considering that the main goal of Sfere2 is to enhance insight into the mechanics of structures, the advantages easily outweigh the disadvantages.
Standard, MFC-based, modular interfaces can dynamicly be added to the framework using a single 'Window' plugin class. This way, the visual editor of MS Visual C++ can be used to ajust the individual panes of the interface to be as clear and intuitive as possible.
All standard input events are routed through the plugins and/or 'listener-objects', and allow the plugins full control when desired.
These two features combined allow for a very powerful, highly intuitive interface to be developed. Offering the basic functions in an apparent fashion to beginners, while not hindering the advanced users to easily access and use more complex options.
SFERE2 INFORMATION / LINKS
|main page||Sfere2 main page|
|introduction||online introduction to the options and possibilities within sfere2 (beta release 2)|
|Krachtswerking||the department for structural analysis of buildings, faculty of achitecture.|
|TO&I||department for computer science and design of technology, faculty of achitecture. TO&I created the opportunity for me to develop sfere2|
1998 - 2001