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.
233 lines
6.6 KiB
C
233 lines
6.6 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkTreeHeatmapItem.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.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkTreeHeatmapItem
|
||
|
* @brief A 2D graphics item for rendering a tree and
|
||
|
* an associated heatmap.
|
||
|
*
|
||
|
*
|
||
|
* This item draws a tree and a heatmap as a part of a vtkContextScene.
|
||
|
* The input tree's vertex data must contain at least two arrays.
|
||
|
* The first required array is a vtkStringArray called "node name".
|
||
|
* This array corresponds to the first column of the input table.
|
||
|
* The second required array is a scalar array called "node weight".
|
||
|
* This array is used by vtkTreeLayoutStrategy to set any particular
|
||
|
* node's distance from the root of the tree.
|
||
|
*
|
||
|
* The vtkNewickTreeReader automatically initializes both of these
|
||
|
* required arrays in its output tree.
|
||
|
*
|
||
|
* .SEE ALSO
|
||
|
* vtkDendrogramItem vtkHeatmapItem vtkTree vtkTable vtkNewickTreeReader
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkTreeHeatmapItem_h
|
||
|
#define vtkTreeHeatmapItem_h
|
||
|
|
||
|
#include "vtkContextItem.h"
|
||
|
#include "vtkViewsInfovisModule.h" // For export macro
|
||
|
|
||
|
#include "vtkNew.h" // For vtkNew ivars
|
||
|
#include "vtkSmartPointer.h" // For vtkSmartPointer ivars
|
||
|
#include <map> // For string lookup tables
|
||
|
#include <vector> // For lookup tables
|
||
|
|
||
|
class vtkDendrogramItem;
|
||
|
class vtkHeatmapItem;
|
||
|
class vtkTable;
|
||
|
class vtkTree;
|
||
|
|
||
|
class VTKVIEWSINFOVIS_EXPORT vtkTreeHeatmapItem : public vtkContextItem
|
||
|
{
|
||
|
public:
|
||
|
static vtkTreeHeatmapItem* New();
|
||
|
vtkTypeMacro(vtkTreeHeatmapItem, vtkContextItem);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
/**
|
||
|
* Set the tree that this item draws. Note that this tree's vertex data
|
||
|
* must contain a vtkStringArray called "node name". Additionally, this
|
||
|
* array must contain the same values as the first column of the input
|
||
|
* table. See SetTable for more information. The vtkNewickTreeReader
|
||
|
* automatically creates this required array for you.
|
||
|
*/
|
||
|
virtual void SetTree(vtkTree* tree);
|
||
|
|
||
|
/**
|
||
|
* Get the tree that this item draws.
|
||
|
*/
|
||
|
vtkTree* GetTree();
|
||
|
|
||
|
/**
|
||
|
* Set a tree to be drawn for the columns of the heatmap. This tree's
|
||
|
* vertex data must contain a vtkStringArray called "node name" that
|
||
|
* corresponds to the names of the columns in the heatmap.
|
||
|
*/
|
||
|
virtual void SetColumnTree(vtkTree* tree);
|
||
|
|
||
|
/**
|
||
|
* Get the tree that represents the columns of the heatmap (if one has
|
||
|
* been set).
|
||
|
*/
|
||
|
vtkTree* GetColumnTree();
|
||
|
|
||
|
/**
|
||
|
* Set the table that this item draws. The first column of the table
|
||
|
* must contain the names of the rows. These names, in turn, must correspond
|
||
|
* with the nodes names in the input tree. See SetTree for more information.
|
||
|
*/
|
||
|
virtual void SetTable(vtkTable* table);
|
||
|
|
||
|
/**
|
||
|
* Get the table that this item draws.
|
||
|
*/
|
||
|
vtkTable* GetTable();
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set the dendrogram contained by this item.
|
||
|
*/
|
||
|
vtkDendrogramItem* GetDendrogram();
|
||
|
void SetDendrogram(vtkDendrogramItem* dendrogram);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set the heatmap contained by this item.
|
||
|
*/
|
||
|
vtkHeatmapItem* GetHeatmap();
|
||
|
void SetHeatmap(vtkHeatmapItem* heatmap);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Reorder the rows in the table so they match the order of the leaf
|
||
|
* nodes in our tree.
|
||
|
*/
|
||
|
void ReorderTable();
|
||
|
|
||
|
/**
|
||
|
* Reverse the order of the rows in our input table. This is used
|
||
|
* to simplify the table layout for DOWN_TO_UP and RIGHT_TO_LEFT
|
||
|
* orientations.
|
||
|
*/
|
||
|
void ReverseTableRows();
|
||
|
|
||
|
/**
|
||
|
* Reverse the order of the rows in our input table. This is used
|
||
|
* to simplify the table layout for DOWN_TO_UP and UP_TO_DOWN
|
||
|
* orientations.
|
||
|
*/
|
||
|
void ReverseTableColumns();
|
||
|
|
||
|
/**
|
||
|
* Set which way the tree / heatmap should face within the visualization.
|
||
|
* The default is for both components to be drawn left to right.
|
||
|
*/
|
||
|
void SetOrientation(int orientation);
|
||
|
|
||
|
/**
|
||
|
* Get the current orientation.
|
||
|
*/
|
||
|
int GetOrientation();
|
||
|
|
||
|
/**
|
||
|
* Get the bounds of this item (xMin, xMax, yMin, Max) in pixel coordinates.
|
||
|
*/
|
||
|
void GetBounds(double bounds[4]);
|
||
|
|
||
|
/**
|
||
|
* Get the center point of this item in pixel coordinates.
|
||
|
*/
|
||
|
void GetCenter(double center[2]);
|
||
|
|
||
|
/**
|
||
|
* Get the size of this item in pixel coordinates.
|
||
|
*/
|
||
|
void GetSize(double size[2]);
|
||
|
|
||
|
/**
|
||
|
* Collapse subtrees until there are only n leaf nodes left in the tree.
|
||
|
* The leaf nodes that remain are those that are closest to the root.
|
||
|
* Any subtrees that were collapsed prior to this function being called
|
||
|
* may be re-expanded. Use this function instead of
|
||
|
* this->GetDendrogram->CollapseToNumberOfLeafNodes(), as this function
|
||
|
* also handles the hiding of heatmap rows that correspond to newly
|
||
|
* collapsed subtrees.
|
||
|
*/
|
||
|
void CollapseToNumberOfLeafNodes(unsigned int n);
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set how wide the edges of the trees should be. Default is one pixel.
|
||
|
*/
|
||
|
float GetTreeLineWidth();
|
||
|
void SetTreeLineWidth(float width);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Deprecated. Use this->GetDendrogram()->GetPrunedTree() instead.
|
||
|
*/
|
||
|
vtkTree* GetPrunedTree();
|
||
|
|
||
|
/**
|
||
|
* Deprecated. Use this->GetDendrogram()->SetColorArray(const char *arrayName)
|
||
|
* instead.
|
||
|
*/
|
||
|
void SetTreeColorArray(const char* arrayName);
|
||
|
|
||
|
/**
|
||
|
* Returns true if the transform is interactive, false otherwise.
|
||
|
*/
|
||
|
bool Hit(const vtkContextMouseEvent& mouse) override;
|
||
|
|
||
|
/**
|
||
|
* Propagate any double click onto the dendrogram to check if any
|
||
|
* subtrees should be collapsed or expanded.
|
||
|
*/
|
||
|
bool MouseDoubleClickEvent(const vtkContextMouseEvent& event) override;
|
||
|
|
||
|
protected:
|
||
|
vtkTreeHeatmapItem();
|
||
|
~vtkTreeHeatmapItem() override;
|
||
|
|
||
|
/**
|
||
|
* Paints the tree & associated table as a heatmap.
|
||
|
*/
|
||
|
bool Paint(vtkContext2D* painter) override;
|
||
|
|
||
|
/**
|
||
|
* Mark heatmap rows as hidden when a subtree is collapsed.
|
||
|
*/
|
||
|
void CollapseHeatmapRows();
|
||
|
|
||
|
/**
|
||
|
* Mark heatmap columns as hidden when a subtree is collapsed.
|
||
|
*/
|
||
|
void CollapseHeatmapColumns();
|
||
|
|
||
|
vtkSmartPointer<vtkDendrogramItem> Dendrogram;
|
||
|
vtkSmartPointer<vtkDendrogramItem> ColumnDendrogram;
|
||
|
vtkSmartPointer<vtkHeatmapItem> Heatmap;
|
||
|
int Orientation;
|
||
|
|
||
|
private:
|
||
|
vtkTreeHeatmapItem(const vtkTreeHeatmapItem&) = delete;
|
||
|
void operator=(const vtkTreeHeatmapItem&) = delete;
|
||
|
|
||
|
vtkMTimeType TreeHeatmapBuildTime;
|
||
|
};
|
||
|
|
||
|
#endif
|