OOF: Finite Element Analysis of Microstructures

Recent Changes to PPM2OOF

This file lists the latest PPM2OOF modifications last.

Modifications to OOF are listed separately.

version 0.1.0 This is the first numbered version.
version 0.2.0 Has (almost) all the functionality of the GL version, plus a bit.
version 0.2.1 GUI for setting colors.
version 0.3 7/2/97
  • Selected mesh triangles drawn. Now all functions of the GL version are working in the X version.
version 0.3.1 7/3/97
  • Avoid core dump when attempting to add groups when no image has been loaded.
version 0.3.2 7/7/97
  • Fixed inversion of image in goof file. Bug was introduced in conversion to X.
  • Top and bottom node groups also had to be switched!
version 0.3.3 7/17/97
  • Support for 8 bit displays. Menus can be unreadable if other apps are using too many colors, but images are ok. Color reduction (from 24 to 8 bit images) isn't as good as it could be.
version 0.3.4 7/17/97 -- 7/30/97
  • Use X resources & fl_get_app_resources instead of getopt for command line arguments.
  • Fixed bugs in color reduction that could cause crashes.
  • Save "select method" settings when loading new image, and don't crash when setting is made when no image is loaded.
version 0.3.5 9/11/97
  • Updated scrollcanvas and related files with new versions from OOF.
version 0.4 9/16/97
  • Nothing new, except a nice round version number to put on the web.
version 0.4.1 11/04/97
  • Hexagonal material.
  • Changed -x option to -s. -x is an undocumented XForms option, so it can't be used when using XForms' option handling code.
  • Orthorhombic material.
  • Changed order of arguments in material functions so that they correspond to OOF's argument lists.
version 0.4.2 11/05/97 -- 11/07/97
  • Prohibit spaces in group names.
  • Do all PPM/PGM/PBM reading ourselves, no longer link to libppm.a, etc. Raw PBM files aren't working...
  • Fixed raw PBM problem. The pbm man page and xv have slightly different ideas about what the pbm format is. We're assuming for now that xv is right.
version 0.4.3 11/18/97
  • Fixed bug where despeckle was reporting the wrong number of additional pixels selected.
  • New menu routines, fixing bug in displaying commands executed from log files.
  • Firewalls!
  • Log file records scroll bars (not quite working) and zoom button.
version 0.5.0 2/13/98
  • Upgrade to XForms 0.88.
  • Changed command line options!
version 0.5.1 3/24-31/98
  • Adaptive mesh using newest node bisection.
version 0.5.2 4/16/98
  • Output of adaptive mesh.
version 0.6.0 6/98 -- 7/98
  • Catch and ignore BadWindow errors which can arise from clicking on a window as it's disappearing.
  • New controls on image windows!
  • "Home" key on keyboard brings up root menu.
  • "also_select" command in groups menu to select a group without unselecting current selection.
  • Mesh triangles can be put into groups.
  • Pixels and triangles can be selected by dragging the mouse.
  • Mesh triangles can inherit groups from pixels.
  • Mesh groups are written in goof file.
  • Command to save log file immediately, not just while quitting.
  • Completely revised adaptive_mesh menus.
version 0.6.1 7/98
  • Put undo/redo/clear/none back into pixel selection menu.
  • Select the intersection of a group with the set of selected pixels.
  • Unselect pixel groups.
version 0.6.2 8/28/98
  • Remove pixels from a group.
  • Moved firewall submenu to root menu.
  • Sub-pixel triangles in adaptive mesh now associated w/correct pixel.
version 0.6.3 9/2/98
  • Order in which materials appear in menus is same as in OOF.
  • Included Zimmer element.
  • Included Griffith & Griffith2 elements.
  • Fixed bug that was flipping simple_mesh output upside down.
version 0.6.4 9/10/98
  • Fixed bug introduced while fixing flipped mesh in 0.6.3!

version 1.0 9/16/98
  • Just renamed version 0.6.4
version 1.0.1 10/29/98
  • Fixed memory leak in ColorTree::operator=
  • New Demograyfy and DemoRGB commands for pixel selection from menu.
version 1.0.2 11/4/98
  • Sped up Demograyfy and DemoRGB and added "replace" argument.
version 1.0.3 12/22/98
  • Fixed bug that dumped core when saving adaptive meshes when there were empty pixel groups.
version 1.0.4 1/99
  • Image modification tools. Smooth, non-linear smooth, convert to gray. Crude interface, though.
  • New interface routines, colored text in message window.
