You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
6.7 KiB
183 lines
6.7 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkParallelCoordinatesActor.h,v $
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkParallelCoordinatesActor - create parallel coordinate display from input field
|
|
// .SECTION Description
|
|
// vtkParallelCoordinatesActor generates a parallel coordinates plot from an
|
|
// input field (i.e., vtkDataObject). Parallel coordinates represent
|
|
// N-dimensional data by using a set of N parallel axes (not orthogonal like
|
|
// the usual x-y-z Cartesian axes). Each N-dimensional point is plotted as a
|
|
// polyline, were each of the N components of the point lie on one of the
|
|
// N axes, and the components are connected by straight lines.
|
|
//
|
|
// To use this class, you must specify an input data object. You'll probably
|
|
// also want to specify the position of the plot be setting the Position and
|
|
// Position2 instance variables, which define a rectangle in which the plot
|
|
// lies. Another important parameter is the IndependentVariables ivar, which
|
|
// tells the instance how to interpret the field data (independent variables
|
|
// as the rows or columns of the field). There are also many other instance
|
|
// variables that control the look of the plot includes its title,
|
|
// attributes, number of ticks on the axes, etc.
|
|
//
|
|
// Set the text property/attributes of the title and the labels through the
|
|
// vtkTextProperty objects associated to this actor.
|
|
|
|
// .SECTION Caveats
|
|
// Field data is not necessarily "rectangular" in shape. In these cases, some
|
|
// of the data may not be plotted.
|
|
//
|
|
// The early implementation lacks many features that could be added in the
|
|
// future.
|
|
// This includes the ability to "brush" data (choose regions along an axis and
|
|
// highlight any points/lines passing through the region); efficiency is really
|
|
// bad; more control over the properties of the plot (separate properties for
|
|
// each axes,title,etc.; and using the labels found in the field to label each
|
|
// of the axes.
|
|
//
|
|
// .SECTION See Also
|
|
// vtkAxisActor3D can be used to create axes in world coordinate space.
|
|
// vtkActor2D vtkTextMapper vtkPolyDataMapper2D vtkScalarBarActor
|
|
// vtkCoordinate vtkTextProperty
|
|
|
|
#ifndef __vtkParallelCoordinatesActor_h
|
|
#define __vtkParallelCoordinatesActor_h
|
|
|
|
#include "vtkActor2D.h"
|
|
|
|
class vtkAxisActor2D;
|
|
class vtkDataObject;
|
|
class vtkPolyData;
|
|
class vtkPolyDataMapper2D;
|
|
class vtkTextMapper;
|
|
class vtkTextProperty;
|
|
|
|
#define VTK_IV_COLUMN 0
|
|
#define VTK_IV_ROW 1
|
|
|
|
class VTK_RENDERING_EXPORT vtkParallelCoordinatesActor : public vtkActor2D
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkParallelCoordinatesActor,vtkActor2D);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Instantiate object with autorange computation;
|
|
// the number of labels set to 5 for the x and y axes;
|
|
// a label format of "%-#6.3g"; and x coordinates computed from point
|
|
// ids.
|
|
static vtkParallelCoordinatesActor *New();
|
|
|
|
// Description:
|
|
// Specify whether to use the rows or columns as independent variables.
|
|
// If columns, then each row represents a separate point. If rows, then
|
|
// each column represents a separate point.
|
|
vtkSetClampMacro(IndependentVariables,int,VTK_IV_COLUMN, VTK_IV_ROW);
|
|
vtkGetMacro(IndependentVariables,int);
|
|
void SetIndependentVariablesToColumns()
|
|
{this->SetIndependentVariables(VTK_IV_COLUMN);};
|
|
void SetIndependentVariablesToRows()
|
|
{this->SetIndependentVariables(VTK_IV_ROW);};
|
|
|
|
// Description:
|
|
// Set/Get the title of the parallel coordinates plot.
|
|
vtkSetStringMacro(Title);
|
|
vtkGetStringMacro(Title);
|
|
|
|
// Description:
|
|
// Set/Get the number of annotation labels to show along each axis.
|
|
// This values is a suggestion: the number of labels may vary depending
|
|
// on the particulars of the data.
|
|
vtkSetClampMacro(NumberOfLabels, int, 0, 50);
|
|
vtkGetMacro(NumberOfLabels, int);
|
|
|
|
// Description:
|
|
// Set/Get the format with which to print the labels on the axes.
|
|
vtkSetStringMacro(LabelFormat);
|
|
vtkGetStringMacro(LabelFormat);
|
|
|
|
// Description:
|
|
// Set/Get the title text property.
|
|
virtual void SetTitleTextProperty(vtkTextProperty *p);
|
|
vtkGetObjectMacro(TitleTextProperty,vtkTextProperty);
|
|
|
|
// Description:
|
|
// Set/Get the labels text property.
|
|
virtual void SetLabelTextProperty(vtkTextProperty *p);
|
|
vtkGetObjectMacro(LabelTextProperty,vtkTextProperty);
|
|
|
|
// Description:
|
|
// Draw the parallel coordinates plot.
|
|
int RenderOpaqueGeometry(vtkViewport*);
|
|
int RenderOverlay(vtkViewport*);
|
|
int RenderTranslucentGeometry(vtkViewport *) {return 0;}
|
|
|
|
// Description:
|
|
// Set the input to the parallel coordinates actor.
|
|
virtual void SetInput(vtkDataObject*);
|
|
|
|
// Description:
|
|
// Remove a dataset from the list of data to append.
|
|
vtkGetObjectMacro(Input,vtkDataObject);
|
|
|
|
// Description:
|
|
// Release any graphics resources that are being consumed by this actor.
|
|
// The parameter window could be used to determine which graphic
|
|
// resources to release.
|
|
void ReleaseGraphicsResources(vtkWindow *);
|
|
|
|
protected:
|
|
vtkParallelCoordinatesActor();
|
|
~vtkParallelCoordinatesActor();
|
|
|
|
private:
|
|
vtkDataObject *Input; // List of data sets to plot
|
|
|
|
int IndependentVariables; // Use column or row
|
|
vtkIdType N; // The number of independent variables
|
|
double *Mins; // Minimum data value along this row/column
|
|
double *Maxs; // Maximum data value along this row/column
|
|
int *Xs; // Axes x-values (in viewport coordinates)
|
|
int YMin; // Axes y-min-value (in viewport coordinates)
|
|
int YMax; // Axes y-max-value (in viewport coordinates)
|
|
int NumberOfLabels; // Along each axis
|
|
char *LabelFormat;
|
|
char *Title;
|
|
|
|
vtkAxisActor2D **Axes;
|
|
vtkTextMapper *TitleMapper;
|
|
vtkActor2D *TitleActor;
|
|
|
|
vtkTextProperty *TitleTextProperty;
|
|
vtkTextProperty *LabelTextProperty;
|
|
|
|
vtkPolyData *PlotData; // The lines drawn within the axes
|
|
vtkPolyDataMapper2D *PlotMapper;
|
|
vtkActor2D *PlotActor;
|
|
|
|
vtkTimeStamp BuildTime;
|
|
|
|
int LastPosition[2];
|
|
int LastPosition2[2];
|
|
|
|
void Initialize();
|
|
int PlaceAxes(vtkViewport *viewport, int *size);
|
|
|
|
private:
|
|
vtkParallelCoordinatesActor(const vtkParallelCoordinatesActor&); // Not implemented.
|
|
void operator=(const vtkParallelCoordinatesActor&); // Not implemented.
|
|
};
|
|
|
|
|
|
#endif
|
|
|
|
|