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

Comparing ray/src/common/xf.c (file contents):
Revision 1.5 by greg, Fri Oct 6 09:39:42 1989 UTC vs.
Revision 1.7 by greg, Wed Oct 18 23:15:37 1989 UTC

# Line 12 | Line 12 | static char SCCSid[] = "$SunId$ LBL";
12  
13  
14   #define  PI             3.14159265358979323846
15 + #define  d2r(a)         ((PI/180.)*(a))
16  
17 < #define  checkarg(a,n)  if (strcmp(av[i],a) || i+n >= ac) goto done
17 > #define  checkarg(a,n)  if (av[i][a] || i+n >= ac) goto done
18  
19  
20   int
# Line 25 | Line 26 | char  *av[];
26   {
27          double  atof(), sin(), cos();
28          double  xfmat[4][4], m4[4][4];
29 <        double  xfsca, theta;
29 >        double  xfsca, dtmp;
30          int  i, icnt;
31  
32          setident4(retmat);
# Line 41 | Line 42 | char  *av[];
42                  switch (av[i][1]) {
43          
44                  case 't':                       /* translate */
45 <                        checkarg("-t",3);
45 >                        checkarg(2,3);
46                          m4[3][0] = atof(av[++i]);
47                          m4[3][1] = atof(av[++i]);
48                          m4[3][2] = atof(av[++i]);
# Line 50 | Line 51 | char  *av[];
51                  case 'r':                       /* rotate */
52                          switch (av[i][2]) {
53                          case 'x':
54 <                                checkarg("-rx",1);
55 <                                theta = PI/180.0 * atof(av[++i]);
56 <                                m4[1][1] = m4[2][2] = cos(theta);
57 <                                m4[2][1] = -(m4[1][2] = sin(theta));
54 >                                checkarg(3,1);
55 >                                dtmp = d2r(atof(av[++i]));
56 >                                m4[1][1] = m4[2][2] = cos(dtmp);
57 >                                m4[2][1] = -(m4[1][2] = sin(dtmp));
58                                  break;
59                          case 'y':
60 <                                checkarg("-ry",1);
61 <                                theta = PI/180.0 * atof(av[++i]);
62 <                                m4[0][0] = m4[2][2] = cos(theta);
63 <                                m4[0][2] = -(m4[2][0] = sin(theta));
60 >                                checkarg(3,1);
61 >                                dtmp = d2r(atof(av[++i]));
62 >                                m4[0][0] = m4[2][2] = cos(dtmp);
63 >                                m4[0][2] = -(m4[2][0] = sin(dtmp));
64                                  break;
65                          case 'z':
66 <                                checkarg("-rz",1);
67 <                                theta = PI/180.0 * atof(av[++i]);
68 <                                m4[0][0] = m4[1][1] = cos(theta);
69 <                                m4[1][0] = -(m4[0][1] = sin(theta));
66 >                                checkarg(3,1);
67 >                                dtmp = d2r(atof(av[++i]));
68 >                                m4[0][0] = m4[1][1] = cos(dtmp);
69 >                                m4[1][0] = -(m4[0][1] = sin(dtmp));
70                                  break;
71                          default:
72                                  return(i);
# Line 73 | Line 74 | char  *av[];
74                          break;
75  
76                  case 's':                       /* scale */
77 <                        checkarg("-s",1);
77 >                        checkarg(2,1);
78 >                        dtmp = atof(av[i+1]);
79 >                        if (dtmp == 0.0) goto done;
80 >                        i++;
81                          xfsca *=
82                          m4[0][0] =
83                          m4[1][1] =
84 <                        m4[2][2] = atof(av[++i]);
84 >                        m4[2][2] = dtmp;
85                          break;
86  
87                  case 'm':                       /* mirror */
88                          switch (av[i][2]) {
89                          case 'x':
90 <                                checkarg("-mx",0);
90 >                                checkarg(3,0);
91                                  xfsca *=
92                                  m4[0][0] = -1.0;
93                                  break;
94                          case 'y':
95 <                                checkarg("-my",0);
95 >                                checkarg(3,0);
96                                  xfsca *=
97                                  m4[1][1] = -1.0;
98                                  break;
99                          case 'z':
100 <                                checkarg("-mz",0);
100 >                                checkarg(3,0);
101                                  xfsca *=
102                                  m4[2][2] = -1.0;
103                                  break;
# Line 103 | Line 107 | char  *av[];
107                          break;
108  
109                  case 'i':                       /* iterate */
110 <                        checkarg("-i",1);
110 >                        checkarg(2,1);
111                          icnt = atoi(av[++i]);
112                          while (icnt-- > 0) {
113                                  multmat4(retmat, retmat, xfmat);
# Line 136 | Line 140 | char  *av[];
140   {
141          double  atof(), sin(), cos();
142          double  xfmat[4][4], m4[4][4];
143 <        double  xfsca, theta;
143 >        double  xfsca, dtmp;
144          int  i, icnt;
145  
146          setident4(retmat);
# Line 152 | Line 156 | char  *av[];
156                  switch (av[i][1]) {
157          
158                  case 't':                       /* translate */
159 <                        checkarg("-t",3);
159 >                        checkarg(2,3);
160                          m4[3][0] = -atof(av[++i]);
161                          m4[3][1] = -atof(av[++i]);
162                          m4[3][2] = -atof(av[++i]);
# Line 161 | Line 165 | char  *av[];
165                  case 'r':                       /* rotate */
166                          switch (av[i][2]) {
167                          case 'x':
168 <                                checkarg("-rx",1);
169 <                                theta = -PI/180.0 * atof(av[++i]);
170 <                                m4[1][1] = m4[2][2] = cos(theta);
171 <                                m4[2][1] = -(m4[1][2] = sin(theta));
168 >                                checkarg(3,1);
169 >                                dtmp = -d2r(atof(av[++i]));
170 >                                m4[1][1] = m4[2][2] = cos(dtmp);
171 >                                m4[2][1] = -(m4[1][2] = sin(dtmp));
172                                  break;
173                          case 'y':
174 <                                checkarg("-ry",1);
175 <                                theta = -PI/180.0 * atof(av[++i]);
176 <                                m4[0][0] = m4[2][2] = cos(theta);
177 <                                m4[0][2] = -(m4[2][0] = sin(theta));
174 >                                checkarg(3,1);
175 >                                dtmp = -d2r(atof(av[++i]));
176 >                                m4[0][0] = m4[2][2] = cos(dtmp);
177 >                                m4[0][2] = -(m4[2][0] = sin(dtmp));
178                                  break;
179                          case 'z':
180 <                                checkarg("-rz",1);
181 <                                theta = -PI/180.0 * atof(av[++i]);
182 <                                m4[0][0] = m4[1][1] = cos(theta);
183 <                                m4[1][0] = -(m4[0][1] = sin(theta));
180 >                                checkarg(3,1);
181 >                                dtmp = -d2r(atof(av[++i]));
182 >                                m4[0][0] = m4[1][1] = cos(dtmp);
183 >                                m4[1][0] = -(m4[0][1] = sin(dtmp));
184                                  break;
185                          default:
186                                  return(i);
# Line 184 | Line 188 | char  *av[];
188                          break;
189  
190                  case 's':                       /* scale */
191 <                        checkarg("-s",1);
191 >                        checkarg(2,1);
192 >                        dtmp = atof(av[i+1]);
193 >                        if (dtmp == 0.0) goto done;
194 >                        i++;
195                          xfsca *=
196                          m4[0][0] =
197                          m4[1][1] =
198 <                        m4[2][2] = 1.0 / atof(av[++i]);
198 >                        m4[2][2] = 1.0 / dtmp;
199                          break;
200  
201                  case 'm':                       /* mirror */
202                          switch (av[i][2]) {
203                          case 'x':
204 <                                checkarg("-mx",0);
204 >                                checkarg(3,0);
205                                  xfsca *=
206                                  m4[0][0] = -1.0;
207                                  break;
208                          case 'y':
209 <                                checkarg("-my",0);
209 >                                checkarg(3,0);
210                                  xfsca *=
211                                  m4[1][1] = -1.0;
212                                  break;
213                          case 'z':
214 <                                checkarg("-mz",0);
214 >                                checkarg(3,0);
215                                  xfsca *=
216                                  m4[2][2] = -1.0;
217                                  break;
# Line 214 | Line 221 | char  *av[];
221                          break;
222  
223                  case 'i':                       /* iterate */
224 <                        checkarg("-i",1);
224 >                        checkarg(2,1);
225                          icnt = atoi(av[++i]);
226                          while (icnt-- > 0) {
227                                  multmat4(retmat, xfmat, retmat);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines