1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
// Surface Evolver command to print color OFF file.
// usage:
// coff >>> "filename.off"
// Surface Evolver command to print Geomview OFF file in ascii format.
// Only facets that qualify under the current "show facets" criterion
// are listed. Facet frontcolor is used; backcolor ignored.
// Edges are not done, since the OFF format does not include them.
/* usage: read in this command file
set the "show facets" expression (optional)
run "coff" and redirect output to file.
Example:
Enter command: read "coff.cmd"
Enter command: show facet where not fixed
Enter command: coff >>> "filename.coff"
*/
// Reference: http://www.geom.uiuc.edu/software/geomview/geomview_6.html#SEC36
// Evolver's RGB components for color numbers. Fortunately, the Evolver
// command line has convenient array initializer syntax.
define rgb_coff real[16][4];
rgb_coff := {{ 0.0, 0.0, 0.0, 1.},{ 0.0, 0.0, 1.0, 1.0},{ 0.0, 1.0, 0.0, 1.0},
{ 0.0, 1.0, 1.0, 1.0},{ 1.0, 0.0, 0.0, 1.0},{ 1.0, 0.0, 1.0, 1.0},
{ 1.0, 0.5, 0.0, 1.0},{ 0.6, 0.6, 0.6, 1.0},{ 0.3, 0.3, 0.3, 1.0},
{ 0.3, 0.8, 1.0, 1.0},{ 0.5, 1.0, 0.5, 1.0},{ 0.5, 1.0, 1.0, 1.0},
{ 1.0, 0.5, 0.5, 1.0},{ 1.0, 0.5, 1.0, 1.0},{ 1.0, 1.0, 0.0, 1.0},
{ 1.0, 1.0, 1.0, 1.0}};
coff := {
local inx,fcount,ecount;
// Check assumptions
if torus then
{ errprintf "Cannot run 'coff' command in torus mode. Do 'detorus' first.\n";
abort;
};
if symmetry_group then
{ errprintf "Cannot run 'coff' command in symmetry group mode. Do 'detorus' first.\n";
abort;
};
if space_dimension != 3 then
{ errprintf "The 'coff' command must be run in three-dimensional space.\n";
abort;
};
if surface_dimension == 1 then
{ errprintf "The 'coff' command is not meant for the string model.\n";
abort;
};
if simplex_representation then
{ errprintf "The 'coff' command is not meant for the simplex model.\n";
abort;
};
if rgb_colors then
{ errprintf "The 'coff' command does not do RGB colors; do rgb_colors off.\n";
abort;
};
if lagrange_order >= 2 then
{ errprintf "The 'coff' command is meant for the linear model, not quadratic or Lagrange.\n";
abort;
};
// Consecutive index numbers for vertices
local v_inx;
define v_inx integer[max(vertex,id)];
inx := 0;
foreach vertex vv do
{ v_inx[vv.id] := inx;
inx += 1;
};
fcount := sum(facet,show and color >= 0);
ecount := sum(edge,show and color >= 0);
// file header is ascii
printf "COFF\n";
printf "%d %d %d\n",vertex_count,fcount,ecount;
// vertex list
foreach vertex do { printf "%f %f %f\n",x,y,z };
// Triangle list. Note rgb color indexes use +1 since
// colors are 0-15 but Evolver array indexes start at 1.
foreach facet ff where ff.show and ff.color >= 0 do
{ printf "%d ",3;
foreach ff.vertex vv do printf "%d ",v_inx[vv.id];
printf "%f %f %f\n",rgb_coff[ff.color+1][1],
rgb_coff[ff.color+1][2],rgb_coff[ff.color+1][3];
};
define v_inx integer[0]; // deallocate v_inx storage
}
// End coff.cmd
// Usage: coff >>> "filename.coff"
|