source: trunk/packages/vizservers/vtkvis/RpGlyphs.h @ 3177

Last change on this file since 3177 was 3177, checked in by mmc, 12 years ago

Updated all of the copyright notices to reference the transfer to
the new HUBzero Foundation, LLC.

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * Copyright (C) 2004-2012  HUBzero Foundation, LLC
4 *
5 * Author: Leif Delgass <ldelgass@purdue.edu>
6 */
7
8#ifndef __RAPPTURE_VTKVIS_GLYPHS_H__
9#define __RAPPTURE_VTKVIS_GLYPHS_H__
10
11#include <vector>
12
13#include <vtkSmartPointer.h>
14#include <vtkProp.h>
15#include <vtkActor.h>
16#include <vtkVersion.h>
17#if ((VTK_MAJOR_VERSION > 5) || (VTK_MAJOR_VERSION == 5 && VTK_MINOR_VERSION >= 8))
18#define HAVE_GLYPH3D_MAPPER
19#include <vtkGlyph3DMapper.h>
20#else
21#include <vtkGlyph3D.h>
22#endif
23#include <vtkLookupTable.h>
24#include <vtkPlaneCollection.h>
25
26#include "RpVtkGraphicsObject.h"
27#include "ColorMap.h"
28
29namespace Rappture {
30namespace VtkVis {
31
32/**
33 * \brief Oriented and scaled 3D glyph shapes
34 *
35 * The DataSet must have vectors and/or scalars
36 */
37class Glyphs : public VtkGraphicsObject {
38public:
39    enum GlyphShape {
40        ARROW,
41        CONE,
42        CUBE,
43        CYLINDER,
44        DODECAHEDRON,
45        ICOSAHEDRON,
46        LINE,
47        OCTAHEDRON,
48        SPHERE,
49        TETRAHEDRON
50    };
51    enum ScalingMode {
52        SCALE_BY_SCALAR,
53        SCALE_BY_VECTOR_MAGNITUDE,
54        SCALE_BY_VECTOR_COMPONENTS,
55        SCALING_OFF
56    };
57    enum ColorMode {
58        COLOR_BY_SCALAR,
59        COLOR_BY_VECTOR_MAGNITUDE,
60        COLOR_BY_VECTOR_X,
61        COLOR_BY_VECTOR_Y,
62        COLOR_BY_VECTOR_Z,
63        COLOR_CONSTANT
64    };
65
66    Glyphs(GlyphShape shape);
67    virtual ~Glyphs();
68
69    virtual const char *getClassName() const
70    {
71        return "Glyphs";
72    }
73
74    virtual void setDataSet(DataSet *dataSet,
75                            Renderer *renderer);
76
77    virtual void setClippingPlanes(vtkPlaneCollection *planes);
78
79    void setQuality(double quality);
80
81    void setOrient(bool state);
82
83#ifdef HAVE_GLYPH3D_MAPPER
84    void setOrientMode(bool mode, const char *name);
85
86    void setScalingMode(ScalingMode mode, const char *name, double range[2]);
87
88    void setColorMode(ColorMode mode, const char *name, double range[2]);
89#endif
90
91    void setScalingMode(ScalingMode mode);
92
93    void setNormalizeScale(bool normalize);
94
95    void setColorMode(ColorMode mode);
96
97    void setGlyphShape(GlyphShape shape);
98
99    void setScaleFactor(double scale);
100
101    void setColorMap(ColorMap *colorMap);
102
103    /**
104     * \brief Return the ColorMap in use
105     */
106    ColorMap *getColorMap()
107    {
108        return _colorMap;
109    }
110
111    void updateColorMap();
112
113    virtual void updateRanges(Renderer *renderer);
114
115private:
116    Glyphs();
117    virtual void update();
118    static inline double min2(double a, double b)
119    {
120        return ((a < b) ? a : b);
121    }
122    static inline double max2(double a, double b)
123    {
124        return ((a > b) ? a : b);
125    }
126
127    GlyphShape _glyphShape;
128    ScalingMode _scalingMode;
129    std::string _scalingFieldName;
130    double _scalingFieldRange[2];
131    double _dataScale;
132    double _scaleFactor;
133    bool _normalizeScale;
134    ColorMap *_colorMap;
135    ColorMode _colorMode;
136    std::string _colorFieldName;
137    double _colorFieldRange[2];
138    double _vectorMagnitudeRange[2];
139    double _vectorComponentRange[3][2];
140    Renderer *_renderer;
141
142    vtkSmartPointer<vtkLookupTable> _lut;
143    vtkSmartPointer<vtkPolyDataAlgorithm> _glyphSource;
144#ifdef HAVE_GLYPH3D_MAPPER
145    vtkSmartPointer<vtkGlyph3DMapper> _glyphMapper;
146#else
147    vtkSmartPointer<vtkGlyph3D> _glyphGenerator;
148    vtkSmartPointer<vtkPolyDataMapper> _pdMapper;
149#endif
150};
151
152}
153}
154
155#endif
Note: See TracBrowser for help on using the repository browser.