PLplot 5.9.6
plvpor.c
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 }
 All Data Structures Files Functions