================================================================================
// File:        Readme.htm
// Summary:     Whelk Distribution Info.
// Author:      Nicholas Shea
// Copyright:   (c) Nicholas Shea 2013-2020
// Email:       nicholasshea@neolithicsphere.com
// Web:         http://www.neolithicsphere.com/whelk/index.htm
================================================================================

********************************************************************************
                             IMPORTANT NOTICE
                            
Whelk has been tested on the following platforms:

    Windows-XP 32 bit (service pack 3)
    Windows 7 64 bit
    Windows 10 Pro 1903 64 bit.
    
Graphics Chipset: ATI Radeon 9600/9550/X1050 Series with Catalyst Drivers.

ONLY USE DISTRIBUTIONS FROM THE WHELK HOME PAGE. BEFORE FILING A BUG REPORT
PLEASE VERIFY THAT THE MD5 SUM OF THE ZIP DISTRIBUTION MATCHES THE ONE GIVEN ON 
THE WELK HOME PAGE. PLEASE ALSO VERIFY CHECKSUMS WITH 'CRC-SHA-checksums.txt'.
********************************************************************************

WHAT IS WHELK?

Whelk is a small interactive OpenGL program that generates a cornucopia of
shells horns and many other 3D spiral forms. Exports native format WLK,
Wavefront OBJ and POV-Ray mesh2 INC file.


BUILD

This is a 32 bit build for Microsoft Windows. The program has been tested on
Windows XP 32 bit and Windows 10 64 bit (running in compatibility mode for
Windows XP).


MOUSE

Right mouse button: drag to zoom in and out.
Middle mouse button: drag to translate.
Left mouse button: drag to tumble; click to stop tumble.
Left and Right mouse buttons together: resets the view.


EXPORT FORMATS

Whelk WLK; Wavefont OBJ; POV-Ray mesh2 INC file. The 'Generators' folder
contains many 'WLK' sample files; new users are encouraged to load these files 
and examine the 'Generator' settings.

IMPORTANT: Files are exported using the current drawing attributes set in the
'View' menu.Thus, if GL_SMOOTH is checked in the 'View' menu, then the file
exports with with weighted vertex normals. Be sure to turn on GL_SMOOTH if you
want smooth triangles in your export file.

The menu item GL_SMOOTH is only active when the following 'View' 
menu item is checked: Use Vertex Arrays. If this is unchecked, then GL_FLAT
shading is used instead, and the model is rendered using Immediate Mode.
Additionally, when Use Vertex Arrays is unchecked, there is one normal per
triangle face, rather than one normal per vertex. This can be useful  when
visualizing peturbations and for exporting facted sculptural forms to an  OBJ
file.


CREDITS

Built using mingw tool-chain and FLTK user interface tool kit. Whelk links to
a modified version of WildMagic5p13 mathematics and custom versions of the 
Core and Application layers. Whelk uses modified FL_Trackball code with Wm5 
Quaternion and Vector3. Please see the files BVM_Trackball and BVM_Gl_View for 
modifications.


DOCUMENTATION

Consult the Whelk home page:
http://www.neolithicsphere/whelk/index.htm


VERSION HISTORY
--------------------------------------------------------------------------------
Whelk-1-2-1-win32-OpenGL [ code name Tursch ]           [ Uploaded 01 Jan 2020 ]               

This is a big update with many improvements and modifications including:

   * Inner wall with Start and End stack counters.
     The wall thickness is the value in the counter multiplied by the profile 
     radius in any given stack.
     
     NOTE: increase the wall thickness when using large perturbations that may
     intrude on the inner wall. Alternatively, use a +VE wavefrom that only 
     deforms outward.
     
   * Perlin Noise for inner wall
     When using this option, it is best to set the Range from -1 to 0, otherwise 
     when the Perlin scale (k) is large, the Inner wall can intersect with the 
     outer. When using large noise values on the Inner wall, it is possible to 
     set the wall thickness to ZERO, as the thickness of the wall is created by 
     the Perlin scale alone.
     
   * Evolution setting.
   
   * Resolution Setting.
   
   * New Tursch method individual expansion rates for:
     R: radial expansion
     L: longitudinal expansion
     W: whorl expansion
     
     This allows the creation of convex and concave spires without using growth 
     curves. Load the files 'Concave_Spire_01.wlk' and 'Concave_Spire_01.wlk'
     in the Generators directors for examples.
  
   * Stack Profile Curve
     Lets user change the longitudinal cross section, thus allowing the creation
     of 'hooded' apertures (as in a Nautilus shell). Like sliceprofile curves, 
     the stack profile is saved with the model in binary format. Load the file 
     'Basic_Nautilus.wlk' in the Generators directory for example. The curve
     corresponds to the stack profile.
     
   * Whorl Stack Profile Curve
     This operates like the 'Stack Profile Curve' above, but rather than a 
     direct correspondence in shape, the bezier curve is used to specify the 
     rate of change.
     
     NOTE: You can use either the 'Stack Profile Curve' or the 'Whorl Stack 
     Profile Curve', but not both at the same time.
     
   * Whorl Growth Rate curve
     A new UI which lets the user fine tune the growth rate over time, thus 
     applying subtle ontogenic changes (to the aperture, for example). This 
     utilizes a bezier curve to alter the rate of change.
     
     NOTE: Growth curves are best applied to isometric forms where R=L=W.
     Be careful with the steepness of the curve at the pole; if the rate of
     change is too high at the start, the pole will tend to bloat out.
     
     BUG: Whilst the whorl expansion rate curve gets saved with the model, the 
     curve UI is updated with the curve named in the Curve choice, rather than 
     the model data. This necessitates choosing the correct curve from the menu.
     For example, the model 'Prehistoric_Carniverous.wlk' is meant to used with 
     the curve 'Concave_3' which must be re-applied after loading the model.
     This is not a problem with other curve types.
     
   * Ellipse option for aperture. The ellipse is specified by its minor polar 
     axis which has a default unit length giving a circle.
   
   * New File Format
     The file format has changed for this release. Whilst older files should 
     still open, they should be re-saved with this version to update them. In 
     order to automate this tedious process there is a new entry in the File 
     menu called 'Update Generator files'. This should work for Whelk versions 
     1-0-2, 1-0-4 and 1-0-6. You can multiple select a bunch of files and Whelk 
     will open each one, build it, then save it, over-writing the old file.

     IMPORTANT: You should not attempt to open the new files in older versions 
     of Whelk as they will fail to import.
     
     NOTE: There are many new examples in the Generators directory which 
     demonstrate the new features.
     
     Be aware that Tropism is now tied to the Whorl rate of change rather than
     the radial rate. Therefore Tropism might need adjustment when importing
     old models.

   * POV-Ray mesh2 export Inner Wall option
     The POV-Ray examples have been updated for the Inner wall feature. There 
     are two options for the mesh2 inc file regarding the inner wall; 1) use a 
     texture defintion per face; 2) use a single texture and leave the inner 
     wall with inward pointing normals. I decided to use a texture list with a 
     texture definition per face.

     When exporting the mesh2 INC file with an inner wall option, you must 
     #declare the following in your POV scene file before including the INC file

         // _Whelk_Texture_Outer_
         // _Whelk_Texture_Inner_
         // _Whelk_Texture_Outer_Cap_
         // _Whelk_Texture_Inner_Cap_
         // _Whelk_Transform_

     See the demo scene files for examples.
     
   * Medial Spiral Path
     Added option to draw the medial spiral path at the center of the profile.
     Added 'View' menu options to control Mesh and Medial spiral path visibilty.
     Viewing the spiral path alone can help when designing the form.
     
   * Added View menu item 'Take screenshot'.
     Screenshots are saved to the 'Output/Screenshots' directory.

   * Added 'Recorder' UI
     This is for recording a sequence of frames from the OpenGL view as it 
     tumbles. When the 'Record' button is pressed, the tumble motion of the 
     OpenGL view is saved as 'frame_0001.png', 'frame_0002.png', ... to  the 
     'Output/Frames'  directory. Recording slows the redraw as a file is written 
     for each frame.
    
     NOTE: there is no point in recording a non-moving scene unless you want to
     capture multiple still frames.

     IMPORTANT: When recording, do not let any windows obscure the OpenGL view: 
     move the Recorder window so that it does not lie over the OpenGL view.
    
     Added View menu items 'Reset Screenshot counter' and 'Reset Frame Counter'.

     NOTE: Any exsiting frames/screenshots will be over-written with the new 
     files.

   * Added Save option before quitting.

   * Fixed possible memory leak when quitting.