version 1.0.5 1/99
  • GUI to image modification tools. Undo/redo for image modifications.
  • Each graphics window can have separate modifications. Image gallery.
  • When adding pixels to groups, the new group size is reported correctly even when a pixel is added to a group to which it already belongs. The "pixelgroup info" command reports the fraction of the image occupied by the group.
  • Avoided core dump when loading a non-existent ppmfile.
  • Fixed bug whereby misplaced hidden "Home" button in function windows could sometimes be triggered.
  • Select elliptical and circular regions with pixel selection tool.
  • Changed button for selecting pixel drag shape into a pulldown menu.
  • Expand selection to include neighboring pixels. Shrink selection to remove pixels near edges.
version 1.0.6 2/99
  • Avoided another core dump when attempting to load a non-existent ppmfile.
  • Fixed bug in which pixels on the boundary of adaptive mesh triangles weren't assigned to the correct triangles.
  • Info dashboard can mark the selected pixel and the pixels belonging to adaptive mesh triangles.
version 1.0.7 2/19/99
  • Added orientation to zimmer element argument list. It had been in the goof file, but there had been no way to set it.
version 1.0.8 3/2/99
  • Installed kludge that lets programs compiled under IRIX 6.5 run under IRIX 6.2.
version 1.0.9 4/1/99
  • Fixed crash when unselecting an empty pixelgroup.
version 1.1 b0 6/99
  • Cancelling a "save" in the image gallery works.
  • Better adaptive meshing:
  • Better "STOP" button, controlled by forked process.
version 1.1 b3
  • The STOP button works properly.
version 1.1 b4
  • Split Info dashboard into Pixel and Mesh dashboards.
  • Got rid of "adaptive_mesh refine homogeneity" in favor of "adaptive_mesh refine E".
  • Mesh dashboard can query E for mesh triangles, move nodes, select triangles, etc.
  • New commands in adaptive_mesh menus to select triangles with a range of E, query E, etc.
version 1.1 b5 7/22/99
  • Still better "STOP" button, using XEventsQueued. No forked process, graphics windows are updated, but cpu isn't sucked up.
  • Fixed bug in which elements could mysteriously become selected during edge swaps.
version 1.1 b6 8/99
  • Laplacian mesh smoothing.
  • Undo/Redo commands for mesh modifications.
version 1.1 b7 9/7/99
  • -quit command line option.
version 1.1 b8 9/99
  • Fixed bugs in transferring pixel groups to mesh triangles.
  • Can now define an active region. Selections, mesh operations, etc take place only within the region.
version 1.1 b9 9/13/99
  • New commands "adaptive_mesh refine interface" and "adaptive_mesh select interface" for acting on triangles whose neighbors have different materials assigned to them.
version 1.1 b10 9/99
  • Fixed mesh refinement bug wrt tracking which triangles touch a node. The results of the smooth and anneal commands were affected.
  • Mesh triangles are faded when not in the active region.
  • Got rid of garbage at beginning of lines in Message Window "save" output.
  • New refinement method "adaptive_mesh refine divison=smallest_E"
version 1.1 b11 9/27/99
  • "min_area" variable to limit mesh subdivision.
version 1.1 b12 10/25/99
  • Fixed a compilation flag for Linux PC version, so that it correctly swaps bytes in binary goof files.
version 1.1 b13 11/99
  • Added trigonal element.
  • Added zimmer2 element.
version 1.1 b14 11/99
  • Changed trigonal to trigonalA and trigonalB.
  • Added trigonalCrack.
version 1.1 b15 11/16/99
  • Fixed crash when setting adaptive_mesh/stack/stacksize before creating the mesh.
  • stacksize=1 no longer has a memory leak.
  • Changed order of libraries in SGI version to avoid memory fragmentation problems (!).
version 1.1 b16 11/18/99
  • Fixed a completely inconsequential memory leak.
version 1.1 b17 12/7/99
  • Fixed node group assignments in simple mesh output.
version 1.1b18 2/2/00
  • Fixed a core dump when using the "quit" command from the menu when certain dashboards were open. The problem did not affect the "Quit" button at the top of the window.
version 1.1b19 3/10/00
  • Added "adaptive_mesh/refine/bumps", which doesn't work quite as well as expected.
