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.
255 lines
8.1 KiB
C++
255 lines
8.1 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkView.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 vtkView
|
|
* @brief The superclass for all views.
|
|
*
|
|
*
|
|
* vtkView is the superclass for views. A view is generally an area of an
|
|
* application's canvas devoted to displaying one or more VTK data objects.
|
|
* Associated representations (subclasses of vtkDataRepresentation) are
|
|
* responsible for converting the data into a displayable format. These
|
|
* representations are then added to the view.
|
|
*
|
|
* For views which display only one data object at a time you may set a
|
|
* data object or pipeline connection directly on the view itself (e.g.
|
|
* vtkGraphLayoutView, vtkLandscapeView, vtkTreeMapView).
|
|
* The view will internally create a vtkDataRepresentation for the data.
|
|
*
|
|
* A view has the concept of linked selection. If the same data is displayed
|
|
* in multiple views, their selections may be linked by setting the same
|
|
* vtkAnnotationLink on their representations (see vtkDataRepresentation).
|
|
*/
|
|
|
|
#ifndef vtkView_h
|
|
#define vtkView_h
|
|
|
|
#include "vtkObject.h"
|
|
#include "vtkViewsCoreModule.h" // For export macro
|
|
|
|
class vtkAlgorithmOutput;
|
|
class vtkCommand;
|
|
class vtkDataObject;
|
|
class vtkDataRepresentation;
|
|
class vtkSelection;
|
|
class vtkViewTheme;
|
|
|
|
class VTKVIEWSCORE_EXPORT vtkView : public vtkObject
|
|
{
|
|
public:
|
|
static vtkView* New();
|
|
vtkTypeMacro(vtkView, vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Adds the representation to the view.
|
|
*/
|
|
void AddRepresentation(vtkDataRepresentation* rep);
|
|
|
|
/**
|
|
* Set the representation to the view.
|
|
*/
|
|
void SetRepresentation(vtkDataRepresentation* rep);
|
|
|
|
/**
|
|
* Convenience method which creates a simple representation with the
|
|
* connection and adds it to the view.
|
|
* Returns the representation internally created.
|
|
* NOTE: The returned representation pointer is not reference-counted,
|
|
* so you MUST call Register() on the representation if you want to
|
|
* keep a reference to it.
|
|
*/
|
|
vtkDataRepresentation* AddRepresentationFromInputConnection(vtkAlgorithmOutput* conn);
|
|
|
|
/**
|
|
* Convenience method which sets the representation with the
|
|
* connection and adds it to the view.
|
|
* Returns the representation internally created.
|
|
* NOTE: The returned representation pointer is not reference-counted,
|
|
* so you MUST call Register() on the representation if you want to
|
|
* keep a reference to it.
|
|
*/
|
|
vtkDataRepresentation* SetRepresentationFromInputConnection(vtkAlgorithmOutput* conn);
|
|
|
|
/**
|
|
* Convenience method which creates a simple representation with the
|
|
* specified input and adds it to the view.
|
|
* NOTE: The returned representation pointer is not reference-counted,
|
|
* so you MUST call Register() on the representation if you want to
|
|
* keep a reference to it.
|
|
*/
|
|
vtkDataRepresentation* AddRepresentationFromInput(vtkDataObject* input);
|
|
|
|
/**
|
|
* Convenience method which sets the representation to the
|
|
* specified input and adds it to the view.
|
|
* NOTE: The returned representation pointer is not reference-counted,
|
|
* so you MUST call Register() on the representation if you want to
|
|
* keep a reference to it.
|
|
*/
|
|
vtkDataRepresentation* SetRepresentationFromInput(vtkDataObject* input);
|
|
|
|
/**
|
|
* Removes the representation from the view.
|
|
*/
|
|
void RemoveRepresentation(vtkDataRepresentation* rep);
|
|
|
|
/**
|
|
* Removes any representation with this connection from the view.
|
|
*/
|
|
void RemoveRepresentation(vtkAlgorithmOutput* rep);
|
|
|
|
/**
|
|
* Removes all representations from the view.
|
|
*/
|
|
void RemoveAllRepresentations();
|
|
|
|
/**
|
|
* Returns the number of representations from first port(0) in this view.
|
|
*/
|
|
int GetNumberOfRepresentations();
|
|
|
|
/**
|
|
* The representation at a specified index.
|
|
*/
|
|
vtkDataRepresentation* GetRepresentation(int index = 0);
|
|
|
|
/**
|
|
* Check to see if a representation is present in the view.
|
|
*/
|
|
bool IsRepresentationPresent(vtkDataRepresentation* rep);
|
|
|
|
/**
|
|
* Update the view.
|
|
*/
|
|
virtual void Update();
|
|
|
|
/**
|
|
* Apply a theme to the view.
|
|
*/
|
|
virtual void ApplyViewTheme(vtkViewTheme* vtkNotUsed(theme)) {}
|
|
|
|
/**
|
|
* Returns the observer that the subclasses can use to listen to additional
|
|
* events. Additionally these subclasses should override
|
|
* ProcessEvents() to handle these events.
|
|
*/
|
|
vtkCommand* GetObserver();
|
|
|
|
//@{
|
|
/**
|
|
* A ptr to an instance of ViewProgressEventCallData is provided in the call
|
|
* data when vtkCommand::ViewProgressEvent is fired.
|
|
*/
|
|
class ViewProgressEventCallData
|
|
{
|
|
const char* Message;
|
|
double Progress;
|
|
//@}
|
|
|
|
public:
|
|
ViewProgressEventCallData(const char* msg, double progress)
|
|
{
|
|
this->Message = msg;
|
|
this->Progress = progress;
|
|
}
|
|
~ViewProgressEventCallData() { this->Message = nullptr; }
|
|
|
|
/**
|
|
* Get the message.
|
|
*/
|
|
const char* GetProgressMessage() const { return this->Message; }
|
|
|
|
/**
|
|
* Get the progress value in range [0.0, 1.0].
|
|
*/
|
|
double GetProgress() const { return this->Progress; }
|
|
};
|
|
|
|
/**
|
|
* Meant for use by subclasses and vtkRepresentation subclasses.
|
|
* Call this method to register vtkObjects (generally
|
|
* vtkAlgorithm subclasses) which fire vtkCommand::ProgressEvent with the
|
|
* view. The view listens to vtkCommand::ProgressEvent and fires
|
|
* ViewProgressEvent with ViewProgressEventCallData containing the message and
|
|
* the progress amount. If message is not provided, then the class name for
|
|
* the algorithm is used.
|
|
*/
|
|
void RegisterProgress(vtkObject* algorithm, const char* message = nullptr);
|
|
|
|
/**
|
|
* Unregister objects previously registered with RegisterProgress.
|
|
*/
|
|
void UnRegisterProgress(vtkObject* algorithm);
|
|
|
|
protected:
|
|
vtkView();
|
|
~vtkView() override;
|
|
|
|
/**
|
|
* Called to process events.
|
|
* The superclass processes selection changed events from its representations.
|
|
* This may be overridden by subclasses to process additional events.
|
|
*/
|
|
virtual void ProcessEvents(vtkObject* caller, unsigned long eventId, void* callData);
|
|
|
|
/**
|
|
* Create a default vtkDataRepresentation for the given vtkAlgorithmOutput.
|
|
* View subclasses may override this method to create custom representations.
|
|
* This method is called by Add/SetRepresentationFromInputConnection.
|
|
* NOTE, the caller must delete the returned vtkDataRepresentation.
|
|
*/
|
|
virtual vtkDataRepresentation* CreateDefaultRepresentation(vtkAlgorithmOutput* conn);
|
|
|
|
/**
|
|
* Subclass "hooks" for notifying subclasses of vtkView when representations are added
|
|
* or removed. Override these methods to perform custom actions.
|
|
*/
|
|
virtual void AddRepresentationInternal(vtkDataRepresentation* vtkNotUsed(rep)) {}
|
|
virtual void RemoveRepresentationInternal(vtkDataRepresentation* vtkNotUsed(rep)) {}
|
|
|
|
//@{
|
|
/**
|
|
* True if the view takes a single representation that should be reused on
|
|
* Add/SetRepresentationFromInput(Connection) calls. Default is off.
|
|
*/
|
|
vtkSetMacro(ReuseSingleRepresentation, bool);
|
|
vtkGetMacro(ReuseSingleRepresentation, bool);
|
|
vtkBooleanMacro(ReuseSingleRepresentation, bool);
|
|
bool ReuseSingleRepresentation;
|
|
//@}
|
|
|
|
private:
|
|
vtkView(const vtkView&) = delete;
|
|
void operator=(const vtkView&) = delete;
|
|
|
|
class vtkImplementation;
|
|
vtkImplementation* Implementation;
|
|
|
|
class Command;
|
|
friend class Command;
|
|
Command* Observer;
|
|
|
|
class vtkInternal;
|
|
vtkInternal* Internal;
|
|
};
|
|
|
|
#endif
|