PackageDescription: GHFractalExplorer
GH Fractal ExplorerLast published: October 20, 2003 by 'heeg'
Defines 23 Classes
Extends 26 Classes
Parcel GHFractalExplorer contains support for easy implementation of MandelbrotSet calculation and display.
Abstract class IterativeGraphicsPart is available to simpify things, for instance by buffering all display activities onto a private Pixmap. Class IterativeImagePart enhances this buffering behaviour by using an Image for the same purpose. Look at its subclasses for examples, and into its class protocol 'examples' for help on using them.
Some concrete subclasses have been added to show, how easy it is to use this class library. Execute:
Heeg.FractalExplorer open
to explore all available parts.
Some hints about the theoretical background of the formulas used in this program can be found in:
'A First Course In Chaotic Dynamical Systems' by Robert L. Deveney,
Addison-Wesley 1992, ISBN 0-201-55406-2,
It should work on every VisualWorks platform, special support for the Macintosh has been integrated.
Prerequisites:
GHNamespaces
GHMacHostmenu (minimum version 0.56) for special Mac support,
AT MetaNumerics for Complex number support,
Georg Heeg, 2000/2001
Author: Roland Wagener
=====================
Version History:
0.4 - random and handmade parameters supported, hide/show MacMenuBar
now has correct timing, all methods have comments,
0.5 - added NetwonExplorer as a subclass, look at its iteration protocol for a
non linear way of iterating over an x-y plane,
0.6 - added NewtonNthPowerExplorer, this needed AT MetaNumerics as prerequisite.
0.10 - added Mandelbrot- and JuliaExplorer,
0.11 - started to refactor the *Explorer ApplicationModels and separate the parameter
setting from the algorithmic object, FractalSetComponent is the superclass of
those objects now, but the refactoring continues,
0.12 - made image storage at end of FractalSetComponents display loop a common
service, components now display an image, if its allready calculated in the correct size,
0.14 - made FractalSetComponent a subclass of VisualPart, renamed it to FractalSetPart, and
did so with the subclasses. Test-implemented a displayOn-process for JuliaSetPart, which has
to be moved up to FractalSetPart,
0.15 - added a FractalSetController to do displayProcess termination, and zoom-into functionality,
currently, the 'examples' do not work, but FractalPartTest does, and I have no clue why,
0.16 - it now works, for multiple displayOn: messages, one after the other, prevented any display,
0.17 - added openPartAsScreensaver,
0.18 - added hideMenuBar to openPartAsScreensaver, renamed examples methods of FractalSetPart,
added automatic maxIterations calculation to Mandelbrot- and JuliaSetPart, where JuliaSetParts
version is not satisfying so far,
0.19 - FractalSetPart is now fully dubble buffering, that is, during calculation, the window can be obscured
and will display the intermediate state of calculation again on expose; the elapsed time for one
calculation is printed to the Transcript now,
0.20 - reuse the Pixmap for subsequent calculation loops,
0.21 - if you dont't get a Pixmap to buffer the calculated display, then try without,
0.22 - fixed logic for reusing image Pixmap, when saving VW-Image it will loose the pictures, though,
0.23 - fixed zooming in, fixed FractalPartTest,
0.24 - removed *SetParts role of a model, fixed JuliaSetParts bounds accessing,
0.25 - renamed FractalSetPart and -Controller to IterativeGraphicsPart and -Controller, added
NewtonNthPowerPart as a proof of concept, the implementation was done in 15 minutes,
copying the algorithm from NewtonNthPowerExplorer,
0.26 - enhanced InterativeGraphicsPartTest to have a list of parts, create new ones, and work with multiple parts,
0.27 - added GHNamespaces to list of prerequisites, added special arithmetic to Complex and
LimitedPrecisionReal, more subclasses to IterativeGraphicsPart to test these methods,
0.28 - Processor yield added to interation loop, displayPoint:... now paints without errors on GC and Pixmap,
if available, that is, it can display in the background,
0.29 - added displayString to IterativeGraphicsPart, which returns a Text with emphasis, if a running
displayCalculationProcess is found, when this process is started or terminated, the Part sends #status
as a change aspect,
0.30 - removed obsolete Delays when switching between Parts in IterativeGraphicsPartTest,
0.31 - made IterativeGraphicsPartTest resizable, added 'Suspend Calculation' to list menu, added
MaxIteration SpinnBox to IterativeGraphicsPartTest, made displayString of IterativeGraphicsPart
process state aware,
0.32 - enhanced displayString of IterativeGraphicsParts to show if they are displayed,
0.33 - introduced more menu items in list of parts, started work on 'openPartFullScreen',
0.34 - removePart added to menu,
0.35 - introduced IterativeImagePart as a new subclass to IterativeGraphicsPart, providing an instance
of Image for buffering display activities, instead of a Pixmap. It serves now as the new superclass
for all concrete Parts of this parcel. Now an image with open IterativeGraphicsPartTest window can
be saved and opened again, with all calculated Images preserved.
Older *Explorer classes have been removed from the parcel,
0.36 - recovered forgotten code, added RandomFractalPart, first attempt to have an automatic aspect
system for the parts, the interface should adapt its InputFields to the available aspects it gets from
'*Part class editableAspects'
and use the lables provided there too,
0.37 - fixed RandomFractalPart,
0.38 - added MasterMandelbrotPart and associated controller to be able to get a decent k parameter
for JuliSetParts,
0.39 - enhanced logic for screen saver opening, so slave JuliaSetParts can be opened from a
MasterMandelbrotPart using IterativeGraphicsPartTest,
0.40 - added postCopy for IterativeGraphicsPart, full screen parts gets copied before opening them,
0.41 - added ability to open a *Part with a fixed size, the IterativeGraphicsPartTest now can open
any part in a scrolling window, calculating an image of double the screen size,
0.42 - closing and opening child windows enhanced,
0.43 - made IterativeGraphicsController a ControllerWithMenu, now you have more controll for
each *Part directly, HIGHLIGHT: look at IterativeGraphicsController>>initializeMenu for enablement stuff.
'Copy Image' and 'Copy ...' allows you to copy the current image to the systems clipboard; however,
clipboards tend to be of limmited size (at least on Mac!), so a bell might ring, if this operation was not successfull,
0.44 - added BMPImageWriter to be able to save final images, the writer only handles 16bit images right now,
0.45 - fixed some bug, write cursor is shown while BMPImageWriter is saving a file,
0.46 - fixed menu creation of IterativeGraphicsPartTest,
0.47 - added BMPSaveDialog to enter image resolution and filename befor saving, fixed image initialization
in IterativeImagePart to comply with platform values,
0.48 - fixed image initialization again, added SinusMandelbrotSetPart, but no propper values have been found yet,
0.49 - added MasterExponentialSetPart and corresponding ExponentialJuliaSetPart, fixed Master-test,
0.50 - added SinusJuliaSetPart with a fixed value for k taken from:
'A First Course In Chaotic Dynamical Systems' by Robert L. Deveney,
Addison-Wesley 1992, ISBN 0-201-55406-2,
0.51 - added progress calculation to IterativeGraphicsPart, three aspects (elapsedTime, percentDone,
estimatedTotalTime) can be used to monitor progress, showProgress is a toggle to add progress
information into a currently showing calculation; only some *Parts are switched to progress-iteration behaviour,
0.52 - made SinusMandelbrotPart work (wrong start for z!), added MasterSinusPart to have symmetry
for all Mandel-Julia pairs,
0.53 - removed WaveCore again from list of prerequisites, changed progress calculation to rely on
SmallIntegers most of the time instead of Floats,
0.54 - added 'ZoomOut' to *Parts, modified 'openSlave' to position the window next to the Master,
0.55 - added Macintosh type/creator setting for saved BMP-Files,
0.56 - refactored 'openSlave', fixed behaviour when creating a new Master-Slave part,
0.57 - rearranged the window, renamed IterativeGraphicsPartTest to FractalExplorer, added some 'Screen default sync' for MacOS X alpha,
0.58 - fixed some comments, added storeString methods to *Part classes, added save/load of parts from FractalExplorer interface,
0.59 - added storeString support to Master*Parts,
0.60 - fixed 0.59 additions,
0.61 - added help text (not final), fixed class comments,
0.62 - rescued lost sources
0.70 - added external lib containg Mandelbrot functions, wrapped one in AcceleratedCMandelbrotPart,
0.71 - modified AcceleratedCMandelbrotParts display method, added AcceleratedSTMandelbrotPart to have a real compareable calculation and display part. Performance differences differ dramatically, if the maxIteration parameter goes up; e.g.:
AccelC-Mandelbrot from: -0.75@-0.3 to: -0.65@-0.22
maxIteration: 195
time needed: 0.876 sec
AccelST-Mandelbrot from: -0.75@-0.3 to: -0.65@-0.22
maxIteration: 195
time needed: 52.3 sec
0.72 - added THAPIMandel class>writeSources to export the C source files with accompanying makefile, currently only for MacOS X
0.73 - added complete library for MacOS X and compile support,
0.74 - tested and adapted for MacOS 9,
0.75 - modified coloring for AcceleratedCMandelPart, refactored sourcecode and library writing in class THAPIMandel,
0.76 - fixed librarySearchSignal in THAPIMandel to avoid stupid error messages, switched THAPIMandel's optimizationLevel to #full,
0.77 - tested on Windows NT, added .dll, makefile and def-file to THAPIMandel class,
0.78 - fixed bugs in writing winNT library, and load from file initialization,
0.80 - added AlphaUnix library and makefile,
0.81 - added PowerPC AIX support,
0.82 - refactored external directory structure, each platform now has its own make directory, thus all libraries can be saved for all platforms simultaneously, THAPIMandel now has platform distinguishing libraryDirectories,
0.83 - fixed nasty bug destroying the libraryDirectories contents of THAPIMandel each time the image was started, added source writing for AOSF and AIX,
0.84 - added SGI support,
0.85 - added Linux x86 support,
0.86 - added Linux PPC support, although this platform is not working right now,
0.87 - limited the size of the area calculated in C in AcceleratedCMandelbrotPart to 200x200, larger images are calculated using 200x200 patches,
0.88 - made invalidations of AcceleratedCMandelbrotPart>calculateAlgorithm based on a whole column rather then every single 200x200 picture,
0.89 - added Depth32Image writing to BMPImageWriter, tested on MacOS X with Photoshop and GraphicConverter
0.90 - fixed wrong prerequisite version for GHMacHostmenu, added DLLCC as a new prerequisite