vtkPistonAlgorithm.h 4.46 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkPistonAlgorithm.h

  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.

=========================================================================*/
// .NAME vtkPistonAlgorithm - Superclass for algorithms that produce only
// PistonDataObjects
// .SECTION Description
// vtkPistonAlgorithm is a convenience class to make writing algorithms
// that operate in piston space easer. Basically one does that by subclassing
// this class and overriding Execute() to call into a method that calls into
// an external function compiled with the cuda compiler.
//
// There are some assumptions and defaults made by this
// class you should be aware of. This class defaults such that your filter
// will have one input port and one output port. If that is not the case
// simply change it with SetNumberOfInputPorts etc. See this class
// constructor for the default. This class also provides a FillInputPortInfo
// method that by default says that all inputs will be PistonDataObject. If that
// isn't the case then please override this method in your subclass. This
// class breaks out the downstream requests into separate functions such as
// ExecuteData and ExecuteInformation.

33 34
#ifndef vtkPistonAlgorithm_h
#define vtkPistonAlgorithm_h
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107

#include "vtkAcceleratorsPistonModule.h" // For export macro
#include "vtkAlgorithm.h"

class vtkPistonDataObject;

class VTKACCELERATORSPISTON_EXPORT vtkPistonAlgorithm : public vtkAlgorithm
{
public:
  static vtkPistonAlgorithm *New();
  vtkTypeMacro(vtkPistonAlgorithm,vtkAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // Interface the algorithm to the Pipeline's passes.
  virtual int ProcessRequest(vtkInformation*,
                             vtkInformationVector**,
                             vtkInformationVector*);


  // Description:
  // A convenience method to reduce code duplication that gets
  // the output as the expected type or NULL.
  vtkPistonDataObject *GetPistonDataObjectOutput(int port);

  // Description:
  // Assign a data object as input. Note that this method does not
  // establish a pipeline connection. Use SetInputConnection() to
  // setup a pipeline connection.
  void SetInputData(int num, vtkDataObject *input);
  void SetInputData(vtkDataObject *input) { this->SetInputData(0, input); };

protected:
  vtkPistonAlgorithm();
  ~vtkPistonAlgorithm();

  // Description:
  // Overridden to say that we take in and produce vtkPistonDataObjects
  virtual int FillInputPortInformation(int port, vtkInformation* info);
  virtual int FillOutputPortInformation(int port, vtkInformation* info);

  // Description:
  // Produce empty output of the proper type for RequestData to fill in.
  virtual int RequestDataObject(vtkInformation* request,
                                vtkInformationVector** inputVector,
                                vtkInformationVector* outputVector);

  // Description:
  // Produce meta-data about what RequestData will produce.
  virtual int RequestInformation(vtkInformation* request,
                                 vtkInformationVector** inputVector,
                                 vtkInformationVector* outputVector);

  // Description:
  // Participate in pipeline's sub extent determination.
  virtual int RequestUpdateExtent(vtkInformation*,
                                  vtkInformationVector**,
                                  vtkInformationVector*);

  // Description:
  // Method that does the actual calculation.
  virtual int RequestData(vtkInformation* request,
                          vtkInformationVector** inputVector,
                          vtkInformationVector* outputVector);

  // Description:
  // Typically Execute uses this to copy input bounds to output.
  // Algorithms for which this heuristic is poor, should override and
  // do it exactly, perhaps by asking the GPU to calculate it,
  virtual void PassBoundsForward(vtkPistonDataObject *id,
                                 vtkPistonDataObject *od);

private:
108
  vtkPistonAlgorithm(const vtkPistonAlgorithm&) VTK_DELETE_FUNCTION;
109
  void operator=(const vtkPistonAlgorithm&) VTK_DELETE_FUNCTION;
110 111 112
};

#endif