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.2 by greg, Thu Sep 14 21:36:32 1995 UTC vs.
Revision 2.8 by greg, Sun Jun 14 00:33:16 2009 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1995 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 + #include <ctype.h>
14 +
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;
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(&vw, 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);
# Line 47 | Line 74 | char   *argv[];
74                  fprintf(stderr, "%s: %s\n", progname, err);
75                  exit(1);
76          }
77 <        dist = atof(argv[1])/sqrt(vw.hn2);
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 <                vw.vp[i] += dist*vw.hvec[i];
53 <        fputs(VIEWSTR, 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