After reading the paper "SPIRAL GROWTH: THE 'MUSEUM OF ALL SHELLS' REVISITED" by
Bernard Tursch 1997, I realised I had already implemented most of the features 
described, although in a somewhat different way. The UI notation has now been
updated to comply with this paper. For example, the old option  'Generate Slice 
Profiles along Trochoidal axis' is now simply a case of when 'R', the 'Radial 
expansion factor', is zero. My 'Trochoidal shift' control is now named 'L' for 
'Longitudinal expansion factor', and the 'Profile radius' control is now 'W' 
for 'Whorl expansion factor'. As it stands, my 'Mobius inversion' control which 
applies a combined shift and pitch along the trochoidal axis, is not quite
redundant and has been kept for legacy reasons.

The main difference between this and previous versions of Whelk, is the addition
of independent expansion rates for R, L, and W. Previous versions used a
single radial expansion rate which was scaled independently for L and W. Note
that the new independent expansion rates R, L, W also have individual scaling 
factors Rs, Ls and Ws. This allows far greater control over the form.
--------------------------------------------------------------------------------
Whelk-1-0-4-rel                                         [ Uploaded 02 Dec 2019 ]               

Fixed bug introduced when changing font size for UI: the font size for the
PERTURB STACKS Gap spinner control was incorrectly set to 1, rather than 11. The
result was a dashed line in the read out, even though the control worked.
--------------------------------------------------------------------------------
Whelk-1-0-3b-rel                                        [ Uploaded 30 Nov 2019 ]               

Unicode filename support.
Tested WLK, OBJ, INC, CPR unicode filename save and load. There is an issue
when saving OBJ material (MTL) files with unicode names as the MTL name must be 
included in the OBJ file; however, the OBJ file format appears to support ASCII 
only. All the OBJ importers I was able to test with refused to load an MTL file 
with a unicode name. I have therefore elected to use a master MTL file in the 
OBJ directory called 'Whelk.mtl'. Do not delete this file as the OBJ files 
exported by Whelk require it.

File chooser now opens in default locations for 'WLK', 'CPR', 'OBJ' and 'INC'
file formats.

Created new POV-Ray demo scene with a low resolution mesh2 cone shell INC file.
--------------------------------------------------------------------------------
Whelk-1-0-2b                                            [ Uploaded 30 Nov 2019 ]               

Corrected Mobius inversion bug when using literal prefiles. This bug was
introduced in the previous release.

Changed input range for tilt angle control to [-180 to 180].
--------------------------------------------------------------------------------
Whelk-1-0-2                                             [ Uploaded 29 Nov 2019 ]               

Futher to an enquiry about Racka horn generation, I have added additional
controls to enable the formation of this horn type.

There two additional 'Generator' options:

1. Generate Slice profiles along the trochiodal shift axis.
   When this option is checked, profiles are built along the trochoidal axis,
   rather than the generated spiral radius. The trochoidal shift must be greater
   than ZERO for the horn to form - otherwise profiles will be simply stacked
   one on top of the other in the same plane resulting in a 2D shape.
   
