A Display Program for Meshes and More.
Jonathan Richard Shewchuk
Show Me (version 1.3, with Triangle version 1.5) is available as a .zip file (158K) or as a .shar.gz file (157K) (uncompress with gunzip, then extract with sh) from Netlib in the voronoi directory. Please note that although Triangle and Show Me are freely available, it is copyrighted by the author and may not be sold or included in commercial products without a license.
The command syntax is: showme [-bfw_Qh] input_file The underscore indicates that a number should follow the -w switch. input_file may be one of several types of file. It must have extension .node, .poly, .ele, .edge, .part, or .adj. If no extension is provided, Show Me will assume the extension .ele. A .node file represents a set of points; a .poly file represents a Planar Straight Line Graph; an .ele file (coupled with a .node file) represents the elements of a mesh or the triangles of a triangulation; an .edge file (coupled with a .node file) represents a set of edges; a .part file specifies a partition of a mesh; and a .adj file represents the adjacency graph defined by a partition. Command Line Switches: -b Makes all PostScript output black and white. If this switch is not selected, color PostScript is used for partitioned meshes and adjacency graphs (.part and .adj files). -f On color displays and in color PostScript, displays partitioned meshes by filling triangles with color, rather than by coloring the edges. This switch will result in a clearer picture if all triangles are reasonably large, and a less clear picture if small triangles are present. (There is also a button to toggle this behavior.) -w Followed by an integer, specifies the line width used in all images. (There are also buttons to change the line width.) -Q Quiet: Suppresses all explanation of what Show Me is doing, unless an error occurs. -h Help: Displays these instructions. Controls: To zoom in on an image, point at the location where you want a closer look, and click the left mouse button. To zoom out, click the right mouse button. In either case, the point you click on will be centered in the window. If you want to know the coordinates of a point, click the middle mouse button; the coordinates will be printed on the terminal you invoked Show Me from. If you resize the window, the image will grow or shrink to match. There is a panel of control buttons at the bottom of the Show Me window: Quit: Shuts down Show Me. <, >, ^, v: Moves the image in the indicated direction. Reset: Unzooms and centers the image in the window. When you switch from one image to another, the viewing region does not change, so you may need to reset the new image to make it fully visible. This often is the case when switching between Delaunay triangulations and their corresponding Voronoi diagrams, as Voronoi vertices can be far from the initial point set. Width+, -: Increases or decreases the width of all lines and points. Exp, +, -: These buttons appear only when you are viewing a partitioned mesh (.part file). `Exp' toggles between an exploded and non-exploded image of the mesh. The non-exploded image will not show the partition on a black and white monitor. `+' and `-' allow you to adjust the spacing between pieces of the mesh to better distinguish them. Fill: This button appears only when you are viewing a partitioned mesh (.part file). It toggles between color-filled triangles and colored edges (as the -f switch does). Filled triangles look better when all triangles are reasonably large; colored edges look better when there are very small triangles present. PS: Creates a PostScript file containing the image you are viewing. If the -b switch is selected, all PostScript output will be black and white; otherwise, .part.ps and .adj.ps files will be color, independent of whether you are using a color monitor. Normally the output will preserve the properties of the image you see on the screen, including zoom and line width; however, if black and white output is selected (-b switch), partitioned meshes will always be drawn exploded. The output file name depends on the image being viewed. If you want several different snapshots (zooming in on different parts) of the same object, you'll have to rename each file after Show Me creates it so that it isn't overwritten by the next snapshot. EPS: Creates an encapsulated PostScript file, suitable for inclusion in documents. Otherwise, this button is just like the PS button. (The main difference is that .eps files lack a `showpage' command at the end.) There are two nearly-identical rows of buttons that load different images from disk. Each row contains the following buttons: node: Loads a .node file. poly: Loads a .poly file (and possibly an associated .node file). ele: Loads an .ele file (and associated .node file). edge: Loads an .edge file (and associated .node file). part: Loads a .part file (and associated .node and .ele files). adj: Loads an .adj file (and associated .node, .ele, and .part files). voro: Loads a .v.node and .v.edge file for a Voronoi diagram. Each row represents a different iteration number of the geometry files. For a full explanation of iteration numbers, read the instructions for Triangle. Briefly, iteration numbers are used to allow a user to easily represent a sequence of related triangulations. Iteration numbers are used in the names of geometry files; for instance, mymesh.3.ele is a triangle file with iteration number three, and mymesh.ele has an implicit iteration number of zero. The control buttons at the right end of each row display the two iterations currently under view. These buttons can be clicked to increase or decrease the iteration numbers, and thus conveniently view a sequence of meshes. Show Me keeps each file in memory after loading it, but you can force Show Me to reread a set of files (for one iteration number) by reclicking the button that corresponds to the current image. This is convenient if you have changed a geometry file. File Formats: All files may contain comments prefixed by the character '#'. Points, segments, holes, triangles, edges, and subdomains must be numbered consecutively, starting from either 1 or 0. Whichever you choose, all input files must be consistent (for any single iteration number); if the nodes are numbered from 1, so must be all other objects. Show Me automatically detects your choice while reading a .node (or .poly) file. Examples of these file formats are given below. .node files: First line: <# of points>
<# of attributes> <# of boundary markers (0 or 1)> Remaining lines: [attributes] [boundary marker] The attributes, which are typically floating-point values of physical quantities (such as mass or conductivity) associated with the nodes of a finite element mesh, are ignored by Show Me. Show Me also ignores boundary markers. See the instructions for Triangle to find out what attributes and boundary markers are. .poly files: First line: <# of points> <# of attributes> <# of boundary markers (0 or 1)> Following lines: [attributes] [boundary marker] One line: <# of segments> <# of boundary markers (0 or 1)> Following lines: [boundary marker] One line: <# of holes> Following lines: [Optional additional lines that are ignored] A .poly file represents a Planar Straight Line Graph (PSLG), an idea familiar to computational geometers. By definition, a PSLG is just a list of points and edges. A .poly file also contains some additional information. The first section lists all the points, and is identical to the format of .node files. <# of points> may be set to zero to indicate that the points are listed in a separate .node file; .poly files produced by Triangle always have this format. When Show Me reads such a file, it also reads the corresponding .node file. The second section lists the segments. Segments are edges whose presence in a triangulation produced from the PSLG is enforced. Each segment is specified by listing the indices of its two endpoints. This means that its endpoints must be included in the point list. Each segment, like each point, may have a boundary marker, which is ignored by Show Me. The third section lists holes and concavities that are desired in any triangulation generated from the PSLG. Holes are specified by identifying a point inside each hole. .ele files: First line: <# of triangles> <# of attributes> Remaining lines: ... [attributes] Points are indices into the corresponding .node file. Show Me ignores all but the first three points of each triangle; these should be the corners listed in counterclockwise order around the triangle. The attributes are ignored by Show Me. .edge files: First line: <# of edges> <# of boundary markers (0 or 1)> Following lines: [boundary marker] Endpoints are indices into the corresponding .node file. The boundary markers are ignored by Show Me. In Voronoi diagrams, one also finds a special kind of edge that is an infinite ray with only one endpoint. For these edges, a different format is used: -1 The `direction' is a floating-point vector that indicates the direction of the infinite ray. .part files: First line: <# of triangles> <# of subdomains> Remaining lines: The set of triangles is partitioned by a .part file; each triangle is mapped to a subdomain. .adj files: First line: <# of subdomains> Remaining lines: An .adj file represents adjacencies between subdomains (presumably computed by a partitioner). The first line is followed by (subdomains X subdomains) lines, each containing one entry of the adjacency matrix. A nonzero entry indicates that two subdomains are adjacent (share a point). Example: Here is a sample file `box.poly' describing a square with a square hole: # A box with eight points in 2D, no attributes, no boundary marker. 8 2 0 0 # Outer box has these vertices: 1 0 0 2 0 3 3 3 0 4 3 3 # Inner square has these vertices: 5 1 1 6 1 2 7 2 1 8 2 2 # Five segments without boundary markers. 5 0 1 1 2 # Left side of outer box. 2 5 7 # Segments 2 through 5 enclose the hole. 3 7 8 4 8 6 5 6 5 # One hole in the middle of the inner square. 1 1 1.5 1.5 After this PSLG is triangulated by Triangle, the resulting triangulation consists of a .node and .ele file. Here is the former, `box.1.node', which duplicates the points of the PSLG: 8 2 0 0 1 0 0 2 0 3 3 3 0 4 3 3 5 1 1 6 1 2 7 2 1 8 2 2 # Generated by triangle -pcBev box Here is the triangulation file, `box.1.ele'. 8 3 0 1 1 5 6 2 5 1 3 3 2 6 8 4 6 2 1 5 7 3 4 6 3 7 5 7 8 4 2 8 4 8 7 # Generated by triangle -pcBev box Here is the edge file for the triangulation, `box.1.edge'. 16 0 1 1 5 2 5 6 3 6 1 4 1 3 5 3 5 6 2 6 7 6 8 8 8 2 9 2 1 10 7 3 11 3 4 12 4 7 13 7 5 14 8 4 15 4 2 16 8 7 # Generated by triangle -pcBev box Here's a file `box.1.part' that partitions the mesh into four subdomains. 8 4 1 3 2 3 3 4 4 4 5 1 6 1 7 2 8 2 # Generated by slice -s4 box.1 Here's a file `box.1.adj' that represents the resulting adjacencies. 4 9 2 2 0 2 9 0 2 2 0 9 2 0 2 2 9 Display Speed: It is worthwhile to note that .edge files typically plot and print twice as quickly as .ele files, because .ele files cause each internal edge to be drawn twice. For the same reason, PostScript files created from edge sets are smaller than those created from triangulations.