version 1.1b20 3/00 -- 4/00
  • New commands to save current state: "configuration save" and "configuration load". Loading a configuration file can be much faster than loading a log file.
  • Prohibited pixelgroups with no name.
  • Added ability to read gzipped ppm files.
  • Displayed version number on main window and in title bars.
  • Fixed a bug in which zooming the window would change which pixel was marked in the Pixel dashboard.
  • Fixed a bug in which the highlighted triangle sometimes wasn't updated correctly in the Mesh dashboard.
  • The -start command line option can now read configuration files. The quit dialog box saves configuration files, not log files. Log files can still be saved with the "log/save" command.
  • Fixed a bug in the application of stencils to gray images in the Image_Modification dashboard.
  • New images are displayed immediately instead of just being added to the gallery list. If the previous image has been modified, the new image isn't displayed unless the user says so, so as not to lose the modifications.
version 1.1b21 5/26/00
  • Added the "pause" command.
version 1.1b22 6/2/00
  • Changed the way the Demography pixel selection routine works. Formerly it did not distinguish between pixels with the same average gray value but different RGB values. Now it does distinguish between them.
version 1.1b23 6/6/00
  • Greatly sped up the selection of rectangles, circles, and ellipses with the Select dashboard.
version 1.1b24 6/9/00
  • Fixed a bug that could cause the burn algorithms to dump core when selecting a very large region of a very large image.
