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.
168 lines
5.9 KiB
C
168 lines
5.9 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkTableToGraph.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 vtkTableToGraph
|
||
|
* @brief convert a vtkTable into a vtkGraph
|
||
|
*
|
||
|
*
|
||
|
* vtkTableToGraph converts a table to a graph using an auxiliary
|
||
|
* link graph. The link graph specifies how each row in the table
|
||
|
* should be converted to an edge, or a collection of edges. It also
|
||
|
* specifies which columns of the table should be considered part of
|
||
|
* the same domain, and which columns should be hidden.
|
||
|
*
|
||
|
* A second, optional, table may be provided as the vertex table.
|
||
|
* This vertex table must have one or more domain columns whose values
|
||
|
* match values in the edge table. The linked column name is specified in
|
||
|
* the domain array in the link graph. The output graph will only contain
|
||
|
* vertices corresponding to a row in the vertex table. For heterogeneous
|
||
|
* graphs, you may want to use vtkMergeTables to create a single vertex table.
|
||
|
*
|
||
|
* The link graph contains the following arrays:
|
||
|
*
|
||
|
* (1) The "column" array has the names of the columns to connect in each table row.
|
||
|
* This array is required.
|
||
|
*
|
||
|
* (2) The optional "domain" array provides user-defined domain names for each column.
|
||
|
* Matching domains in multiple columns will merge vertices with the same
|
||
|
* value from those columns. By default, all columns are in the same domain.
|
||
|
* If a vertex table is supplied, the domain indicates the column in the vertex
|
||
|
* table that the edge table column associates with. If the user provides a
|
||
|
* vertex table but no domain names, the output will be an empty graph.
|
||
|
* Hidden columns do not need valid domain names.
|
||
|
*
|
||
|
* (3) The optional "hidden" array is a bit array specifying whether the column should be
|
||
|
* hidden. The resulting graph will contain edges representing connections
|
||
|
* "through" the hidden column, but the vertices for that column will not
|
||
|
* be present. By default, no columns are hidden. Hiding a column
|
||
|
* in a particular domain hides all columns in that domain.
|
||
|
*
|
||
|
* The output graph will contain three additional arrays in the vertex data.
|
||
|
* The "domain" column is a string array containing the domain of each vertex.
|
||
|
* The "label" column is a string version of the distinct value that, along
|
||
|
* with the domain, defines that vertex. The "ids" column also contains
|
||
|
* the distinguishing value, but as a vtkVariant holding the raw value instead
|
||
|
* of being converted to a string. The "ids" column is set as the vertex pedigree
|
||
|
* ID attribute.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkTableToGraph_h
|
||
|
#define vtkTableToGraph_h
|
||
|
|
||
|
#include "vtkGraphAlgorithm.h"
|
||
|
#include "vtkInfovisCoreModule.h" // For export macro
|
||
|
|
||
|
class vtkBitArray;
|
||
|
class vtkMutableDirectedGraph;
|
||
|
class vtkStringArray;
|
||
|
class vtkTable;
|
||
|
|
||
|
class VTKINFOVISCORE_EXPORT vtkTableToGraph : public vtkGraphAlgorithm
|
||
|
{
|
||
|
public:
|
||
|
static vtkTableToGraph* New();
|
||
|
vtkTypeMacro(vtkTableToGraph, vtkGraphAlgorithm);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
/**
|
||
|
* Add a vertex to the link graph. Specify the column name, the domain name
|
||
|
* for the column, and whether the column is hidden.
|
||
|
*/
|
||
|
void AddLinkVertex(const char* column, const char* domain = nullptr, int hidden = 0);
|
||
|
|
||
|
/**
|
||
|
* Clear the link graph vertices. This also clears all edges.
|
||
|
*/
|
||
|
void ClearLinkVertices();
|
||
|
|
||
|
/**
|
||
|
* Add an edge to the link graph. Specify the names of the columns to link.
|
||
|
*/
|
||
|
void AddLinkEdge(const char* column1, const char* column2);
|
||
|
|
||
|
/**
|
||
|
* Clear the link graph edges. The graph vertices will remain.
|
||
|
*/
|
||
|
void ClearLinkEdges();
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The graph describing how to link the columns in the table.
|
||
|
*/
|
||
|
vtkGetObjectMacro(LinkGraph, vtkMutableDirectedGraph);
|
||
|
void SetLinkGraph(vtkMutableDirectedGraph* g);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Links the columns in a specific order.
|
||
|
* This creates a simple path as the link graph.
|
||
|
*/
|
||
|
void LinkColumnPath(
|
||
|
vtkStringArray* column, vtkStringArray* domain = nullptr, vtkBitArray* hidden = nullptr);
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the directedness of the output graph.
|
||
|
*/
|
||
|
vtkSetMacro(Directed, bool);
|
||
|
vtkGetMacro(Directed, bool);
|
||
|
vtkBooleanMacro(Directed, bool);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Get the current modified time.
|
||
|
*/
|
||
|
vtkMTimeType GetMTime() override;
|
||
|
|
||
|
/**
|
||
|
* A convenience method for setting the vertex table input. This
|
||
|
* is mainly for the benefit of the VTK client/server layer,
|
||
|
* vanilla VTK code should use e.g:
|
||
|
|
||
|
* table_to_graph->SetInputConnection(1, vertex_table->output());
|
||
|
*/
|
||
|
void SetVertexTableConnection(vtkAlgorithmOutput* in);
|
||
|
|
||
|
protected:
|
||
|
vtkTableToGraph();
|
||
|
~vtkTableToGraph() override;
|
||
|
|
||
|
/**
|
||
|
* Validate that the link graph is in the appropriate format.
|
||
|
*/
|
||
|
int ValidateLinkGraph();
|
||
|
|
||
|
int FillInputPortInformation(int port, vtkInformation* info) override;
|
||
|
|
||
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
||
|
|
||
|
int RequestDataObject(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
||
|
|
||
|
bool Directed;
|
||
|
vtkMutableDirectedGraph* LinkGraph;
|
||
|
vtkStringArray* VertexTableDomains;
|
||
|
|
||
|
private:
|
||
|
vtkTableToGraph(const vtkTableToGraph&) = delete;
|
||
|
void operator=(const vtkTableToGraph&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|