source: trunk/packages/vizservers/vtkvis/RpMolecule.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: 4.7 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_MOLECULE_H__
9#define __RAPPTURE_VTKVIS_MOLECULE_H__
10
11#include <vtkSmartPointer.h>
12#include <vtkLookupTable.h>
13#include <vtkPolyDataMapper.h>
14#include <vtkActor.h>
15#include <vtkActor2D.h>
16#include <vtkAssembly.h>
17#if ((VTK_MAJOR_VERSION > 5) || (VTK_MAJOR_VERSION == 5 && VTK_MINOR_VERSION >= 8))
18#define MOLECULE_USE_GLYPH3D_MAPPER
19#include <vtkGlyph3DMapper.h>
20#include <vtkTransformPolyDataFilter.h>
21#include <vtkCylinderSource.h>
22#include <vtkLineSource.h>
23#else
24#include <vtkGlyph3D.h>
25#include <vtkTubeFilter.h>
26#endif
27#include <vtkLabelPlacementMapper.h>
28
29#include "ColorMap.h"
30#include "RpVtkGraphicsObject.h"
31
32namespace Rappture {
33namespace VtkVis {
34
35/**
36 * \brief Ball and stick Molecule
37 *
38 * The data format for this class is based on the VisIt Molecule
39 * plot.  It consists of a vtkPolyData with atom coordinates as
40 * points and vertices and bonds as lines.  A scalar array named
41 * "element" can be included as point data to specify atomic
42 * numbers to use in coloring (via the "elementDefault" ColorMap)
43 * and scaling atoms.  If the scalar array is not named
44 * "element," it will be color-mapped as a standard scalar field.
45 */
46class Molecule : public VtkGraphicsObject {
47public:
48    enum AtomScaling {
49        NO_ATOM_SCALING,
50        VAN_DER_WAALS_RADIUS,
51        COVALENT_RADIUS,
52        ATOMIC_RADIUS
53    };
54    enum BondStyle {
55        BOND_STYLE_CYLINDER,
56        BOND_STYLE_LINE
57    };
58    enum ColorMode {
59        COLOR_BY_ELEMENTS,
60        COLOR_BY_SCALAR,
61        COLOR_BY_VECTOR_MAGNITUDE,
62        COLOR_BY_VECTOR_X,
63        COLOR_BY_VECTOR_Y,
64        COLOR_BY_VECTOR_Z,
65        COLOR_CONSTANT
66    };
67    enum BondColorMode {
68        BOND_COLOR_BY_ELEMENTS,
69        BOND_COLOR_CONSTANT
70    };
71
72    Molecule();
73    virtual ~Molecule();
74
75    virtual const char *getClassName() const
76    {
77        return "Molecule";
78    }
79
80    virtual vtkProp *getOverlayProp()
81    {
82        return _labelProp;
83    }
84
85    virtual void setDataSet(DataSet *dataSet,
86                            Renderer *renderer);
87
88    virtual void setClippingPlanes(vtkPlaneCollection *planes);
89
90    void setColorMode(ColorMode mode, DataSet::DataAttributeType type,
91                      const char *name, double range[2] = NULL);
92
93    void setColorMode(ColorMode mode,
94                      const char *name, double range[2] = NULL);
95
96    void setColorMode(ColorMode mode);
97
98    void setColorMap(ColorMap *colorMap);
99
100    /**
101     * \brief Return the ColorMap in use
102     */
103    ColorMap *getColorMap()
104    {
105        return _colorMap;
106    }
107
108    void updateColorMap();
109
110    virtual void updateRanges(Renderer *renderer);
111
112    void setAtomScaling(AtomScaling state);
113
114    void setAtomRadiusScale(double scale);
115
116    void setBondRadiusScale(double scale);
117
118    virtual void setVisibility(bool state);
119
120    virtual void setOpacity(double opacity);
121
122    void setAtomVisibility(bool state);
123
124    void setAtomLabelVisibility(bool state);
125
126    void setBondVisibility(bool state);
127
128    void setBondStyle(BondStyle style);
129
130    void setBondColor(float color[3]);
131
132    void setBondColorMode(BondColorMode mode);
133
134    static ColorMap *createElementColorMap();
135
136private:
137    virtual void initProp();
138    virtual void update();
139
140#ifdef MOLECULE_USE_GLYPH3D_MAPPER
141    void setupBondPolyData();
142#endif
143
144    static void addLabelArray(vtkDataSet *dataSet);
145
146    static void addRadiusArray(vtkDataSet *dataSet, AtomScaling scaling, double scaleFactor);
147
148    float _bondColor[3];
149    double _radiusScale;
150    AtomScaling _atomScaling;
151    bool _labelsOn;
152    ColorMap *_colorMap;
153    ColorMode _colorMode;
154    std::string _colorFieldName;
155    DataSet::DataAttributeType _colorFieldType;
156    double _colorFieldRange[2];
157    double _vectorMagnitudeRange[2];
158    double _vectorComponentRange[3][2];
159    Renderer *_renderer;
160
161    vtkSmartPointer<vtkLookupTable> _lut;
162    vtkSmartPointer<vtkActor> _atomProp;
163    vtkSmartPointer<vtkActor> _bondProp;
164    vtkSmartPointer<vtkActor2D> _labelProp;
165#ifndef MOLECULE_USE_GLYPH3D_MAPPER
166    vtkSmartPointer<vtkGlyph3D> _glypher;
167    vtkSmartPointer<vtkTubeFilter> _tuber;
168    vtkSmartPointer<vtkPolyDataMapper> _atomMapper;
169    vtkSmartPointer<vtkPolyDataMapper> _bondMapper;
170#else
171    vtkSmartPointer<vtkPolyData> _bondPD;
172    vtkSmartPointer<vtkCylinderSource> _cylinderSource;
173    vtkSmartPointer<vtkTransformPolyDataFilter>_cylinderTrans;
174    vtkSmartPointer<vtkLineSource> _lineSource;
175    vtkSmartPointer<vtkGlyph3DMapper> _atomMapper;
176    vtkSmartPointer<vtkGlyph3DMapper> _bondMapper;
177#endif
178    vtkSmartPointer<vtkLabelPlacementMapper> _labelMapper;
179};
180
181}
182}
183
184#endif
Note: See TracBrowser for help on using the repository browser.