void c_plvpas(PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT aspect) { PLFLT vpxmi, vpxma, vpymi, vpyma; PLFLT vpxmid, vpymid, vpxlen, vpylen, w_aspect, ratio; if (plsc->level < 1) { plabort("plvpas: Please call plinit first"); return; } if ((xmin >= xmax) || (ymin >= ymax)) { plabort("plvpas: Invalid limits"); return; } if (aspect <= 0.0) { c_plvpor(xmin, xmax, ymin, ymax); return; } vpxmi = plP_dcmmx(xmin); vpxma = plP_dcmmx(xmax); vpymi = plP_dcmmy(ymin); vpyma = plP_dcmmy(ymax); vpxmid = (vpxmi + vpxma) / 2.; vpymid = (vpymi + vpyma) / 2.; vpxlen = vpxma - vpxmi; vpylen = vpyma - vpymi; w_aspect = vpylen / vpxlen; ratio = aspect / w_aspect; /* * If ratio < 1, you are requesting an aspect ratio (y/x) less than the natural * aspect ratio of the specified window, and you will need to reduce the length * in y correspondingly. Similarly, for ratio > 1, x length must be reduced. */ if (ratio <= 0.) { plabort("plvpas: Error in aspect ratio setting"); return; } else if (ratio < 1.) vpylen = vpylen * ratio; else vpxlen = vpxlen / ratio; vpxmi = vpxmid - vpxlen / 2.; vpxma = vpxmid + vpxlen / 2.; vpymi = vpymid - vpylen / 2.; vpyma = vpymid + vpylen / 2.; plsvpa(vpxmi, vpxma, vpymi, vpyma); }
void WINAPI plvpor(PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax) { c_plvpor(xmin,xmax,ymin,ymax); }