2. Slice profile tilt angle.
   This allows adjustment of the horn/shell mouth by correcting any shear caused
   by trochoidal shift; as the trochoidal shift increases, so does the need to 
   adjust the profile tilt angle.
   
These two new options allow the construction of a greater variety of horns and
are best used with tropism. Load the files 'Narwhal.wlk' and 'Corkscrew.wlk'
for example use.

Improved 'View' menu options so that model can be viewed as a point cloud which
helps to reveal the inner structure.

Improved file Open/Save and user feedback when loading models with busy cursor.

Updated Whelk model format. Old models should still load but must be re-saved to
update to the new version.

Made the Profile Editor window modal.

Added registration module and resource manifest.

Note: development versions 0-0-4 through to 1-0-1 were never released.
Whelk-1-0-2 is the first non development release.
--------------------------------------------------------------------------------
Whelk-0-0-3r dev snapshot                            [ Uploaded: 05 April 2015 ]               

Improved stream IO on file and save.
IMPORTANT: IO stremaing for '.wlk' files has undergone considerable change
during alpha development. Only those files shipping with this release are
guaranteed to load correctly. Files from previous versions _should_ load, but
might not; this is because WM5_FILEIO_VALIDATE_OPERATION has been switched
on for release builds; to be safe, a valid flag is required for each read
operation before updating UI widgets.

Fixed UI bug when loading previous '.wlk' files that did not implement Perlin
Noise. In this instance, the Perlin Noise checkbox is now unchecked and the
Perlin panel deactivated.

Perlin Noise Panel
Added 'Set Cloud...' button. This brings up a modal diaglogue where the user
can enter Min and Max limits for the permutation array. NOTE: The difference
between Min and Max must be > 2. This provides an interesting way of 'editing'
the surface noise.

FOB (Fifth Order Blending) Check button
Having consulted Ken Perlin's paper on improved Perlin Noise, I have added
an option to use a fifth order blending curve f(t) = 6t^5 -15t^4 + 10t^3 to
compute the interpolant. This option is turned ON by default. When turned OFF,
the original Hermite blending function f(t) = 3t^2 - 2t^3 is used instead;
however, because it is highly desirable to have a continuous second derivative
for the noise function, the new default S-Curve is recommended. The effect is
subtle but most noticable at lower Octaves when the mesh resolution in Slices
>= 144. To see the effect, try setting the octaves to 3, the scaling constant
k to 0.2, and P to 0.8 or greater. You should see better definition in the
mesh when FOB is ON.

PRIMES Check Button
A new option to generate pseudo-random primes for the permutation array. This
is ON by default. When the option is ON, the tendency to modify the profile
is greater at lower Octaves. It is an experiment that provides another way to
modify noise.

Loading
Trackball is now reset after Loading a '.wlk' file.
--------------------------------------------------------------------------------
Whelk-0-0-3q dev snapshot                            [ Uploaded: 02 April 2015 ]               

Bugfix: Custom Profile UI state IO streaming. (The toggle button state was
incorrectly set after implementing Mobius inversion in Whelk-0-0-3k).
--------------------------------------------------------------------------------
Whelk-0-0-3p dev snapshot                            [ Uploaded: 01 April 2015 ]               

Implemented Perlin noise for the generator. Added two Perlin noise demos:

Output/Generators/PerlinNoiseDemo_01.wlk
Output/Generators/PerlinNoiseDemo_02.wlk

Perlin control panel widgets:
P:     the amount of turbulence to apply. Valid range is 0 to 1.
Oct:   the number of octaves. Valid range is 1 to 16.
k:     turbulence scaling factor
Seed:  re-seeds the random number generator. Valid range is 1 to 1000000.
Range: -1 to 1 applies negates from and adds to the original surface.
-1 to 0 negates from the original surface.
0 to 1 adds to the original surface.
--------------------------------------------------------------------------------
Whelk-0-0-3n dev snapshot                            [ Uploaded: 30 March 2015 ]               

