📄 showme.c
字号:
printf(" ele: Loads an .ele file (and associated .node file).\n"); printf(" edge: Loads an .edge file (and associated .node file).\n"); printf(" part: Loads a .part file (and associated .node and .ele files).\n"); printf(" adj: Loads an .adj file (and associated .node, .ele, and .part files).\n"); printf(" voro: Loads a .v.node and .v.edge file for a Voronoi diagram.\n"); printf("\n"); printf(" Each row represents a different iteration number of the geometry files.\n"); printf(" For a full explanation of iteration numbers, read the instructions for\n"); printf(" Triangle. Briefly, iteration numbers are used to allow a user to easily\n"); printf(" represent a sequence of related triangulations. Iteration numbers are\n"); printf(" used in the names of geometry files; for instance, mymesh.3.ele is a\n"); printf(" triangle file with iteration number three, and mymesh.ele has an implicit\n"); printf(" iteration number of zero.\n\n"); printf(" The control buttons at the right end of each row display the two\n"); printf(" iterations currently under view. These buttons can be clicked to\n"); printf(" increase or decrease the iteration numbers, and thus conveniently view\n"); printf(" a sequence of meshes.\n\n"); printf(" Show Me keeps each file in memory after loading it, but you can force\n"); printf(" Show Me to reread a set of files (for one iteration number) by reclicking\n"); printf(" the button that corresponds to the current image. This is convenient if\n"); printf(" you have changed a geometry file.\n\n"); printf("File Formats:\n\n"); printf(" All files may contain comments prefixed by the character '#'. Points,\n"); printf(" segments, holes, triangles, edges, and subdomains must be numbered\n"); printf(" consecutively, starting from either 1 or 0. Whichever you choose, all\n"); printf(" input files must be consistent (for any single iteration number); if the\n"); printf(" nodes are numbered from 1, so must be all other objects. Show Me\n"); printf(" automatically detects your choice while reading a .node (or .poly) file.\n"); printf(" Examples of these file formats are given below.\n\n"); printf(" .node files:\n"); printf(" First line: <# of points> <dimension (must be 2)> <# of attributes>\n"); printf(" <# of boundary markers (0 or 1)>\n"); printf(" Remaining lines: <point #> <x> <y> [attributes] [boundary marker]\n"); printf("\n"); printf(" The attributes, which are typically floating-point values of physical\n"); printf(" quantities (such as mass or conductivity) associated with the nodes of\n"); printf(" a finite element mesh, are ignored by Show Me. Show Me also ignores\n"); printf(" boundary markers. See the instructions for Triangle to find out what\n"); printf(" attributes and boundary markers are.\n\n"); printf(" .poly files:\n"); printf(" First line: <# of points> <dimension (must be 2)> <# of attributes>\n"); printf(" <# of boundary markers (0 or 1)>\n"); printf(" Following lines: <point #> <x> <y> [attributes] [boundary marker]\n"); printf(" One line: <# of segments> <# of boundary markers (0 or 1)>\n"); printf(" Following lines: <segment #> <endpoint> <endpoint> [boundary marker]\n"); printf(" One line: <# of holes>\n"); printf(" Following lines: <hole #> <x> <y>\n"); printf(" [Optional additional lines that are ignored]\n\n"); printf(" A .poly file represents a Planar Straight Line Graph (PSLG), an idea\n"); printf(" familiar to computational geometers. By definition, a PSLG is just a\n"); printf(" list of points and edges. A .poly file also contains some additional\n"); printf(" information.\n\n"); printf(" The first section lists all the points, and is identical to the format\n"); printf(" of .node files. <# of points> may be set to zero to indicate that the\n"); printf(" points are listed in a separate .node file; .poly files produced by\n"); printf(" Triangle always have this format. When Show Me reads such a file, it\n"); printf(" also reads the corresponding .node file.\n\n"); printf(" The second section lists the segments. Segments are edges whose\n"); printf(" presence in a triangulation produced from the PSLG is enforced. Each\n"); printf(" segment is specified by listing the indices of its two endpoints. This\n"); printf(" means that its endpoints must be included in the point list. Each\n"); printf(" segment, like each point, may have a boundary marker, which is ignored\n"); printf(" by Show Me.\n\n"); printf(" The third section lists holes and concavities that are desired in any\n"); printf(" triangulation generated from the PSLG. Holes are specified by\n"); printf(" identifying a point inside each hole.\n\n"); printf(" .ele files:\n"); printf(" First line: <# of triangles> <points per triangle> <# of attributes>\n"); printf(" Remaining lines: <triangle #> <point> <point> <point> ... [attributes]\n"); printf("\n"); printf(" Points are indices into the corresponding .node file. Show Me ignores\n"); printf(" all but the first three points of each triangle; these should be the\n"); printf(" corners listed in counterclockwise order around the triangle. The\n"); printf(" attributes are ignored by Show Me.\n\n"); printf(" .edge files:\n"); printf(" First line: <# of edges> <# of boundary markers (0 or 1)>\n"); printf(" Following lines: <edge #> <endpoint> <endpoint> [boundary marker]\n"); printf("\n"); printf(" Endpoints are indices into the corresponding .node file. The boundary\n"); printf(" markers are ignored by Show Me.\n\n"); printf(" In Voronoi diagrams, one also finds a special kind of edge that is an\n"); printf(" infinite ray with only one endpoint. For these edges, a different\n"); printf(" format is used:\n\n"); printf(" <edge #> <endpoint> -1 <direction x> <direction y>\n\n"); printf(" The `direction' is a floating-point vector that indicates the direction\n"); printf(" of the infinite ray.\n\n"); printf(" .part files:\n"); printf(" First line: <# of triangles> <# of subdomains>\n"); printf(" Remaining lines: <triangle #> <subdomain #>\n\n"); printf(" The set of triangles is partitioned by a .part file; each triangle is\n"); printf(" mapped to a subdomain.\n\n"); printf(" .adj files:\n"); printf(" First line: <# of subdomains>\n"); printf(" Remaining lines: <adjacency matrix entry>\n\n"); printf(" An .adj file represents adjacencies between subdomains (presumably\n"); printf(" computed by a partitioner). The first line is followed by\n"); printf(" (subdomains X subdomains) lines, each containing one entry of the\n"); printf(" adjacency matrix. A nonzero entry indicates that two subdomains are\n"); printf(" adjacent (share a point).\n\n"); printf("Example:\n\n"); printf(" Here is a sample file `box.poly' describing a square with a square hole:\n"); printf("\n"); printf(" # A box with eight points in 2D, no attributes, no boundary marker.\n"); printf(" 8 2 0 0\n"); printf(" # Outer box has these vertices:\n"); printf(" 1 0 0\n"); printf(" 2 0 3\n"); printf(" 3 3 0\n"); printf(" 4 3 3\n"); printf(" # Inner square has these vertices:\n"); printf(" 5 1 1\n"); printf(" 6 1 2\n"); printf(" 7 2 1\n"); printf(" 8 2 2\n"); printf(" # Five segments without boundary markers.\n"); printf(" 5 0\n"); printf(" 1 1 2 # Left side of outer box.\n"); printf(" 2 5 7 # Segments 2 through 5 enclose the hole.\n"); printf(" 3 7 8\n"); printf(" 4 8 6\n"); printf(" 5 6 5\n"); printf(" # One hole in the middle of the inner square.\n"); printf(" 1\n"); printf(" 1 1.5 1.5\n\n"); printf(" After this PSLG is triangulated by Triangle, the resulting triangulation\n"); printf(" consists of a .node and .ele file. Here is the former, `box.1.node',\n"); printf(" which duplicates the points of the PSLG:\n\n"); printf(" 8 2 0 0\n"); printf(" 1 0 0\n"); printf(" 2 0 3\n"); printf(" 3 3 0\n"); printf(" 4 3 3\n"); printf(" 5 1 1\n"); printf(" 6 1 2\n"); printf(" 7 2 1\n"); printf(" 8 2 2\n"); printf(" # Generated by triangle -pcBev box\n"); printf("\n"); printf(" Here is the triangulation file, `box.1.ele'.\n"); printf("\n"); printf(" 8 3 0\n"); printf(" 1 1 5 6\n"); printf(" 2 5 1 3\n"); printf(" 3 2 6 8\n"); printf(" 4 6 2 1\n"); printf(" 5 7 3 4\n"); printf(" 6 3 7 5\n"); printf(" 7 8 4 2\n"); printf(" 8 4 8 7\n"); printf(" # Generated by triangle -pcBev box\n\n"); printf(" Here is the edge file for the triangulation, `box.1.edge'.\n\n"); printf(" 16 0\n"); printf(" 1 1 5\n"); printf(" 2 5 6\n"); printf(" 3 6 1\n"); printf(" 4 1 3\n"); printf(" 5 3 5\n"); printf(" 6 2 6\n"); printf(" 7 6 8\n"); printf(" 8 8 2\n"); printf(" 9 2 1\n"); printf(" 10 7 3\n"); printf(" 11 3 4\n"); printf(" 12 4 7\n"); printf(" 13 7 5\n"); printf(" 14 8 4\n"); printf(" 15 4 2\n"); printf(" 16 8 7\n"); printf(" # Generated by triangle -pcBev box\n"); printf("\n"); printf(" Here's a file `box.1.part' that partitions the mesh into four subdomains.\n"); printf("\n"); printf(" 8 4\n"); printf(" 1 3\n"); printf(" 2 3\n"); printf(" 3 4\n"); printf(" 4 4\n"); printf(" 5 1\n"); printf(" 6 1\n"); printf(" 7 2\n"); printf(" 8 2\n"); printf(" # Generated by slice -s4 box.1\n\n"); printf(" Here's a file `box.1.adj' that represents the resulting adjacencies.\n"); printf("\n"); printf(" 4\n"); printf(" 9\n"); printf(" 2\n"); printf(" 2\n"); printf(" 0\n"); printf(" 2\n"); printf(" 9\n"); printf(" 0\n"); printf(" 2\n"); printf(" 2\n"); printf(" 0\n"); printf(" 9\n"); printf(" 2\n"); printf(" 0\n"); printf(" 2\n"); printf(" 2\n"); printf(" 9\n"); printf("\n"); printf("Display Speed:\n"); printf("\n"); printf(" It is worthwhile to note that .edge files typically plot and print twice\n"); printf(" as quickly as .ele files, because .ele files cause each internal edge to\n"); printf(" be drawn twice. For the same reason, PostScript files created from edge\n"); printf(" sets are smaller than those created from triangulations.\n\n"); printf("Show Me on the Web:\n\n"); printf(" To see an illustrated, updated version of these instructions, check out\n"); printf("\n"); printf(" http://www.cs.cmu.edu/~quake/showme.html\n"); printf("\n"); printf("A Brief Plea:\n"); printf("\n"); printf(" If you use Show Me (or Triangle), and especially if you use it to\n"); printf(" accomplish real work, I would like very much to hear from you. A short\n"); printf(" letter or email (to jrs@cs.cmu.edu) describing how you use Show Me (and\n"); printf(" its sister programs) will mean a lot to me. The more people I know\n"); printf(" are using my programs, the more easily I can justify spending time on\n"); printf(" improvements, which in turn will benefit you. Also, I can put you\n"); printf(" on a list to receive email whenever new versions are available.\n"); printf("\n"); printf(" If you use a PostScript file generated by Show Me in a publication,\n"); printf(" please include an acknowledgment as well.\n\n"); exit(0);}void set_filenames(filename, lowermeshnumber)char *filename;int lowermeshnumber;{ char numberstring[100]; int i; for (i = 0; i < 2; i++) { strcpy(nodefilename[i], filename); strcpy(polyfilename[i], filename); strcpy(elefilename[i], filename); strcpy(edgefilename[i], filename); strcpy(partfilename[i], filename); strcpy(adjfilename[i], filename); strcpy(vnodefilename[i], filename); strcpy(vedgefilename[i], filename); if (lowermeshnumber + i > 0) { sprintf(numberstring, ".%d", lowermeshnumber + i); strcat(nodefilename[i], numberstring); strcat(polyfilename[i], numberstring); strcat(elefilename[i], numberstring); strcat(edgefilename[i], numberstring); strcat(partfilename[i], numberstring); strcat(adjfilename[i], numberstring); strcat(vnodefilename[i], numberstring); strcat(vedgefilename[i], numberstring); } strcat(nodefilename[i], ".node"); strcat(polyfilename[i], ".poly"); strcat(elefilename[i], ".ele"); strcat(edgefilename[i], ".edge"); strcat(partfilename[i], ".part"); strcat(adjfilename[i], ".adj"); strcat(vnodefilename[i], ".v.node"); strcat(vedgefilename[i], ".v.edge"); }}void parsecommandline(argc, argv)int argc;char **argv;{ int increment; int meshnumber; int i, j; quiet = 0; fillelem = 0; line_width = 1; bw_ps = 0; start_image = ELE; filename[0] = '\0'; for (i = 1; i < argc; i++) { if (argv[i][0] == '-') { for (j = 1; argv[i][j] != '\0'; j++) { if (argv[i][j] == 'f') { fillelem = 1; } if (argv[i][j] == 'w') { if ((argv[i][j + 1] >= '1') && (argv[i][j + 1] <= '9')) { line_width = 0; while ((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) { j++; line_width = line_width * 10 + (int) (argv[i][j] - '0'); } if (line_width > 100) { printf("Error: Line width cannot exceed 100.\n"); line_width = 1; } } } if (argv[i][j] == 'b') { bw_ps = 1; } if (argv[i][j] == 'Q') { quiet = 1; } if ((argv[i][j] == 'h') || (argv[i][j] == 'H') || (argv[i][j] == '?')) { info(); } } } else { strcpy(filename, argv[i]); } } if (filename[0] == '\0') {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -