# Surface Evolver Newsletter no. 21

Back to top of Surface Evolver documentation.

                             Surface Evolver Newsletter 21
                                   May, 2012
                         by Ken Brakke, brakke@susqu.edu

    Contents:
      New Surface Evolver version 2.50 available.
      Automated Windows install.
      64-bit Windows version.
      New book.
      3D printing with Evolver.
      Warning to users of Evolver's display_text.
      New Surface Evolver features.

    New Surface Evolver version 2.50 available.
       Surface Evolver version 2.50 is available for download at
       http://www.susqu.edu/brakke/evolver.
       This is the first official release since version 2.30c in January, 2008.
       For those who compile Evolver themselves, the same makefile may be used.

    Automated Windows install.
       Besides the usual zipped file of the Evolver distribution, I put together
       a package using the Microsoft Software Installer, which gives you the
       familiar semi-automated software installation that a lot of software
       uses.  The installer will go through steps of asking what directory
       you want to install in, setting the Evolver environment variables, and
       associating .fe files with Evolver.

    64-bit Windows version.
       The Windows distribution contains both a 32-bit version of Evolver
       (named evolver.exe) and a 64-bit version (named evolver64.exe).
       The 64-bit version is meant for very large surfaces, i.e.
       hundreds of thousands of facets and up.  Even if you have a 64-bit
       system, you should use the 32-bit version unless you have a very
       large surface, since the 32-bit version is 10 to 20 percent faster
       on 64-bit systems, since it has to move less data around.

    New book.
       I have helped Jean Berthier produce a book entitled "The Physics
       of Microdroplets," which has just been published:
       http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470938803.html
       There are hundreds of Evolver models involved, which are available
       on the book's web page (if you get the book).

    3D printing with Evolver.
       Over the past year I have been experimenting with 3D printing, using
       the Shapeways.com website.  I have done various minimal surfaces
       (using a mesh techinique to keep costs down and look artistic), and
       other mathematical shapes.  I have made all my models available for
       public purchase, and I have set up a web page with illustrations
       and links: http://www.susqu.edu/brakke/models/models.html.
       Also, I have set up a web page explaining in detail how I use Evolver
       to make the files to send to Shapeways.com.

    Warning to users of Evolver's display_text.
       If you have a recent development version of Evolver and have been using
       the display_text feature to display text in the graphics window, be
       warned that I have added a font size argument, so you will need to
       modify any existing datafiles that use it, and insert a relative
       font size (typically 0.03) as the third of five arguments.

    New Surface Evolver features.

      Converting torus model to Euclidean model.
        The "detorus" command will convert a torus model surface to a
        non-torus versions.  It goes through the same unwrapping
        procedure as the graphics display, so what you see in the
        graphics window (clipped, connected bodies, raw facets) will
        be what you get after detorus.  Useful prior to exporting a
        surface to an external 3D CAD file.

      Facet graphing in string model.
        Doing "show facet where ..." in the string model will now show
        the designated facets filled in with their colors.  By default,
        no facets are shown.  "show facet where 1" will show all facets.
        Default color is white. Nonconvex facets are shown properly.

      Superposing models.
        The "addload" command will read in a datafile without deleting
        the current surface.  Syntax:
           addload stringexpr
        where stringexpr can be a double-quoted filename or a string
        variable.  The "read" section of the new datafile is NOT read,
        to prevent re-definitions of commands and variables and to
        prevent initializations that would have a bad effect on the
        original surface.  But the top section is read, so all constraints,
        boundaries, and variables defined there should be compatible with
        the existing surface.

      Replacing the existing surface.
        The "replace_load" command will delete the current surface and
        load a new surface from a datafile.  Syntax:
           replace_load stringexpr
        where stringexpr can be a double-quoted filename or a string
        variable.  The "read" section of the new datafile is NOT read,
        Evolver scripts sometimes want to re-evolve a surface again from
        the start, and the old permload command has gotten so tangled up
        as to be unusable, so I have created the replace_load command,
        which deletes all the current surface elements and then does
        an addload of the new datafile.  So all variables are
        remembered, and replace_load is safe to use in loops in scripts.

      Permload deprecated.
        Do not use permload. It has gotten tangled up beyond fixing.
        Use replace_load instead.

      Displaying text in the graphics window.
        The display_text function will display text strings in the
        graphics window.  Syntax:
          text_id := display_text(x,y,height,string)
        where x,y are window-relative coordinates (from 0 to 1) and
        height is the window-relative font size (typically 0.03).
        Multiple strings can be displayed, and the text_id value
        lets you delete an old string, delete_text(text_id), before
        drawing a new string.

      Array initializer syntax in commands.
        It is now possible to use an array initializer as the right side
        of an array assignment command.

      Increment and decrement operators.
        The C-style ++ and -- operators work as increment and decrement
        operators on variables, attributes, and array elements. Examples:
           for ( inx := 1; inx <= 10 ; inx++ ) ...
           framenumber++;
        These work only as stand-alone commands, not within expressions,
        so you can't do "xx := yy++".

      Opacity.
        Evolver screen graphics can now show transparent surfaces.  If
        you set the facet opacity attribute to a value between 0 (clear)
        and 1 (opaque), screen graphics will show transparency.  Assigning
        a opacity value to any facet will activate the transparency in
        graphics; hitting the letter 'O' key in the graphics window will
        then toggle transparency.  Showing transparency properly requires
        sorting the facets back to front, so graphics will be slower if
        there are many facets. PostScript output will not show transparency.

      Command line script execution.
        The -r command line option lets you give a command string on the
        Evolver command line that will be executed automatically after the
        entire datafile is read in and the "read" section executed.  Input
        reverts to the usual interactive prompt after the command executes.
        Useful in batch runs of Evolver.  For example, you could have a "run"
        command in the datafile, and launch Evolver from your shell script
        with
                 evolver -r "run; exit 0;"
        to execute the run command and then quit with exit code 0.

      Evaluating level-set constraint functions.
        The value_of_constraint attribute of a vertex will return the value
        of the designated constraint at the vertex position.  Syntax is
        the same as the on_constraint attribute.  Example
           list vertex where on_constraint con1 and
                                     value_of_constraint con1 < 1e-5
        Note value_of_constraint is evaluated to the function also for
        variables not on the constraint.

      Break on warning.
        The break_on_warning toggle makes execution stop immediately when
        a warning happens and return to the command prompt.  The existing
        break_after_warning toggle lets the current command or script
        complete before breaking.

      Vertex-by-vertex control of hessian_normal
        The no_hessian_normal of a vertex will exempt a vertex from the
        hessian_normal mode when it is set to a non-zero value.

      Error message redirection
        The ">>2" and ">>>2"  symbols will redirect error messages and
        errprintf output to a file, the same as ">>" and ">>>"
        redirect normal output.

      Dot product notation:
        The multiplication symbol * between two vectors now means dot product.
        No need to use the old dot_product keyword.

      Bounding box.
        The show_bounding_box toggle command toggles showing the bounding
        box in graphics, same as hitting the "o" key in the graphics window.
        The bounding box color can be set with the bounding_box_color
        internal variable.

      view_transforms_use_unique_point
        When view transforms are generated with transform_expr, Evolver weeds out
        duplicate transforms.  By default, "duplicate" means the same transform
        matrix, but there are circumstances where different transform matrices carry
        the surface to the same spot. view_transforms_use_unique_point toggle enables
        a mode whereby two transform matrices are deemed identical if they transform
        the point given by the vector view_transforms_unique_point[] to the same
        image point.

      septum_flag
        Evolver toggle command.  Under some circumstances, popping a vertex
        can leave two regions connected by a tunnel; if the septum_flag toggle
        is on, it will force a  surface to be placed across the tunnel.

      centerofmass
        Boolean body attribute.  Applies to the "connected" bodies mode of graphical
        display in the torus model. When this is set for a body, the center of mass
        of the body as displayed is remembered, and the next time a body is graphed,
        its wrap is such that its new center of mass is near its previous center
        of mass.  This prevents bodies near the boundaries of the fundamental
        region from jumping back and forth as they shift slightly during evolution.
        Default on.  Example:
           set bodies centerofmass

      Dividing string-model facets.
        The facet_crosscut function subdivides a facet by constructing
        a diagonal edge between given vertices.  The return value is the
        id number of the new edge.  The new facet will be on the same body
        as the old facet.  Syntax:
          newedge := facet_crosscut(facet_id,tail_id,head_id)

      Random number seed.
        Added -sN command line option for setting random number seed.

    End of newsletter 21.