[2120] | 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_RENDERER_H__ |
---|
| 9 | #define __RAPPTURE_VTKVIS_RENDERER_H__ |
---|
| 10 | |
---|
[2681] | 11 | #include <string> |
---|
| 12 | #include <vector> |
---|
| 13 | #include <tr1/unordered_map> |
---|
| 14 | #include <typeinfo> |
---|
| 15 | |
---|
[2120] | 16 | #include <vtkSmartPointer.h> |
---|
| 17 | #include <vtkCubeAxesActor.h> |
---|
| 18 | #ifdef USE_CUSTOM_AXES |
---|
[2542] | 19 | #include "vtkRpCubeAxesActor2D.h" |
---|
[2120] | 20 | #else |
---|
| 21 | #include <vtkCubeAxesActor2D.h> |
---|
| 22 | #endif |
---|
| 23 | #include <vtkScalarBarActor.h> |
---|
| 24 | #include <vtkRenderer.h> |
---|
| 25 | #include <vtkRenderWindow.h> |
---|
| 26 | #include <vtkUnsignedCharArray.h> |
---|
| 27 | |
---|
| 28 | #include "ColorMap.h" |
---|
[2681] | 29 | #include "RpTypes.h" |
---|
[2120] | 30 | #include "RpVtkDataSet.h" |
---|
| 31 | #include "RpContour2D.h" |
---|
[2302] | 32 | #include "RpContour3D.h" |
---|
[2550] | 33 | #include "RpCutplane.h" |
---|
[2302] | 34 | #include "RpGlyphs.h" |
---|
| 35 | #include "RpHeightMap.h" |
---|
[2322] | 36 | #include "RpLIC.h" |
---|
| 37 | #include "RpMolecule.h" |
---|
[2120] | 38 | #include "RpPolyData.h" |
---|
[2302] | 39 | #include "RpPseudoColor.h" |
---|
[2322] | 40 | #include "RpStreamlines.h" |
---|
[2302] | 41 | #include "RpVolume.h" |
---|
| 42 | #include "Trace.h" |
---|
[2120] | 43 | |
---|
[2302] | 44 | // Controls if TGA format is sent to client |
---|
| 45 | //#define RENDER_TARGA |
---|
| 46 | #define TARGA_BYTES_PER_PIXEL 3 |
---|
| 47 | |
---|
[2120] | 48 | namespace Rappture { |
---|
| 49 | namespace VtkVis { |
---|
| 50 | |
---|
| 51 | /** |
---|
| 52 | * \brief VTK Renderer |
---|
| 53 | */ |
---|
| 54 | class Renderer |
---|
| 55 | { |
---|
| 56 | public: |
---|
| 57 | Renderer(); |
---|
| 58 | virtual ~Renderer(); |
---|
| 59 | |
---|
[2302] | 60 | enum AxesFlyMode { |
---|
| 61 | FLY_OUTER_EDGES = 0, |
---|
| 62 | FLY_CLOSEST_TRIAD, |
---|
| 63 | FLY_FURTHEST_TRIAD, |
---|
| 64 | FLY_STATIC_EDGES, |
---|
| 65 | FLY_STATIC_TRIAD |
---|
| 66 | }; |
---|
| 67 | |
---|
[2409] | 68 | enum AxesTickPosition { |
---|
| 69 | TICKS_INSIDE, |
---|
| 70 | TICKS_OUTSIDE, |
---|
| 71 | TICKS_BOTH |
---|
| 72 | }; |
---|
| 73 | |
---|
[2120] | 74 | enum CameraMode { |
---|
| 75 | PERSPECTIVE, |
---|
| 76 | ORTHO, |
---|
| 77 | IMAGE |
---|
| 78 | }; |
---|
| 79 | |
---|
[2542] | 80 | enum LegendType { |
---|
[2681] | 81 | LEGEND_SCALAR, |
---|
| 82 | LEGEND_VECTOR_MAGNITUDE, |
---|
| 83 | LEGEND_VECTOR_X, |
---|
| 84 | LEGEND_VECTOR_Y, |
---|
| 85 | LEGEND_VECTOR_Z |
---|
[2542] | 86 | }; |
---|
| 87 | |
---|
[2120] | 88 | typedef std::string DataSetId; |
---|
| 89 | typedef std::string ColorMapId; |
---|
[2681] | 90 | typedef std::string FieldId; |
---|
[2120] | 91 | typedef std::tr1::unordered_map<DataSetId, DataSet *> DataSetHashmap; |
---|
[2681] | 92 | typedef std::tr1::unordered_map<FieldId, double *> FieldRangeHashmap; |
---|
[2120] | 93 | typedef std::tr1::unordered_map<ColorMapId, ColorMap *> ColorMapHashmap; |
---|
| 94 | typedef std::tr1::unordered_map<DataSetId, Contour2D *> Contour2DHashmap; |
---|
[2302] | 95 | typedef std::tr1::unordered_map<DataSetId, Contour3D *> Contour3DHashmap; |
---|
[2550] | 96 | typedef std::tr1::unordered_map<DataSetId, Cutplane *> CutplaneHashmap; |
---|
[2302] | 97 | typedef std::tr1::unordered_map<DataSetId, Glyphs *> GlyphsHashmap; |
---|
| 98 | typedef std::tr1::unordered_map<DataSetId, HeightMap *> HeightMapHashmap; |
---|
[2322] | 99 | typedef std::tr1::unordered_map<DataSetId, LIC *> LICHashmap; |
---|
| 100 | typedef std::tr1::unordered_map<DataSetId, Molecule *> MoleculeHashmap; |
---|
[2120] | 101 | typedef std::tr1::unordered_map<DataSetId, PolyData *> PolyDataHashmap; |
---|
[2302] | 102 | typedef std::tr1::unordered_map<DataSetId, PseudoColor *> PseudoColorHashmap; |
---|
[2322] | 103 | typedef std::tr1::unordered_map<DataSetId, Streamlines *> StreamlinesHashmap; |
---|
[2302] | 104 | typedef std::tr1::unordered_map<DataSetId, Volume *> VolumeHashmap; |
---|
[2120] | 105 | |
---|
| 106 | // Data sets |
---|
| 107 | |
---|
[2170] | 108 | void addDataSet(const DataSetId& id); |
---|
[2120] | 109 | |
---|
[2170] | 110 | void deleteDataSet(const DataSetId& id); |
---|
[2120] | 111 | |
---|
[2170] | 112 | DataSet *getDataSet(const DataSetId& id); |
---|
[2120] | 113 | |
---|
[2542] | 114 | void getDataSetNames(std::vector<std::string>& names); |
---|
| 115 | |
---|
[2170] | 116 | bool setData(const DataSetId& id, char *data, int nbytes); |
---|
[2120] | 117 | |
---|
[2170] | 118 | bool setDataFile(const DataSetId& id, const char *filename); |
---|
[2120] | 119 | |
---|
[2409] | 120 | bool setDataSetActiveScalars(const DataSetId& id, const char *scalarName); |
---|
| 121 | |
---|
| 122 | bool setDataSetActiveVectors(const DataSetId& id, const char *vectorName); |
---|
| 123 | |
---|
[2542] | 124 | bool getScalarValueAtPixel(const DataSetId& id, int x, int y, double *value); |
---|
[2120] | 125 | |
---|
[2542] | 126 | bool getScalarValue(const DataSetId& id, double x, double y, double z, double *value); |
---|
[2120] | 127 | |
---|
[2542] | 128 | bool getVectorValueAtPixel(const DataSetId& id, int x, int y, double vector[3]); |
---|
[2120] | 129 | |
---|
[2542] | 130 | bool getVectorValue(const DataSetId& id, double x, double y, double z, double vector[3]); |
---|
[2120] | 131 | |
---|
[2542] | 132 | void setDataSetShowBounds(const DataSetId& id, bool state); |
---|
| 133 | |
---|
| 134 | void setDataSetOutlineColor(const DataSetId& id, float color[3]); |
---|
| 135 | |
---|
| 136 | void setDataSetOpacity(const DataSetId& id, double opacity); |
---|
| 137 | |
---|
| 138 | void setDataSetVisibility(const DataSetId& id, bool state); |
---|
| 139 | |
---|
[2201] | 140 | void setUseCumulativeDataRange(bool state, bool onlyVisible = false); |
---|
| 141 | |
---|
[2681] | 142 | bool getUseCumulativeRange(); |
---|
| 143 | |
---|
| 144 | bool getCumulativeDataRange(double *range, const char *name, |
---|
| 145 | int numComponents, |
---|
| 146 | int component = -1); |
---|
| 147 | |
---|
| 148 | bool getCumulativeDataRange(double *range, const char *name, |
---|
| 149 | DataSet::DataAttributeType type, |
---|
| 150 | int numComponents, |
---|
| 151 | int component = -1); |
---|
| 152 | |
---|
[2120] | 153 | // Render window |
---|
| 154 | |
---|
[2409] | 155 | /// Get the VTK render window object this Renderer uses |
---|
[2322] | 156 | vtkRenderWindow *getRenderWindow() |
---|
| 157 | { |
---|
| 158 | return _renderWindow; |
---|
| 159 | } |
---|
| 160 | |
---|
[2120] | 161 | void setWindowSize(int width, int height); |
---|
| 162 | |
---|
| 163 | int getWindowWidth() const; |
---|
| 164 | |
---|
| 165 | int getWindowHeight() const; |
---|
| 166 | |
---|
| 167 | // Camera controls |
---|
| 168 | |
---|
[2322] | 169 | void setViewAngle(int height); |
---|
| 170 | |
---|
[2550] | 171 | vtkCamera *getVtkCamera() |
---|
| 172 | { |
---|
| 173 | if (_renderer != NULL) |
---|
| 174 | return _renderer->GetActiveCamera(); |
---|
| 175 | else |
---|
| 176 | return NULL; |
---|
| 177 | } |
---|
| 178 | |
---|
[2120] | 179 | void setCameraMode(CameraMode mode); |
---|
| 180 | |
---|
[2201] | 181 | CameraMode getCameraMode() const; |
---|
| 182 | |
---|
[2120] | 183 | void resetCamera(bool resetOrientation = true); |
---|
| 184 | |
---|
[2409] | 185 | void resetCameraClippingRange(); |
---|
| 186 | |
---|
[2542] | 187 | void setCameraZoomRegionPixels(int x, int y, int width, int height); |
---|
| 188 | |
---|
[2120] | 189 | void setCameraZoomRegion(double x, double y, double width, double height); |
---|
| 190 | |
---|
[2201] | 191 | void getCameraZoomRegion(double xywh[4]) const; |
---|
| 192 | |
---|
| 193 | void getScreenWorldCoords(double xywh[4]) const; |
---|
| 194 | |
---|
[2120] | 195 | void rotateCamera(double yaw, double pitch, double roll); |
---|
| 196 | |
---|
[2409] | 197 | void setCameraOrientation(const double quat[4], bool absolute = true); |
---|
[2215] | 198 | |
---|
[2409] | 199 | void panCamera(double x, double y, bool absolute = true); |
---|
[2215] | 200 | |
---|
[2409] | 201 | void zoomCamera(double z, bool absolute = true); |
---|
| 202 | |
---|
| 203 | void setCameraOrientationAndPosition(const double position[3], |
---|
| 204 | const double focalPoint[3], |
---|
| 205 | const double viewUp[3]); |
---|
| 206 | |
---|
[2215] | 207 | void getCameraOrientationAndPosition(double position[3], |
---|
| 208 | double focalPoint[3], |
---|
| 209 | double viewUp[3]); |
---|
| 210 | |
---|
[2120] | 211 | // Rendering an image |
---|
| 212 | |
---|
| 213 | void setBackgroundColor(float color[3]); |
---|
| 214 | |
---|
[2322] | 215 | void setClipPlane(Axis axis, double ratio, int direction); |
---|
| 216 | |
---|
[2409] | 217 | void setUseTwoSidedLighting(bool state); |
---|
| 218 | |
---|
[2302] | 219 | void setUseDepthPeeling(bool state); |
---|
| 220 | |
---|
[2409] | 221 | void eventuallyRender(); |
---|
| 222 | |
---|
[2120] | 223 | bool render(); |
---|
| 224 | |
---|
| 225 | void getRenderedFrame(vtkUnsignedCharArray *imgData); |
---|
| 226 | |
---|
| 227 | // Axes |
---|
| 228 | |
---|
[2302] | 229 | void setAxesFlyMode(AxesFlyMode mode); |
---|
| 230 | |
---|
[2409] | 231 | void setAxesVisibility(bool state); |
---|
| 232 | |
---|
[2120] | 233 | void setAxesGridVisibility(bool state); |
---|
| 234 | |
---|
[2409] | 235 | void setAxesLabelVisibility(bool state); |
---|
[2120] | 236 | |
---|
[2409] | 237 | void setAxesTickVisibility(bool state); |
---|
| 238 | |
---|
| 239 | void setAxesTickPosition(AxesTickPosition pos); |
---|
| 240 | |
---|
[2120] | 241 | void setAxesColor(double color[3]); |
---|
| 242 | |
---|
[2409] | 243 | void setAxisVisibility(Axis axis, bool state); |
---|
| 244 | |
---|
[2120] | 245 | void setAxisGridVisibility(Axis axis, bool state); |
---|
| 246 | |
---|
[2409] | 247 | void setAxisLabelVisibility(Axis axis, bool state); |
---|
[2120] | 248 | |
---|
[2409] | 249 | void setAxisTickVisibility(Axis axis, bool state); |
---|
| 250 | |
---|
[2120] | 251 | void setAxisTitle(Axis axis, const char *title); |
---|
| 252 | |
---|
| 253 | void setAxisUnits(Axis axis, const char *units); |
---|
| 254 | |
---|
| 255 | // Colormaps |
---|
| 256 | |
---|
[2170] | 257 | void addColorMap(const ColorMapId& id, ColorMap *colorMap); |
---|
[2120] | 258 | |
---|
[2170] | 259 | void deleteColorMap(const ColorMapId& id); |
---|
[2120] | 260 | |
---|
[2170] | 261 | ColorMap *getColorMap(const ColorMapId& id); |
---|
[2120] | 262 | |
---|
[2170] | 263 | bool renderColorMap(const ColorMapId& id, |
---|
| 264 | const DataSetId& dataSetID, |
---|
[2542] | 265 | LegendType legendType, |
---|
[2681] | 266 | const char *fieldName, |
---|
| 267 | DataSet::DataAttributeType type, |
---|
[2542] | 268 | std::string& title, |
---|
| 269 | double range[2], |
---|
[2120] | 270 | int width, int height, |
---|
[2742] | 271 | bool opaque, |
---|
[2542] | 272 | int numLabels, |
---|
[2120] | 273 | vtkUnsignedCharArray *imgData); |
---|
| 274 | |
---|
[2681] | 275 | bool renderColorMap(const ColorMapId& id, |
---|
| 276 | const DataSetId& dataSetID, |
---|
| 277 | LegendType legendType, |
---|
| 278 | const char *fieldName, |
---|
| 279 | std::string& title, |
---|
| 280 | double range[2], |
---|
| 281 | int width, int height, |
---|
[2742] | 282 | bool opaque, |
---|
[2681] | 283 | int numLabels, |
---|
| 284 | vtkUnsignedCharArray *imgData); |
---|
[2120] | 285 | |
---|
[2681] | 286 | bool renderColorMap(const ColorMapId& id, |
---|
| 287 | const DataSetId& dataSetID, |
---|
| 288 | LegendType legendType, |
---|
| 289 | std::string& title, |
---|
| 290 | double range[2], |
---|
| 291 | int width, int height, |
---|
[2742] | 292 | bool opaque, |
---|
[2681] | 293 | int numLabels, |
---|
| 294 | vtkUnsignedCharArray *imgData); |
---|
[2120] | 295 | |
---|
[2681] | 296 | // Generic VtkGraphicsObject methods |
---|
[2542] | 297 | |
---|
[2681] | 298 | template<class GraphicsObject> |
---|
| 299 | GraphicsObject *getGraphicsObject(const DataSetId& id); |
---|
[2120] | 300 | |
---|
[2681] | 301 | template<class GraphicsObject> |
---|
| 302 | bool addGraphicsObject(const DataSetId& id); |
---|
[2120] | 303 | |
---|
[2681] | 304 | template<class GraphicsObject> |
---|
| 305 | void deleteGraphicsObject(const DataSetId& id); |
---|
[2120] | 306 | |
---|
[2681] | 307 | template<class GraphicsObject> |
---|
| 308 | void setGraphicsObjectColorMap(const DataSetId& id, const ColorMapId& colorMapId); |
---|
[2120] | 309 | |
---|
[2681] | 310 | template<class GraphicsObject> |
---|
| 311 | void setGraphicsObjectVolumeSlice(const DataSetId& id, Axis axis, double ratio); |
---|
[2120] | 312 | |
---|
[2681] | 313 | // Prop/Prop3D properties |
---|
[2120] | 314 | |
---|
[2681] | 315 | template<class GraphicsObject> |
---|
| 316 | void setGraphicsObjectOrientation(const DataSetId& id, double quat[4]); |
---|
[2409] | 317 | |
---|
[2681] | 318 | template<class GraphicsObject> |
---|
| 319 | void setGraphicsObjectOrientation(const DataSetId& id, double angle, double axis[3]); |
---|
[2120] | 320 | |
---|
[2681] | 321 | template<class GraphicsObject> |
---|
| 322 | void setGraphicsObjectPosition(const DataSetId& id, double pos[3]); |
---|
[2120] | 323 | |
---|
[2681] | 324 | template<class GraphicsObject> |
---|
| 325 | void setGraphicsObjectScale(const DataSetId& id, double scale[3]); |
---|
[2120] | 326 | |
---|
[2681] | 327 | template<class GraphicsObject> |
---|
| 328 | void setGraphicsObjectTransform(const DataSetId& id, vtkMatrix4x4 *trans); |
---|
[2409] | 329 | |
---|
[2681] | 330 | template<class GraphicsObject> |
---|
| 331 | void setGraphicsObjectVisibility(const DataSetId& id, bool state); |
---|
[2409] | 332 | |
---|
[2681] | 333 | // Actor properties |
---|
[2409] | 334 | |
---|
[2681] | 335 | template<class GraphicsObject> |
---|
| 336 | void setGraphicsObjectColor(const DataSetId& id, float color[3]); |
---|
[2170] | 337 | |
---|
[2681] | 338 | template<class GraphicsObject> |
---|
| 339 | void setGraphicsObjectEdgeVisibility(const DataSetId& id, bool state); |
---|
[2120] | 340 | |
---|
[2681] | 341 | template<class GraphicsObject> |
---|
| 342 | void setGraphicsObjectEdgeColor(const DataSetId& id, float color[3]); |
---|
[2542] | 343 | |
---|
[2681] | 344 | template<class GraphicsObject> |
---|
| 345 | void setGraphicsObjectEdgeWidth(const DataSetId& id, float edgeWidth); |
---|
[2120] | 346 | |
---|
[2681] | 347 | template<class GraphicsObject> |
---|
| 348 | void setGraphicsObjectAmbient(const DataSetId& id, double coeff); |
---|
[2120] | 349 | |
---|
[2681] | 350 | template<class GraphicsObject> |
---|
| 351 | void setGraphicsObjectDiffuse(const DataSetId& id, double coeff); |
---|
[2120] | 352 | |
---|
[2681] | 353 | template<class GraphicsObject> |
---|
| 354 | void setGraphicsObjectSpecular(const DataSetId& id, double coeff, double power); |
---|
[2120] | 355 | |
---|
[2681] | 356 | template<class GraphicsObject> |
---|
| 357 | void setGraphicsObjectLighting(const DataSetId& id, bool state); |
---|
[2120] | 358 | |
---|
[2681] | 359 | template<class GraphicsObject> |
---|
| 360 | void setGraphicsObjectOpacity(const DataSetId& id, double opacity); |
---|
[2120] | 361 | |
---|
[2681] | 362 | template<class GraphicsObject> |
---|
| 363 | void setGraphicsObjectPointSize(const DataSetId& id, float size); |
---|
[2120] | 364 | |
---|
[2681] | 365 | template<class GraphicsObject> |
---|
| 366 | void setGraphicsObjectWireframe(const DataSetId& id, bool state); |
---|
[2120] | 367 | |
---|
[2681] | 368 | // 2D Contour plots |
---|
[2120] | 369 | |
---|
[2681] | 370 | bool addContour2D(const DataSetId& id, int numContours); |
---|
[2170] | 371 | |
---|
[2681] | 372 | bool addContour2D(const DataSetId& id, const std::vector<double>& contours); |
---|
[2302] | 373 | |
---|
[2681] | 374 | void setContour2DContours(const DataSetId& id, int numContours); |
---|
[2409] | 375 | |
---|
[2681] | 376 | void setContour2DContourList(const DataSetId& id, const std::vector<double>& contours); |
---|
[2409] | 377 | |
---|
[2681] | 378 | // 3D Contour (isosurface) plots |
---|
[2409] | 379 | |
---|
[2681] | 380 | bool addContour3D(const DataSetId& id, int numContours); |
---|
[2302] | 381 | |
---|
[2681] | 382 | bool addContour3D(const DataSetId& id, const std::vector<double>& contours); |
---|
| 383 | |
---|
[2409] | 384 | void setContour3DContours(const DataSetId& id, int numContours); |
---|
[2302] | 385 | |
---|
[2409] | 386 | void setContour3DContourList(const DataSetId& id, const std::vector<double>& contours); |
---|
| 387 | |
---|
[2550] | 388 | // Cutplanes |
---|
| 389 | |
---|
[2681] | 390 | void setCutplaneSliceVisibility(const DataSetId& id, Axis axis, bool state); |
---|
[2550] | 391 | |
---|
[2681] | 392 | void setCutplaneColorMode(const DataSetId& id, |
---|
| 393 | Cutplane::ColorMode mode, |
---|
| 394 | const char *name, double range[2] = NULL); |
---|
[2550] | 395 | |
---|
[2681] | 396 | void setCutplaneColorMode(const DataSetId& id, |
---|
| 397 | Cutplane::ColorMode mode, |
---|
| 398 | DataSet::DataAttributeType type, |
---|
| 399 | const char *name, double range[2] = NULL); |
---|
[2550] | 400 | |
---|
[2302] | 401 | // Glyphs |
---|
| 402 | |
---|
[2542] | 403 | bool addGlyphs(const DataSetId& id, Glyphs::GlyphShape shape); |
---|
[2302] | 404 | |
---|
[2409] | 405 | void setGlyphsShape(const DataSetId& id, Glyphs::GlyphShape shape); |
---|
| 406 | |
---|
[2681] | 407 | void setGlyphsColorMode(const DataSetId& id, |
---|
| 408 | Glyphs::ColorMode mode, |
---|
| 409 | const char *name, |
---|
| 410 | double range[2] = NULL); |
---|
[2409] | 411 | |
---|
[2681] | 412 | void setGlyphsScalingMode(const DataSetId& id, |
---|
| 413 | Glyphs::ScalingMode mode, |
---|
| 414 | const char *name, |
---|
| 415 | double range[2] = NULL); |
---|
[2409] | 416 | |
---|
[2542] | 417 | void setGlyphsNormalizeScale(const DataSetId& id, bool normalize); |
---|
| 418 | |
---|
[2409] | 419 | void setGlyphsScaleFactor(const DataSetId& id, double scale); |
---|
| 420 | |
---|
[2302] | 421 | // Height maps |
---|
| 422 | |
---|
[2542] | 423 | bool addHeightMap(const DataSetId& id, int numContours, double heightScale); |
---|
[2302] | 424 | |
---|
[2542] | 425 | bool addHeightMap(const DataSetId& id, const std::vector<double>& contours, double heightScale); |
---|
| 426 | |
---|
[2409] | 427 | void setHeightMapHeightScale(const DataSetId& id, double scale); |
---|
[2302] | 428 | |
---|
[2542] | 429 | void setHeightMapNumContours(const DataSetId& id, int numContours); |
---|
[2409] | 430 | |
---|
| 431 | void setHeightMapContourList(const DataSetId& id, const std::vector<double>& contours); |
---|
| 432 | |
---|
[2542] | 433 | void setHeightMapContourSurfaceVisibility(const DataSetId& id, bool state); |
---|
[2302] | 434 | |
---|
[2542] | 435 | void setHeightMapContourLineVisibility(const DataSetId& id, bool state); |
---|
| 436 | |
---|
[2302] | 437 | void setHeightMapContourEdgeColor(const DataSetId& id, float color[3]); |
---|
| 438 | |
---|
| 439 | void setHeightMapContourEdgeWidth(const DataSetId& id, float edgeWidth); |
---|
| 440 | |
---|
[2322] | 441 | // Molecules |
---|
| 442 | |
---|
[2409] | 443 | void setMoleculeAtomScaling(const DataSetId& id, Molecule::AtomScaling scaling); |
---|
| 444 | |
---|
| 445 | void setMoleculeAtomVisibility(const DataSetId& id, bool state); |
---|
| 446 | |
---|
| 447 | void setMoleculeBondVisibility(const DataSetId& id, bool state); |
---|
| 448 | |
---|
[2302] | 449 | // Color-mapped surfaces |
---|
| 450 | |
---|
[2681] | 451 | void setPseudoColorColorMode(const DataSetId& id, |
---|
| 452 | PseudoColor::ColorMode mode, |
---|
| 453 | const char *name, double range[2] = NULL); |
---|
[2302] | 454 | |
---|
[2681] | 455 | void setPseudoColorColorMode(const DataSetId& id, |
---|
| 456 | PseudoColor::ColorMode mode, |
---|
| 457 | DataSet::DataAttributeType type, |
---|
| 458 | const char *name, double range[2] = NULL); |
---|
[2302] | 459 | |
---|
[2322] | 460 | // Streamlines |
---|
| 461 | |
---|
[2681] | 462 | void setStreamlinesNumberOfSeedPoints(const DataSetId& id, int numPoints); |
---|
[2322] | 463 | |
---|
[2550] | 464 | void setStreamlinesSeedToMeshPoints(const DataSetId& id); |
---|
[2322] | 465 | |
---|
[2550] | 466 | void setStreamlinesSeedToFilledMesh(const DataSetId& id, int numPoints); |
---|
| 467 | |
---|
| 468 | bool setStreamlinesSeedToMeshPoints(const DataSetId& id, |
---|
| 469 | char *data, size_t nbytes); |
---|
| 470 | |
---|
| 471 | bool setStreamlinesSeedToFilledMesh(const DataSetId& id, |
---|
| 472 | char *data, size_t nbytes, |
---|
| 473 | int numPoints); |
---|
| 474 | |
---|
[2409] | 475 | void setStreamlinesSeedToRake(const DataSetId& id, |
---|
| 476 | double start[3], double end[3], |
---|
| 477 | int numPoints); |
---|
[2322] | 478 | |
---|
[2409] | 479 | void setStreamlinesSeedToDisk(const DataSetId& id, |
---|
| 480 | double center[3], double normal[3], |
---|
| 481 | double radius, double innerRadius, |
---|
| 482 | int numPoints); |
---|
[2322] | 483 | |
---|
[2409] | 484 | void setStreamlinesSeedToPolygon(const DataSetId& id, |
---|
| 485 | double center[3], double normal[3], |
---|
| 486 | double angle, double radius, |
---|
| 487 | int numSides); |
---|
| 488 | |
---|
| 489 | void setStreamlinesSeedToFilledPolygon(const DataSetId& id, |
---|
| 490 | double center[3], double normal[3], |
---|
| 491 | double angle, double radius, |
---|
| 492 | int numSides, int numPoints); |
---|
| 493 | |
---|
[2322] | 494 | void setStreamlinesLength(const DataSetId& id, double length); |
---|
| 495 | |
---|
| 496 | void setStreamlinesTypeToLines(const DataSetId& id); |
---|
| 497 | |
---|
| 498 | void setStreamlinesTypeToTubes(const DataSetId& id, int numSides, double radius); |
---|
| 499 | |
---|
| 500 | void setStreamlinesTypeToRibbons(const DataSetId& id, double width, double angle); |
---|
| 501 | |
---|
[2409] | 502 | void setStreamlinesSeedVisibility(const DataSetId& id, bool state); |
---|
[2322] | 503 | |
---|
[2681] | 504 | void setStreamlinesColorMode(const DataSetId& id, |
---|
| 505 | Streamlines::ColorMode mode, |
---|
| 506 | const char *name, double range[2] = NULL); |
---|
[2322] | 507 | |
---|
[2681] | 508 | void setStreamlinesColorMode(const DataSetId& id, |
---|
| 509 | Streamlines::ColorMode mode, |
---|
| 510 | DataSet::DataAttributeType type, |
---|
| 511 | const char *name, double range[2] = NULL); |
---|
[2322] | 512 | |
---|
| 513 | void setStreamlinesSeedColor(const DataSetId& id, float color[3]); |
---|
| 514 | |
---|
[2681] | 515 | private: |
---|
| 516 | static void printCameraInfo(vtkCamera *camera); |
---|
[2302] | 517 | |
---|
[2681] | 518 | static void setCameraFromMatrix(vtkCamera *camera, vtkMatrix4x4 &mat); |
---|
[2302] | 519 | |
---|
[2681] | 520 | static void mergeBounds(double *boundsDest, const double *bounds1, const double *bounds2); |
---|
[2302] | 521 | |
---|
[2681] | 522 | template<class GraphicsObject> |
---|
| 523 | std::tr1::unordered_map<DataSetId, GraphicsObject *>&getGraphicsObjectHashmap(); |
---|
[2302] | 524 | |
---|
[2120] | 525 | void collectBounds(double *bounds, bool onlyVisible); |
---|
| 526 | |
---|
[2542] | 527 | void collectDataRanges(); |
---|
[2170] | 528 | |
---|
[2681] | 529 | void collectDataRanges(double *range, const char *name, |
---|
| 530 | DataSet::DataAttributeType type, |
---|
| 531 | int component, bool onlyVisible); |
---|
[2170] | 532 | |
---|
[2681] | 533 | void clearFieldRanges(); |
---|
[2542] | 534 | |
---|
[2681] | 535 | void initFieldRanges(); |
---|
[2542] | 536 | |
---|
[2681] | 537 | void updateFieldRanges(); |
---|
[2542] | 538 | |
---|
| 539 | void updateColorMap(ColorMap *cmap); |
---|
| 540 | |
---|
| 541 | bool colorMapUsed(ColorMap *cmap); |
---|
| 542 | |
---|
[2215] | 543 | void computeDisplayToWorld(double x, double y, double z, double worldPt[4]); |
---|
| 544 | |
---|
| 545 | void computeWorldToDisplay(double x, double y, double z, double displayPt[3]); |
---|
| 546 | |
---|
[2201] | 547 | void computeScreenWorldCoords(); |
---|
| 548 | |
---|
[2542] | 549 | bool is2D(const double bounds[6], |
---|
| 550 | PrincipalPlane *plane, |
---|
| 551 | double *offset) const; |
---|
[2120] | 552 | void initCamera(); |
---|
| 553 | void initAxes(); |
---|
[2542] | 554 | void resetAxes(double bounds[6] = NULL); |
---|
[2302] | 555 | void setCameraClippingPlanes(); |
---|
[2120] | 556 | |
---|
| 557 | bool _needsRedraw; |
---|
| 558 | int _windowWidth, _windowHeight; |
---|
| 559 | double _imgWorldOrigin[2]; |
---|
| 560 | double _imgWorldDims[2]; |
---|
[2542] | 561 | PrincipalPlane _imgCameraPlane; |
---|
| 562 | double _imgCameraOffset; |
---|
[2201] | 563 | double _screenWorldCoords[4]; |
---|
[2409] | 564 | double _cameraOrientation[4]; |
---|
[2201] | 565 | double _cameraZoomRatio; |
---|
| 566 | double _cameraPan[2]; |
---|
[2120] | 567 | float _bgColor[3]; |
---|
[2201] | 568 | bool _useCumulativeRange; |
---|
| 569 | bool _cumulativeRangeOnlyVisible; |
---|
[2120] | 570 | |
---|
[2681] | 571 | FieldRangeHashmap _scalarPointDataRange; |
---|
| 572 | FieldRangeHashmap _vectorPointDataRange; |
---|
| 573 | FieldRangeHashmap _vectorCompPointDataRange[3]; |
---|
| 574 | FieldRangeHashmap _scalarCellDataRange; |
---|
| 575 | FieldRangeHashmap _vectorCellDataRange; |
---|
| 576 | FieldRangeHashmap _vectorCompCellDataRange[3]; |
---|
| 577 | |
---|
[2120] | 578 | ColorMapHashmap _colorMaps; |
---|
| 579 | DataSetHashmap _dataSets; |
---|
[2302] | 580 | Contour2DHashmap _contour2Ds; |
---|
| 581 | Contour3DHashmap _contour3Ds; |
---|
[2550] | 582 | CutplaneHashmap _cutplanes; |
---|
[2302] | 583 | GlyphsHashmap _glyphs; |
---|
| 584 | HeightMapHashmap _heightMaps; |
---|
[2322] | 585 | LICHashmap _lics; |
---|
| 586 | MoleculeHashmap _molecules; |
---|
[2302] | 587 | PolyDataHashmap _polyDatas; |
---|
[2120] | 588 | PseudoColorHashmap _pseudoColors; |
---|
[2322] | 589 | StreamlinesHashmap _streamlines; |
---|
[2302] | 590 | VolumeHashmap _volumes; |
---|
[2120] | 591 | |
---|
| 592 | CameraMode _cameraMode; |
---|
| 593 | |
---|
[2322] | 594 | vtkSmartPointer<vtkPlane> _cameraClipPlanes[4]; |
---|
| 595 | vtkSmartPointer<vtkPlane> _userClipPlanes[6]; |
---|
[2302] | 596 | vtkSmartPointer<vtkPlaneCollection> _activeClipPlanes; |
---|
[2120] | 597 | vtkSmartPointer<vtkCubeAxesActor> _cubeAxesActor; // For 3D view |
---|
| 598 | #ifdef USE_CUSTOM_AXES |
---|
| 599 | vtkSmartPointer<vtkRpCubeAxesActor2D> _cubeAxesActor2D; // For 2D view |
---|
| 600 | #else |
---|
| 601 | vtkSmartPointer<vtkCubeAxesActor2D> _cubeAxesActor2D; // For 2D view |
---|
| 602 | #endif |
---|
| 603 | vtkSmartPointer<vtkScalarBarActor> _scalarBarActor; |
---|
| 604 | vtkSmartPointer<vtkRenderer> _renderer; |
---|
| 605 | vtkSmartPointer<vtkRenderer> _legendRenderer; |
---|
| 606 | vtkSmartPointer<vtkRenderWindow> _renderWindow; |
---|
| 607 | vtkSmartPointer<vtkRenderWindow> _legendRenderWindow; |
---|
| 608 | }; |
---|
| 609 | |
---|
| 610 | } |
---|
| 611 | } |
---|
| 612 | |
---|
| 613 | #endif |
---|