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 33 34 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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkClientServerMoveData.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.
=========================================================================*/
/**
* @class vtkClientServerMoveData
* @brief Moves data from the server root node
* to the client.
*
* This class moves all the input data available at the input on the root
* server node to the client node. If not in server-client mode,
* this filter behaves as a simple pass-through filter.
* This can work with any data type, the application does not need to set
* the output type before hand.
* @warning
* This filter may change the output in RequestData().
*/
#ifndef vtkClientServerMoveData_h
#define vtkClientServerMoveData_h
#include "vtkDataObjectAlgorithm.h"
#include "vtkPVClientServerCoreRenderingModule.h" //needed for exports
class vtkMultiProcessController;
class vtkMultiProcessController;
class VTKPVCLIENTSERVERCORERENDERING_EXPORT vtkClientServerMoveData : public vtkDataObjectAlgorithm
{
public:
static vtkClientServerMoveData* New();
vtkTypeMacro(vtkClientServerMoveData, vtkDataObjectAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
//@{
/**
* Controls the output type. This is required because processes receiving
* data cannot know their output type in RequestDataObject without
* communicating with other processes. Since communicating with other
* processes in RequestDataObject is dangerous (can cause deadlock because
* it may happen out-of-sync), the application has to set the output
* type. The default is VTK_POLY_DATA. Make sure to call this before any
* pipeline updates occur.
*/
vtkSetMacro(OutputDataType, int);
vtkGetMacro(OutputDataType, int);
//@}
//@{
/**
* Controls the output WHOLE_EXTENT. This is required because processes
* receiving data cannot know their WHOLE_EXTENT in RequestInformation
* without communicating with other processes. Since communicating with
* other processes in RequestInformation is dangerous (can cause deadlock
* because it may happen out-of-sync), the application has to set the
* output type. Make sure to call this before any pipeline updates occur.
*/
vtkSetVector6Macro(WholeExtent, int);
vtkGetVector6Macro(WholeExtent, int);
//@}
//@{
/**
* Optionally, set the process type. If set to AUTO, then the process type is
* tried to be determined using the active connection.
*/
vtkSetMacro(ProcessType, int);
vtkGetMacro(ProcessType, int);
//@}
//@{
/**
* Get/Set the controller to use. This is optional and needed only when
* ProcessType is set to something other than AUTO. If AUTO, then the
* controller is obtained from the active session.
*/
void SetController(vtkMultiProcessController*);
vtkGetObjectMacro(Controller, vtkMultiProcessController);
//@}
enum ProcessTypes
{
AUTO = 0,
SERVER = 1,
CLIENT = 2
};
protected:
vtkClientServerMoveData();
~vtkClientServerMoveData();
// Overridden to mark input as optional, since input data may
// not be available on all processes that this filter is instantiated.
virtual int FillInputPortInformation(int port, vtkInformation* info) VTK_OVERRIDE;
virtual int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) VTK_OVERRIDE;
// Create an output of the type defined by OutputDataType
virtual int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) VTK_OVERRIDE;
// If there is an input call superclass' RequestInformation
// otherwise set the output WHOLE_EXTENT() to be WholeExtent
virtual int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) VTK_OVERRIDE;
virtual int SendData(vtkDataObject*, vtkMultiProcessController*);
virtual vtkDataObject* ReceiveData(vtkMultiProcessController*);
enum Tags
{
TRANSMIT_DATA_OBJECT = 23483
};
int OutputDataType;
int WholeExtent[6];
int ProcessType;
vtkMultiProcessController* Controller;
private:
vtkClientServerMoveData(const vtkClientServerMoveData&) VTK_DELETE_FUNCTION;
void operator=(const vtkClientServerMoveData&) VTK_DELETE_FUNCTION;
};
#endif
|