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.
140 lines
5.6 KiB
140 lines
5.6 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkProgrammableGlyphFilter.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 vtkProgrammableGlyphFilter - control the generation and placement of glyphs at input points
|
|
// .SECTION Description
|
|
// vtkProgrammableGlyphFilter is a filter that allows you to place a glyph at
|
|
// each input point in the dataset. In addition, the filter is programmable
|
|
// which means the user has control over the generation of the glyph. The
|
|
// glyphs can be controlled via the point data attributes (e.g., scalars,
|
|
// vectors, etc.) or any other information in the input dataset.
|
|
//
|
|
// This is the way the filter works. You must define an input dataset which
|
|
// at a minimum contains points with associated attribute values. Also, the
|
|
// Source instance variable must be set which is of type vtkPolyData. Then,
|
|
// for each point in the input, the PointId is set to the current point id,
|
|
// and a user-defined function is called (i.e., GlyphMethod). In this method
|
|
// you can manipulate the Source data (including changing to a different
|
|
// Source object). After the GlyphMethod is called,
|
|
// vtkProgrammableGlyphFilter will invoke an Update() on its Source object,
|
|
// and then copy its data to the output of the
|
|
// vtkProgrammableGlyphFilter. Therefore the output of this filter is of type
|
|
// vtkPolyData.
|
|
//
|
|
// Another option to this filter is the way you color the glyphs. You can use
|
|
// the scalar data from the input or the source. The instance variable
|
|
// ColorMode controls this behavior.
|
|
|
|
// .SECTION Caveats
|
|
// This filter operates on point data attributes. If you want to use cell
|
|
// data attributes, use a filter like vtkCellCenters to generate points at
|
|
// the centers of cells, and then use these points.
|
|
//
|
|
// Note that the data attributes (cell and point) are passed to the output of
|
|
// this filter from the Source object. This works well as long as you are not
|
|
// changing the class of the Source object during execution. However, if the
|
|
// class of the Source object changes, then the potential exists that the
|
|
// data attributes might change during execution (e.g., scalars available
|
|
// from one source and not the next), possibly fouling up the copying of data
|
|
// attributes to the output. In this case, you may have to manually set the
|
|
// output's copy flags (e.g., CopyScalarsOn/Off(), CopyVectorsOn/Off(), etc.)
|
|
// to control what's being copied.
|
|
|
|
// .SECTION See Also
|
|
// vtkGlyph3D vtkTensorGlyph vtkCellCenters
|
|
|
|
#ifndef __vtkProgrammableGlyphFilter_h
|
|
#define __vtkProgrammableGlyphFilter_h
|
|
|
|
#define VTK_COLOR_BY_INPUT 0
|
|
#define VTK_COLOR_BY_SOURCE 1
|
|
|
|
#include "vtkPolyDataAlgorithm.h"
|
|
|
|
class vtkPointData;
|
|
|
|
class VTK_GRAPHICS_EXPORT vtkProgrammableGlyphFilter : public vtkPolyDataAlgorithm
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkProgrammableGlyphFilter,vtkPolyDataAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description
|
|
// Construct object with NULL GlyphMethod() and no source object. The ColorMode
|
|
// is set to color by the input.
|
|
static vtkProgrammableGlyphFilter *New();
|
|
|
|
// Description:
|
|
// Set/Get the source to use for this glyph.
|
|
// Note: you can change the source during execution of this filter.
|
|
void SetSource(vtkPolyData *source);
|
|
vtkPolyData *GetSource();
|
|
|
|
// Description:
|
|
// Specify function to be called for each input point.
|
|
void SetGlyphMethod(void (*f)(void *), void *arg);
|
|
|
|
// Description:
|
|
// Set the arg delete method. This is used to free user memory that might
|
|
// be associated with the GlyphMethod().
|
|
void SetGlyphMethodArgDelete(void (*f)(void *));
|
|
|
|
// Description:
|
|
// Get the current point id during processing. Value only valid during the
|
|
// Execute() method of this filter. (Meant to be called by the GlyphMethod().)
|
|
vtkGetMacro(PointId, vtkIdType);
|
|
|
|
// Description:
|
|
// Get the current point coordinates during processing. Value only valid during the
|
|
// Execute() method of this filter. (Meant to be called by the GlyphMethod().)
|
|
vtkGetVector3Macro(Point,double);
|
|
|
|
// Description:
|
|
// Get the set of point data attributes for the input. A convenience to the
|
|
// programmer to be used in the GlyphMethod(). Only valid during the Execute()
|
|
// method of this filter.
|
|
vtkGetObjectMacro(PointData,vtkPointData);
|
|
|
|
// Description:
|
|
// Either color by the input or source scalar data.
|
|
vtkSetMacro(ColorMode,int);
|
|
vtkGetMacro(ColorMode,int);
|
|
void SetColorModeToColorByInput()
|
|
{this->SetColorMode(VTK_COLOR_BY_INPUT);};
|
|
void SetColorModeToColorBySource()
|
|
{this->SetColorMode(VTK_COLOR_BY_SOURCE);};
|
|
const char *GetColorModeAsString();
|
|
|
|
protected:
|
|
vtkProgrammableGlyphFilter();
|
|
~vtkProgrammableGlyphFilter();
|
|
|
|
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
|
|
virtual int FillInputPortInformation(int, vtkInformation *);
|
|
|
|
double Point[3]; // Coordinates of point
|
|
vtkIdType PointId; // Current point id during processing
|
|
vtkPointData *PointData;
|
|
int ColorMode;
|
|
|
|
void (*GlyphMethod)(void *); // Support GlyphMethod
|
|
void (*GlyphMethodArgDelete)(void *);
|
|
void *GlyphMethodArg;
|
|
|
|
private:
|
|
vtkProgrammableGlyphFilter(const vtkProgrammableGlyphFilter&); // Not implemented.
|
|
void operator=(const vtkProgrammableGlyphFilter&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|