source: branches/blt4/packages/vizservers/vtkvis/RpGlyphs.h @ 2742

Last change on this file since 2742 was 2681, checked in by gah, 13 years ago
File size: 3.2 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * Copyright (C) 2011, Purdue Research Foundation
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#ifdef HAVE_GLYPH3D_MAPPER
80    void setScalingMode(ScalingMode mode, const char *name, double range[2]);
81
82    void setColorMode(ColorMode mode, const char *name, double range[2]);
83#endif
84
85    void setScalingMode(ScalingMode mode);
86
87    void setNormalizeScale(bool normalize);
88
89    void setColorMode(ColorMode mode);
90
91    void setGlyphShape(GlyphShape shape);
92
93    void setScaleFactor(double scale);
94
95    void setColorMap(ColorMap *colorMap);
96
97    /**
98     * \brief Return the ColorMap in use
99     */
100    ColorMap *getColorMap()
101    {
102        return _colorMap;
103    }
104
105    void updateColorMap();
106
107    virtual void updateRanges(Renderer *renderer);
108
109private:
110    Glyphs();
111    virtual void update();
112    static inline double min2(double a, double b)
113    {
114        return ((a < b) ? a : b);
115    }
116    static inline double max2(double a, double b)
117    {
118        return ((a > b) ? a : b);
119    }
120
121    GlyphShape _glyphShape;
122    ScalingMode _scalingMode;
123    std::string _scalingFieldName;
124    double _scalingFieldRange[2];
125    double _dataScale;
126    double _scaleFactor;
127    bool _normalizeScale;
128    ColorMap *_colorMap;
129    ColorMode _colorMode;
130    std::string _colorFieldName;
131    double _colorFieldRange[2];
132    double _vectorMagnitudeRange[2];
133    double _vectorComponentRange[3][2];
134    Renderer *_renderer;
135
136    vtkSmartPointer<vtkLookupTable> _lut;
137    vtkSmartPointer<vtkPolyDataAlgorithm> _glyphSource;
138#ifdef HAVE_GLYPH3D_MAPPER
139    vtkSmartPointer<vtkGlyph3DMapper> _glyphMapper;
140#else
141    vtkSmartPointer<vtkGlyph3D> _glyphGenerator;
142    vtkSmartPointer<vtkPolyDataMapper> _pdMapper;
143#endif
144};
145
146}
147}
148
149#endif
Note: See TracBrowser for help on using the repository browser.