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.

208 lines
5.5 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkHierarchicalGraphPipeline.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 vtkHierarchicalGraphPipeline
* @brief helper class for rendering graphs superimposed on a tree.
*
*
* vtkHierarchicalGraphPipeline renders bundled edges that are meant to be
* viewed as an overlay on a tree. This class is not for general use, but
* is used in the internals of vtkRenderedHierarchyRepresentation and
* vtkRenderedTreeAreaRepresentation.
*/
#ifndef vtkHierarchicalGraphPipeline_h
#define vtkHierarchicalGraphPipeline_h
#include "vtkObject.h"
#include "vtkViewsInfovisModule.h" // For export macro
class vtkActor;
class vtkActor2D;
class vtkAlgorithmOutput;
class vtkApplyColors;
class vtkDataRepresentation;
class vtkDynamic2DLabelMapper;
class vtkEdgeCenters;
class vtkGraphHierarchicalBundleEdges;
class vtkGraphToPolyData;
class vtkPolyDataMapper;
class vtkRenderView;
class vtkSplineGraphEdges;
class vtkSelection;
class vtkTextProperty;
class vtkViewTheme;
class VTKVIEWSINFOVIS_EXPORT vtkHierarchicalGraphPipeline : public vtkObject
{
public:
static vtkHierarchicalGraphPipeline* New();
vtkTypeMacro(vtkHierarchicalGraphPipeline, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@{
/**
* The actor associated with the hierarchical graph.
*/
vtkGetObjectMacro(Actor, vtkActor);
//@}
//@{
/**
* The actor associated with the hierarchical graph.
*/
vtkGetObjectMacro(LabelActor, vtkActor2D);
//@}
//@{
/**
* The bundling strength for the bundled edges.
*/
virtual void SetBundlingStrength(double strength);
virtual double GetBundlingStrength();
//@}
//@{
/**
* The edge label array name.
*/
virtual void SetLabelArrayName(const char* name);
virtual const char* GetLabelArrayName();
//@}
//@{
/**
* The edge label visibility.
*/
virtual void SetLabelVisibility(bool vis);
virtual bool GetLabelVisibility();
vtkBooleanMacro(LabelVisibility, bool);
//@}
//@{
/**
* The edge label text property.
*/
virtual void SetLabelTextProperty(vtkTextProperty* prop);
virtual vtkTextProperty* GetLabelTextProperty();
//@}
//@{
/**
* The edge color array.
*/
virtual void SetColorArrayName(const char* name);
virtual const char* GetColorArrayName();
//@}
//@{
/**
* Whether to color the edges by an array.
*/
virtual void SetColorEdgesByArray(bool vis);
virtual bool GetColorEdgesByArray();
vtkBooleanMacro(ColorEdgesByArray, bool);
//@}
//@{
/**
* The visibility of this graph.
*/
virtual void SetVisibility(bool vis);
virtual bool GetVisibility();
vtkBooleanMacro(Visibility, bool);
//@}
/**
* Returns a new selection relevant to this graph based on an input
* selection and the view that this graph is contained in.
*/
virtual vtkSelection* ConvertSelection(vtkDataRepresentation* rep, vtkSelection* sel);
/**
* Sets the input connections for this graph.
* graphConn is the input graph connection.
* treeConn is the input tree connection.
* annConn is the annotation link connection.
*/
virtual void PrepareInputConnections(
vtkAlgorithmOutput* graphConn, vtkAlgorithmOutput* treeConn, vtkAlgorithmOutput* annConn);
/**
* Applies the view theme to this graph.
*/
virtual void ApplyViewTheme(vtkViewTheme* theme);
//@{
/**
* The array to use while hovering over an edge.
*/
vtkSetStringMacro(HoverArrayName);
vtkGetStringMacro(HoverArrayName);
//@}
//@{
/**
* The spline mode to use in vtkSplineGraphEdges.
* vtkSplineGraphEdges::CUSTOM uses a vtkCardinalSpline.
* vtkSplineGraphEdges::BSPLINE uses a b-spline.
* The default is BSPLINE.
*/
virtual void SetSplineType(int type);
virtual int GetSplineType();
//@}
/**
* Register progress with a view.
*/
void RegisterProgress(vtkRenderView* view);
protected:
vtkHierarchicalGraphPipeline();
~vtkHierarchicalGraphPipeline() override;
vtkApplyColors* ApplyColors;
vtkGraphHierarchicalBundleEdges* Bundle;
vtkGraphToPolyData* GraphToPoly;
vtkSplineGraphEdges* Spline;
vtkPolyDataMapper* Mapper;
vtkActor* Actor;
vtkTextProperty* TextProperty;
vtkEdgeCenters* EdgeCenters;
vtkDynamic2DLabelMapper* LabelMapper;
vtkActor2D* LabelActor;
char* HoverArrayName;
vtkSetStringMacro(ColorArrayNameInternal);
vtkGetStringMacro(ColorArrayNameInternal);
char* ColorArrayNameInternal;
vtkSetStringMacro(LabelArrayNameInternal);
vtkGetStringMacro(LabelArrayNameInternal);
char* LabelArrayNameInternal;
private:
vtkHierarchicalGraphPipeline(const vtkHierarchicalGraphPipeline&) = delete;
void operator=(const vtkHierarchicalGraphPipeline&) = delete;
};
#endif