text: /*=========================================================================
  
    Program:   Visualization Toolkit
    Module:    TestLinePlot.cxx
  
    Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
    All rights reserved.
    See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
  
       This software is distributed WITHOUT ANY WARRANTY; without even
       the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
       PURPOSE.  See the above copyright notice for more information.
  
  =========================================================================*/
  
  #include "vtkChartXY.h"
  #include "vtkPlot.h"
  #include "vtkTable.h"
  #include "vtkChartXY.h"
  #include "vtkColorTransferFunction.h"
  #include "vtkColorTransferFunctionItem.h"
  #include "vtkCompositeTransferFunctionItem.h"
  #include "vtkContextScene.h"
  #include "vtkContextView.h"
  #include "vtkFloatArray.h"
  #include "vtkLookupTable.h"
  #include "vtkLookupTableItem.h"
  #include "vtkPiecewiseControlPointsItem.h"
  #include "vtkPiecewiseFunction.h"
  #include "vtkPiecewiseFunctionItem.h"
  #include "vtkRegressionTestImage.h"
  #include "vtkRenderWindow.h"
  #include "vtkRenderWindowInteractor.h"
  #include "vtkRenderer.h"
  #include "vtkSmartPointer.h"
  #include "vtkIntArray.h"
  
  
  #define VTK_CREATE(type, name) \
    vtkSmartPointer<type> name = vtkSmartPointer<type>::New()
  
  //----------------------------------------------------------------------------
  int TestScalarsToColors( int argc, char * argv [] )
  {
    // Set up a 2D scene, add an XY chart to it
    vtkSmartPointer<vtkContextView> view =
        vtkSmartPointer<vtkContextView>::New();
    view->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
    view->GetRenderWindow()->SetSize(400, 300);
    vtkSmartPointer<vtkChartXY> chart = vtkSmartPointer<vtkChartXY>::New();
    chart->SetTitle("Chart");
    view->GetScene()->AddItem(chart);
  
    vtkSmartPointer<vtkLookupTable> lookupTable =
      vtkSmartPointer<vtkLookupTable>::New();
    lookupTable->Build();
  
    vtkSmartPointer<vtkColorTransferFunction> colorTransferFunction =
      vtkSmartPointer<vtkColorTransferFunction>::New();
    colorTransferFunction->AddHSVSegment(0.,0.,1.,1.,0.3333,0.3333,1.,1.);
    colorTransferFunction->AddHSVSegment(0.3333,0.3333,1.,1.,0.6666,0.6666,1.,1.);
    colorTransferFunction->AddHSVSegment(0.6666,0.6666,1.,1.,1.,0.,1.,1.);
  
    colorTransferFunction->Build();
  
    vtkSmartPointer<vtkPiecewiseFunction> opacityFunction =
      vtkSmartPointer<vtkPiecewiseFunction>::New();
    opacityFunction->AddPoint(0.,0.);
    opacityFunction->AddPoint(0.5,0.5);
    opacityFunction->AddPoint(1.,1.);
  
    vtkSmartPointer<vtkCompositeTransferFunctionItem> item3 =
      vtkSmartPointer<vtkCompositeTransferFunctionItem>::New();
    item3->SetColorTransferFunction(colorTransferFunction);
    item3->SetOpacityFunction(opacityFunction);
    item3->SetOpacity(0.2);
    item3->SetMaskAboveCurve(true);
    chart->AddPlot(item3);
  
    vtkSmartPointer<vtkPiecewiseControlPointsItem> item5 =
      vtkSmartPointer<vtkPiecewiseControlPointsItem>::New();
    item5->SetPiecewiseFunction(opacityFunction);
    chart->AddPlot(item5);
  
    //Finally render the scene and compare the image to a reference image
    view->GetRenderWindow()->SetMultiSamples(0);
    int retVal = vtkRegressionTestImage(view->GetRenderWindow());
    view->GetInteractor()->Start();
  
    return !retVal;
  }
  