|
|
1.1 root 1: /*
2: ...read triangle-format movie file...
3: nv
4: vx(i), vy(i) i=1,nv
5: nt
6: itri(1..3,it) it=1,nt
7: time, fmin, fmax
8: fk(i) i=1,nv in compressed format
9:
10: if nv=0 or nt=0, use same values as for previous frame
11:
12: WARNING. If vx,vy bounding box changes, so will grid.
13: */
14:
15: #include <stdio.h>
16: #include "view2d.h"
17: #define INF 1e25
18: char *progname;
19:
20: int mx, my; /* output grid */
21: float *tr, *f;
22: int nv, nt;
23: float *vx, *vy, *fk;
24: int *itri;
25: float xmin, xmax, ymin, ymax;
26: int verbose;
27:
28: main(argc,argv)
29: int argc;
30: char **argv;
31: {
32: int i, ifr;
33: char *Malloc();
34:
35: progname = argv[0];
36: mx = 5; my = 5;
37: verbose = 0;
38: for(argc--, argv++; *argv; argv++){
39: if(**argv == '-' ){
40: switch(argv[0][1]) {
41: case 'n':
42: i = sscanf(&argv[0][2], "%d,%d", &mx, &my);
43: if(i==1) my = mx;
44: else if(i!=2) error("options: -nmx,my");
45: break;
46: case 'v':
47: verbose++;
48: break;
49: }
50: }
51: }
52:
53: i = mx*my*sizeof(float);
54: tr = (float *)Malloc(i);
55: f = (float *)Malloc(i);
56: nv = 0;
57: nt = 0;
58: while(fr()){
59: if(verbose)fprintf(stderr,"frame %d done\n",ifr++);
60: }
61:
62: exit(0);
63: }
64:
65: fr()
66: {
67: int new_nv, new_nt;
68: int i, j;
69: float time, fmin, fmax, floor;
70: char *Malloc();
71:
72: i = scanf("%d",&new_nv);
73: if( i == EOF ) return(0);
74: if(verbose)fprintf(stderr,"nv=%d\n",new_nv);
75: if( nv==0 ){
76: if(new_nv==0) error("nv must be nonzero for first frame");
77: }else{
78: if(new_nv!=0){
79: free((char *)fk);
80: free((char *)vx);
81: free((char *)vy);
82: }
83: }
84: if((nv==0)||(new_nv!=0)){
85: nv = new_nv;
86: i = nv*sizeof(float);
87: fk = (float *)Malloc(i);
88: vx = (float *)Malloc(i);
89: vy = (float *)Malloc(i);
90: xmin = INF; xmax = -INF;
91: ymin = INF; ymax = -INF;
92: for(j=0; j<nv; j++){
93: i = scanf("%e %e",vx+j,vy+j);
94: if( i == EOF ) error("unexpected EOF");
95: if( i!=2 ) error("bad format");
96: if(vx[j]<xmin) xmin=vx[j];
97: if(vx[j]>xmax) xmax=vx[j];
98: if(vy[j]<ymin) ymin=vy[j];
99: if(vy[j]>ymax) ymax=vy[j];
100: }
101: }
102:
103: i = scanf("%d",&new_nt);
104: if( i == EOF ) error("unexpected EOF");
105: if(verbose)fprintf(stderr,"nt=%d\n",new_nt);
106: if( nt==0 ){
107: if(new_nt==0) error("automatic triangulation not implemented yet");
108: }else{
109: if(nt!=0){
110: free((char *)itri);
111: }
112: }
113: if((nt==0)||(new_nt!=0)){
114: nt = new_nt;
115: i = 3*nt*sizeof(int);
116: itri = (int *)Malloc(i);
117: for(j=0; j<nt; j++){
118: i = scanf("%d %d %d",itri+3*j,itri+1+3*j,itri+2+3*j);
119: if( i == EOF ) error("unexpected EOF");
120: if( i!=3 ) error("bad format");
121: }
122: macbox_( &nv,vx,vy,&nt,itri,
123: &mx,&xmin,&xmax,&my,&ymin,&ymax,tr);
124: if(verbose){
125: fprintf(stderr,"tr=");
126: for(i=0;i<mx*my;i++){
127: fprintf(stderr," %f",tr[i]);
128: }
129: fprintf(stderr,"\n");
130: }
131: }
132:
133: i = scanf("%e %f %f\n", &time, &fmin, &fmax);
134: if( i != 3 ) error("bad format");
135: for(j=0; j<nv; j++){
136: i = scanf("%e",fk+j);
137: if( i == EOF ) error("unexpected EOF");
138: if( i != 1 ) error("bad format");
139: }
140:
141:
142: floor = -INF;
143: intbox_(&mx,&xmin,&xmax,&my,&ymin,&ymax,f,tr,
144: &nv,fk,&floor,vx,vy,itri);
145: if(verbose){
146: fprintf(stderr,"f=\n");
147: for(j=0;j<my;j++){
148: for(i=0;i<mx;i++){
149: fprintf(stderr," %g",f[i+mx*j]);
150: }
151: fprintf(stderr,"\n");
152: }
153: }
154:
155: moviefil(1,mx,my,time,floor,f);
156:
157: return(1);
158: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.