mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
241 lines
9.4 KiB
C++
241 lines
9.4 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkSMViewProxy.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 vtkSMViewProxy - Superclass for all view proxies.
|
|
// .SECTION Description
|
|
// vtkSMViewProxy is a superclass for all view proxies. A view proxy
|
|
// abstracts the logic to take one or more representation proxies and show then
|
|
// in some viewport such as vtkRenderWindow.
|
|
// This class may directly be used as the view proxy for views that do all the
|
|
// rendering work at the GUI level. The VTKObject corresponding to this class
|
|
// has to be a vtkView subclass.
|
|
// .SECTION Events
|
|
// \li vtkCommand::StartEvent(callData: int:0) -- start of StillRender().
|
|
// \li vtkCommand::EndEvent(callData: int:0) -- end of StillRender().
|
|
// \li vtkCommand::StartEvent(callData: int:1) -- start of InteractiveRender().
|
|
// \li vtkCommand::EndEvent(callData: int:1) -- end of InteractiveRender().
|
|
|
|
#ifndef vtkSMViewProxy_h
|
|
#define vtkSMViewProxy_h
|
|
|
|
#include "vtkPVServerManagerRenderingModule.h" //needed for exports
|
|
#include "vtkSMProxy.h"
|
|
|
|
class vtkImageData;
|
|
class vtkRenderer;
|
|
class vtkRenderWindow;
|
|
class vtkRenderWindowInteractor;
|
|
class vtkSMRepresentationProxy;
|
|
class vtkSMSourceProxy;
|
|
class vtkView;
|
|
|
|
class VTKPVSERVERMANAGERRENDERING_EXPORT vtkSMViewProxy : public vtkSMProxy
|
|
{
|
|
public:
|
|
static vtkSMViewProxy* New();
|
|
vtkTypeMacro(vtkSMViewProxy, vtkSMProxy);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Enable/Disable a view.
|
|
vtkSetMacro(Enable, bool);
|
|
vtkGetMacro(Enable, bool);
|
|
vtkBooleanMacro(Enable, bool);
|
|
|
|
// Description:
|
|
// Renders the view using full resolution.
|
|
virtual void StillRender();
|
|
|
|
// Description:
|
|
// Renders the view using lower resolution is possible.
|
|
virtual void InteractiveRender();
|
|
|
|
// Description:
|
|
// Called vtkPVView::Update on the server-side.
|
|
virtual void Update();
|
|
|
|
// Description:
|
|
// Returns true if the view can display the data produced by the producer's
|
|
// port. Internally calls GetRepresentationType() and returns true only if the
|
|
// type is valid a representation proxy of that type can be created.
|
|
virtual bool CanDisplayData(vtkSMSourceProxy* producer, int outputPort);
|
|
|
|
// Description:
|
|
// Create a default representation for the given source proxy.
|
|
// Returns a new proxy.
|
|
// In version 4.1 and earlier, subclasses overrode this method. Since 4.2, the
|
|
// preferred way is to simply override GetRepresentationType(). That
|
|
// ensures that CreateDefaultRepresentation() and CanDisplayData() both
|
|
// work as expected.
|
|
virtual vtkSMRepresentationProxy* CreateDefaultRepresentation(
|
|
vtkSMProxy*, int);
|
|
|
|
// Description:
|
|
// Returns the xml name of the representation proxy to create to show the data
|
|
// produced in this view, if any. Default implementation checks if the
|
|
// producer has any "Hints" that define the representation to create in this
|
|
// view and if so, returns that.
|
|
// Or if this->DefaultRepresentationName is set and its Input property
|
|
// can accept the data produced, returns this->DefaultRepresentationName.
|
|
// Subclasses should override this method.
|
|
virtual const char* GetRepresentationType(
|
|
vtkSMSourceProxy* producer, int outputPort);
|
|
|
|
// Description:
|
|
// Finds the representation proxy showing the data produced by the provided
|
|
// producer, if any. Note the representation may not necessarily be visible.
|
|
virtual vtkSMRepresentationProxy* FindRepresentation(vtkSMSourceProxy* producer, int outputPort);
|
|
|
|
// Description:
|
|
// Captures a image from this view. Default implementation returns NULL.
|
|
// Subclasses should override CaptureWindowInternal() to do the actual image
|
|
// capture.
|
|
vtkImageData* CaptureWindow(int magnification);
|
|
|
|
// Description:
|
|
// Returns the client-side vtkView, if any.
|
|
vtkView* GetClientSideView();
|
|
|
|
// Description:
|
|
// Saves a screenshot of the view to disk. The writerName argument specifies
|
|
// the vtkImageWriter subclass to use.
|
|
int WriteImage(const char* filename, const char* writerName, int magnification=1);
|
|
|
|
// Description:
|
|
// Return true any internal representation is dirty. This can be usefull to
|
|
// know if the internal geometry has changed.
|
|
// DEPRECATED: Use GetNeedsUpdate() instead.
|
|
virtual bool HasDirtyRepresentation() { return this->GetNeedsUpdate(); }
|
|
|
|
// Description:
|
|
// Returns true if the subsequent call to Update() will result in an actual
|
|
// update. If returned true, it means that the view thinks its rendering is
|
|
// obsolete and needs to be re-generated.
|
|
vtkGetMacro(NeedsUpdate, bool);
|
|
|
|
// Description:
|
|
// Return the vtkRenderWindow used by this view, if any. Note, views like
|
|
// vtkSMComparativeViewProxy can have more than 1 render window in play, in
|
|
// which case, using this method alone may yield incorrect results. Also,
|
|
// certain views don't use a vtkRenderWindow at all (e.g. Spreadsheet View),
|
|
// in which case, this method will return NULL. Default implementation returns
|
|
// NULL.
|
|
virtual vtkRenderWindow* GetRenderWindow() { return NULL; }
|
|
|
|
// Description:
|
|
// Returns the interactor. Note, that views may not use vtkRenderWindow at all
|
|
// in which case they will not have any interactor and will return NULL.
|
|
// Default implementation returns NULL.
|
|
virtual vtkRenderWindowInteractor* GetInteractor() { return NULL; }
|
|
|
|
// Description:
|
|
// A client process need to set the interactor to enable interactivity. Use
|
|
// this method to set the interactor and initialize it as needed by the
|
|
// RenderView. This include changing the interactor style as well as
|
|
// overriding VTK rendering to use the Proxy/ViewProxy API instead.
|
|
// Default implementation does nothing. Views that support interaction using
|
|
// vtkRenderWindowInteractor should override this method to set the interactor
|
|
// up.
|
|
virtual void SetupInteractor(vtkRenderWindowInteractor* iren) {(void) iren;}
|
|
|
|
// Description:
|
|
// Creates a default render window interactor for the vtkRenderWindow and sets
|
|
// it up on the local process if the local process supports interaction. This
|
|
// should not be used when putting the render window in a QVTKWidget as that
|
|
// may cause issues. One should let the QVTKWidget create the interactor and
|
|
// then call SetupInteractor().
|
|
virtual bool MakeRenderWindowInteractor(bool quiet=false);
|
|
|
|
// Description:
|
|
// Sets whether screenshots have a transparent background.
|
|
static void SetTransparentBackground(bool val);
|
|
static bool GetTransparentBackground();
|
|
|
|
// Description:
|
|
// Method used to hide other representations if the view has a
|
|
// <ShowOneRepresentationAtATime/> hint.
|
|
// This only affects other representations that have data inputs, not non-data
|
|
// representations.
|
|
// Returns true if any representations were hidden by this call, otherwise
|
|
// returns false.
|
|
virtual bool HideOtherRepresentationsIfNeeded(vtkSMProxy* repr);
|
|
static bool HideOtherRepresentationsIfNeeded(vtkSMViewProxy* self, vtkSMProxy* repr)
|
|
{
|
|
return self? self->HideOtherRepresentationsIfNeeded(repr) : false;
|
|
}
|
|
|
|
//BTX
|
|
protected:
|
|
vtkSMViewProxy();
|
|
~vtkSMViewProxy();
|
|
|
|
//
|
|
// Description:
|
|
// Subclasses should override this method to do the actual image capture.
|
|
virtual vtkImageData* CaptureWindowInternal(int vtkNotUsed(magnification))
|
|
{ return NULL; }
|
|
|
|
virtual vtkTypeUInt32 PreRender(bool vtkNotUsed(interactive))
|
|
{ return this->GetLocation(); }
|
|
virtual void PostRender(bool vtkNotUsed(interactive)) {}
|
|
|
|
// Description:
|
|
// Subclasses should override this method and return false if the rendering
|
|
// context is not ready for rendering at this moment. This method is called in
|
|
// StillRender() and InteractiveRender() calls before the actual render to
|
|
// ensure that we don't attempt to render when the rendering context is not
|
|
// ready.
|
|
// Default implementation uses this->GetRenderWindow() and checks if that
|
|
// window is drawable.
|
|
virtual bool IsContextReadyForRendering();
|
|
|
|
// Description:
|
|
// Called at the end of CreateVTKObjects().
|
|
virtual void CreateVTKObjects();
|
|
|
|
// Description:
|
|
// Read attributes from an XML element.
|
|
virtual int ReadXMLAttributes(vtkSMSessionProxyManager* pm, vtkPVXMLElement* element);
|
|
|
|
// Description:
|
|
// Convenience method to call
|
|
// vtkPVView::SafeDownCast(this->GetClientSideObject())->GetLocalProcessSupportsInteraction();
|
|
bool GetLocalProcessSupportsInteraction();
|
|
|
|
vtkSetStringMacro(DefaultRepresentationName);
|
|
char* DefaultRepresentationName;
|
|
|
|
bool Enable;
|
|
|
|
private:
|
|
vtkSMViewProxy(const vtkSMViewProxy&); // Not implemented
|
|
void operator=(const vtkSMViewProxy&); // Not implemented
|
|
|
|
static bool TransparentBackground;
|
|
|
|
// When view's time changes, there's no way for the client-side proxies to
|
|
// know that they may re-execute and their data info is invalid. So mark those
|
|
// dirty explicitly.
|
|
void ViewTimeChanged();
|
|
|
|
// Actual logic for taking a screenshot.
|
|
vtkImageData* CaptureWindowSingle(int magnification);
|
|
class vtkRendererSaveInfo;
|
|
vtkRendererSaveInfo* PrepareRendererBackground(vtkRenderer*, double, double, double, bool);
|
|
void RestoreRendererBackground(vtkRenderer*, vtkRendererSaveInfo*);
|
|
//ETX
|
|
};
|
|
|
|
#endif
|