text: //-----------------------------------------------------------------------------
  // Created on: 09 February 2016
  //-----------------------------------------------------------------------------
  // Copyright (c) 2017, Sergey Slyadnev
  // 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 copyright holder(s) nor the
  //      names of all 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 AUTHORS 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.
  //-----------------------------------------------------------------------------
  
  // Own include
  #include <asiVisu_FuncUnivariatePipeline.h>
  
  // asiVisu includes
  #include <asiVisu_FuncUnivariateSource.h>
  #include <asiVisu_FuncUnivariateDataProvider.h>
  #include <asiVisu_Utils.h>
  
  // VTK includes
  #include <vtkPolyDataMapper.h>
  #include <vtkProperty.h>
  
  //-----------------------------------------------------------------------------
  
  //! Creates new pipeline initialized by default VTK mapper and actor.
  asiVisu_FuncUnivariatePipeline::asiVisu_FuncUnivariatePipeline()
  : asiVisu_Pipeline( vtkSmartPointer<vtkPolyDataMapper>::New(),
                      vtkSmartPointer<vtkActor>::New() )
  {
    this->Actor()->GetProperty()->SetLineWidth(2.0);
  }
  
  //-----------------------------------------------------------------------------
  
  //! Sets input data for the pipeline.
  //! \param DP [in] Data Provider.
  void asiVisu_FuncUnivariatePipeline::SetInput(const Handle(asiVisu_DataProvider)& DP)
  {
    Handle(asiVisu_FuncUnivariateDataProvider)
      provider = Handle(asiVisu_FuncUnivariateDataProvider)::DownCast(DP);
  
    /* ===========================
     *  Validate input Parameters
     * =========================== */
  
    Handle(asiAlgo_FuncUnivariate) func = provider->GetFunc();
    //
    if ( func.IsNull() )
    {
      // Pass empty data set in order to have valid pipeline
      vtkSmartPointer<vtkPolyData> aDummyDS = vtkSmartPointer<vtkPolyData>::New();
      this->SetInputData(aDummyDS);
      this->Modified(); // Update modification timestamp
      return; // Do nothing
    }
  
    /* ============================
     *  Prepare polygonal data set
     * ============================ */
  
    if ( provider->MustExecute( this->GetMTime() ) )
    {
      // Allocate Data Source
      vtkSmartPointer<asiVisu_FuncUnivariateSource>
        src = vtkSmartPointer<asiVisu_FuncUnivariateSource>::New();
  
      // Initialize data source
      src->SetFunc(func);
  
      // Initialize pipeline
      this->SetInputConnection( src->GetOutputPort() );
    }
  
    // Update modification timestamp
    this->Modified();
  }
  
  //-----------------------------------------------------------------------------
  
  //! Callback for AddToRenderer() routine. Good place to adjust visualization
  //! properties of the pipeline's actor.
  void asiVisu_FuncUnivariatePipeline::callback_add_to_renderer(vtkRenderer*)
  {}
  
  //! Callback for RemoveFromRenderer() routine.
  void asiVisu_FuncUnivariatePipeline::callback_remove_from_renderer(vtkRenderer*)
  {}
  
  //! Callback for Update() routine.
  void asiVisu_FuncUnivariatePipeline::callback_update()
  {}
  