24 #define dtr 0.01745329252
35 PLFLT dx, dy, mmxmi, mmxma, mmymi, mmyma;
36 PLFLT xvpwxmin, xvpwxmax, xvpwymin, xvpwymax;
39 if ( plsc->level < 2 )
41 plabort(
"plwind: Please set up viewport first" );
49 plwarn(
"plwind: Invalid window limits in x." );
54 plwarn(
"plwind: Invalid window limits in y." );
66 plP_xgvpw( &xvpwxmin, &xvpwxmax, &xvpwymin, &xvpwymax );
70 dx = xvpwxmax - xvpwxmin;
71 dy = xvpwymax - xvpwymin;
73 plsc->wpxscl = ( plsc->vppxma - plsc->vppxmi ) / dx;
74 plsc->wpxoff = ( xmax * plsc->vppxmi - xmin * plsc->vppxma ) / dx;
75 plsc->wpyscl = ( plsc->vppyma - plsc->vppymi ) / dy;
76 plsc->wpyoff = ( ymax * plsc->vppymi - ymin * plsc->vppyma ) / dy;
85 plsc->wmxscl = ( mmxma - mmxmi ) / dx;
86 plsc->wmxoff = ( xmax * mmxmi - xmin * mmxma ) / dx;
87 plsc->wmyscl = ( mmyma - mmymi ) / dy;
88 plsc->wmyoff = ( ymax * mmymi - ymin * mmyma ) / dy;
92 plsc->wdxscl = plsc->wmxscl * plsc->xpmm / ( plsc->phyxma - plsc->phyxmi );
93 plsc->wdxoff = plsc->wmxoff * plsc->xpmm / ( plsc->phyxma - plsc->phyxmi );
94 plsc->wdyscl = plsc->wmyscl * plsc->ypmm / ( plsc->phyyma - plsc->phyymi );
95 plsc->wdyoff = plsc->wmyoff * plsc->ypmm / ( plsc->phyyma - plsc->phyymi );
99 w.
dxmi = plsc->vpdxmi;
100 w.
dxma = plsc->vpdxma;
101 w.
dymi = plsc->vpdymi;
102 w.
dyma = plsc->vpdyma;
141 PLFLT xmin_adjusted, xmax_adjusted, ymin_adjusted, ymax_adjusted, zmin_adjusted, zmax_adjusted, d;
142 PLFLT cx, cy, saz, caz, salt, calt, zscale;
144 if ( plsc->level < 3 )
146 plabort(
"plw3d: Please set up 2-d window first" );
149 if ( basex <= 0.0 || basey <= 0.0 || height <= 0.0 )
151 plabort(
"plw3d: Invalid world coordinate boxsize" );
154 if ( xmin == xmax || ymin == ymax || zmin == zmax )
156 plabort(
"plw3d: Invalid axis range" );
159 if ( alt < 0.0 || alt > 90.0 )
161 plabort(
"plw3d: Altitude must be between 0 and 90 degrees" );
165 d = 1.0e-5 * ( xmax - xmin );
166 xmax_adjusted = xmax + d;
167 xmin_adjusted = xmin - d;
168 d = 1.0e-5 * ( ymax - ymin );
169 ymax_adjusted = ymax + d;
170 ymin_adjusted = ymin - d;
171 d = 1.0e-5 * ( zmax - zmin );
172 zmax_adjusted = zmax + d;
173 zmin_adjusted = zmin - d;
174 cx = basex / ( xmax_adjusted - xmin_adjusted );
175 cy = basey / ( ymax_adjusted - ymin_adjusted );
176 zscale = height / ( zmax_adjusted - zmin_adjusted );
177 saz = sin(
dtr * az );
178 caz = cos(
dtr * az );
179 salt = sin(
dtr * alt );
180 calt = cos(
dtr * alt );
182 plsc->domxmi = xmin_adjusted;
183 plsc->domxma = xmax_adjusted;
184 plsc->domymi = ymin_adjusted;
185 plsc->domyma = ymax_adjusted;
186 plsc->zzscl = zscale;
187 plsc->ranmi = zmin_adjusted;
188 plsc->ranma = zmax_adjusted;
190 plsc->base3x = basex;
191 plsc->base3y = basey;
192 plsc->basecx = 0.5 * ( xmin_adjusted + xmax_adjusted );
193 plsc->basecy = 0.5 * ( ymin_adjusted + ymax_adjusted );
232 plsc->cxx = cx * caz;
233 plsc->cxy = -cy * saz;
234 plsc->cyx = cx * saz * salt;
235 plsc->cyy = cy * caz * salt;
236 plsc->cyz = zscale * calt;
237 plsc->czx = -cx * calt * saz;
238 plsc->czy = -cy * calt * caz;
239 plsc->czz = zscale * salt;
void plP_swin(PLWindow *plwin)
void plabort(PLCHAR_VECTOR errormsg)
void c_plw3d(PLFLT basex, PLFLT basey, PLFLT height, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, PLFLT alt, PLFLT az)
void c_plwind(PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax)
void plP_xgvpw(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
void plwarn(PLCHAR_VECTOR errormsg)