#!/usr/bin/env jython

# VisAD Tutorial
# Copyright (C) 2000 Ugo Taddei
#
# Jython translation
# Copyright (C) 2002 Frank Gibbons.

from visad import *
from visad.python.JPythonMethods import *
from visad.java2d import DisplayImplJ2D
from visad.util import * # For RangeWidget & friends
from javax.swing import *
from java.awt import *

time = getRealType("time", SI.second)
height = getRealType("height", SI.meter)

t_h_tuple = RealTupleType( time, height)
index = RealType("index")

func_i_tuple = FunctionType( index, t_h_tuple)
index_set = Integer1DSet(index, 5)

point_vals = [[-3.0, -1.5, 0.0, 1.5, 3.0],
	      [0.0, 33.75, 45.0, 33.75, 0.0]]

points_ff = FlatField( func_i_tuple, index_set)

points_ff.setSamples( point_vals )
func_time_height = FunctionType(time, height)

LENGTH = 25
time_set = Linear1DSet(time, -3.0, 3.0, LENGTH )

h_vals = [[]]

d_vals  = time_set.getSamples( 1)

for i in range(LENGTH):
  h_vals[0].append(45.0 - 5.0 * float(d_vals[0][i]*d_vals[0][i]))

line_ff = FlatField( func_time_height, time_set)
line_ff.setSamples( h_vals )

display = DisplayImplJ2D("display1")
dispGMC = display.getGraphicsModeControl()
dispGMC.setScaleEnable(1)

timeMap = ScalarMap( time, Display.XAxis )
heightMap = ScalarMap( height, Display.YAxis )
timeRangeMap = ScalarMap( time, Display.SelectRange )

display.addMap( timeMap )
display.addMap( heightMap )
display.addMap( timeRangeMap )

points_ref = DataReferenceImpl("points_ref")
line_ref = DataReferenceImpl("line_ref")

points_ref.setData( points_ff )
line_ref.setData( line_ff )

pointsCMap = [ ConstantMap( 1.0, Display.Red),
	       ConstantMap( 0.0, Display.Green),
	       ConstantMap( 0.0, Display.Blue),
	       ConstantMap( 4.50, Display.PointSize)]

lineCMap = [ ConstantMap( 0.0, Display.Red),
	     ConstantMap( 0.8, Display.Green),
	     ConstantMap( 0.0, Display.Blue),
	     ConstantMap( 1.50, Display.LineWidth)]

ranWid = RangeWidget( timeMap )
selRanWid = SelectRangeWidget( timeRangeMap )

display.addReference( points_ref, pointsCMap )
display.addReference( line_ref , lineCMap)

f = JFrame("VisAD Tutorial example 2_11")
f.getContentPane().setLayout(FlowLayout())
f.getContentPane().add(display.getComponent())

f.getContentPane().add( ranWid )
f.getContentPane().add( selRanWid )

f.setSize(310, 375)
f.setVisible(1)