Improved Tropism generator so that it works in both Pitch and Roll directions.
There are now two Tropism counters: Tropism A (pitch) and Tropism B (roll).
Demo files have been re-written over:

Output/Generators/TropismDemo_01.wlk
Output/Generators/TropismDemo_02.wlk

Modified UI so that it makes more sense; e.g., spiral type radio buttons are
now loctated in the SPIRAL group. This leaves more space in the GENERATOR
group for later additions.
--------------------------------------------------------------------------------
Whelk-0-0-3m dev snapshot                            [ Uploaded: 28 March 2015 ]               

Bugfix: Apex IO streaming.
--------------------------------------------------------------------------------
Whelk-0-0-3k dev snapshot                            [ Uploaded: 28 March 2015 ]               

Apex is now saved to '.wlk' file.

Added new generator control 'Mobius Invert'. This applies a trochoidal twist
such that the coil doubles back on itself, rather like a Mobius strip. As the
value moves toward HALF_PI, it will create two apparent coils - an inner and
an outer - though both are formed from the same mesh. This resuls in two
apertures, each facing in opposite directions. The normals of the inner
aperature face inward, whilst the normals of the outer aperture face outward.

Added new generator control 'Rotate'. This rotates the start position for each
slice array; the result is that slice perturbations rotate around the coil
cirumference. This was implemented for custom profiles in Whelk-0-0-3h dev
snapshot, but it now works for both custom and non-custom profiles.
The previous rotate widget has been removed from the Custom Profile window.

See files:
WaveSupressorDemo_06.wlk
WaveSupressorDemo_06_rotate.wlk
WaveSupressorDemo_06_rotate_2.wlk

Added new generator control 'Tropism'. This 'bends' the axis of the trochoidal
shift and is useful when generating horns.

See file:
TropismDemo_01.wlk
TropismDemo_02.wlk

Added some reset buttons to generator counters.
--------------------------------------------------------------------------------
Whelk-0-0-3j dev snapshot                            [ Uploaded: 22 March 2015 ]               

Fixed winding bug for custom profiles and non-sinistral coils. This became
apparent when rendering mesh2 export in POV-Ray: the interior and exterior
textures were swapped. The 'Show normals' and 'Show winding' menus in Whelk
confirm that the winding is now correct for non-sinistral profiles.

Enabled smooth shading as default.
--------------------------------------------------------------------------------
Whelk-0-0-3i dev snapshot                               [ Uploaded: ?? ?? ???? ]               

POV-Ray mesh2 export
Added code to swap the Z coordinate from OpenGL's Right handed system to
POV-Ray's Left handed system.
--------------------------------------------------------------------------------
Whelk-0-0-3h dev snapshot                            [ Uploaded: 13 March 2015 ]               

Custom Profile UI
Added horizontal line to show current build axis; this is drawn in the same
colour as the 3D axis in the OpenGL view, i.e.,  X=Red, Y=Green, Z=Blue.

Added a counter to rotate anchor points. Note: changing the start position
of a custom profile also changes the start position in the wave supression
array; therefore, indicators have been added to the Wave Supression Window.
(See note* below).

Loading a '.cpr' profile from the menu now updates the model without having to
click the 'Apply' button.

Wave Supressor UI
Made sure canvas redraws with the active layer when the mesh resolution is
changed on the Generator UI.

*Added two vertical lines to show the medial symmetry of form if user has
elected to rotate anchor points. The CYAN line indicates the outer medial
point, whilst the BLACK line indicates the inner medial point.
--------------------------------------------------------------------------------
Whelk-0-0-3g dev snapshot                            [ Uploaded: 12 March 2015 ]

Added widgets so user can move the Apex whan applying trochoidal shifts.
Cosmetic re-design of UI to make space for the above.
--------------------------------------------------------------------------------
Whelk-0-0-3f dev snapshot                            [ Uploaded: 11 March 2015 ]

Fixed orientation bug introduced in Whelk-0-0-3e by non-sinistral windings.
--------------------------------------------------------------------------------
Whelk-0-0-3e dev snapshot                            [ Uploaded: 11 March 2015 ]

