File: coff.cmd

package info (click to toggle)
evolver 2.70+ds-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 17,148 kB
  • sloc: ansic: 127,395; makefile: 209; sh: 98
file content (105 lines) | stat: -rw-r--r-- 3,305 bytes parent folder | download | duplicates (2)
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"