# $Id: xw30.py 11680 2011-03-27 17:57:51Z airwin $

#  Copyright (C) 2008 Hazen Babcock
#  Copyright (C) 2008 Andrew Ross

#  Alpha color values demonstration.
#
#  This file is part of PLplot.
#
#  PLplot is free software; you can redistribute it and/or modify
#  it under the terms of the GNU Library General Public License as published
#  by the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  PLplot is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Library General Public License for more details.
#
#  You should have received a copy of the GNU Library General Public License
#  along with PLplot; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
from plplot_py_demos import *

red   = array([  0, 255,   0,   0])
green = array([  0,   0, 255,   0])
blue  = array([  0,   0,   0, 255])
alpha = array([1.0, 1.0, 1.0, 1.0])

pos = array([0.0, 1.0])
rcoord = array([1.0, 1.0])
gcoord = array([0.0, 0.0])
bcoord = array([0.0, 0.0])
acoord = array([0.0, 1.0])
rev = array([0, 0])

def main():

  px = array([0.1, 0.5, 0.5, 0.1])
  py = array([0.1, 0.1, 0.5, 0.5])


  plscmap0n (4)
  plscmap0a (red, green, blue, alpha)

  # 
  #   Page 1:
  #
  #   This is a series of red, green and blue rectangles overlaid
  #   on each other with gradually increasing transparency.
  

  # Set up the window 
  pladv (0)
  plvpor (0.0, 1.0, 0.0, 1.0)
  plwind (0.0, 1.0, 0.0, 1.0)
  plcol0 (0)
  plbox ("", 1.0, 0, "", 1.0, 0)

  # Draw the boxes
  for i in range(9):
    icol = i%3 + 1

    # Get a color, change its transparency and 
    # set it as the current color. 
    rgba = plgcol0a (icol)
    plscol0a (icol, rgba[0], rgba[1], rgba[2], 1.0 - float(i)/9.0)
    plcol0 (icol)

    # Draw the rectangle 
    plfill (px, py)

    # Shift the rectangles coordinates
    px += 0.5/9.0
    py += 0.5/9.0

  # 
  #   Page 2:
  #
  #   This is a bunch of boxes colored red, green or blue with a single 
  #   large (red) box of linearly varying transparency overlaid. The
  #   overlaid box is completely transparent at the bottom and completely
  #   opaque at the top.
  

  # Set up the window 
  pladv(0)
  plvpor(0.1, 0.9, 0.1, 0.9)
  plwind(0.0, 1.0, 0.0, 1.0)

  # Draw the boxes. There are 25 of them drawn on a 5 x 5 grid. 
  for i in range(5): 
    # Set box X position 
    px[0] = 0.05 + 0.2 * i
    px[1] = px[0] + 0.1
    px[2] = px[1]
    px[3] = px[0]

    # We don't want the boxes to be transparent, so since we changed   
    # the colors transparencies in the first example we have to change 
    # the transparencies back to completely opaque. 
    icol = i%3 + 1
    rgba = plgcol0a (icol)
    plscol0a (icol, rgba[0], rgba[1], rgba[2], 1.0)
    plcol0 (icol)
    for j in range(5):
      # Set box y position and draw the box. 
      py[0] = 0.05 + 0.2 * j
      py[1] = py[0]
      py[2] = py[0] + 0.1
      py[3] = py[2]
      plfill(px, py)

  # Create the color map with 128 colors and use plscmap1la to initialize 
  # the color values with a linearly varying red transparency (or alpha) 
  plscmap1n(128)
  plscmap1la(1, pos, rcoord, gcoord, bcoord, acoord, rev)

  # Use that cmap1 to create a transparent red gradient for the whole
  # window.
  px[0] = 0.
  px[1] = 1.
  px[2] = 1.
  px[3] = 0.
   
  py[0] = 0.
  py[1] = 0.
  py[2] = 1.
  py[3] = 1.

  plgradient(px, py, 90.)

main()