Added Wave Supressor UI.
The Wave Supressor UI can limit generated waveforms to designated sectors
of the profile. Each sector of the profile is represented by a bezier curve.
Drag on the anchor/control points to adjust supressor amplitude.
(Anchor points can only move up and down; the first and last anchor points
move together). The Wave Supressor operates on individual layers for both
Stacks and Slices.

Note: if the supressor has no effect then either the generator amplitude is
zero, or the supressor strength is zero.

The Wave Supressor required an update to the Whelk file version which is now
WhelkV1.1. This means that '.wlk' export files from previous dev snapshots
will not load with Whelk-0-0-3e; but previous custom profiles will load.

The minimum number of slices has been changed to 16.

Added 'Sinistral' check box. When checked, spiral forms in an anti-clockwise
direction; i.e., with the apex at the top, the bottom aperture is on the left.
E.g., most land snails are sinistral but Japanese Wonder Shell is not.
(See the demo file in the Output/Generators directory for example).

Removed Edit Menu. The 'Custom Profile window is now acessed via a 'Set...'
button which is only active when 'Use Custom Profile' is ON.

Changed idle callback in OpenGL view so that view only updates when trackball
is changed. This speeds up the UI tenfold when tumbling has stopped - 
Left mouse button: drag to tumble; click to stop tumble.

TO DO: Aperture thickness and mesh deformation folds; aperture profiles, etc.
--------------------------------------------------------------------------------
Whelk-0-0-3d dev snapshot                            [ Uploaded: 04 March 2015 ]

Added custom texture and transform declarations for the mesh2 INC file.
Consult the following file for sample use:

./Output/INC/whelk_demo_scene.pov
--------------------------------------------------------------------------------
Whelk-0-0-3c dev snapshot                            [ Uploaded: 04 March 2015 ]

Added mesh2 export for POV-Ray 3.7.

Test render output files:
test_mesh2_export_smooth_01.png
test_mesh2_export_smooth_02.png
test_mesh2_export_smooth_03.png

Implemented streaming for the generator and all its widgets. The model state
can now be saved and loaded from a binary file. The extensions for Whelk
binary files are:

'.wlk' = Generator files         Saved in ./Output/Generators directory
'.cpr' = Custom profile files    Saved in ./Output/CustomProfiles directory

About Generator files
Generator files include custom profile data if 'Use Custom Profile'is ON.
In this case, the Mode menu state in the Custom Profile window is also
written to the 'wlk' file. There is no need to save a separate 'cpr' file.

About Custom Profile files
Custom profiles can also be saved individually as with Whelk-0-0-3a. In this
case, the Mode menu state is not saved with the 'cpr' file. This is so you
can apply different profiles to the same generator.

Fixed UI bug where the generator widgets were resized with the main window.
--------------------------------------------------------------------------------
Whelk-0-0-3a dev snapshot                                    [26 February 2015 ]

Custom profiles can now be saved and opened. To save a custom profile use
the menu 'File->Save profile' in the Custom Profile Window. Profiles are
saved in the Data/CustomProfiles directory and have a '.cpr' file extension.
When you open a custom profile, the profile view updates and the model is
rebuilt - but please ensure the toggle button 'Use Custom Profile' is ON or
you will not see the changes.

Remember that Whelk 'cpr' files only save profile data; they do not save
generator information such as trochoidal shift, or the cotangent alpha value.
This is so you can apply different profiles to the same generator.
Various test profiles are the Data/CustomProfiles directory ready to load.
For example, load the profile called 'ShellTest_1.cpr', then try using these
Manual values for the generator:

Stacks: 840
Slices: 80
Alpha: 80.5553877  or Cot alpha: 0.1663490
Scaling constant 0.0050
Stack size divisor: 26.0
Trochoidal shift: 1.1
Profile radius factor: 0.630

