On Tuesday, September 30, 2008 at 14:30:56 (+0200) Davide Cesari writes:
> Hi, I made the original post on plplot-general list, concerning the
> difficulties encountered in extending the clipping region/disabling
> clipping which gave rise to the discussion about the plgvpw adjustment,
> so I come back to the clipping problem.
> Actually, giving a deeper look at the code, I noticed that the
> instruments for doing clip/unclip are already there, so I propose this
> function for clipping/unclipping which makes in C a better job than what
> I was trying to do in Fortran; I understand from the discussion that it
> is unlikely that the plplot API may be extended, however I think that it
> would be useful to have some kind of control on viewport clipping
> without having to do many not so intuitive calls, so here is my proposal.
> Best regards, and thank you for the discussion, Davide
A clip mode setting function sounds like a better approach. But like every
API addition the associated:
- multiple language bindings
- documentation additions
makes it a bit of a chore. I tend to do the lazy thing and grab the stream
pointer then get/set whatever data I need from there, but of course that's of
no help if you're not using C/C++.
For this example I'd rename it something like plsclipmode() to make its
function more transparent.
Also, static values are evil -- previous values of clip limits need to be
stored in the plstream struct, and note that all default to zero when a new
stream is constructed.
> #include "plplotP.h"
>
> /*
>
> Control viewport clipping state of current page/subpage
>
> mode (PLINT, input)
>
> 0 restore clipping to previous state (makes sense if plsclip
> has been previously called with mode = 1 or mode = 2 for the
> current page/subpage, otherwise results are unpredictable)
> 1 disable clipping (clip area is now the whole viewport)
> 2 disable clipping (clip area is now the whole subpage)
>
> */
>
> void c_plsclip(PLINT mode)
> {
> static PLINT crxmin=-1, crxmax=-1, crymin=-1, crymax=-1;
> PLINT pxmin, pxmax, pymin, pymax;
>
> if (mode == 0) {
> /* uninitialised case, return */
> if (crxmin == -1) return;
> /* reset clip limits to original values */
> plP_sclp(crxmin, crxmax, crymin, crymax);
> } else if (mode == 1) {
> /* disable clipping (clip area is now the whole viewport) */
> /* remember original values */
> plP_gclp(&crxmin, &crxmax, &crymin, &crymax);
> /* get page physical limits */
> plP_gphy(&pxmin, &pxmax, &pymin, &pymax);
> /* set clip limits to physical limits */
> plP_sclp(pxmin, pxmax, pymin, pymax);
> } else if (mode == 2) {
> /* disable clipping (clip area is now the whole subpage) */
> /* remember original values */
> plP_gclp(&crxmin, &crxmax, &crymin, &crymax);
> /* get subpage limits */
> pxmin = plsc->sppxmi; pxmax = plsc->sppxma;
> pymin = plsc->sppymi; pymax = plsc->sppyma;
> /* set clip limits to subpage limits */
> plP_sclp(pxmin, pxmax, pymin, pymax);
> }
>
> }
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/_______________________________________________
> Plplot-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/plplot-devel
--
Maurice LeBrun
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Plplot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plplot-devel