mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
837 lines
31 KiB
C++
837 lines
31 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkPVRenderView.h
|
|
|
|
Copyright (c) Kitware, Inc.
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html 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 vtkPVRenderView - Render View for ParaView.
|
|
// .SECTION Description
|
|
// vtkRenderView equivalent that is specialized for ParaView. vtkRenderView
|
|
// handles polygonal rendering for ParaView in all the different modes of
|
|
// operation. vtkPVRenderView instance must be created on all involved
|
|
// processes. vtkPVRenderView uses the information about what process it has
|
|
// been created on to decide what part of the "rendering" happens on the
|
|
// process.
|
|
#ifndef vtkPVRenderView_h
|
|
#define vtkPVRenderView_h
|
|
|
|
#include "vtkPVClientServerCoreRenderingModule.h" //needed for exports
|
|
#include "vtkPVView.h"
|
|
#include "vtkBoundingBox.h" // needed for iVar
|
|
#include "vtkNew.h" // needed for iVar
|
|
#include "vtkSmartPointer.h" // needed for iVar
|
|
|
|
|
|
class vtkAlgorithmOutput;
|
|
class vtkCamera;
|
|
class vtkCuller;
|
|
class vtkExtentTranslator;
|
|
class vtkFloatArray;
|
|
class vtkInformationDoubleKey;
|
|
class vtkInformationDoubleVectorKey;
|
|
class vtkInformationIntegerKey;
|
|
class vtkInteractorStyleDrawPolygon;
|
|
class vtkInteractorStyleRubberBand3D;
|
|
class vtkInteractorStyleRubberBandZoom;
|
|
class vtkLight;
|
|
class vtkLightKit;
|
|
class vtkMatrix4x4;
|
|
class vtkPVAxesWidget;
|
|
class vtkPVCenterAxesActor;
|
|
class vtkPVDataDeliveryManager;
|
|
class vtkPVDataRepresentation;
|
|
class vtkPVGridAxes3DActor;
|
|
class vtkPVHardwareSelector;
|
|
class vtkPVInteractorStyle;
|
|
class vtkPVSynchronizedRenderer;
|
|
class vtkProp;
|
|
class vtkRenderViewBase;
|
|
class vtkRenderWindow;
|
|
class vtkRenderWindowInteractor;
|
|
class vtkRenderer;
|
|
class vtkTextRepresentation;
|
|
class vtkTexture;
|
|
class vtkTimerLog;
|
|
class vtkWindowToImageFilter;
|
|
|
|
class VTKPVCLIENTSERVERCORERENDERING_EXPORT vtkPVRenderView : public vtkPVView
|
|
{
|
|
//*****************************************************************
|
|
public:
|
|
static vtkPVRenderView* New();
|
|
vtkTypeMacro(vtkPVRenderView, vtkPVView);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
enum InteractionModes
|
|
{
|
|
INTERACTION_MODE_UNINTIALIZED=-1,
|
|
INTERACTION_MODE_3D=0,
|
|
INTERACTION_MODE_2D, // not implemented yet.
|
|
INTERACTION_MODE_SELECTION,
|
|
INTERACTION_MODE_ZOOM,
|
|
INTERACTION_MODE_POLYGON
|
|
};
|
|
|
|
// Description:
|
|
// Get/Set the interaction mode. Default is INTERACTION_MODE_3D. If
|
|
// INTERACTION_MODE_SELECTION is
|
|
// selected, then whenever the user drags and creates a selection region, this
|
|
// class will fire a vtkCommand::SelectionChangedEvent event with the
|
|
// selection region as the argument.
|
|
// @CallOnAllProcessess - this must be called on all processes, however it will
|
|
// have any effect only the driver processes i.e. the process with the
|
|
// interactor.
|
|
virtual void SetInteractionMode(int mode);
|
|
vtkGetMacro(InteractionMode, int);
|
|
|
|
// Description:
|
|
// Initialize the view with an identifier. Unless noted otherwise, this method
|
|
// must be called before calling any other methods on this class.
|
|
// @CallOnAllProcessess
|
|
virtual void Initialize(unsigned int id);
|
|
|
|
|
|
// Description:
|
|
// Overridden to call InvalidateCachedSelection() whenever the render window
|
|
// parameters change.
|
|
virtual void SetSize(int, int);
|
|
virtual void SetPosition(int, int);
|
|
|
|
// Description:
|
|
// Gets the non-composited renderer for this view. This is typically used for
|
|
// labels, 2D annotations etc.
|
|
// @CallOnAllProcessess
|
|
vtkGetObjectMacro(NonCompositedRenderer, vtkRenderer);
|
|
|
|
// Description:
|
|
// Defines various renderer types.
|
|
enum
|
|
{
|
|
DEFAULT_RENDERER = 0,
|
|
NON_COMPOSITED_RENDERER = 1,
|
|
};
|
|
|
|
// Description:
|
|
// Returns the renderer given an int identifying its type.
|
|
// \li DEFAULT_RENDERER: returns the 3D renderer.
|
|
// \li NON_COMPOSITED_RENDERER: returns the NonCompositedRenderer.
|
|
virtual vtkRenderer* GetRenderer(int rendererType=DEFAULT_RENDERER);
|
|
|
|
// Description:
|
|
// Get/Set the active camera. The active camera is set on both the composited
|
|
// and non-composited renderer.
|
|
vtkCamera* GetActiveCamera();
|
|
virtual void SetActiveCamera(vtkCamera*);
|
|
|
|
// Description:
|
|
// Returns the render window.
|
|
vtkRenderWindow* GetRenderWindow();
|
|
|
|
// Description:
|
|
// Returns the interactor. .
|
|
vtkRenderWindowInteractor* GetInteractor();
|
|
|
|
// Description:
|
|
// Set the interactor. Client applications must set the interactor to enable
|
|
// interactivity. Note this method will also change the interactor styles set
|
|
// on the interactor.
|
|
virtual void SetupInteractor(vtkRenderWindowInteractor*);
|
|
|
|
// Description:
|
|
// Returns the interactor style.
|
|
vtkGetObjectMacro(InteractorStyle, vtkPVInteractorStyle);
|
|
|
|
// Description:
|
|
// Resets the active camera using collective prop-bounds.
|
|
// @CallOnAllProcessess
|
|
void ResetCamera();
|
|
void ResetCamera(double bounds[6]);
|
|
|
|
// Description:
|
|
// Triggers a high-resolution render.
|
|
// @CallOnAllProcessess
|
|
virtual void StillRender();
|
|
|
|
// Description:
|
|
// Triggers a interactive render. Based on the settings on the view, this may
|
|
// result in a low-resolution rendering or a simplified geometry rendering.
|
|
// @CallOnAllProcessess
|
|
virtual void InteractiveRender();
|
|
|
|
// Description:
|
|
// Get/Set the reduction-factor to use when for StillRender(). This is
|
|
// typically set to 1, but in some cases with terrible connectivity or really
|
|
// large displays, one may want to use a sub-sampled image even for
|
|
// StillRender(). This is set it number of pixels to be sub-sampled by.
|
|
// Note that image reduction factors have no effect when in built-in mode.
|
|
// @CallOnAllProcessess
|
|
vtkSetClampMacro(StillRenderImageReductionFactor, int, 1, 20);
|
|
vtkGetMacro(StillRenderImageReductionFactor, int);
|
|
|
|
// Description:
|
|
// Get/Set the reduction-factor to use when for InteractiveRender().
|
|
// This is set it number of pixels to be sub-sampled by.
|
|
// Note that image reduction factors have no effect when in built-in mode.
|
|
// @CallOnAllProcessess
|
|
vtkSetClampMacro(InteractiveRenderImageReductionFactor, int, 1, 20);
|
|
vtkGetMacro(InteractiveRenderImageReductionFactor, int);
|
|
|
|
// Description:
|
|
// Get/Set the data-size in megabytes above which remote-rendering should be
|
|
// used, if possible.
|
|
// @CallOnAllProcessess
|
|
vtkSetMacro(RemoteRenderingThreshold, double);
|
|
vtkGetMacro(RemoteRenderingThreshold, double);
|
|
|
|
// Description:
|
|
// Get/Set the data-size in megabytes above which LOD rendering should be
|
|
// used, if possible.
|
|
// @CallOnAllProcessess
|
|
vtkSetMacro(LODRenderingThreshold, double);
|
|
vtkGetMacro(LODRenderingThreshold, double);
|
|
|
|
// Description:
|
|
// Get/Set the LOD resolution. This affects the size of the grid used for
|
|
// quadric clustering, for example. 1.0 implies maximum resolution while 0
|
|
// implies minimum resolution.
|
|
// @CallOnAllProcessess
|
|
vtkSetClampMacro(LODResolution, double, 0.0, 1.0);
|
|
vtkGetMacro(LODResolution, double);
|
|
|
|
// Description:
|
|
// When set to true, instead of using simplified geometry for LOD rendering,
|
|
// uses outline, if possible. Note that not all representations support this
|
|
// mode and hence one may still see non-outline data being rendering when this
|
|
// flag is ON and LOD is being used.
|
|
vtkSetMacro(UseOutlineForLODRendering, bool);
|
|
vtkGetMacro(UseOutlineForLODRendering, bool);
|
|
|
|
// Description:
|
|
// Passes the compressor configuration to the client-server synchronizer, if
|
|
// any. This affects the image compression used to relay images back to the
|
|
// client.
|
|
// See vtkPVClientServerSynchronizedRenderers::ConfigureCompressor() for
|
|
// details.
|
|
// @CallOnAllProcessess
|
|
void ConfigureCompressor(const char* configuration);
|
|
|
|
// Description:
|
|
// Resets the clipping range. One does not need to call this directly ever. It
|
|
// is called periodically by the vtkRenderer to reset the camera range.
|
|
virtual void ResetCameraClippingRange();
|
|
|
|
// Description:
|
|
// Enable/Disable light kit.
|
|
// @CallOnAllProcessess
|
|
void SetUseLightKit(bool enable);
|
|
vtkGetMacro(UseLightKit, bool);
|
|
vtkBooleanMacro(UseLightKit, bool);
|
|
|
|
// Description:
|
|
void StreamingUpdate(const double view_planes[24]);
|
|
void DeliverStreamedPieces(unsigned int size, unsigned int *representation_ids);
|
|
|
|
// Description:
|
|
// USE_LOD indicates if LOD is being used for the current render/update.
|
|
static vtkInformationIntegerKey* USE_LOD();
|
|
|
|
// Description:
|
|
// Indicates the LOD resolution in REQUEST_UPDATE_LOD() pass.
|
|
static vtkInformationDoubleKey* LOD_RESOLUTION();
|
|
|
|
// Description:
|
|
// Indicates the LOD must use outline if possible in REQUEST_UPDATE_LOD()
|
|
// pass.
|
|
static vtkInformationIntegerKey* USE_OUTLINE_FOR_LOD();
|
|
|
|
// Description:
|
|
// Representation can publish this key in their REQUEST_INFORMATION()
|
|
// pass to indicate that the representation needs to disable
|
|
// IceT's empty image optimization. This is typically only needed
|
|
// if a painter will make use of MPI global collective communications.
|
|
static vtkInformationIntegerKey* RENDER_EMPTY_IMAGES();
|
|
|
|
// Description:
|
|
// Representation can publish this key in their REQUEST_INFORMATION() pass to
|
|
// indicate that the representation needs ordered compositing.
|
|
static vtkInformationIntegerKey* NEED_ORDERED_COMPOSITING();
|
|
|
|
// Description:
|
|
// Key used to pass meta-data about the view frustum in REQUEST_STREAMING_UPDATE()
|
|
// pass. The value is a double vector with exactly 24 values.
|
|
static vtkInformationDoubleVectorKey* VIEW_PLANES();
|
|
|
|
// Description:
|
|
// Streaming pass request.
|
|
static vtkInformationRequestKey* REQUEST_STREAMING_UPDATE();
|
|
|
|
// Description:
|
|
// Pass to relay the streamed "piece" to the representations.
|
|
static vtkInformationRequestKey* REQUEST_PROCESS_STREAMED_PIECE();
|
|
|
|
// Description:
|
|
// Make a selection. This will result in setting up of this->LastSelection
|
|
// which can be accessed using GetLastSelection().
|
|
// @CallOnAllProcessess
|
|
void SelectCells(int region[4]);
|
|
void SelectCells(int region0, int region1, int region2, int region3)
|
|
{
|
|
int r[4] = {region0, region1, region2, region3};
|
|
this->SelectCells(r);
|
|
}
|
|
void SelectPoints(int region[4]);
|
|
void SelectPoints(int region0, int region1, int region2, int region3)
|
|
{
|
|
int r[4] = {region0, region1, region2, region3};
|
|
this->SelectPoints(r);
|
|
}
|
|
void Select(int field_association, int region[4]);
|
|
|
|
// Description:
|
|
// Make a selection with a polygon. The polygon2DArray should contain
|
|
// the polygon points in display units of (x, y) tuples, and arrayLen
|
|
// is the total length of polygon2DArray.
|
|
// This will result in setting up of this->LastSelection
|
|
// which can be accessed using GetLastSelection().
|
|
// @CallOnAllProcessess
|
|
void SelectPolygonPoints(int* polygon2DArray, vtkIdType arrayLen);
|
|
void SelectPolygonCells(int* polygon2DArray, vtkIdType arrayLen);
|
|
void SelectPolygon(int field_association, int* polygon2DArray, vtkIdType arrayLen);
|
|
|
|
// Description:
|
|
// Provides access to the last selection.
|
|
vtkGetObjectMacro(LastSelection, vtkSelection);
|
|
|
|
// Description:
|
|
// Set or get whether capture should be done as
|
|
// StillRender or InteractiveRender when capturing screenshots.
|
|
vtkSetMacro(UseInteractiveRenderingForScreenshots, bool);
|
|
vtkBooleanMacro(UseInteractiveRenderingForScreenshots, bool);
|
|
vtkGetMacro(UseInteractiveRenderingForScreenshots, bool);
|
|
|
|
// Description:
|
|
// Set or get whether offscreen rendering should be used during
|
|
// CaptureWindow calls. On Apple machines, this flag has no effect.
|
|
vtkSetMacro(UseOffscreenRenderingForScreenshots, bool);
|
|
vtkBooleanMacro(UseOffscreenRenderingForScreenshots, bool);
|
|
vtkGetMacro(UseOffscreenRenderingForScreenshots, bool);
|
|
|
|
// Description:
|
|
// Get/Set whether to use offscreen rendering for all rendering. This is
|
|
// merely a suggestion. If --use-offscreen-rendering command line option is
|
|
// specified, then setting this flag to 0 on that process has no effect.
|
|
// Setting it to true, however, will ensure that even is
|
|
// --use-offscreen-rendering is not specified, it will use offscreen
|
|
// rendering.
|
|
virtual void SetUseOffscreenRendering(bool);
|
|
vtkBooleanMacro(UseOffscreenRendering, bool);
|
|
vtkGetMacro(UseOffscreenRendering, bool);
|
|
|
|
// Description:
|
|
// Get/Set the EGL device index (graphics card) used for rendering. This needs to
|
|
// be set before rendering. The graphics card needs to have the right extensions
|
|
// for this to work.
|
|
virtual void SetEGLDeviceIndex(int);
|
|
vtkGetMacro(EGLDeviceIndex, int);
|
|
|
|
// Description:
|
|
// Returns if remote-rendering is possible on the current group of processes.
|
|
vtkGetMacro(RemoteRenderingAvailable, bool);
|
|
void RemoteRenderingAvailableOff()
|
|
{ this->RemoteRenderingAvailable = false; }
|
|
|
|
// Description:
|
|
// Returns true if the most recent render used LOD.
|
|
vtkGetMacro(UsedLODForLastRender, bool);
|
|
|
|
// Description:
|
|
// Invalidates cached selection. Called explicitly when view proxy thinks the
|
|
// cache may have become obsolete.
|
|
// @CallOnAllProcessess
|
|
void InvalidateCachedSelection();
|
|
|
|
// Description:
|
|
// Returns the z-buffer value at the given location.
|
|
// @CallOnClientOnly
|
|
double GetZbufferDataAtPoint(int x, int y);
|
|
|
|
// Description:
|
|
// Convenience methods used by representations to pass represented data.
|
|
// If trueSize is non-zero, then that's the size used in making decisions
|
|
// about LOD/remote rendering etc and not the actual size of the dataset.
|
|
static void SetPiece(vtkInformation* info,
|
|
vtkPVDataRepresentation* repr, vtkDataObject* data, unsigned long trueSize=0);
|
|
static vtkAlgorithmOutput* GetPieceProducer(vtkInformation* info,
|
|
vtkPVDataRepresentation* repr);
|
|
static void SetPieceLOD(vtkInformation* info,
|
|
vtkPVDataRepresentation* repr, vtkDataObject* data);
|
|
static vtkAlgorithmOutput* GetPieceProducerLOD(vtkInformation* info,
|
|
vtkPVDataRepresentation* repr);
|
|
static void MarkAsRedistributable(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr, bool value=true);
|
|
static void SetGeometryBounds(vtkInformation* info,
|
|
double bounds[6], vtkMatrix4x4* transform = NULL);
|
|
static void SetStreamable(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr, bool streamable);
|
|
static void SetNextStreamedPiece(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr, vtkDataObject* piece);
|
|
static vtkDataObject* GetCurrentStreamedPiece(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr);
|
|
|
|
void SetLockBounds(bool nv);
|
|
vtkGetMacro(LockBounds, bool);
|
|
|
|
// Description:
|
|
// Requests the view to deliver the pieces produced by the \c repr to all
|
|
// processes after a gather to the root node to merge the datasets generated
|
|
// by each process.
|
|
static void SetDeliverToAllProcesses(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr, bool clone);
|
|
|
|
// Description:
|
|
// Requests the view to deliver the data to the client always. This is
|
|
// essential for representation that render in the non-composited views e.g.
|
|
// the text-source representation. If SetDeliverToAllProcesses() is true, this
|
|
// is redundant. \c gather_before_delivery can be used to indicate if the data
|
|
// on the server-nodes must be gathered to the root node before shipping to
|
|
// the client. If \c gather_before_delivery is false, only the data from the
|
|
// root node will be sent to the client without any parallel communication.
|
|
static void SetDeliverToClientAndRenderingProcesses(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr,
|
|
bool deliver_to_client, bool gather_before_delivery);
|
|
|
|
// Description:
|
|
// Pass the structured-meta-data for determining rendering order for ordered
|
|
// compositing.
|
|
static void SetOrderedCompositingInformation(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr,
|
|
vtkExtentTranslator* translator,
|
|
const int whole_extents[6], const double origin[3], const double spacing[3]);
|
|
|
|
// Description:
|
|
// Some representation only work when remote rendering or local rendering. Use
|
|
// this method in REQUEST_UPDATE() pass to tell the view if the representation
|
|
// requires a particular mode. Note, only use this to "require" a remote or
|
|
// local render. \c value == true indicates that the representation requires
|
|
// distributed rendering, \c value == false indicates the representation can
|
|
// only render property on the client or root node.
|
|
static void SetRequiresDistributedRendering(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr, bool value, bool for_lod=false);
|
|
static void SetRequiresDistributedRenderingLOD(
|
|
vtkInformation* info, vtkPVDataRepresentation* repr, bool value)
|
|
{
|
|
vtkPVRenderView::SetRequiresDistributedRendering(info, repr, value, true);
|
|
}
|
|
|
|
// Description:
|
|
// Representations that support hardware (render-buffer based) selection,
|
|
// should register the prop that they use for selection rendering. They can do
|
|
// that in the vtkPVDataRepresentation::AddToView() implementation.
|
|
void RegisterPropForHardwareSelection(
|
|
vtkPVDataRepresentation* repr, vtkProp* prop);
|
|
void UnRegisterPropForHardwareSelection(
|
|
vtkPVDataRepresentation* repr, vtkProp* prop);
|
|
|
|
// Description:
|
|
// Turn on/off the default light in the 3D renderer.
|
|
void SetLightSwitch(bool enable);
|
|
bool GetLightSwitch();
|
|
vtkBooleanMacro(LightSwitch, bool);
|
|
|
|
// Description:
|
|
// Enable/disable showing of annotation for developers.
|
|
void SetShowAnnotation(bool val);
|
|
|
|
// Description:
|
|
// Set the vtkPVGridAxes3DActor to use for the view.
|
|
virtual void SetGridAxes3DActor(vtkPVGridAxes3DActor*);
|
|
|
|
//*****************************************************************
|
|
// Forwarded to orientation axes widget.
|
|
virtual void SetOrientationAxesInteractivity(bool);
|
|
virtual void SetOrientationAxesVisibility(bool);
|
|
void SetOrientationAxesLabelColor(double r, double g, double b);
|
|
void SetOrientationAxesOutlineColor(double r, double g, double b);
|
|
|
|
//*****************************************************************
|
|
// Forwarded to center axes.
|
|
virtual void SetCenterAxesVisibility(bool);
|
|
|
|
//*****************************************************************
|
|
// Forward to vtkPVInteractorStyle instances.
|
|
virtual void SetCenterOfRotation(double x, double y, double z);
|
|
virtual void SetRotationFactor(double factor);
|
|
|
|
//*****************************************************************
|
|
// Forward to vtkLightKit.
|
|
void SetKeyLightWarmth(double val);
|
|
void SetKeyLightIntensity(double val);
|
|
void SetKeyLightElevation(double val);
|
|
void SetKeyLightAzimuth(double val);
|
|
void SetFillLightWarmth(double val);
|
|
void SetKeyToFillRatio(double val);
|
|
void SetFillLightElevation(double val);
|
|
void SetFillLightAzimuth(double val);
|
|
void SetBackLightWarmth(double val);
|
|
void SetKeyToBackRatio(double val);
|
|
void SetBackLightElevation(double val);
|
|
void SetBackLightAzimuth(double val);
|
|
void SetHeadLightWarmth(double val);
|
|
void SetKeyToHeadRatio(double val);
|
|
void SetMaintainLuminance(int val);
|
|
|
|
//*****************************************************************
|
|
// Forward to 3D renderer.
|
|
virtual void SetUseDepthPeeling(int val);
|
|
virtual void SetMaximumNumberOfPeels(int val);
|
|
virtual void SetBackground(double r, double g, double b);
|
|
virtual void SetBackground2(double r, double g, double b);
|
|
virtual void SetBackgroundTexture(vtkTexture* val);
|
|
virtual void SetGradientBackground(int val);
|
|
virtual void SetTexturedBackground(int val);
|
|
|
|
//*****************************************************************
|
|
// Forward to vtkLight.
|
|
void SetAmbientColor(double r, double g, double b);
|
|
void SetSpecularColor(double r, double g, double b);
|
|
void SetDiffuseColor(double r, double g, double b);
|
|
void SetIntensity(double val);
|
|
void SetLightType(int val);
|
|
|
|
//*****************************************************************
|
|
// Forward to vtkRenderWindow.
|
|
void SetStereoCapableWindow(int val);
|
|
void SetStereoRender(int val);
|
|
vtkSetMacro(StereoType, int);
|
|
vtkSetMacro(ServerStereoType, int);
|
|
void SetMultiSamples(int val);
|
|
void SetAlphaBitPlanes(int val);
|
|
void SetStencilCapable(int val);
|
|
|
|
//*****************************************************************
|
|
// Forward to vtkCamera.
|
|
void SetParallelProjection(int mode);
|
|
|
|
//*****************************************************************
|
|
// Forwarded to vtkPVInteractorStyle if present on local processes.
|
|
virtual void SetCamera2DManipulators(const int manipulators[9]);
|
|
virtual void SetCamera3DManipulators(const int manipulators[9]);
|
|
void SetCameraManipulators(vtkPVInteractorStyle* style, const int manipulators[9]);
|
|
|
|
// Description:
|
|
// Overridden to synchronize information among processes whenever data
|
|
// changes. The vtkSMViewProxy ensures that this method is called only when
|
|
// something has changed on the view-proxy or one of its representations or
|
|
// their inputs. Hence it's okay to do some extra inter-process communication
|
|
// here.
|
|
virtual void Update();
|
|
|
|
// Description:
|
|
// Asks representations to update their LOD geometries.
|
|
virtual void UpdateLOD();
|
|
|
|
// Description:
|
|
// Returns whether the view will use LOD rendering for the next
|
|
// InteractiveRender() call based on the geometry sizes determined by the most
|
|
// recent call to Update().
|
|
vtkGetMacro(UseLODForInteractiveRender, bool);
|
|
|
|
// Description:
|
|
// Returns whether the view will use distributed rendering for the next
|
|
// StillRender() call based on the geometry sizes determined by the most
|
|
// recent call to Update().
|
|
vtkGetMacro(UseDistributedRenderingForStillRender, bool);
|
|
|
|
// Description:
|
|
// Returns whether the view will use distributed rendering for the next
|
|
// InteractiveRender() call based on the geometry sizes determined by the most
|
|
// recent calls to Update() and UpdateLOD().
|
|
vtkGetMacro(UseDistributedRenderingForInteractiveRender, bool);
|
|
|
|
// Description:
|
|
// Returns the processes (vtkPVSession::ServerFlags) that are to be involved
|
|
// in the next StillRender() call based on the decisions made during the most
|
|
// recent Update().
|
|
vtkGetMacro(StillRenderProcesses, vtkTypeUInt32);
|
|
|
|
// Description:
|
|
// Returns the processes (vtkPVSession::ServerFlags) that are to be involved
|
|
// in the next InteractiveRender() call based on the decisions made during the most
|
|
// recent Update() and UpdateLOD().
|
|
vtkGetMacro(InteractiveRenderProcesses, vtkTypeUInt32);
|
|
|
|
// Description:
|
|
// Returns the data distribution mode to use.
|
|
int GetDataDistributionMode(bool use_remote_rendering);
|
|
|
|
// Description:
|
|
// Provides access to the geometry storage for this view.
|
|
vtkPVDataDeliveryManager* GetDeliveryManager();
|
|
|
|
// Description:
|
|
// Called on all processes to request data-delivery for the list of
|
|
// representations. Note this method has to be called on all processes or it
|
|
// may lead to deadlock.
|
|
void Deliver(int use_lod,
|
|
unsigned int size, unsigned int *representation_ids);
|
|
|
|
// Description:
|
|
// Returns true when ordered compositing is needed on the current group of
|
|
// processes. Note that unlike most other functions, this may return different
|
|
// values on different processes e.g.
|
|
// \li always false on client and dataserver
|
|
// \li true on pvserver or renderserver if opacity < 1 or volume present, else
|
|
// false
|
|
bool GetUseOrderedCompositing();
|
|
|
|
// Description:
|
|
// Returns true when the compositor should not use the empty
|
|
// images optimization.
|
|
bool GetRenderEmptyImages();
|
|
|
|
// Description:
|
|
// Provides access to the time when Update() was last called.
|
|
unsigned long GetUpdateTimeStamp()
|
|
{ return this->UpdateTimeStamp; }
|
|
|
|
// Description:
|
|
// Copy internal fields that are used for rendering decision such as
|
|
// remote/local rendering, composite and so on. This method was introduced
|
|
// for the quad view so internal views could use the decision that were made
|
|
// in the main view.
|
|
void CopyViewUpdateOptions(vtkPVRenderView* otherView);
|
|
|
|
// Description:
|
|
// Add props directly to the view.
|
|
void AddPropToRenderer(vtkProp* prop);
|
|
void RemovePropFromRenderer(vtkProp* prop);
|
|
|
|
// Description:
|
|
// Tells view that it should draw a particular array component
|
|
// to the screen such that the pixels can be read back and
|
|
// decoded to obtain the values.
|
|
void SetDrawCells(bool choice);
|
|
void SetArrayNameToDraw(const char *name);
|
|
void SetArrayNumberToDraw(int fieldAttributeType);
|
|
void SetArrayComponentToDraw(int comp);
|
|
void SetScalarRange(double min, double max);
|
|
void StartCaptureValues();
|
|
void StopCaptureValues();
|
|
|
|
// Description:
|
|
// Tells views that it should draw the lighting contributions to the
|
|
// framebuffer.
|
|
void StartCaptureLuminance();
|
|
void StopCaptureLuminance();
|
|
|
|
// Description:
|
|
// Access to the Z buffer.
|
|
void CaptureZBuffer();
|
|
vtkFloatArray * GetCapturedZBuffer();
|
|
|
|
//BTX
|
|
protected:
|
|
vtkPVRenderView();
|
|
~vtkPVRenderView();
|
|
|
|
// Description:
|
|
// Overridden to assign IDs to each representation. This assumes that
|
|
// representations will be added/removed in a consistent fashion across
|
|
// processes even in multi-client modes. The only exception is
|
|
// vtk3DWidgetRepresentation. However, since vtk3DWidgetRepresentation never
|
|
// does any data-delivery, we don't assign IDs for these, nor affect the ID
|
|
// uniquifier when a vtk3DWidgetRepresentation is added.
|
|
virtual void AddRepresentationInternal(vtkDataRepresentation* rep);
|
|
virtual void RemoveRepresentationInternal(vtkDataRepresentation* rep);
|
|
|
|
// Description:
|
|
// Actual render method.
|
|
virtual void Render(bool interactive, bool skip_rendering);
|
|
|
|
// Description:
|
|
// Called just before the local process renders. This is only called on the
|
|
// nodes where the rendering is going to happen.
|
|
virtual void AboutToRenderOnLocalProcess(bool interactive)
|
|
{(void) interactive;}
|
|
|
|
// Description:
|
|
// Returns true if distributed rendering should be used based on the geometry
|
|
// size. \c using_lod will be true if this method is called to determine
|
|
// distributed rendering status for renders using lower LOD i.e when called in
|
|
// UpdateLOD().
|
|
bool ShouldUseDistributedRendering(double geometry_size, bool using_lod);
|
|
|
|
// Description:
|
|
// Returns true if LOD rendering should be used based on the geometry size.
|
|
bool ShouldUseLODRendering(double geometry);
|
|
|
|
// Description:
|
|
// Returns true if the local process is invovled in rendering composited
|
|
// geometry i.e. geometry rendered in view that is composited together.
|
|
bool IsProcessRenderingGeometriesForCompositing(bool using_distributed_rendering);
|
|
|
|
// Description:
|
|
// Synchronizes bounds information on all nodes.
|
|
// @CallOnAllProcessess
|
|
void SynchronizeGeometryBounds();
|
|
|
|
// Description:
|
|
// Set the last selection object.
|
|
void SetLastSelection(vtkSelection*);
|
|
|
|
// Description:
|
|
// UpdateCenterAxes().
|
|
// Updates CenterAxes's scale and position.
|
|
virtual void UpdateCenterAxes();
|
|
|
|
// Description
|
|
// Returns true if the local process is doing to do actual render or
|
|
// displaying an image in a viewport.
|
|
bool GetLocalProcessDoesRendering(bool using_distributed_rendering);
|
|
|
|
// Description:
|
|
// In multi-clients mode, ensures that all processes are in the same "state"
|
|
// as far as the view is concerned. Returns false if that's not the case.
|
|
bool TestCollaborationCounter();
|
|
|
|
// Description:
|
|
// Synchronizes remote-rendering related parameters for collaborative
|
|
// rendering in multi-clients mode.
|
|
void SynchronizeForCollaboration();
|
|
|
|
// Description:
|
|
// Method to build annotation text to annotate the view with runtime
|
|
// information.
|
|
virtual void BuildAnnotationText(ostream& str);
|
|
|
|
// Description:
|
|
// SynchronizationCounter is used in multi-clients mode to ensure that the
|
|
// views on two different clients are in the same state as the server side.
|
|
vtkGetMacro(SynchronizationCounter, unsigned int);
|
|
|
|
// Description:
|
|
// Returns true is currently generating a selection.
|
|
vtkGetMacro(MakingSelection, bool);
|
|
|
|
// Description:
|
|
// Prepare for selection.
|
|
// Returns false if it is currently generating a selection.
|
|
bool PrepareSelect(int fieldAssociation);
|
|
|
|
// Description:
|
|
// Post process after selection.
|
|
void PostSelect(vtkSelection* sel);
|
|
|
|
vtkLight* Light;
|
|
vtkLightKit* LightKit;
|
|
vtkRenderViewBase* RenderView;
|
|
vtkRenderer* NonCompositedRenderer;
|
|
vtkPVSynchronizedRenderer* SynchronizedRenderers;
|
|
vtkSmartPointer<vtkRenderWindowInteractor> Interactor;
|
|
vtkInteractorStyleRubberBand3D* RubberBandStyle;
|
|
vtkInteractorStyleRubberBandZoom* RubberBandZoom;
|
|
vtkInteractorStyleDrawPolygon* PolygonStyle;
|
|
vtkPVCenterAxesActor* CenterAxes;
|
|
vtkPVAxesWidget* OrientationWidget;
|
|
vtkPVHardwareSelector* Selector;
|
|
vtkSelection* LastSelection;
|
|
vtkSmartPointer<vtkPVGridAxes3DActor> GridAxes3DActor;
|
|
|
|
int StillRenderImageReductionFactor;
|
|
int InteractiveRenderImageReductionFactor;
|
|
int InteractionMode;
|
|
bool ShowAnnotation;
|
|
|
|
// 2D and 3D interactor style
|
|
vtkPVInteractorStyle* TwoDInteractorStyle;
|
|
vtkPVInteractorStyle* ThreeDInteractorStyle;
|
|
|
|
// Active interactor style either [TwoDInteractorStyle, ThreeDInteractorStyle]
|
|
vtkPVInteractorStyle* InteractorStyle;
|
|
|
|
// Used in collaboration mode to ensure that views are in the same state
|
|
// (as far as representations added/removed goes) before rendering.
|
|
unsigned int SynchronizationCounter;
|
|
|
|
// In mega-bytes.
|
|
double RemoteRenderingThreshold;
|
|
double LODRenderingThreshold;
|
|
vtkBoundingBox GeometryBounds;
|
|
|
|
bool UseOffscreenRendering;
|
|
int EGLDeviceIndex;
|
|
bool UseOffscreenRenderingForScreenshots;
|
|
bool UseInteractiveRenderingForScreenshots;
|
|
bool NeedsOrderedCompositing;
|
|
bool RenderEmptyImages;
|
|
|
|
double LODResolution;
|
|
bool UseLightKit;
|
|
|
|
bool UsedLODForLastRender;
|
|
bool UseLODForInteractiveRender;
|
|
bool UseOutlineForLODRendering;
|
|
bool UseDistributedRenderingForStillRender;
|
|
bool UseDistributedRenderingForInteractiveRender;
|
|
|
|
vtkTypeUInt32 StillRenderProcesses;
|
|
vtkTypeUInt32 InteractiveRenderProcesses;
|
|
|
|
// Description:
|
|
// Keeps track of the time when vtkPVRenderView::Update() was called.
|
|
vtkTimeStamp UpdateTimeStamp;
|
|
|
|
// Description:
|
|
// Keeps track of the time when the priority-queue for streaming was
|
|
// generated.
|
|
vtkTimeStamp PriorityQueueBuildTimeStamp;
|
|
|
|
bool LockBounds;
|
|
private:
|
|
vtkPVRenderView(const vtkPVRenderView&); // Not implemented
|
|
void operator=(const vtkPVRenderView&); // Not implemented
|
|
|
|
bool MakingSelection;
|
|
void OnSelectionChangedEvent();
|
|
void OnPolygonSelectionEvent();
|
|
void FinishSelection(vtkSelection*);
|
|
|
|
// This flag is set to false when not all processes cannot render e.g. cannot
|
|
// open the DISPLAY etc.
|
|
bool RemoteRenderingAvailable;
|
|
|
|
// Flags used to maintain rendering modes requested by representations.
|
|
bool DistributedRenderingRequired;
|
|
bool NonDistributedRenderingRequired;
|
|
bool DistributedRenderingRequiredLOD;
|
|
bool NonDistributedRenderingRequiredLOD;
|
|
|
|
// Cached value for parallel projection set on camera.
|
|
int ParallelProjection;
|
|
|
|
class vtkInternals;
|
|
vtkInternals* Internals;
|
|
|
|
vtkNew<vtkTextRepresentation> Annotation;
|
|
void UpdateAnnotationText();
|
|
|
|
bool OrientationWidgetVisibility;
|
|
|
|
int StereoType;
|
|
int ServerStereoType;
|
|
void UpdateStereoProperties();
|
|
vtkSmartPointer<vtkCuller> Culler;
|
|
vtkNew<vtkTimerLog> Timer;
|
|
//ETX
|
|
};
|
|
|
|
#endif
|