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

Last change on this file since 2618 was 2612, checked in by ldelgass, 13 years ago

Refactor vtkvis to support setting colormap fields by name/attribute type
rather than always using active scalars/vectors. Also convert common
graphics objects set methods in Renderer to template methods and separate
core and graphics object related methods to separate files.

  • Property svn:eol-style set to native
File size: 2.8 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_CONSTANT
61    };
62
63    Glyphs(GlyphShape shape);
64    virtual ~Glyphs();
65
66    virtual const char *getClassName() const
67    {
68        return "Glyphs";
69    }
70
71    virtual void setDataSet(DataSet *dataSet,
72                            Renderer *renderer);
73
74    virtual void setClippingPlanes(vtkPlaneCollection *planes);
75
76    void setScalingMode(ScalingMode mode);
77
78    void setNormalizeScale(bool normalize);
79
80    void setColorMode(ColorMode mode);
81
82    void setGlyphShape(GlyphShape shape);
83
84    void setScaleFactor(double scale);
85
86    void setColorMap(ColorMap *colorMap);
87
88    /**
89     * \brief Return the ColorMap in use
90     */
91    ColorMap *getColorMap()
92    {
93        return _colorMap;
94    }
95
96    void updateColorMap();
97
98    virtual void updateRanges(Renderer *renderer);
99
100private:
101    Glyphs();
102    virtual void update();
103    static inline double min2(double a, double b)
104    {
105        return ((a < b) ? a : b);
106    }
107    static inline double max2(double a, double b)
108    {
109        return ((a > b) ? a : b);
110    }
111
112    GlyphShape _glyphShape;
113    ScalingMode _scalingMode;
114    double _dataScale;
115    double _scaleFactor;
116    bool _normalizeScale;
117    ColorMode _colorMode;
118    ColorMap *_colorMap;
119    double _vectorMagnitudeRange[2];
120    double _vectorComponentRange[3][2];
121
122    vtkSmartPointer<vtkLookupTable> _lut;
123    vtkSmartPointer<vtkPolyDataAlgorithm> _glyphSource;
124#ifdef HAVE_GLYPH3D_MAPPER
125    vtkSmartPointer<vtkGlyph3DMapper> _glyphMapper;
126#else
127    vtkSmartPointer<vtkGlyph3D> _glyphGenerator;
128    vtkSmartPointer<vtkPolyDataMapper> _pdMapper;
129#endif
130};
131
132}
133}
134
135#endif
Note: See TracBrowser for help on using the repository browser.