ParaView
vtkPVSynchronizedRenderWindows.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ParaView
4  Module: vtkPVSynchronizedRenderWindows.h
5 
6  Copyright (c) Kitware, Inc.
7  All rights reserved.
8  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
32 #ifndef vtkPVSynchronizedRenderWindows_h
33 #define vtkPVSynchronizedRenderWindows_h
34 
35 #include "vtkMultiProcessController.h" // for vtkRMIFunctionType
36 #include "vtkObject.h"
37 #include "vtkPVClientServerCoreRenderingModule.h" //needed for exports
38 #include "vtkWeakPointer.h" // for vtkWeakPointer.
39 
40 class vtkDataObject;
41 class vtkMultiProcessController;
42 class vtkMultiProcessStream;
43 class vtkPVSession;
44 class vtkRenderer;
45 class vtkRenderWindow;
46 class vtkSelection;
47 
48 class VTKPVCLIENTSERVERCORERENDERING_EXPORT vtkPVSynchronizedRenderWindows : public vtkObject
49 {
50 public:
55  static vtkPVSynchronizedRenderWindows* New(vtkPVSession* session = NULL);
56 
57  vtkTypeMacro(vtkPVSynchronizedRenderWindows, vtkObject);
58  void PrintSelf(ostream& os, vtkIndent indent);
59 
63  virtual vtkRenderWindow* NewRenderWindow();
64 
66 
69  virtual void AddRenderWindow(unsigned int id, vtkRenderWindow*);
70  virtual void RemoveRenderWindow(unsigned int id);
71  vtkRenderWindow* GetRenderWindow(unsigned int id);
73 
75 
80  virtual void AddRenderer(unsigned int id, vtkRenderer*);
81  virtual void RemoveAllRenderers(unsigned int id);
82  virtual void AddRenderer(unsigned int id, vtkRenderer*, const double viewport[4]);
83  virtual bool UpdateRendererViewport(unsigned int id, vtkRenderer*, const double viewport[4]);
85 
87 
96  virtual void SetWindowSize(unsigned int id, int width, int height);
97  virtual void SetWindowPosition(unsigned int id, int posx, int posy);
98  virtual const int* GetWindowSize(unsigned int id);
99  virtual const int* GetWindowPosition(unsigned int id);
101 
103 
106  vtkSetMacro(Enabled, bool);
107  vtkGetMacro(Enabled, bool);
108  vtkBooleanMacro(Enabled, bool);
110 
112 
117  vtkSetMacro(RenderEventPropagation, bool);
118  vtkGetMacro(RenderEventPropagation, bool);
119  vtkBooleanMacro(RenderEventPropagation, bool);
121 
128  bool GetLocalProcessIsDriver();
129 
131 
141  bool SynchronizeBounds(double bounds[6]);
142  bool SynchronizeSize(double& size);
143  bool SynchronizeSize(unsigned int& size);
144  bool BroadcastToDataServer(vtkSelection* selection);
145  bool BroadcastToRenderServer(vtkDataObject*);
147 
149  {
150  MAX_OP = vtkCommunicator::MAX_OP,
151  MIN_OP = vtkCommunicator::MIN_OP,
152  SUM_OP = vtkCommunicator::SUM_OP
153  };
154  bool Reduce(vtkIdType& value, StandardOperations operation);
155 
157 
160  void TriggerRMI(vtkMultiProcessStream& stream, int tag);
161  unsigned long AddRMICallback(vtkRMIFunctionType, void* localArg, int tag);
162  bool RemoveRMICallback(unsigned long id);
164 
165  enum
166  {
167  SYNC_MULTI_RENDER_WINDOW_TAG = 15002,
168  GET_ZBUFFER_VALUE_TAG = 15003,
169  SYNC_TILE_DISPLAY_PARAMATERS = 15004
170  };
171 
172  // Internal-callback-method
173  void Render(unsigned int);
174  void OnGetZBufferValue(unsigned int, int, int);
175 
177  vtkGetObjectMacro(ParallelController, vtkMultiProcessController);
178  vtkGetObjectMacro(ClientServerController, vtkMultiProcessController);
179  vtkGetObjectMacro(ClientDataServerController, vtkMultiProcessController);
181 
183 
191  vtkSetMacro(RenderOneViewAtATime, bool);
192  vtkGetMacro(RenderOneViewAtATime, bool);
193  vtkBooleanMacro(RenderOneViewAtATime, bool);
195 
200  void BeginRender(unsigned int id);
201 
205  bool GetIsInCave();
206 
212  bool GetTileDisplayParameters(int tile_dims[2], int tile_mullions[2]);
213 
219  double GetZbufferDataAtPoint(int x, int y, unsigned int id);
220 
221  enum ModeEnum
222  {
228  BATCH
229  };
230 
235  ModeEnum GetMode() { return this->Mode; };
236 
240  vtkPVSession* GetSession();
241 
242 protected:
245 
249  void SetParallelController(vtkMultiProcessController*);
250 
254  void SetClientServerController(vtkMultiProcessController*);
255 
259  void SetClientDataServerController(vtkMultiProcessController*);
260 
262 
269  void SaveWindowAndLayout(vtkRenderWindow*, vtkMultiProcessStream& stream);
270  void LoadWindowAndLayout(vtkRenderWindow*, vtkMultiProcessStream& stream);
272 
278  void UpdateWindowLayout();
279 
285  void UpdateRendererDrawStates(unsigned int id);
286 
287  // These methods are called on all processes as a consequence of corresponding
288  // events being called on the render window.
289  virtual void HandleStartRender(vtkRenderWindow*);
290  virtual void HandleEndRender(vtkRenderWindow*);
291  virtual void HandleAbortRender(vtkRenderWindow*) {}
292 
293  virtual void ClientStartRender(vtkRenderWindow*);
294  virtual void RootStartRender(vtkRenderWindow*);
295  virtual void SatelliteStartRender(vtkRenderWindow*);
296 
301  void ShinkGaps();
302 
304  vtkMultiProcessController* ParallelController;
305  vtkMultiProcessController* ClientServerController;
306  vtkMultiProcessController* ClientDataServerController;
307  unsigned long ClientServerRMITag;
309  unsigned long ParallelRMITag;
310  bool Enabled;
313 
314  vtkWeakPointer<vtkPVSession> Session;
315 
316 private:
318  void operator=(const vtkPVSynchronizedRenderWindows&) VTK_DELETE_FUNCTION;
319 
320  class vtkInternals;
321  vtkInternals* Internals;
322 
323  class vtkObserver;
324  vtkObserver* Observer;
325 
326  template <class T>
327  bool ReduceTemplate(T& size, StandardOperations operation);
328 };
329 
330 #endif
331 
332 // VTK-HeaderTest-Exclude: vtkPVSynchronizedRenderWindows.h
vtkMultiProcessController * ClientDataServerController
vtkMultiProcessController * ParallelController
extends vtkSession to add API for ParaView sessions.
Definition: vtkPVSession.h:35
synchronizes render-windows among processes in ParaView configurations.
vtkWeakPointer< vtkPVSession > Session
vtkMultiProcessController * ClientServerController
virtual void HandleAbortRender(vtkRenderWindow *)
ModeEnum GetMode()
Streaming uses this class as a conduit for messaging.