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.
332 lines
8.3 KiB
C++
332 lines
8.3 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkGraphMapper.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 vtkGraphMapper
|
|
* @brief map vtkGraph and derived
|
|
* classes to graphics primitives
|
|
*
|
|
*
|
|
* vtkGraphMapper is a mapper to map vtkGraph
|
|
* (and all derived classes) to graphics primitives.
|
|
*/
|
|
|
|
#ifndef vtkGraphMapper_h
|
|
#define vtkGraphMapper_h
|
|
|
|
#include "vtkMapper.h"
|
|
#include "vtkRenderingCoreModule.h" // For export macro
|
|
|
|
#include "vtkSmartPointer.h" // Required for smart pointer internal ivars.
|
|
|
|
class vtkActor2D;
|
|
class vtkMapArrayValues;
|
|
class vtkCamera;
|
|
class vtkFollower;
|
|
class vtkGraph;
|
|
class vtkGlyph3D;
|
|
class vtkGraphToPolyData;
|
|
class vtkIconGlyphFilter;
|
|
class vtkCellCenters;
|
|
class vtkPolyData;
|
|
class vtkPolyDataMapper;
|
|
class vtkPolyDataMapper2D;
|
|
class vtkLookupTable;
|
|
class vtkTransformCoordinateSystems;
|
|
class vtkTexture;
|
|
class vtkTexturedActor2D;
|
|
class vtkVertexGlyphFilter;
|
|
|
|
class VTKRENDERINGCORE_EXPORT vtkGraphMapper : public vtkMapper
|
|
{
|
|
public:
|
|
static vtkGraphMapper* New();
|
|
vtkTypeMacro(vtkGraphMapper, vtkMapper);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
void Render(vtkRenderer* ren, vtkActor* act) override;
|
|
|
|
//@{
|
|
/**
|
|
* The array to use for coloring vertices. Default is "color".
|
|
*/
|
|
void SetVertexColorArrayName(const char* name);
|
|
const char* GetVertexColorArrayName();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to color vertices. Default is off.
|
|
*/
|
|
void SetColorVertices(bool vis);
|
|
bool GetColorVertices();
|
|
void ColorVerticesOn();
|
|
void ColorVerticesOff();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether scaled glyphs are on or not. Default is off.
|
|
* By default this mapper uses vertex glyphs that do not
|
|
* scale. If you turn this option on you will get circles
|
|
* at each vertex and they will scale as you zoom in/out.
|
|
*/
|
|
void SetScaledGlyphs(bool arg);
|
|
vtkGetMacro(ScaledGlyphs, bool);
|
|
vtkBooleanMacro(ScaledGlyphs, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Glyph scaling array name. Default is "scale"
|
|
*/
|
|
vtkSetStringMacro(ScalingArrayName);
|
|
vtkGetStringMacro(ScalingArrayName);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to show edges or not. Default is on.
|
|
*/
|
|
void SetEdgeVisibility(bool vis);
|
|
bool GetEdgeVisibility();
|
|
vtkBooleanMacro(EdgeVisibility, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* The array to use for coloring edges. Default is "color".
|
|
*/
|
|
void SetEdgeColorArrayName(const char* name);
|
|
const char* GetEdgeColorArrayName();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to color edges. Default is off.
|
|
*/
|
|
void SetColorEdges(bool vis);
|
|
bool GetColorEdges();
|
|
void ColorEdgesOn();
|
|
void ColorEdgesOff();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* The array to use for coloring edges. Default is "color".
|
|
*/
|
|
vtkSetStringMacro(EnabledEdgesArrayName);
|
|
vtkGetStringMacro(EnabledEdgesArrayName);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to enable/disable edges using array values. Default is off.
|
|
*/
|
|
vtkSetMacro(EnableEdgesByArray, vtkTypeBool);
|
|
vtkGetMacro(EnableEdgesByArray, vtkTypeBool);
|
|
vtkBooleanMacro(EnableEdgesByArray, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* The array to use for coloring edges. Default is "color".
|
|
*/
|
|
vtkSetStringMacro(EnabledVerticesArrayName);
|
|
vtkGetStringMacro(EnabledVerticesArrayName);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to enable/disable vertices using array values. Default is off.
|
|
*/
|
|
vtkSetMacro(EnableVerticesByArray, vtkTypeBool);
|
|
vtkGetMacro(EnableVerticesByArray, vtkTypeBool);
|
|
vtkBooleanMacro(EnableVerticesByArray, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* The array to use for assigning icons.
|
|
*/
|
|
void SetIconArrayName(const char* name);
|
|
const char* GetIconArrayName();
|
|
//@}
|
|
|
|
/**
|
|
* Associate the icon at index "index" in the vtkTexture to all vertices
|
|
* containing "type" as a value in the vertex attribute array specified by
|
|
* IconArrayName.
|
|
*/
|
|
void AddIconType(const char* type, int index);
|
|
|
|
/**
|
|
* Clear all icon mappings.
|
|
*/
|
|
void ClearIconTypes();
|
|
|
|
//@{
|
|
/**
|
|
* Specify the Width and Height, in pixels, of an icon in the icon sheet.
|
|
*/
|
|
void SetIconSize(int* size);
|
|
int* GetIconSize();
|
|
//@}
|
|
|
|
/**
|
|
* Specify where the icons should be placed in relation to the vertex.
|
|
* See vtkIconGlyphFilter.h for possible values.
|
|
*/
|
|
void SetIconAlignment(int alignment);
|
|
|
|
//@{
|
|
/**
|
|
* The texture containing the icon sheet.
|
|
*/
|
|
vtkTexture* GetIconTexture();
|
|
void SetIconTexture(vtkTexture* texture);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to show icons. Default is off.
|
|
*/
|
|
void SetIconVisibility(bool vis);
|
|
bool GetIconVisibility();
|
|
vtkBooleanMacro(IconVisibility, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set the vertex point size
|
|
*/
|
|
vtkGetMacro(VertexPointSize, float);
|
|
void SetVertexPointSize(float size);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set the edge line width
|
|
*/
|
|
vtkGetMacro(EdgeLineWidth, float);
|
|
void SetEdgeLineWidth(float width);
|
|
//@}
|
|
|
|
/**
|
|
* Release any graphics resources that are being consumed by this mapper.
|
|
* The parameter window could be used to determine which graphic
|
|
* resources to release.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
/**
|
|
* Get the mtime also considering the lookup table.
|
|
*/
|
|
vtkMTimeType GetMTime() override;
|
|
|
|
//@{
|
|
/**
|
|
* Set the Input of this mapper.
|
|
*/
|
|
void SetInputData(vtkGraph* input);
|
|
vtkGraph* GetInput();
|
|
//@}
|
|
|
|
/**
|
|
* Return bounding box (array of six doubles) of data expressed as
|
|
* (xmin,xmax, ymin,ymax, zmin,zmax).
|
|
*/
|
|
double* GetBounds() VTK_SIZEHINT(6) override;
|
|
void GetBounds(double* bounds) override { Superclass::GetBounds(bounds); }
|
|
|
|
//@{
|
|
/**
|
|
* Access to the lookup tables used by the vertex and edge mappers.
|
|
*/
|
|
vtkGetObjectMacro(EdgeLookupTable, vtkLookupTable);
|
|
vtkGetObjectMacro(VertexLookupTable, vtkLookupTable);
|
|
//@}
|
|
|
|
protected:
|
|
vtkGraphMapper();
|
|
~vtkGraphMapper() override;
|
|
|
|
//@{
|
|
/**
|
|
* Used to store the vertex and edge color array names
|
|
*/
|
|
vtkGetStringMacro(VertexColorArrayNameInternal);
|
|
vtkSetStringMacro(VertexColorArrayNameInternal);
|
|
vtkGetStringMacro(EdgeColorArrayNameInternal);
|
|
vtkSetStringMacro(EdgeColorArrayNameInternal);
|
|
char* VertexColorArrayNameInternal;
|
|
char* EdgeColorArrayNameInternal;
|
|
//@}
|
|
|
|
char* EnabledEdgesArrayName;
|
|
char* EnabledVerticesArrayName;
|
|
vtkTypeBool EnableEdgesByArray;
|
|
vtkTypeBool EnableVerticesByArray;
|
|
|
|
vtkGetStringMacro(IconArrayNameInternal);
|
|
vtkSetStringMacro(IconArrayNameInternal);
|
|
char* IconArrayNameInternal;
|
|
|
|
vtkSmartPointer<vtkGlyph3D> CircleGlyph;
|
|
vtkSmartPointer<vtkGlyph3D> CircleOutlineGlyph;
|
|
|
|
vtkSmartPointer<vtkGraphToPolyData> GraphToPoly;
|
|
vtkSmartPointer<vtkVertexGlyphFilter> VertexGlyph;
|
|
vtkSmartPointer<vtkIconGlyphFilter> IconGlyph;
|
|
vtkSmartPointer<vtkMapArrayValues> IconTypeToIndex;
|
|
vtkSmartPointer<vtkTransformCoordinateSystems> IconTransform;
|
|
|
|
vtkSmartPointer<vtkPolyDataMapper> EdgeMapper;
|
|
vtkSmartPointer<vtkPolyDataMapper> VertexMapper;
|
|
vtkSmartPointer<vtkPolyDataMapper> OutlineMapper;
|
|
vtkSmartPointer<vtkPolyDataMapper2D> IconMapper;
|
|
|
|
vtkSmartPointer<vtkActor> EdgeActor;
|
|
vtkSmartPointer<vtkActor> VertexActor;
|
|
vtkSmartPointer<vtkActor> OutlineActor;
|
|
vtkSmartPointer<vtkTexturedActor2D> IconActor;
|
|
|
|
// Color maps
|
|
vtkLookupTable* EdgeLookupTable;
|
|
vtkLookupTable* VertexLookupTable;
|
|
|
|
void ReportReferences(vtkGarbageCollector*) override;
|
|
|
|
// see algorithm for more info
|
|
int FillInputPortInformation(int port, vtkInformation* info) override;
|
|
|
|
private:
|
|
vtkGraphMapper(const vtkGraphMapper&) = delete;
|
|
void operator=(const vtkGraphMapper&) = delete;
|
|
|
|
// Helper function
|
|
vtkPolyData* CreateCircle(bool filled);
|
|
|
|
float VertexPointSize;
|
|
float EdgeLineWidth;
|
|
bool ScaledGlyphs;
|
|
char* ScalingArrayName;
|
|
};
|
|
|
|
#endif
|