Remember that the smaller the cotangent of alpha, the tighter the winding, and
the more stacks required to build up the form.

Increase the number of slices to increase the resolution of the swept profile.
--------------------------------------------------------------------------------
Whelk-0-0-2z dev snapshot                         [ Uploaded: 17 February 2015 ]

Amplitudes can now have negative values. For example a positive value in one
layer can be modified by a negative value in another. This allows for subtle
modifications in waveform deformations.

Cleaned up the source code.
Added more instructions to the Makevariables file.
--------------------------------------------------------------------------------
Whelk-0-0-2x dev snapshot                          [ Uploaded: 09 October 2014 ]

New custom profile menu option 'Perturb along profile normals'. When checked
perturbations are extruded along custom profile normals rather than along the
radii vectors. The effect is most noticeable with concave profiles and/or at
anchor points which form the 'seams' of an extrued profile.
Custom profile menu option 'Perturb along profile normals' is only active for
literal profiles and turned off for magnitude profiles.
Custom Profile window: added option to draw the bezier curve normals which
show the extrusion direction for perturbations.
--------------------------------------------------------------------------------
Whelk-0-0-2r dev snapshot                           [ Uploaded: 06 October 2014]

Stopped recursive callbacks from altering the control point state when using
custom profile morphers.
--------------------------------------------------------------------------------
Whelk-0-0-2q dev snapshot                           [ Uploaded: 06 October 2014]

Activated the anchor point spinner control in the Custom Profile window.
Custom profiles can have either 8 or 4 anchor points:
8 anchor points: the steps value for slices counter control is reset to 8:16,
and the minimum number of slices is 8.
4 anchor points: the steps value for slices counter control is reset to 4:8,
and the minimum number of slices is 4.
Added morpher sliders to the Profile Editor window. Morphers target all
control points simultaneously. This allows symmetrical modification of the
profile. Use the sliders to change control point angles and lengths. The
morph actions are Mirror, Twist, CP1 and CP2. These function just like they do
in my 2D Java application  Griselda . If  Use Custom Profile  is ON,
(yellow light), the geometry is rebuilt when you click Apply.
--------------------------------------------------------------------------------
Whelk-0-0-2p dev snapshot                           [ Uploaded: 01 October 2014]

Fixed turtle orientation error when building custom profiles about the Y axis.
This was made apparent when Distributing 'One phase peak to peak' in slices
with Sin(5x)/5 - but only when the amplitude was large enough to show the
error. The phase 'peak' now correctly aligns with the positive build axis, (as
for X and Z). This fix makes orientation consistent for both custom and sine
wave profiles and preserves perturbation geometry in all axes of rotation.
Custom profile window:
Top anchor point    = Outer perimeter of form
Right anchor point  = Positive build axis
Left anchor point   = Negative build axis
Bottom anchor point = Inner perimeter of form
For example, to make a sinistral (left-handed) shell, build around Y axis and
use a negative trochoidal shift. Applied waveform(s) now share the same
intrinsic orientation and profile when the build axis is changed.
--------------------------------------------------------------------------------
Whelk-0-0-2m dev snapshot                         [ Uploaded: 29 September 2014]

Added check box option: 'Sample by curve length' to the Mode menu of Custom
Profile window. This option distributes vertices evenly on the bezier curves
(the custom profile is constructed from four bezier curves).
--------------------------------------------------------------------------------
Whelk-0-0-2k dev snapshot                         [ Uploaded: 28 September 2014]

Enabled layers; inevitably, this makes the build process slightly slower.
Corrected custom profile orientation bug when building around the Y-axis
(top-bottom and left-right were swapped).
Added about box.
--------------------------------------------------------------------------------
Whelk-0-0-2j dev snapshot                         [ Uploaded: 26 September 2014]

Fixed UI bug where the waveform choice menu did not display the start up
default waveform of ONE_PHASE_PEAK_TO_PEAK.
--------------------------------------------------------------------------------
Whelk-0-0-2i dev snapshot                         [ Uploaded: 26 September 2014]

