Dear plplot subscribers,
     I would like to repeatedly enable/disable viewport clipping while 
plotting, in order to draw lines, symbols, etc. in a legend outside the 
plot, while retaining clipping when data is plotted. Is there a simple 
way to do this in plplot, or is clipping-disable in the TODO list?
     Up to now i found a suboptimal solution (see fortran subroutine 
further in text) by calling plgvpd/plgvpw to get viewport/window 
settings, setting viewport to [0.,1.],[0.,1.] and enlarging 
correspondingly the plotting window, then switching back to the initial 
settings when desired. However in this way, after a disable/enable 
cycle, the plotting window is not the same as before because the values 
obtained by plgwpd are not exactly the one previously passed to plwind, 
a little correction of 1.e-5 is made in the plwind code. Maybe adding a 
function similar to the one I propose in the C api (with exact window 
settings) could be a simple approach!? I could try provide a patch if 
this may help.
     Thank you for your help and best regards, Davide

SUBROUTINE clip_on_off()
USE plplot
IMPLICIT NONE
REAL(kind=plflt) :: nxmin, nxmax, nymin, nymax, &
  wxmin, wxmax, wymin, wymax
REAL(kind=plflt), SAVE :: snxmin, snxmax, snymin, snymax, &
  swxmin, swxmax, swymin, swymax
LOGICAL, SAVE :: clip_status = .TRUE.

IF (clip_status) THEN
   ! get and save the settings
   CALL plgvpd (nxmin, nxmax, nymin, nymax)
   CALL plgvpw (wxmin, wxmax, wymin, wymax)
   snxmin = nxmin; snxmax = nxmax
   snymin = nymin; snymax = nymax
   swxmin = wxmin; swxmax = wxmax
   swymin = wymin; swymax = wymax
   ! compute new "fullscreen" plotting window
   wxmin = swxmin - (wxmax-wxmin)/(nxmax-nxmin)*(nxmin)
   wxmax = swxmax + (wxmax-wxmin)/(nxmax-nxmin)*(1.0_plflt-nxmax)
   wymin = swymin - (wymax-wymin)/(nymax-nymin)*(nymin)
   wymax = swymax + (wymax-wymin)/(nymax-nymin)*(1.0_plflt-nymax)
   ! set viewport and plotting window to "fullscreen"
   CALL plvpor(0.0_plflt, 1.0_plflt, 0.0_plflt, 1.0_plflt)
   CALL plwind(wxmin, wxmax, wymin, wymax)
   clip_status = .FALSE.
ELSE
   ! restore previous settings
   CALL plvpor(snxmin, snxmax, snymin, snymax)
   CALL plwind(swxmin, swxmax, swymin, swymax)
   clip_status = .TRUE.
ENDIF
END SUBROUTINE clip_on_off

-- 
============================= Davide Cesari ============================
Servizio IdroMeteorologico ARPA Emilia Romagna
Area Modellistica Numerica e Radarmeteorologia
  Phone/Fax: +39 051525926/+39 0516497501
  E-mail:    [EMAIL PROTECTED]
  Home page: http://www.webalice.it/o.drofa/davide/
  Address:   ARPA-SIM, Viale Silvani 6, 40122 Bologna, Italy
========================================================================

-------------------------------------------------------------------------
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-general mailing list
Plplot-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-general

Reply via email to