PLplot 5.9.6
|
00001 /* $Id$ 00002 * 00003 * Functions dealing with viewports. 00004 * 00005 * Copyright (C) 2004 Joao Cardoso 00006 * 00007 * This file is part of PLplot. 00008 * 00009 * PLplot is free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Library Public License as published 00011 * by the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * PLplot is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU Library General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Library General Public License 00020 * along with PLplot; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00022 */ 00023 00024 #include "plplotP.h" 00025 00026 static void 00027 c_plenvi( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, 00028 PLINT just, PLINT axis, PLINT old ); 00029 00030 /*--------------------------------------------------------------------------*\ 00031 * void plenv() 00032 * 00033 * Simple interface for defining viewport and window. 00034 * 00035 * The "just" parameter control how the axes will be scaled: 00036 * 00037 * just=-1 : The scales will not be set, the user must set up the scale 00038 * before calling plenv() using plsvpa(), plvasp() or other; 00039 * just= 0 : The scales will be set up to optimize plot area; 00040 * just= 1 : The scales will be the same; 00041 * just= 2 : The axes will be equal, the plot box will be square. 00042 * 00043 * The "axis" parameter is interpreted as follows: 00044 * 00045 * axis=-2 : draw no box, no tick marks, no numeric tick labels, no axes. 00046 * axis=-1 : draw box only. 00047 * axis= 0 : Draw box, ticks, and numeric tick labels. 00048 * axis= 1 : Also draw coordinate axes at X=0, and Y=0. 00049 * axis= 2 : Also draw a grid at major tick positions in both coordinates. 00050 * axis= 3 : Same as 2, but the grid will be also at the minor ticks. 00051 * axis=10 : Same as 0 except Logarithmic X tick marks. (The X data have 00052 * to be converted to logarithms separately.) 00053 * axis=11 : Same as 1 except Logarithmic X tick marks. (The X data have 00054 * to be converted to logarithms separately.) 00055 * axis=12 : Same as 2 except Logarithmic X tick marks. (The X data have 00056 * to be converted to logarithms separately.) 00057 * axis=13 : Same as 12, but the grid will be also at the minor ticks. 00058 * axis=20 : Same as 0 except Logarithmic Y tick marks. (The Y data have 00059 * to be converted to logarithms separately.) 00060 * axis=21 : Same as 1 except Logarithmic Y tick marks. (The Y data have 00061 * to be converted to logarithms separately.) 00062 * axis=22 : Same as 2 except Logarithmic Y tick marks. (The Y data have 00063 * to be converted to logarithms separately.) 00064 * axis=23 : Same as 22, but the grid will be also at the minor ticks. 00065 * axis=30 : Same as 0 except Logarithmic X,Y tick marks. (The X,Y data have 00066 * to be converted to logarithms separately.) 00067 * axis=31 : Same as 1 except Logarithmic X,Y tick marks. (The X,Y data have 00068 * to be converted to logarithms separately.) 00069 * axis=32 : Same as 2 except Logarithmic X,Y tick marks. (The X,Y data have 00070 * to be converted to logarithms separately.) 00071 * axis=33 : Same as 32, but the grid will be also at the minor ticks. 00072 * axis=40 : Same as 0 except date / time X tick marks. 00073 * axis=41 : Same as 1 except date / time X tick marks. 00074 * axis=42 : Same as 2 except date / time X tick marks. 00075 * axis=43 : Same as 42, but the grid will be also at the minor ticks. 00076 * axis=50 : Same as 0 except date / time Y tick marks. 00077 * axis=51 : Same as 1 except date / time Y tick marks. 00078 * axis=52 : Same as 2 except date / time Y tick marks. 00079 * axis=53 : Same as 52, but the grid will be also at the minor ticks. 00080 * axis=60 : Same as 0 except date / time X,Y tick marks. 00081 * axis=61 : Same as 1 except date / time X,Y tick marks. 00082 * axis=62 : Same as 2 except date / time X,Y tick marks. 00083 * axis=63 : Same as 62, but the grid will be also at the minor ticks. 00084 * axis=70 : Same as 0 except custom X,Y labels. 00085 * axis=71 : Same as 1 except custom X,Y labels. 00086 * axis=72 : Same as 2 except custom X,Y labels. 00087 * axis=73 : Same as 72, but the grid will be also at the minor ticks. 00088 \*--------------------------------------------------------------------------*/ 00089 00090 void 00091 c_plenv( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, 00092 PLINT just, PLINT axis ) 00093 { 00094 c_plenvi( xmin, xmax, ymin, ymax, just, axis, 1 ); 00095 } 00096 00097 /*--------------------------------------------------------------------------*\ 00098 * void plenv0() 00099 * 00100 * same as plenv() above, but if in multiplot mode does not advance the subpage, 00101 * instead clears it. 00102 \*--------------------------------------------------------------------------*/ 00103 00104 void 00105 c_plenv0( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, 00106 PLINT just, PLINT axis ) 00107 { 00108 c_plenvi( xmin, xmax, ymin, ymax, just, axis, 0 ); 00109 } 00110 00111 00112 static void 00113 c_plenvi( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, 00114 PLINT just, PLINT axis, PLINT old ) 00115 { 00116 PLFLT lb, rb, tb, bb, dx, dy; 00117 PLFLT xsize, ysize, size, xscale, yscale, scale; 00118 PLFLT spxmin, spxmax, spymin, spymax; 00119 PLFLT vpxmin, vpxmax, vpymin, vpymax; 00120 00121 if ( plsc->level < 1 ) 00122 { 00123 plabort( "plenv: Please call plinit first" ); 00124 return; 00125 } 00126 if ( xmin == xmax ) 00127 { 00128 plabort( "plenv: Invalid xmin and xmax arguments" ); 00129 return; 00130 } 00131 if ( ymin == ymax ) 00132 { 00133 plabort( "plenv: Invalid ymin and ymax arguments" ); 00134 return; 00135 } 00136 if ( just < -1 || just > 2 ) 00137 { 00138 plabort( "plenv: Invalid just option" ); 00139 return; 00140 } 00141 00142 if ( plsc->nsubx * plsc->nsuby == 1 ) /* not multiplot mode */ 00143 old = 1; 00144 00145 if ( old == 1 ) 00146 pladv( 0 ); 00147 else 00148 plclear(); 00149 00150 if ( just == 0 ) 00151 plvsta(); 00152 else if ( just == 1 ) 00153 { 00154 lb = 8.0 * plsc->chrht; 00155 rb = 5.0 * plsc->chrht; 00156 tb = 5.0 * plsc->chrht; 00157 bb = 5.0 * plsc->chrht; 00158 dx = ABS( xmax - xmin ); 00159 dy = ABS( ymax - ymin ); 00160 plgspa( &spxmin, &spxmax, &spymin, &spymax ); 00161 xsize = spxmax - spxmin; 00162 ysize = spymax - spymin; 00163 xscale = dx / ( xsize - lb - rb ); 00164 yscale = dy / ( ysize - tb - bb ); 00165 scale = MAX( xscale, yscale ); 00166 vpxmin = MAX( lb, 0.5 * ( xsize - dx / scale ) ); 00167 vpxmax = vpxmin + ( dx / scale ); 00168 vpymin = MAX( bb, 0.5 * ( ysize - dy / scale ) ); 00169 vpymax = vpymin + ( dy / scale ); 00170 plsvpa( vpxmin, vpxmax, vpymin, vpymax ); 00171 } 00172 else if ( just == 2 ) 00173 { 00174 lb = 8.0 * plsc->chrht; 00175 rb = 5.0 * plsc->chrht; 00176 tb = 5.0 * plsc->chrht; 00177 bb = 5.0 * plsc->chrht; 00178 plgspa( &spxmin, &spxmax, &spymin, &spymax ); 00179 xsize = spxmax - spxmin; 00180 ysize = spymax - spymin; 00181 size = MIN( xsize - lb - rb, ysize - tb - bb ); 00182 dx = ( xsize - size - lb - rb ) / 2; 00183 vpxmin = lb + dx; 00184 vpxmax = vpxmin + size; 00185 dy = ( ysize - size - bb - tb ) / 2; 00186 vpymin = bb + dy; 00187 vpymax = vpymin + size; 00188 plsvpa( vpxmin, vpxmax, vpymin, vpymax ); 00189 } 00190 00191 plwind( xmin, xmax, ymin, ymax ); 00192 00193 switch ( axis ) 00194 { 00195 case -2: 00196 break; 00197 case -1: 00198 plbox( "bc", (PLFLT) 0.0, 0, "bc", (PLFLT) 0.0, 0 ); 00199 break; 00200 case 0: 00201 plbox( "bcnst", (PLFLT) 0.0, 0, "bcnstv", (PLFLT) 0.0, 0 ); 00202 break; 00203 case 1: 00204 plbox( "abcnst", (PLFLT) 0.0, 0, "abcnstv", (PLFLT) 0.0, 0 ); 00205 break; 00206 case 2: 00207 plbox( "abcgnst", (PLFLT) 0.0, 0, "abcgnstv", (PLFLT) 0.0, 0 ); 00208 break; 00209 case 3: 00210 plbox( "abcgnsth", (PLFLT) 0.0, 0, "abcgnstvh", (PLFLT) 0.0, 0 ); 00211 break; 00212 case 10: 00213 plbox( "bclnst", (PLFLT) 0.0, 0, "bcnstv", (PLFLT) 0.0, 0 ); 00214 break; 00215 case 11: 00216 plbox( "abclnst", (PLFLT) 0.0, 0, "abcnstv", (PLFLT) 0.0, 0 ); 00217 break; 00218 case 12: 00219 plbox( "abcglnst", (PLFLT) 0.0, 0, "abcgnstv", (PLFLT) 0.0, 0 ); 00220 break; 00221 case 13: 00222 plbox( "abcglnsth", (PLFLT) 0.0, 0, "abcgnstvh", (PLFLT) 0.0, 0 ); 00223 break; 00224 case 20: 00225 plbox( "bcnst", (PLFLT) 0.0, 0, "bclnstv", (PLFLT) 0.0, 0 ); 00226 break; 00227 case 21: 00228 plbox( "abcnst", (PLFLT) 0.0, 0, "abclnstv", (PLFLT) 0.0, 0 ); 00229 break; 00230 case 22: 00231 plbox( "abcgnst", (PLFLT) 0.0, 0, "abcglnstv", (PLFLT) 0.0, 0 ); 00232 break; 00233 case 23: 00234 plbox( "abcgnsth", (PLFLT) 0.0, 0, "abcglnstvh", (PLFLT) 0.0, 0 ); 00235 break; 00236 case 30: 00237 plbox( "bclnst", (PLFLT) 0.0, 0, "bclnstv", (PLFLT) 0.0, 0 ); 00238 break; 00239 case 31: 00240 plbox( "abclnst", (PLFLT) 0.0, 0, "abclnstv", (PLFLT) 0.0, 0 ); 00241 break; 00242 case 32: 00243 plbox( "abcglnst", (PLFLT) 0.0, 0, "abcglnstv", (PLFLT) 0.0, 0 ); 00244 break; 00245 case 33: 00246 plbox( "abcglnsth", (PLFLT) 0.0, 0, "abcglnstvh", (PLFLT) 0.0, 0 ); 00247 break; 00248 case 40: 00249 plbox( "bcdnst", (PLFLT) 0.0, 0, "bcnstv", (PLFLT) 0.0, 0 ); 00250 break; 00251 case 41: 00252 plbox( "abcdnst", (PLFLT) 0.0, 0, "abcnstv", (PLFLT) 0.0, 0 ); 00253 break; 00254 case 42: 00255 plbox( "abcgdnst", (PLFLT) 0.0, 0, "abcgnstv", (PLFLT) 0.0, 0 ); 00256 break; 00257 case 43: 00258 plbox( "abcgdnsth", (PLFLT) 0.0, 0, "abcgnstvh", (PLFLT) 0.0, 0 ); 00259 break; 00260 case 50: 00261 plbox( "bcnst", (PLFLT) 0.0, 0, "bcdnstv", (PLFLT) 0.0, 0 ); 00262 break; 00263 case 51: 00264 plbox( "abcnst", (PLFLT) 0.0, 0, "abcdnstv", (PLFLT) 0.0, 0 ); 00265 break; 00266 case 52: 00267 plbox( "abcgnst", (PLFLT) 0.0, 0, "abcgdnstv", (PLFLT) 0.0, 0 ); 00268 break; 00269 case 53: 00270 plbox( "abcgnsth", (PLFLT) 0.0, 0, "abcgdnstvh", (PLFLT) 0.0, 0 ); 00271 break; 00272 case 60: 00273 plbox( "bcdnst", (PLFLT) 0.0, 0, "bcdnstv", (PLFLT) 0.0, 0 ); 00274 break; 00275 case 61: 00276 plbox( "abcdnst", (PLFLT) 0.0, 0, "abcdnstv", (PLFLT) 0.0, 0 ); 00277 break; 00278 case 62: 00279 plbox( "abcgdnst", (PLFLT) 0.0, 0, "abcgdnstv", (PLFLT) 0.0, 0 ); 00280 break; 00281 case 63: 00282 plbox( "abcgdnsth", (PLFLT) 0.0, 0, "abcgdnstvh", (PLFLT) 0.0, 0 ); 00283 break; 00284 case 70: 00285 plbox( "bcnost", (PLFLT) 0.0, 0, "bcnostv", (PLFLT) 0.0, 0 ); 00286 break; 00287 case 71: 00288 plbox( "abcnost", (PLFLT) 0.0, 0, "abcnostv", (PLFLT) 0.0, 0 ); 00289 break; 00290 case 72: 00291 plbox( "abcgnost", (PLFLT) 0.0, 0, "abcgnostv", (PLFLT) 0.0, 0 ); 00292 break; 00293 case 73: 00294 plbox( "abcgnosth", (PLFLT) 0.0, 0, "abcgnostvh", (PLFLT) 0.0, 0 ); 00295 break; 00296 default: 00297 plwarn( "plenv: Invalid axis argument" ); 00298 } 00299 } 00300 00301 /*--------------------------------------------------------------------------*\ 00302 * void plvsta() 00303 * 00304 * Defines a "standard" viewport with seven character heights for 00305 * the left margin and four character heights everywhere else. 00306 \*--------------------------------------------------------------------------*/ 00307 00308 void 00309 c_plvsta( void ) 00310 { 00311 PLFLT xmin, xmax, ymin, ymax; 00312 PLFLT lb, rb, tb, bb; 00313 00314 if ( plsc->level < 1 ) 00315 { 00316 plabort( "plvsta: Please call plinit first" ); 00317 return; 00318 } 00319 00320 /* Find out position of subpage boundaries in millimetres, reduce by */ 00321 /* the desired border, and convert back into normalized subpage */ 00322 /* coordinates */ 00323 00324 lb = 8.0 * plsc->chrht; 00325 rb = 5.0 * plsc->chrht; 00326 tb = 5.0 * plsc->chrht; 00327 bb = 5.0 * plsc->chrht; 00328 00329 xmin = plP_dcscx( plP_mmdcx( (PLFLT) ( plP_dcmmx( plsc->spdxmi ) + lb ) ) ); 00330 xmax = plP_dcscx( plP_mmdcx( (PLFLT) ( plP_dcmmx( plsc->spdxma ) - rb ) ) ); 00331 ymin = plP_dcscy( plP_mmdcy( (PLFLT) ( plP_dcmmy( plsc->spdymi ) + tb ) ) ); 00332 ymax = plP_dcscy( plP_mmdcy( (PLFLT) ( plP_dcmmy( plsc->spdyma ) - bb ) ) ); 00333 00334 plvpor( xmin, xmax, ymin, ymax ); 00335 } 00336 00337 /*--------------------------------------------------------------------------*\ 00338 * void plvpor() 00339 * 00340 * Creates a viewport with the specified normalized subpage coordinates. 00341 \*--------------------------------------------------------------------------*/ 00342 00343 void 00344 c_plvpor( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax ) 00345 { 00346 if ( plsc->level < 1 ) 00347 { 00348 plabort( "plvpor: Please call plinit first" ); 00349 return; 00350 } 00351 if ( ( xmin >= xmax ) || ( ymin >= ymax ) ) 00352 { 00353 plabort( "plvpor: Invalid limits" ); 00354 return; 00355 } 00356 if ( ( plsc->cursub <= 0 ) || ( plsc->cursub > ( plsc->nsubx * plsc->nsuby ) ) ) 00357 { 00358 plabort( "plvpor: Please call pladv or plenv to go to a subpage" ); 00359 return; 00360 } 00361 00362 plsc->vpdxmi = plsc->spdxmi + ( plsc->spdxma - plsc->spdxmi ) * xmin; 00363 plsc->vpdxma = plsc->spdxmi + ( plsc->spdxma - plsc->spdxmi ) * xmax; 00364 plsc->vpdymi = plsc->spdymi + ( plsc->spdyma - plsc->spdymi ) * ymin; 00365 plsc->vpdyma = plsc->spdymi + ( plsc->spdyma - plsc->spdymi ) * ymax; 00366 00367 plsc->vppxmi = plP_dcpcx( plsc->vpdxmi ); 00368 plsc->vppxma = plP_dcpcx( plsc->vpdxma ); 00369 plsc->vppymi = plP_dcpcy( plsc->vpdymi ); 00370 plsc->vppyma = plP_dcpcy( plsc->vpdyma ); 00371 00372 plsc->clpxmi = MAX( plsc->vppxmi, plsc->phyxmi ); 00373 plsc->clpxma = MIN( plsc->vppxma, plsc->phyxma ); 00374 plsc->clpymi = MAX( plsc->vppymi, plsc->phyymi ); 00375 plsc->clpyma = MIN( plsc->vppyma, plsc->phyyma ); 00376 00377 plsc->level = 2; 00378 } 00379 00380 /*--------------------------------------------------------------------------*\ 00381 * void plvpas() 00382 * 00383 * Creates the largest viewport of the specified aspect ratio that fits 00384 * within the specified normalized subpage coordinates. 00385 \*--------------------------------------------------------------------------*/ 00386 00387 void 00388 c_plvpas( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT aspect ) 00389 { 00390 PLFLT spxmin, spxmax, spymin, spymax; 00391 PLFLT vpxmin, vpxmax, vpymin, vpymax; 00392 PLFLT spxmid, spymid, xsize, ysize, nxsize, nysize, w_aspect, ratio; 00393 PLFLT xoffset, yoffset; 00394 00395 if ( plsc->level < 1 ) 00396 { 00397 plabort( "plvpas: Please call plinit first" ); 00398 return; 00399 } 00400 if ( ( xmin >= xmax ) || ( ymin >= ymax ) ) 00401 { 00402 plabort( "plvpas: Invalid limits" ); 00403 return; 00404 } 00405 00406 if ( aspect <= 0.0 ) 00407 { 00408 c_plvpor( xmin, xmax, ymin, ymax ); 00409 return; 00410 } 00411 00412 plgspa( &spxmin, &spxmax, &spymin, &spymax ); 00413 00414 xsize = spxmax - spxmin; 00415 ysize = spymax - spymin; 00416 00417 xoffset = xsize * xmin; 00418 yoffset = ysize * ymin; 00419 00420 spxmax = spxmin + xsize * xmax; 00421 spxmin = spxmin + xsize * xmin; 00422 spymax = spymin + ysize * ymax; 00423 spymin = spymin + ysize * ymin; 00424 00425 /* Adjust size for the requested edging */ 00426 xsize = spxmax - spxmin; 00427 ysize = spymax - spymin; 00428 00429 if ( aspect * xsize > ysize ) 00430 { 00431 nxsize = ysize / aspect; 00432 nysize = ysize; 00433 } 00434 else 00435 { 00436 nxsize = xsize; 00437 nysize = xsize * aspect; 00438 } 00439 00440 /* center plot within page */ 00441 00442 vpxmin = 0.5 * ( xsize - nxsize ) + xoffset; 00443 vpxmax = vpxmin + nxsize; 00444 vpymin = 0.5 * ( ysize - nysize ) + yoffset; 00445 vpymax = vpymin + nysize; 00446 00447 plsvpa( vpxmin, vpxmax, vpymin, vpymax ); 00448 } 00449 00450 /*--------------------------------------------------------------------------*\ 00451 * void plvasp() 00452 * 00453 * Sets the edges of the viewport with the given aspect ratio, leaving 00454 * room for labels. 00455 \*--------------------------------------------------------------------------*/ 00456 00457 void 00458 c_plvasp( PLFLT aspect ) 00459 { 00460 PLFLT spxmin, spxmax, spymin, spymax; 00461 PLFLT vpxmin, vpxmax, vpymin, vpymax; 00462 PLFLT xsize, ysize, nxsize, nysize; 00463 PLFLT lb, rb, tb, bb; 00464 00465 if ( plsc->level < 1 ) 00466 { 00467 plabort( "plvasp: Please call plinit first" ); 00468 return; 00469 } 00470 00471 lb = 8.0 * plsc->chrht; 00472 rb = 5.0 * plsc->chrht; 00473 tb = 5.0 * plsc->chrht; 00474 bb = 5.0 * plsc->chrht; 00475 00476 plgspa( &spxmin, &spxmax, &spymin, &spymax ); 00477 xsize = spxmax - spxmin; 00478 ysize = spymax - spymin; 00479 xsize -= lb + rb; /* adjust for labels */ 00480 ysize -= bb + tb; 00481 if ( aspect * xsize > ysize ) 00482 { 00483 nxsize = ysize / aspect; 00484 nysize = ysize; 00485 } 00486 else 00487 { 00488 nxsize = xsize; 00489 nysize = xsize * aspect; 00490 } 00491 00492 /* center plot within page */ 00493 00494 vpxmin = .5 * ( xsize - nxsize ) + lb; 00495 vpxmax = vpxmin + nxsize; 00496 vpymin = .5 * ( ysize - nysize ) + bb; 00497 vpymax = vpymin + nysize; 00498 00499 plsvpa( vpxmin, vpxmax, vpymin, vpymax ); 00500 } 00501 00502 /*--------------------------------------------------------------------------*\ 00503 * void plsvpa() 00504 * 00505 * Sets the edges of the viewport to the specified absolute coordinates 00506 * (mm), measured with respect to the current subpage boundaries. 00507 \*--------------------------------------------------------------------------*/ 00508 00509 void 00510 c_plsvpa( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax ) 00511 { 00512 PLFLT sxmin, symin; 00513 00514 if ( plsc->level < 1 ) 00515 { 00516 plabort( "plsvpa: Please call plinit first" ); 00517 return; 00518 } 00519 if ( ( xmin >= xmax ) || ( ymin >= ymax ) ) 00520 { 00521 plabort( "plsvpa: Invalid limits" ); 00522 return; 00523 } 00524 if ( ( plsc->cursub <= 0 ) || ( plsc->cursub > ( plsc->nsubx * plsc->nsuby ) ) ) 00525 { 00526 plabort( "plsvpa: Please call pladv or plenv to go to a subpage" ); 00527 return; 00528 } 00529 00530 sxmin = plP_dcmmx( plsc->spdxmi ); 00531 symin = plP_dcmmy( plsc->spdymi ); 00532 00533 plsc->vpdxmi = plP_mmdcx( (PLFLT) ( sxmin + xmin ) ); 00534 plsc->vpdxma = plP_mmdcx( (PLFLT) ( sxmin + xmax ) ); 00535 plsc->vpdymi = plP_mmdcy( (PLFLT) ( symin + ymin ) ); 00536 plsc->vpdyma = plP_mmdcy( (PLFLT) ( symin + ymax ) ); 00537 00538 plsc->vppxmi = plP_dcpcx( plsc->vpdxmi ); 00539 plsc->vppxma = plP_dcpcx( plsc->vpdxma ); 00540 plsc->vppymi = plP_dcpcy( plsc->vpdymi ); 00541 plsc->vppyma = plP_dcpcy( plsc->vpdyma ); 00542 00543 plsc->clpxmi = plP_dcpcx( plsc->vpdxmi ); 00544 plsc->clpxma = plP_dcpcx( plsc->vpdxma ); 00545 plsc->clpymi = plP_dcpcy( plsc->vpdymi ); 00546 plsc->clpyma = plP_dcpcy( plsc->vpdyma ); 00547 00548 plsc->level = 2; 00549 }