Added custom profile option with a bezier profile editor window. Perturbations
may still be applied to custom profiles, so it is possible to distribute along
slices with f(x) and perturb the custom profile radii. Custom profiles may be
'Literal' representations of the curve or constructed by 'Magnitude' of radii.
Added more sine wave options.
Added Phase shift check button. Phase shift is a summation of values for
sin(mx)/m for m=1 to m=m, in steps of m+2. This only works when m is ODD.
Eg sin(3x)/3, sin(5x/5) etc. Higher m values result in more square wave forms.
See the enclosed spreadsheets in the output folder for examples.
Remember to increase the amplitude if a waveform doesn't appear to change the
geometry. Alternatively, if you are using a manual interval for f(x), change
the interval to another point on the waveform.
Layers remain deactivated in this version.
NOTE: 0-0-2i corrects a Phase shift loop bug in 0-0-2g, where m was
incremented by 1 instead of 2. Version 0-0-2i deactivates and clears the
Phase shift check button when m is 1 or even.
--------------------------------------------------------------------------------
Whelk-0-0-2e dev snapshot                         [ Uploaded: 20 September 2014]

Redesigned drawing algorithm. Slice amplitude now scales in or out from centre
of slice. Note that Slice distribution behaviour is now slightly different and
requires larger amplitudes. A 'profile editor' is in development...
Added dashes and gaps for Repeat action.
Redesigned UI with more meaningful controls.
Added Chromatic scale spiral (embodies equiangular spiral of music where alpha
is 77 degrees and fifty minutes).
Added Golden spiral that embodies both the golden section and the golden
numbers of the Fibonacci series. (The Divine Proportion - A Study in
Mathematical Beauty, H.E. Huntley).
Wrote preliminary code to support layers, (disabled in this version).
Added option to change the build axis - i.e. Build along Z, Y, or X.
--------------------------------------------------------------------------------
Whelk-0-0-1c dev snapshot                         [ Uploaded: 13 September 2014]

Updated Whelk_Readme.htm with better explanations and more examples. Improved
Stack and Slice sine wave code so that perturbations are truly zero at start
of growth and increase in direct proportion. The perturbation code now models
the same fundamental property of logarithmic spiral growth, i.e. the size
increases but the shape remains unaltered.
Added View menu options: 'Flip model normals', 'Draw model normals' and 'Draw
winding normals'.
--------------------------------------------------------------------------------
Whelk-0-0-1b dev snapshot                         [ Uploaded: 12 September 2014]

Added 'Slice ripple' controls
Fixed UI init bug for Ripple interval spinners
(negative intervals are not allowed).
--------------------------------------------------------------------------------
Whelk-0-0-1 dev snapshot                          [ Uploaded: 12 September 2014]

First upload
--------------------------------------------------------------------------------

LICENSING

    Whelk is no longer open source.


ON-LINE DOCUMENTATION
    
    http://www.neolithicsphere.com/whelk/index.htm

    
SUPPORT

    Documentation will be uploaded as the program develops. Please be sure to
    read the file 'Development-Status.txt' for any new features/changes.


TRADEMARKS

    Microsoft and Windows are registered trademarks of Microsoft Corporation.


COPYRIGHT

    Whelk is Copyright © Nicholas Shea 2013-2019.
    
    
DISCLAIMER OF WARRANTY AND LIMITATION OF LIABILITY.

 Whelk is distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE. Balazar Geodesics shall not be liable for any loss
 of profits, loss of business, loss of information, personal injury, indirect,
 special, incidental or consequential damages, expressly or not set forth
 herein incurred before, during or after the use of Whelk. Any liability
 of Balazar Geodesics will be limited exclusively to bug fixes or program
 replacement. Except as set forth above, no other warranties, either express
 or implied, including the warranties or conditions of merchantability and
 fitness for a particular purpose are applicable to this product or any of
 the other products which are created by Balazar Geodesics.