ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/vwright.c
Revision: 2.8
Committed: Sun Jun 14 00:33:16 2009 UTC (14 years, 10 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad4R0
Changes since 2.7: +54 -27 lines
Log Message:
Added new genklemsamp utility and made vwright more useful

File Contents

# User Rev Content
1 greg 2.1 #ifndef lint
2 greg 2.8 static const char RCSid[] = "$Id: vwright.c,v 2.7 2008/03/11 02:21:47 greg Exp $";
3 greg 2.1 #endif
4     /*
5     * Move a viewpoint the given distance to the right
6     */
7    
8    
9     #include "standard.h"
10    
11     #include "view.h"
12    
13 greg 2.3 #include <ctype.h>
14    
15 greg 2.2 VIEW vw = STDVIEW;
16 greg 2.1
17     char *progname;
18    
19    
20 schorsch 2.5 int
21     main(
22     int argc,
23     char *argv[]
24     )
25 greg 2.1 {
26     char linebuf[256];
27 greg 2.2 char *err;
28 greg 2.1 int gotview = 0;
29 greg 2.3 FVECT hvn, vvn;
30 greg 2.1 double dist;
31     register int i;
32    
33     progname = argv[0];
34 greg 2.8 ++argv; --argc;
35     while (argc && argv[0][0] == '-' && argv[0][1] == 'v') {
36     int rv;
37     if (argc > 2 && argv[0][2] == 'f') {
38     rv = viewfile(argv[1], &vw, NULL);
39     if (rv <= 0) {
40     fprintf(stderr, "%s: %s file '%s'\n",
41     progname,
42     rv < 0 ? "cannot open view" :
43     "no view in", argv[1]);
44     exit(1);
45     }
46     ++gotview;
47     ++argv; --argc;
48     } else {
49     rv = getviewopt(&vw, argc, argv);
50     if (rv < 0) {
51     fprintf(stderr, "%s: bad view option at '%s'\n",
52     progname, argv[0]);
53     exit(1);
54     }
55     ++gotview;
56     argv += rv; argc -= rv;
57     }
58     ++argv; --argc;
59     }
60     if (argc != 1)
61 greg 2.3 goto userr;
62 greg 2.8 if (!gotview)
63     while (fgets(linebuf, sizeof(linebuf), stdin) != NULL) {
64     if (linebuf[0] == '\n')
65     break;
66     if (isview(linebuf) && sscanview(&vw, linebuf) > 0)
67     ++gotview;
68     }
69 greg 2.1 if (!gotview) {
70     fprintf(stderr, "%s: no view on standard input\n", progname);
71     exit(1);
72     }
73 greg 2.2 if ((err= setview(&vw)) != NULL) {
74     fprintf(stderr, "%s: %s\n", progname, err);
75 greg 2.1 exit(1);
76     }
77 greg 2.3 VCOPY(hvn, vw.hvec);
78     normalize(hvn);
79     VCOPY(vvn, vw.vvec);
80     normalize(vvn);
81 greg 2.8 if (isalpha(argv[0][0])) { /* print out variables */
82 greg 2.3 switch (vw.type) {
83     case VT_PER: i=1; break;
84     case VT_PAR: i=2; break;
85     case VT_ANG: i=3; break;
86     case VT_HEM: i=4; break;
87     case VT_CYL: i=5; break;
88 greg 2.7 case VT_PLS: i=6; break;
89 greg 2.3 default: i=0; break;
90     }
91 greg 2.8 printf("%st:%d;", argv[0], i);
92     printf("%spx:%g;%spy:%g;%spz:%g;", argv[0], vw.vp[0],
93     argv[0], vw.vp[1], argv[0], vw.vp[2]);
94     printf("%sdx:%g;%sdy:%g;%sdz:%g;", argv[0], vw.vdir[0],
95     argv[0], vw.vdir[1], argv[0], vw.vdir[2]);
96     printf("%sd:%g;", argv[0], vw.vdist);
97     printf("%sux:%g;%suy:%g;%suz:%g;", argv[0], vw.vup[0],
98     argv[0], vw.vup[1], argv[0], vw.vup[2]);
99     printf("%sh:%g;%sv:%g;", argv[0], vw.horiz,
100     argv[0], vw.vert);
101 greg 2.3 printf("%ss:%g;%sl:%g;%so:%g;%sa:%g;",
102 greg 2.8 argv[0], vw.hoff, argv[0], vw.voff,
103     argv[0], vw.vfore, argv[0], vw.vaft);
104 greg 2.3 printf("%shx:%g;%shy:%g;%shz:%g;%shn:%g;",
105 greg 2.8 argv[0], hvn[0], argv[0], hvn[1],
106     argv[0], hvn[2], argv[0], sqrt(vw.hn2));
107 greg 2.3 printf("%svx:%g;%svy:%g;%svz:%g;%svn:%g;\n",
108 greg 2.8 argv[0], vvn[0], argv[0], vvn[1],
109     argv[0], vvn[2], argv[0], sqrt(vw.vn2));
110 greg 2.3 exit(0);
111     }
112 greg 2.8 if (!isflt(argv[0]))
113 greg 2.3 goto userr;
114 greg 2.8 dist = atof(argv[0]);
115 greg 2.1 for (i = 0; i < 3; i++)
116 greg 2.3 vw.vp[i] += dist*hvn[i];
117 greg 2.2 fprintview(&vw, stdout);
118 greg 2.1 putchar('\n');
119     exit(0);
120 greg 2.3 userr:
121     fprintf(stderr, "Usage: %s {offset|name}\n", progname);
122     exit(1);
123 greg 2.1 }