version 1.1b27 6/22/00 through 7/28/00
  • Brought menu code up-to-date with changes in OOF version.
  • Alied an "Info" button to the Selection dashboard for printing statistics on the current selection.
  • Alied an "Equalize" button to the Image Modification dashboard to remove non-uniform illumination.
  • Fixed a bug in reading raw pgm image files. (ppm and pbm weren't affected).
  • Worked around an XForms/Intel bug that prevented the "Info for..." menu in the Mesh dashboard from working correctly.
  • Alied checks to prevent infinite recursive subdivision of triangles, by changing the way that "adaptive_mesh/refine/min_area" is used, and by aliing "adaptive_mesh/refine/max_divisions". See the ppm2oof hints page for details.
  • Use a translucent color for marking the selected pixels.
  • Sped up internal image copying, somewhat.
  • Alied a "redraw" variable to the adaptive_mesh menu to suppress redrawing during lengthy mesh operations.
  • Alied an Automation dashboard to automatically sort pixels into two groups, based on the geometry of random burns.
version 1.1b28-
version 1.1b30
8/16/00 through 8/28/00
  • Fixed a bug in which the close button on the graphics windows wasn't logged correctly.
  • Fixed a bug which could cause crashes when running scripts without opening a valid image file.
  • Rewrote the adaptive mesh refinement code to avoid some rare circumstances that could lead to infinite loops. The new and old codes don't necessarily generate identical meshes, because they divide elements in a different order.
  • Added an "opacity" variable to the graphics menu, controlling the opacity of the selected pixels. opacity=1 is opaque, opacity=0 is translucent, and values in between are in between.
  • Added area information to the "adaptive_mesh/group/info" commands.
  • Added text mode for running ppm2oof without an X connection. Starting ppm2oof with the "-text" command line option prevents it from opening any windows. Commands may be typed at the console, as described in the Technical Notes chapter of the OOF manual. Commands requiring mouse input are obviously not available, but all graphics window functions that don't depend on the mouse position are present. To find the text version of those commands, examine the log file (with the "/log/save" command) from an interactive graphical session. The results of executing mouse click commands in a text session are undefined.
version 1.1b31 8/30/00
  • Fixed a bug that led to infinitely large configuration files when adaptive_mesh/stack/stacksize=1.
version 1.1b32 10/4/00
  • The only_once flag for the damage element wasn't stored properly in the .goof files.

version 1.1 Time to stop pretending that the adaptive mesh user interface will change significantly before version 2. Let's stop calling this a beta release.


  • Added thermal conductivity.
version 1.1.1 10/13/00
  • Merged thermal and regular versions. Using the -DTHERMAL compiler flag produces the thermal version.
  • Added Doug Twisselmann's Twissel Element (isotropic with a T independent stress free strain).
  • Sorted the materials/default menu correctly.
version 1.1.2 10/17/00
  • Non-thermal version no longer accidentally prints THERMAL at startup.
  • Workaround for XForms bug which makes command line argument parsing fail when the program name has more than one dot in it (as in "ppm2oof1.1.1").
version 1.1.3 10/19/00
  • Added the gas element (thermal conductivity but no elasticity) to the thermal version. The elastic-only version is unchanged.
  • Added a seed variable to the main menu, for seeding the random number generator.
version 1.1.4 11/01/00
  • Rewrote the pixel/triangle intersection code to be more robust when nodes fall exactly on pixel boundaries and vice versa.
  • Fixed a bug in removing pixels from groups. The bug could lead to problems in the automation dashboard.
  • Fixed a bug that could lead to crashes or corrupt .goof files after deleting pixel groups.
version 1.1.5 11/02/00
  • Upgraded to XForms library version 0.89.5.
  • Extended the -start command line option. It can now take as an argument a comma separated list of command files to be read and commands to execute, with the commands preceded by exclamation points. For example,
      ppm2oof -start initialize.cmd,\!select\ none,output.cmd
    The exclamation point is preceded by a backslash to prevent the Unix shell from interpreting it. If the commands contain spaces, the whole string must be enclosed in quotation marks, or the spaces must be preceded by backslashes. Commas within commands must be preceded by backslashes.
  • Added a cubic_crack material, which is like griffith2 but has cubic symmetry.
version 1.1.6 11/18/00
  • Fixed a bug introduced in version 1.1.4 that was making it impossible to read configuration files.
version 1.1.7 12/26/00
  • Fixed a bug that was causing the wrong material to be assigned to adaptive mesh elements. Elements that should have been empty at the edges of empty regions were sometimes given the properties of the adjacent region.
version 1.1.8 1/11/01
  • Fixed another bug that was causing the wrong material to be assigned to adaptive mesh elements. Elements whose nodes had moved across material boundaries sometimes didn't notice that they'd moved.
version 1.1.9 1/12/01
  • Fixed a bug in which mouse clicks were being misinterpreted. It only happened if the pixmap was the same size as the last pixmap clicked on, but the image was a different size.
version 1.1.10 1/30/01
  • Fixed a bug in emptyelement (again!) that was preventing empty elements with one color from being replaced with empty elements of another color.
  • Fixed a bug in "materials/reset_selected" that could crash the program.
version 1.1.11 2/20/01
  • The "Save" button in the graphics windows will now generate PostScript output if the output file name ends in ".ps" or ".eps".
version 1.1.12 3/15/01
  • Fixed a bug that could make pixels and elements think that they were in a group more than once, thereby confusing the homogeneity calculations.
version 1.1.14
(don't ask
about 1.1.13)
  • Added a new "adaptive_mesh/materials/set" menu, which explicitly sets material type of the currently selected mesh triangles. The triangles will keep their types until "adaptive_mesh/materials/transfer" is called, or until executing one of the edge swap routines. This is meant as a way of correcting misassigned materials just before saving a .goof file, and may produce undesired results otherwise.
version 1.1.15 4/19/01
  • Fixed a bug in loading meshes from configuration files. Meshes loaded from files would fail the "sanity check" test, if they had been refined before being saved. It's not clear if there were any other effects.
  • Finally fixed the bug that was causing the Image Gallery dashboard to warn about losing modifications to images, even if the images had been saved in the gallery.
version 1.1.16-
4/01 -- 5/01
  • Fixed an infinite loop in /adaptive_mesh/groups/subtract. I guess nobody ever used that function before.
  • Groups assigned by hand to triangles with /adaptive/mesh/groups/add and /adaptive/mesh/groups/subtract now persist.
  • Changed the format of configuration files. Old versions sometimes lost the materials assigned to triangles with /adaptive/mesh/groups/add. Materials assigned via the normal inheritance from pixel properties were unaffected.
version 1.1.19 6/01
  • Don't dump core, even for fatal errors, unless DEBUG is defined at compilation time.
  • Added OOF2 style mesh output. This feature isn't useful to anybody but the OOF2 developers yet.
version 1.1.20 11/08/01
  • Added tetragonal element, finally. Also added gradyation element for Grady White.
version 1.1.21 02/05/02
  • Minor changes to make gcc 2.96 happy. No additional features.
version 1.1.22 10/16/02
  • Modifications to allow compilation with gcc 3.1. No additional features.
version 1.1.23 02/20/03
  • Changed the way ppm2oof converts from color values represented as floats (in the range 0.0-1.0) and colors represented as ints (in the range 0-255). This can have minor consequences, but shouldn't be important unless small variations in color are significant in your micrograph. The new scheme is more resilient to round-off error which could lead to different behavior on different computers.
version 1.1.24 8/21/03
  • Added valeria element.
version 1.1.25 9/10/03
  • Back-port of OOF2's postscript image output routine. Image output is much more compact now.
version 1.1.26 10/07/03
  • Fixed a bug in timestamp.C that could cause errors if the timestamp overflowed at just the wrong point. Very unlikely.
version 1.1.27 10/31/03
  • Minor changes to accomodate gcc 3.3 and OS X 10.3.
version 1.1.28 2/18/05
  • New output routines for saving data in