You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

308 lines
8.5 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkRenderView.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.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
/**
* @class vtkRenderView
* @brief A view containing a renderer.
*
*
* vtkRenderView is a view which contains a vtkRenderer. You may add vtkActors
* directly to the renderer, or add certain vtkDataRepresentation subclasses
* to the renderer. The render view supports drag selection with the mouse to
* select cells.
*
* This class is also the parent class for any more specialized view which uses
* a renderer.
*/
#ifndef vtkRenderView_h
#define vtkRenderView_h
#include "vtkRenderViewBase.h"
#include "vtkSmartPointer.h" // For SP ivars
#include "vtkViewsInfovisModule.h" // For export macro
class vtkAbstractTransform;
class vtkActor2D;
class vtkAlgorithmOutput;
class vtkArrayCalculator;
class vtkBalloonRepresentation;
class vtkDynamic2DLabelMapper;
class vtkHardwareSelector;
class vtkHoverWidget;
class vtkInteractorObserver;
class vtkLabelPlacementMapper;
class vtkPolyDataMapper2D;
class vtkSelection;
class vtkTextProperty;
class vtkTexture;
class vtkTexturedActor2D;
class vtkTransformCoordinateSystems;
class VTKVIEWSINFOVIS_EXPORT vtkRenderView : public vtkRenderViewBase
{
public:
static vtkRenderView* New();
vtkTypeMacro(vtkRenderView, vtkRenderViewBase);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* The render window interactor. Note that this requires special
* handling in order to do correctly - see the notes in the detailed
* description of vtkRenderViewBase.
*/
void SetInteractor(vtkRenderWindowInteractor* interactor) override;
/**
* The interactor style associated with the render view.
*/
virtual void SetInteractorStyle(vtkInteractorObserver* style);
/**
* Get the interactor style associated with the render view.
*/
virtual vtkInteractorObserver* GetInteractorStyle();
/**
* Set the render window for this view. Note that this requires special
* handling in order to do correctly - see the notes in the detailed
* description of vtkRenderViewBase.
*/
void SetRenderWindow(vtkRenderWindow* win) override;
enum
{
INTERACTION_MODE_2D,
INTERACTION_MODE_3D,
INTERACTION_MODE_UNKNOWN
};
void SetInteractionMode(int mode);
vtkGetMacro(InteractionMode, int);
/**
* Set the interaction mode for the view. Choices are:
* vtkRenderView::INTERACTION_MODE_2D - 2D interactor
* vtkRenderView::INTERACTION_MODE_3D - 3D interactor
*/
virtual void SetInteractionModeTo2D() { this->SetInteractionMode(INTERACTION_MODE_2D); }
virtual void SetInteractionModeTo3D() { this->SetInteractionMode(INTERACTION_MODE_3D); }
/**
* Updates the representations, then calls Render() on the render window
* associated with this view.
*/
void Render() override;
/**
* Applies a view theme to this view.
*/
void ApplyViewTheme(vtkViewTheme* theme) override;
//@{
/**
* Set the view's transform. All vtkRenderedRepresentations
* added to this view should use this transform.
*/
virtual void SetTransform(vtkAbstractTransform* transform);
vtkGetObjectMacro(Transform, vtkAbstractTransform);
//@}
//@{
/**
* Whether the view should display hover text.
*/
virtual void SetDisplayHoverText(bool b);
vtkGetMacro(DisplayHoverText, bool);
vtkBooleanMacro(DisplayHoverText, bool);
//@}
enum
{
SURFACE = 0,
FRUSTUM = 1
};
//@{
/**
* Sets the selection mode for the render view.
* SURFACE selection uses vtkHardwareSelector to perform a selection
* of visible cells.
* FRUSTUM selection just creates a view frustum selection, which will
* select everything in the frustum.
*/
vtkSetClampMacro(SelectionMode, int, 0, 1);
vtkGetMacro(SelectionMode, int);
void SetSelectionModeToSurface() { this->SetSelectionMode(SURFACE); }
void SetSelectionModeToFrustum() { this->SetSelectionMode(FRUSTUM); }
//@}
/**
* Add labels from an input connection with an associated text
* property. The output must be a vtkLabelHierarchy (normally the
* output of vtkPointSetToLabelHierarchy).
*/
virtual void AddLabels(vtkAlgorithmOutput* conn);
/**
* Remove labels from an input connection.
*/
virtual void RemoveLabels(vtkAlgorithmOutput* conn);
//@{
/**
* Set the icon sheet to use for rendering icons.
*/
virtual void SetIconTexture(vtkTexture* texture);
vtkGetObjectMacro(IconTexture, vtkTexture);
//@}
//@{
/**
* Set the size of each icon in the icon texture.
*/
vtkSetVector2Macro(IconSize, int);
vtkGetVector2Macro(IconSize, int);
//@}
//@{
/**
* Set the display size of the icon (which may be different from the icon
* size). By default, if this value is not set, the IconSize is used.
*/
vtkSetVector2Macro(DisplaySize, int);
int* GetDisplaySize();
void GetDisplaySize(int& dsx, int& dsy);
//@}
enum
{
NO_OVERLAP,
ALL
};
//@{
/**
* Label placement mode.
* NO_OVERLAP uses vtkLabelPlacementMapper, which has a faster startup time and
* works with 2D or 3D labels.
* ALL displays all labels (Warning: This may cause incredibly slow render
* times on datasets with more than a few hundred labels).
*/
virtual void SetLabelPlacementMode(int mode);
virtual int GetLabelPlacementMode();
virtual void SetLabelPlacementModeToNoOverlap() { this->SetLabelPlacementMode(NO_OVERLAP); }
virtual void SetLabelPlacementModeToAll() { this->SetLabelPlacementMode(ALL); }
//@}
enum
{
FREETYPE,
QT
};
//@{
/**
* Label render mode.
* FREETYPE uses the freetype label rendering.
* QT uses more advanced Qt-based label rendering.
*/
virtual void SetLabelRenderMode(int mode);
virtual int GetLabelRenderMode();
virtual void SetLabelRenderModeToFreetype() { this->SetLabelRenderMode(FREETYPE); }
virtual void SetLabelRenderModeToQt() { this->SetLabelRenderMode(QT); }
//@}
//@{
/**
* Whether to render on every mouse move.
*/
void SetRenderOnMouseMove(bool b);
vtkGetMacro(RenderOnMouseMove, bool);
vtkBooleanMacro(RenderOnMouseMove, bool);
//@}
protected:
vtkRenderView();
~vtkRenderView() override;
/**
* Called to process events.
* Captures StartEvent events from the renderer and calls Update().
* This may be overridden by subclasses to process additional events.
*/
void ProcessEvents(vtkObject* caller, unsigned long eventId, void* callData) override;
/**
* Generates the selection based on the view event and the selection mode.
*/
virtual void GenerateSelection(void* callData, vtkSelection* selection);
/**
* Called by the view when the renderer is about to render.
*/
void PrepareForRendering() override;
/**
* Called in PrepareForRendering to update the hover text.
*/
virtual void UpdateHoverText();
/**
* Enable or disable hovering based on DisplayHoverText ivar
* and interaction state.
*/
virtual void UpdateHoverWidgetState();
/**
* Update the pick render for queries for drag selections
* or hover ballooons.
*/
void UpdatePickRender();
int SelectionMode;
int LabelRenderMode;
bool DisplayHoverText;
bool Interacting;
bool InHoverTextRender;
bool InPickRender;
bool PickRenderNeedsUpdate;
vtkAbstractTransform* Transform;
vtkTexture* IconTexture;
int IconSize[2];
int DisplaySize[2];
int InteractionMode;
bool RenderOnMouseMove;
vtkSmartPointer<vtkRenderer> LabelRenderer;
vtkSmartPointer<vtkBalloonRepresentation> Balloon;
vtkSmartPointer<vtkLabelPlacementMapper> LabelPlacementMapper;
vtkSmartPointer<vtkTexturedActor2D> LabelActor;
vtkSmartPointer<vtkHoverWidget> HoverWidget;
vtkSmartPointer<vtkHardwareSelector> Selector;
private:
vtkRenderView(const vtkRenderView&) = delete;
void operator=(const vtkRenderView&) = delete;
};
#endif