)abbrev package VIEW ViewportPackage
++ Author: Jim Wen
++ Date Created: 30 April 1989
++ Basic Operations: graphCurves, drawCurves, coerce
++ Related Constructors:
++ Also See:
++ AMS Classifications:
++ Keywords:
++ References:
++ Description: ViewportPackage provides functions for creating GraphImages
++ and TwoDimensionalViewports from lists of lists of points.

ViewportPackage() : Exports == Implementation where
  DROP    ==> DrawOption
  GRIMAGE ==> GraphImage
  L       ==> List
  P       ==> Point DoubleFloat
  PAL     ==> Palette
  PI      ==> PositiveInteger
  VIEW2D  ==> TwoDimensionalViewport

  Exports ==> with

    graphCurves : (L L P, PAL, PAL, PI, L DROP) -> GRIMAGE
      ++ graphCurves([[p0], [p1], ..., [pn]], ptColor, lineColor, ptSize, [options])
      ++ creates a \spadtype{GraphImage} from the list of lists of points, p0
      ++ throught pn, using the options specified in the list \spad{options}.
      ++ The graph point color is specified by \spad{ptColor}, the graph line
      ++ color is specified by \spad{lineColor}, and the size of the points is
      ++ specified by \spad{ptSize}.
    graphCurves : L L P -> GRIMAGE
      ++ graphCurves([[p0], [p1], ..., [pn]]) creates a \spadtype{GraphImage} from
      ++ the list of lists of points indicated by p0 through pn.
    graphCurves : (L L P, L DROP) -> GRIMAGE
      ++ graphCurves([[p0], [p1], ..., [pn]], [options]) creates a
      ++ \spadtype{GraphImage} from the list of lists of points, p0 throught pn,
      ++ using the options specified in the list \spad{options}.
    drawCurves : (L L P, PAL, PAL, PI, L DROP) -> VIEW2D
      ++ drawCurves([[p0], [p1], ..., [pn]], ptColor, lineColor, ptSize, [options])
      ++ creates a \spadtype{TwoDimensionalViewport} from the list of lists of
      ++ points, p0 throught pn, using the options specified in the list
      ++ \spad{options}. The point color is specified by \spad{ptColor}, the
      ++ line color is specified by \spad{lineColor}, and the point size is
      ++ specified by \spad{ptSize}.
    drawCurves : (L L P, L DROP) -> VIEW2D
      ++ drawCurves([[p0], [p1], ..., [pn]], [options]) creates a
      ++ \spadtype{TwoDimensionalViewport} from the list of lists of points,
      ++ p0 throught pn, using the options specified in the list \spad{options};
    coerce : GRIMAGE -> VIEW2D
      ++ coerce(gi) converts the indicated \spadtype{GraphImage}, gi, into the
      ++ \spadtype{TwoDimensionalViewport} form.

  Implementation ==> add

    import from ViewDefaultsPackage
    import from DrawOptionFunctions0

--% Functions that return GraphImages

    graphCurves(listOfListsOfPoints) ==
      graphCurves(listOfListsOfPoints, pointColorDefault(), _
                  lineColorDefault(), pointSizeDefault(), [])

    graphCurves(listOfListsOfPoints, optionsList) ==
      graphCurves(listOfListsOfPoints, pointColorDefault(), _
                  lineColorDefault(), pointSizeDefault(), optionsList)

    graphCurves(listOfListsOfPoints, ptColor, lineColor, ptSize, optionsList) ==
      len := #listOfListsOfPoints
      listOfPointColors : L PAL := [ptColor for i in 1..len]
      listOfLineColors  : L PAL := [lineColor for i in 1..len]
      listOfPointSizes  : L PI  := [ptSize  for i in 1..len]
      makeGraphImage(listOfListsOfPoints, listOfPointColors, _
                         listOfLineColors, listOfPointSizes, optionsList)

--% Functions that return Two Dimensional Viewports

    drawCurves(listOfListsOfPoints, optionsList) ==
      drawCurves(listOfListsOfPoints, pointColorDefault(), _
                 lineColorDefault(), pointSizeDefault(), optionsList)

    drawCurves(ptLists : L L P, ptColor : PAL, lColor : PAL, ptSize : PI, optList : L DROP) ==
      v := viewport2D()
      options(v, optList)
      g :=  graphCurves(ptLists, ptColor, lColor, ptSize, optList)
      putGraph(v, g, 1)
      makeViewport2D v

--% Coercions

    coerce(graf : GRIMAGE) : VIEW2D == makeViewport2D(graf, [])

--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--All rights reserved.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are
--met:
--
--    - Redistributions of source code must retain the above copyright
--      notice, this list of conditions and the following disclaimer.
--
--    - Redistributions in binary form must reproduce the above copyright
--      notice, this list of conditions and the following disclaimer in
--      the documentation and/or other materials provided with the
--      distribution.
--
--    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
--      names of its contributors may be used to endorse or promote products
--      derived from this software without specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
