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