vtkGraphAnnotationLayersFilter.h 4.16 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
/*=========================================================================

 Program:   Visualization Toolkit
 Module:    vtkGraphAnnotationLayersFilter.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.

 =========================================================================*/

// .NAME vtkGraphAnnotationLayersFilter - Produce filled convex hulls around
// subsets of vertices in a vtkGraph.
//
// .SECTION Description
// Produces a vtkPolyData comprised of filled polygons of the convex hull
// of a cluster. Alternatively, you may choose to output bounding rectangles.
// Clusters with fewer than three vertices are artificially expanded to
// ensure visibility (see vtkConvexHull2D).
//
// The first input is a vtkGraph with points, possibly set by
// passing the graph through vtkGraphLayout (z-values are ignored). The second
// input is a vtkAnnotationsLayer containing vtkSelectionNodeS of vertex
// ids (the 'clusters' output of vtkTulipReader for example).
//
// Setting OutlineOn() additionally produces outlines of the clusters on
// output port 1.
//
// Three arrays are added to the cells of the output: "Hull id"; "Hull name";
// and "Hull color".
//
// Note: This filter operates in the x,y-plane and as such works best with an
// interactor style that does not allow camera rotation, such as
// vtkInteractorStyleRubberBand2D.
//
// .SECTION See also
// vtkContext2D
//
// .SECTION Thanks
// Thanks to Colin Myers, University of Leeds for providing this implementation.

46 47
#ifndef vtkGraphAnnotationLayersFilter_h
#define vtkGraphAnnotationLayersFilter_h
48

49
#include "vtkRenderingAnnotationModule.h" // For export macro
50 51 52 53 54 55 56 57
#include "vtkPolyDataAlgorithm.h"
#include "vtkSmartPointer.h" // needed for ivars

class vtkAppendPolyData;
class vtkConvexHull2D;
class vtkRenderer;


58
class VTKRENDERINGANNOTATION_EXPORT vtkGraphAnnotationLayersFilter: public vtkPolyDataAlgorithm
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
{
public:
  static vtkGraphAnnotationLayersFilter *New();
  vtkTypeMacro(vtkGraphAnnotationLayersFilter, vtkPolyDataAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // Produce outlines of the hulls on output port 1.
  void OutlineOn();
  void OutlineOff();
  void SetOutline(bool b);

  // Description:
  // Scale each hull by the amount specified. Defaults to 1.0.
  void SetScaleFactor(double scale);

  // Description:
  // Set the shape of the hulls to bounding rectangle.
  void SetHullShapeToBoundingRectangle();

  // Description:
  // Set the shape of the hulls to convex hull. Default.
  void SetHullShapeToConvexHull();

  // Description:
  // Set the minimum x,y-dimensions of each hull in world coordinates. Defaults
  // to 1.0. Set to 0.0 to disable.
  void SetMinHullSizeInWorld(double size);

  // Description:
  // Set the minimum x,y-dimensions of each hull in pixels. You must also set a
  // vtkRenderer. Defaults to 1. Set to 0 to disable.
  void SetMinHullSizeInDisplay(int size);

  // Description:
  // Renderer needed for MinHullSizeInDisplay calculation. Not reference counted.
  void SetRenderer(vtkRenderer* renderer);

  // Description:
  // The modified time of this filter.
99
  virtual vtkMTimeType GetMTime();
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

protected:
  vtkGraphAnnotationLayersFilter();
  ~vtkGraphAnnotationLayersFilter();

  // Description:
  // This is called by the superclass. This is the method you should override.
  int RequestData(vtkInformation *, vtkInformationVector **,
    vtkInformationVector *);

  // Description:
  // Set the input to vtkGraph and vtkAnnotationLayers.
  int FillInputPortInformation(int port, vtkInformation* info);

private:
115
  vtkGraphAnnotationLayersFilter(const vtkGraphAnnotationLayersFilter&) VTK_DELETE_FUNCTION;
116
  void operator=(const vtkGraphAnnotationLayersFilter&) VTK_DELETE_FUNCTION;
117 118 119 120 121 122

  vtkSmartPointer<vtkAppendPolyData> HullAppend;
  vtkSmartPointer<vtkAppendPolyData> OutlineAppend;
  vtkSmartPointer<vtkConvexHull2D> ConvexHullFilter;
};

123
#endif // vtkGraphAnnotationLayersFilter_h