ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/vwright.c
(Generate patch)

Comparing ray/src/util/vwright.c (file contents):
Revision 2.1 by greg, Mon Nov 21 16:49:44 1994 UTC vs.
Revision 2.8 by greg, Sun Jun 14 00:33:16 2009 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1994 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Move a viewpoint the given distance to the right
6   */
# Line 13 | Line 10 | static char SCCSid[] = "$SunId$ LBL";
10  
11   #include "view.h"
12  
13 < VIEW    leftview = STDVIEW;
13 > #include <ctype.h>
14  
15 < VIEW    rightview;
15 > VIEW    vw = STDVIEW;
16  
17   char    *progname;
18  
19  
20 < main(argc, argv)
21 < int     argc;
22 < char    *argv[];
20 > int
21 > main(
22 >        int     argc,
23 >        char    *argv[]
24 > )
25   {
26          char    linebuf[256];
27 +        char    *err;
28          int     gotview = 0;
29 +        FVECT   hvn, vvn;
30          double  dist;
30        FVECT   v1;
31          register int    i;
32  
33          progname = argv[0];
34 <        if (argc != 2 || !isflt(argv[1])) {
35 <                fprintf(stderr, "Usage: %s offset\n", progname);
36 <                exit(1);
34 >        ++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 <        while (fgets(linebuf, sizeof(linebuf), stdin) != NULL) {
61 <                if (linebuf[0] == '\n')
62 <                        break;
63 <                if (isview(linebuf) && sscanview(&leftview, linebuf) > 0)
64 <                        gotview++;
65 <        }
60 >        if (argc != 1)
61 >                goto userr;
62 >        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          if (!gotview) {
70                  fprintf(stderr, "%s: no view on standard input\n", progname);
71                  exit(1);
72          }
73 <        fcross(v1, leftview.vdir, leftview.vup);
74 <        if (normalize(v1) == 0.) {
50 <                fprintf(stderr,
51 <                        "%s: view direction parallel to view up vector\n",
52 <                                progname);
73 >        if ((err= setview(&vw)) != NULL) {
74 >                fprintf(stderr, "%s: %s\n", progname, err);
75                  exit(1);
76          }
77 <        copystruct(&rightview, &leftview);
78 <        dist = atof(argv[1]);
77 >        VCOPY(hvn, vw.hvec);
78 >        normalize(hvn);
79 >        VCOPY(vvn, vw.vvec);
80 >        normalize(vvn);
81 >        if (isalpha(argv[0][0])) {      /* print out variables */
82 >                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 >                        case VT_PLS: i=6; break;
89 >                        default: i=0; break;
90 >                }
91 >                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 >                printf("%ss:%g;%sl:%g;%so:%g;%sa:%g;",
102 >                                argv[0], vw.hoff, argv[0], vw.voff,
103 >                                argv[0], vw.vfore, argv[0], vw.vaft);
104 >                printf("%shx:%g;%shy:%g;%shz:%g;%shn:%g;",
105 >                                argv[0], hvn[0], argv[0], hvn[1],
106 >                                argv[0], hvn[2], argv[0], sqrt(vw.hn2));
107 >                printf("%svx:%g;%svy:%g;%svz:%g;%svn:%g;\n",
108 >                                argv[0], vvn[0], argv[0], vvn[1],
109 >                                argv[0], vvn[2], argv[0], sqrt(vw.vn2));
110 >                exit(0);
111 >        }
112 >        if (!isflt(argv[0]))
113 >                goto userr;
114 >        dist = atof(argv[0]);
115          for (i = 0; i < 3; i++)
116 <                rightview.vp[i] += dist*v1[i];
117 <        fputs(VIEWSTR, stdout);
60 <        fprintview(&rightview, stdout);
116 >                vw.vp[i] += dist*hvn[i];
117 >        fprintview(&vw, stdout);
118          putchar('\n');
119          exit(0);
120 + userr:
121 +        fprintf(stderr, "Usage: %s {offset|name}\n", progname);
122 +        exit(1);
123   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines