source: branches/vtkvis_threaded/RpVtkRenderer.h @ 2524

Last change on this file since 2524 was 2523, checked in by ldelgass, 13 years ago

Merge 2494:2522 from trunk

  • Property svn:eol-style set to native
File size: 25.6 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_RENDERER_H__
9#define __RAPPTURE_VTKVIS_RENDERER_H__
10
11#include <vtkSmartPointer.h>
12#include <vtkCubeAxesActor.h>
13#ifdef USE_CUSTOM_AXES
14#include "vtkRpCubeAxesActor2D.h"
15#else
16#include <vtkCubeAxesActor2D.h>
17#endif
18#include <vtkScalarBarActor.h>
19#include <vtkRenderer.h>
20#include <vtkRenderWindow.h>
21#include <vtkUnsignedCharArray.h>
22
23#include <string>
24#include <vector>
25#include <tr1/unordered_map>
26
27#include "ColorMap.h"
28#include "RpVtkDataSet.h"
29#include "RpContour2D.h"
30#include "RpContour3D.h"
31#include "RpCutplane.h"
32#include "RpGlyphs.h"
33#include "RpHeightMap.h"
34#include "RpLIC.h"
35#include "RpMolecule.h"
36#include "RpPolyData.h"
37#include "RpPseudoColor.h"
38#include "RpStreamlines.h"
39#include "RpVolume.h"
40#include "Trace.h"
41
42// Controls if TGA format is sent to client
43//#define RENDER_TARGA
44#define TARGA_BYTES_PER_PIXEL 3
45
46namespace Rappture {
47namespace VtkVis {
48
49/**
50 * \brief VTK Renderer
51 */
52class Renderer
53{
54public:
55    Renderer();
56    virtual ~Renderer();
57
58    enum Axis {
59        X_AXIS,
60        Y_AXIS,
61        Z_AXIS
62    };
63
64    enum PrincipalPlane {
65        PLANE_XY,
66        PLANE_ZY,
67        PLANE_XZ
68    };
69
70    enum AxesFlyMode {
71        FLY_OUTER_EDGES = 0,
72        FLY_CLOSEST_TRIAD,
73        FLY_FURTHEST_TRIAD,
74        FLY_STATIC_EDGES,
75        FLY_STATIC_TRIAD
76    };
77
78    enum AxesTickPosition {
79        TICKS_INSIDE,
80        TICKS_OUTSIDE,
81        TICKS_BOTH
82    };
83
84    enum CameraMode {
85        PERSPECTIVE,
86        ORTHO,
87        IMAGE
88    };
89
90    enum LegendType {
91        ACTIVE_SCALAR,
92        ACTIVE_VECTOR_MAGNITUDE,
93        ACTIVE_VECTOR_X,
94        ACTIVE_VECTOR_Y,
95        ACTIVE_VECTOR_Z
96    };
97
98    typedef std::string DataSetId;
99    typedef std::string ColorMapId;
100    typedef std::tr1::unordered_map<DataSetId, DataSet *> DataSetHashmap;
101    typedef std::tr1::unordered_map<ColorMapId, ColorMap *> ColorMapHashmap;
102    typedef std::tr1::unordered_map<DataSetId, Contour2D *> Contour2DHashmap;
103    typedef std::tr1::unordered_map<DataSetId, Contour3D *> Contour3DHashmap;
104    typedef std::tr1::unordered_map<DataSetId, Cutplane *> CutplaneHashmap;
105    typedef std::tr1::unordered_map<DataSetId, Glyphs *> GlyphsHashmap;
106    typedef std::tr1::unordered_map<DataSetId, HeightMap *> HeightMapHashmap;
107    typedef std::tr1::unordered_map<DataSetId, LIC *> LICHashmap;
108    typedef std::tr1::unordered_map<DataSetId, Molecule *> MoleculeHashmap;
109    typedef std::tr1::unordered_map<DataSetId, PolyData *> PolyDataHashmap;
110    typedef std::tr1::unordered_map<DataSetId, PseudoColor *> PseudoColorHashmap;
111    typedef std::tr1::unordered_map<DataSetId, Streamlines *> StreamlinesHashmap;
112    typedef std::tr1::unordered_map<DataSetId, Volume *> VolumeHashmap;
113
114    // Data sets
115
116    void addDataSet(const DataSetId& id);
117
118    void deleteDataSet(const DataSetId& id);
119
120    DataSet *getDataSet(const DataSetId& id);
121
122    void getDataSetNames(std::vector<std::string>& names);
123
124    bool setData(const DataSetId& id, char *data, int nbytes);
125
126    bool setDataFile(const DataSetId& id, const char *filename);
127
128    bool setDataSetActiveScalars(const DataSetId& id, const char *scalarName);
129
130    bool setDataSetActiveVectors(const DataSetId& id, const char *vectorName);
131
132    bool getScalarValueAtPixel(const DataSetId& id, int x, int y, double *value);
133
134    bool getScalarValue(const DataSetId& id, double x, double y, double z, double *value);
135
136    bool getVectorValueAtPixel(const DataSetId& id, int x, int y, double vector[3]);
137
138    bool getVectorValue(const DataSetId& id, double x, double y, double z, double vector[3]);
139
140    void setDataSetShowBounds(const DataSetId& id, bool state);
141
142    void setDataSetOutlineColor(const DataSetId& id, float color[3]);
143
144    void setDataSetOpacity(const DataSetId& id, double opacity);
145
146    void setDataSetVisibility(const DataSetId& id, bool state);
147
148    void setUseCumulativeDataRange(bool state, bool onlyVisible = false);
149
150    // Render window
151
152    /// Get the VTK render window object this Renderer uses
153    vtkRenderWindow *getRenderWindow()
154    {
155        return _renderWindow;
156    }
157
158    void setWindowSize(int width, int height);
159
160    int getWindowWidth() const;
161
162    int getWindowHeight() const;
163
164    // Camera controls
165
166    void setViewAngle(int height);
167
168    vtkCamera *getVtkCamera()
169    {
170        if (_renderer != NULL)
171            return _renderer->GetActiveCamera();
172        else
173            return NULL;
174    }
175
176    void setCameraMode(CameraMode mode);
177
178    CameraMode getCameraMode() const;
179
180    void resetCamera(bool resetOrientation = true);
181
182    void resetCameraClippingRange();
183
184    void setCameraZoomRegionPixels(int x, int y, int width, int height);
185
186    void setCameraZoomRegion(double x, double y, double width, double height);
187
188    void getCameraZoomRegion(double xywh[4]) const;
189
190    void getScreenWorldCoords(double xywh[4]) const;
191
192    void rotateCamera(double yaw, double pitch, double roll);
193
194    void setCameraOrientation(const double quat[4], bool absolute = true);
195
196    void panCamera(double x, double y, bool absolute = true);
197
198    void zoomCamera(double z, bool absolute = true);
199
200    void setCameraOrientationAndPosition(const double position[3],
201                                         const double focalPoint[3],
202                                         const double viewUp[3]);
203
204    void getCameraOrientationAndPosition(double position[3],
205                                         double focalPoint[3],
206                                         double viewUp[3]);
207
208    // Rendering an image
209
210    void setBackgroundColor(float color[3]);
211
212    void setClipPlane(Axis axis, double ratio, int direction);
213
214    void setUseTwoSidedLighting(bool state);
215
216    void setUseDepthPeeling(bool state);
217
218    void eventuallyRender();
219
220    bool render();
221
222    void getRenderedFrame(vtkUnsignedCharArray *imgData);
223
224    // Axes
225
226    void setAxesFlyMode(AxesFlyMode mode);
227
228    void setAxesVisibility(bool state);
229
230    void setAxesGridVisibility(bool state);
231
232    void setAxesLabelVisibility(bool state);
233
234    void setAxesTickVisibility(bool state);
235
236    void setAxesTickPosition(AxesTickPosition pos);
237
238    void setAxesColor(double color[3]);
239
240    void setAxisVisibility(Axis axis, bool state);
241
242    void setAxisGridVisibility(Axis axis, bool state);
243
244    void setAxisLabelVisibility(Axis axis, bool state);
245
246    void setAxisTickVisibility(Axis axis, bool state);
247
248    void setAxisTitle(Axis axis, const char *title);
249
250    void setAxisUnits(Axis axis, const char *units);
251
252    // Colormaps
253
254    void addColorMap(const ColorMapId& id, ColorMap *colorMap);
255
256    void deleteColorMap(const ColorMapId& id);
257
258    ColorMap *getColorMap(const ColorMapId& id);
259
260    bool renderColorMap(const ColorMapId& id,
261                        const DataSetId& dataSetID,
262                        LegendType legendType,
263                        std::string& title,
264                        double range[2],
265                        int width, int height,
266                        int numLabels,
267                        vtkUnsignedCharArray *imgData);
268
269    // 2D Contour plots
270
271    bool addContour2D(const DataSetId& id, int numContours);
272
273    bool addContour2D(const DataSetId& id, const std::vector<double>& contours);
274
275    void deleteContour2D(const DataSetId& id);
276
277    Contour2D *getContour2D(const DataSetId& id);
278
279    void setContour2DTransform(const DataSetId& id, vtkMatrix4x4 *trans);
280
281    void setContour2DOrientation(const DataSetId& id, double quat[4]);
282
283    void setContour2DOrientation(const DataSetId& id, double angle, double axis[3]);
284
285    void setContour2DPosition(const DataSetId& id, double pos[3]);
286
287    void setContour2DScale(const DataSetId& id, double scale[3]);
288
289    void setContour2DColor(const DataSetId& id, float color[3]);
290
291    void setContour2DEdgeWidth(const DataSetId& id, float edgeWidth);
292
293    void setContour2DLighting(const DataSetId& id, bool state);
294   
295    void setContour2DOpacity(const DataSetId& id, double opacity);
296
297    void setContour2DVisibility(const DataSetId& id, bool state);
298
299    void setContour2DContours(const DataSetId& id, int numContours);
300
301    void setContour2DContourList(const DataSetId& id, const std::vector<double>& contours);
302
303    // 3D Contour (isosurface) plots
304
305    bool addContour3D(const DataSetId& id, int numContours);
306
307    bool addContour3D(const DataSetId& id, const std::vector<double>& contours);
308
309    void deleteContour3D(const DataSetId& id);
310
311    Contour3D *getContour3D(const DataSetId& id);
312
313    void setContour3DTransform(const DataSetId& id, vtkMatrix4x4 *trans);
314
315    void setContour3DOrientation(const DataSetId& id, double quat[4]);
316
317    void setContour3DOrientation(const DataSetId& id, double angle, double axis[3]);
318
319    void setContour3DPosition(const DataSetId& id, double pos[3]);
320
321    void setContour3DScale(const DataSetId& id, double scale[3]);
322
323    void setContour3DColor(const DataSetId& id, float color[3]);
324
325    void setContour3DEdgeVisibility(const DataSetId& id, bool state);
326
327    void setContour3DEdgeColor(const DataSetId& id, float color[3]);
328
329    void setContour3DEdgeWidth(const DataSetId& id, float edgeWidth);
330
331    void setContour3DLighting(const DataSetId& id, bool state);
332
333    void setContour3DOpacity(const DataSetId& id, double opacity);
334
335    void setContour3DVisibility(const DataSetId& id, bool state);
336
337    void setContour3DWireframe(const DataSetId& id, bool state);
338
339    void setContour3DContours(const DataSetId& id, int numContours);
340
341    void setContour3DContourList(const DataSetId& id, const std::vector<double>& contours);
342
343    void setContour3DColorMap(const DataSetId& id, const ColorMapId& colorMapId);
344
345    // Cutplanes
346
347    bool addCutplane(const DataSetId& id);
348   
349    void deleteCutplane(const DataSetId& id);
350
351    Cutplane *getCutplane(const DataSetId& id);
352
353    void setCutplaneTransform(const DataSetId& id, vtkMatrix4x4 *trans);
354
355    void setCutplaneOrientation(const DataSetId& id, double quat[4]);
356
357    void setCutplaneOrientation(const DataSetId& id, double angle, double axis[3]);
358
359    void setCutplanePosition(const DataSetId& id, double pos[3]);
360
361    void setCutplaneScale(const DataSetId& id, double scale[3]);
362
363    void setCutplaneEdgeVisibility(const DataSetId& id, bool state);
364
365    void setCutplaneEdgeColor(const DataSetId& id, float color[3]);
366
367    void setCutplaneEdgeWidth(const DataSetId& id, float edgeWidth);
368
369    void setCutplaneLighting(const DataSetId& id, bool state);
370
371    void setCutplaneOpacity(const DataSetId& id, double opacity);
372
373    void setCutplaneVisibility(const DataSetId& id, bool state);
374
375    void setCutplaneWireframe(const DataSetId& id, bool state);
376
377    void setCutplaneVolumeSlice(const DataSetId& id, Cutplane::Axis axis, double ratio);
378
379    void setCutplaneColorMap(const DataSetId& id, const ColorMapId& colorMapId);
380
381    void setCutplaneColorMode(const DataSetId& id, Cutplane::ColorMode mode);
382
383    // Glyphs
384
385    bool addGlyphs(const DataSetId& id, Glyphs::GlyphShape shape);
386
387    void deleteGlyphs(const DataSetId& id);
388
389    Glyphs *getGlyphs(const DataSetId& id);
390
391    void setGlyphsTransform(const DataSetId& id, vtkMatrix4x4 *trans);
392
393    void setGlyphsOrientation(const DataSetId& id, double quat[4]);
394
395    void setGlyphsOrientation(const DataSetId& id, double angle, double axis[3]);
396
397    void setGlyphsPosition(const DataSetId& id, double pos[3]);
398
399    void setGlyphsScale(const DataSetId& id, double scale[3]);
400
401    void setGlyphsColor(const DataSetId& id, float color[3]);
402
403    void setGlyphsEdgeVisibility(const DataSetId& id, bool state);
404
405    void setGlyphsEdgeColor(const DataSetId& id, float color[3]);
406
407    void setGlyphsEdgeWidth(const DataSetId& id, float edgeWidth);
408
409    void setGlyphsLighting(const DataSetId& id, bool state);
410
411    void setGlyphsOpacity(const DataSetId& id, double opacity);
412
413    void setGlyphsVisibility(const DataSetId& id, bool state);
414
415    void setGlyphsWireframe(const DataSetId& id, bool state);
416
417    void setGlyphsColorMap(const DataSetId& id, const ColorMapId& colorMapId);
418
419    void setGlyphsShape(const DataSetId& id, Glyphs::GlyphShape shape);
420
421    void setGlyphsColorMode(const DataSetId& id, Glyphs::ColorMode mode);
422
423    void setGlyphsScalingMode(const DataSetId& id, Glyphs::ScalingMode mode);
424
425    void setGlyphsNormalizeScale(const DataSetId& id, bool normalize);
426
427    void setGlyphsScaleFactor(const DataSetId& id, double scale);
428
429    // Height maps
430
431    bool addHeightMap(const DataSetId& id, int numContours, double heightScale);
432
433    bool addHeightMap(const DataSetId& id, const std::vector<double>& contours, double heightScale);
434
435    void deleteHeightMap(const DataSetId& id);
436
437    HeightMap *getHeightMap(const DataSetId& id);
438
439    void setHeightMapTransform(const DataSetId& id, vtkMatrix4x4 *trans);
440
441    void setHeightMapOrientation(const DataSetId& id, double quat[4]);
442
443    void setHeightMapOrientation(const DataSetId& id, double angle, double axis[3]);
444
445    void setHeightMapPosition(const DataSetId& id, double pos[3]);
446
447    void setHeightMapScale(const DataSetId& id, double scale[3]);
448   
449    void setHeightMapEdgeVisibility(const DataSetId& id, bool state);
450
451    void setHeightMapEdgeColor(const DataSetId& id, float color[3]);
452
453    void setHeightMapEdgeWidth(const DataSetId& id, float edgeWidth);
454
455    void setHeightMapLighting(const DataSetId& id, bool state);
456
457    void setHeightMapOpacity(const DataSetId& id, double opacity);
458
459    void setHeightMapVisibility(const DataSetId& id, bool state);
460
461    void setHeightMapWireframe(const DataSetId& id, bool state);
462
463    void setHeightMapVolumeSlice(const DataSetId& id, HeightMap::Axis axis, double ratio);
464
465    void setHeightMapHeightScale(const DataSetId& id, double scale);
466
467    void setHeightMapColorMap(const DataSetId& id, const ColorMapId& colorMapId);
468
469    void setHeightMapNumContours(const DataSetId& id, int numContours);
470
471    void setHeightMapContourList(const DataSetId& id, const std::vector<double>& contours);
472
473    void setHeightMapContourSurfaceVisibility(const DataSetId& id, bool state);
474
475    void setHeightMapContourLineVisibility(const DataSetId& id, bool state);
476
477    void setHeightMapContourEdgeColor(const DataSetId& id, float color[3]);
478
479    void setHeightMapContourEdgeWidth(const DataSetId& id, float edgeWidth);
480
481    // LIC plots
482
483    bool addLIC(const DataSetId& id);
484   
485    void deleteLIC(const DataSetId& id);
486
487    LIC *getLIC(const DataSetId& id);
488
489    void setLICTransform(const DataSetId& id, vtkMatrix4x4 *trans);
490
491    void setLICOrientation(const DataSetId& id, double quat[4]);
492
493    void setLICOrientation(const DataSetId& id, double angle, double axis[3]);
494
495    void setLICPosition(const DataSetId& id, double pos[3]);
496
497    void setLICScale(const DataSetId& id, double scale[3]);
498
499    void setLICEdgeVisibility(const DataSetId& id, bool state);
500   
501    void setLICEdgeColor(const DataSetId& id, float color[3]);
502
503    void setLICEdgeWidth(const DataSetId& id, float edgeWidth);
504
505    void setLICLighting(const DataSetId& id, bool state);
506
507    void setLICOpacity(const DataSetId& id, double opacity);
508
509    void setLICVisibility(const DataSetId& id, bool state);
510
511    void setLICVolumeSlice(const DataSetId& id, LIC::Axis axis, double ratio);
512
513    void setLICColorMap(const DataSetId& id, const ColorMapId& colorMapId);
514
515    // Molecules
516
517    bool addMolecule(const DataSetId& id);
518   
519    void deleteMolecule(const DataSetId& id);
520
521    Molecule *getMolecule(const DataSetId& id);
522
523    void setMoleculeTransform(const DataSetId& id, vtkMatrix4x4 *trans);
524
525    void setMoleculeOrientation(const DataSetId& id, double quat[4]);
526
527    void setMoleculeOrientation(const DataSetId& id, double angle, double axis[3]);
528
529    void setMoleculePosition(const DataSetId& id, double pos[3]);
530
531    void setMoleculeScale(const DataSetId& id, double scale[3]);
532   
533    void setMoleculeEdgeVisibility(const DataSetId& id, bool state);
534
535    void setMoleculeEdgeColor(const DataSetId& id, float color[3]);
536
537    void setMoleculeEdgeWidth(const DataSetId& id, float edgeWidth);
538
539    void setMoleculeLighting(const DataSetId& id, bool state);
540
541    void setMoleculeOpacity(const DataSetId& id, double opacity);
542
543    void setMoleculeVisibility(const DataSetId& id, bool state);
544
545    void setMoleculeWireframe(const DataSetId& id, bool state);
546
547    void setMoleculeColorMap(const DataSetId& id, const ColorMapId& colorMapId);
548
549    void setMoleculeAtomScaling(const DataSetId& id, Molecule::AtomScaling scaling);
550
551    void setMoleculeAtomVisibility(const DataSetId& id, bool state);
552
553    void setMoleculeBondVisibility(const DataSetId& id, bool state);
554
555    // PolyData Meshes
556
557    bool addPolyData(const DataSetId& id);
558   
559    void deletePolyData(const DataSetId& id);
560
561    PolyData *getPolyData(const DataSetId& id);
562
563    void setPolyDataTransform(const DataSetId& id, vtkMatrix4x4 *trans);
564
565    void setPolyDataOrientation(const DataSetId& id, double quat[4]);
566
567    void setPolyDataOrientation(const DataSetId& id, double angle, double axis[3]);
568
569    void setPolyDataPosition(const DataSetId& id, double pos[3]);
570
571    void setPolyDataScale(const DataSetId& id, double scale[3]);
572
573    void setPolyDataColor(const DataSetId& id, float color[3]);
574
575    void setPolyDataEdgeVisibility(const DataSetId& id, bool state);
576
577    void setPolyDataEdgeColor(const DataSetId& id, float color[3]);
578
579    void setPolyDataEdgeWidth(const DataSetId& id, float edgeWidth);
580
581    void setPolyDataPointSize(const DataSetId& id, float size);
582
583    void setPolyDataLighting(const DataSetId& id, bool state);
584
585    void setPolyDataOpacity(const DataSetId& id, double opacity);
586
587    void setPolyDataVisibility(const DataSetId& id, bool state);
588
589    void setPolyDataWireframe(const DataSetId& id, bool state);
590
591    // Color-mapped surfaces
592
593    bool addPseudoColor(const DataSetId& id);
594
595    void deletePseudoColor(const DataSetId& id);
596
597    PseudoColor *getPseudoColor(const DataSetId& id);
598
599    void setPseudoColorTransform(const DataSetId& id, vtkMatrix4x4 *trans);
600
601    void setPseudoColorOrientation(const DataSetId& id, double quat[4]);
602
603    void setPseudoColorOrientation(const DataSetId& id, double angle, double axis[3]);
604
605    void setPseudoColorPosition(const DataSetId& id, double pos[3]);
606
607    void setPseudoColorScale(const DataSetId& id, double scale[3]);
608
609    void setPseudoColorColor(const DataSetId& id, float color[3]);
610
611    void setPseudoColorEdgeVisibility(const DataSetId& id, bool state);
612
613    void setPseudoColorEdgeColor(const DataSetId& id, float color[3]);
614
615    void setPseudoColorEdgeWidth(const DataSetId& id, float edgeWidth);
616
617    void setPseudoColorLighting(const DataSetId& id, bool state);
618   
619    void setPseudoColorOpacity(const DataSetId& id, double opacity);
620
621    void setPseudoColorVisibility(const DataSetId& id, bool state);
622
623    void setPseudoColorWireframe(const DataSetId& id, bool state);
624
625    void setPseudoColorColorMap(const DataSetId& id, const ColorMapId& colorMapId);
626
627    void setPseudoColorColorMode(const DataSetId& id, PseudoColor::ColorMode mode);
628
629    // Streamlines
630
631    bool addStreamlines(const DataSetId& id);
632
633    void deleteStreamlines(const DataSetId& id);
634
635    Streamlines *getStreamlines(const DataSetId& id);
636
637    void setStreamlinesTransform(const DataSetId& id, vtkMatrix4x4 *trans);
638
639    void setStreamlinesOrientation(const DataSetId& id, double quat[4]);
640
641    void setStreamlinesOrientation(const DataSetId& id, double angle, double axis[3]);
642
643    void setStreamlinesPosition(const DataSetId& id, double pos[3]);
644
645    void setStreamlinesScale(const DataSetId& id, double scale[3]);
646
647    void setStreamlinesColor(const DataSetId& id, float color[3]);
648
649    void setStreamlinesEdgeVisibility(const DataSetId& id, bool state);
650
651    void setStreamlinesEdgeColor(const DataSetId& id, float color[3]);
652
653    void setStreamlinesEdgeWidth(const DataSetId& id, float edgeWidth);
654
655    void setStreamlinesLighting(const DataSetId& id, bool state);
656
657    void setStreamlinesOpacity(const DataSetId& id, double opacity);
658
659    void setStreamlinesVisibility(const DataSetId& id, bool state);
660
661    void setStreamlinesSeedToMeshPoints(const DataSetId& id);
662
663    void setStreamlinesSeedToFilledMesh(const DataSetId& id, int numPoints);
664
665    bool setStreamlinesSeedToMeshPoints(const DataSetId& id,
666                                        char *data, size_t nbytes);
667
668    bool setStreamlinesSeedToFilledMesh(const DataSetId& id,
669                                        char *data, size_t nbytes,
670                                        int numPoints);
671
672    void setStreamlinesSeedToRake(const DataSetId& id,
673                                  double start[3], double end[3],
674                                  int numPoints);
675
676    void setStreamlinesSeedToDisk(const DataSetId& id,
677                                  double center[3], double normal[3],
678                                  double radius, double innerRadius,
679                                  int numPoints);
680
681    void setStreamlinesSeedToPolygon(const DataSetId& id,
682                                     double center[3], double normal[3],
683                                     double angle, double radius,
684                                     int numSides);
685
686    void setStreamlinesSeedToFilledPolygon(const DataSetId& id,
687                                           double center[3], double normal[3],
688                                           double angle, double radius,
689                                           int numSides, int numPoints);
690
691    void setStreamlinesLength(const DataSetId& id, double length);
692
693    void setStreamlinesTypeToLines(const DataSetId& id);
694
695    void setStreamlinesTypeToTubes(const DataSetId& id, int numSides, double radius);
696
697    void setStreamlinesTypeToRibbons(const DataSetId& id, double width, double angle);
698
699    void setStreamlinesSeedVisibility(const DataSetId& id, bool state);
700
701    void setStreamlinesColorMode(const DataSetId& id, Streamlines::ColorMode mode);
702
703    void setStreamlinesColorMap(const DataSetId& id, const ColorMapId& colorMapId);
704
705    void setStreamlinesSeedColor(const DataSetId& id, float color[3]);
706
707    // Volumes
708
709    bool addVolume(const DataSetId& id);
710
711    void deleteVolume(const DataSetId& id);
712
713    Volume *getVolume(const DataSetId& id);
714
715    void setVolumeTransform(const DataSetId& id, vtkMatrix4x4 *trans);
716
717    void setVolumeOrientation(const DataSetId& id, double quat[4]);
718
719    void setVolumeOrientation(const DataSetId& id, double angle, double axis[3]);
720
721    void setVolumePosition(const DataSetId& id, double pos[3]);
722
723    void setVolumeScale(const DataSetId& id, double scale[3]);
724
725    void setVolumeAmbient(const DataSetId& id, double coeff);
726
727    void setVolumeDiffuse(const DataSetId& id, double coeff);
728
729    void setVolumeSpecular(const DataSetId& id, double coeff, double power);
730
731    void setVolumeLighting(const DataSetId& id, bool state);
732   
733    void setVolumeOpacity(const DataSetId& id, double opacity);
734
735    void setVolumeVisibility(const DataSetId& id, bool state);
736
737    void setVolumeColorMap(const DataSetId& id, const ColorMapId& colorMapId);
738
739private:
740    static void printCameraInfo(vtkCamera *camera);
741    static inline double min2(double a, double b)
742    {
743        return ((a < b) ? a : b);
744    }
745    static inline double max2(double a, double b)
746    {
747        return ((a > b) ? a : b);
748    }
749    static void mergeBounds(double *boundsDest, const double *bounds1, const double *bounds2);
750
751    void collectBounds(double *bounds, bool onlyVisible);
752
753    void collectDataRanges();
754
755    void collectScalarRanges(double *range, bool onlyVisible);
756
757    void collectVectorMagnitudeRanges(double *range, bool onlyVisible);
758
759    void collectVectorComponentRanges(double *range, int component, bool onlyVisible);
760
761    void updateRanges();
762
763    void updateColorMap(ColorMap *cmap);
764
765    bool colorMapUsed(ColorMap *cmap);
766
767    void setCameraFromMatrix(vtkCamera *camera, vtkMatrix4x4 &mat);
768
769    void computeDisplayToWorld(double x, double y, double z, double worldPt[4]);
770
771    void computeWorldToDisplay(double x, double y, double z, double displayPt[3]);
772
773    void computeScreenWorldCoords();
774
775    bool is2D(const double bounds[6],
776              PrincipalPlane *plane,
777              double *offset) const;
778    void initCamera();
779    void initAxes();
780    void resetAxes(double bounds[6] = NULL);
781    void setCameraClippingPlanes();
782
783    bool _needsRedraw;
784    int _windowWidth, _windowHeight;
785    double _imgWorldOrigin[2];
786    double _imgWorldDims[2];
787    PrincipalPlane _imgCameraPlane;
788    double _imgCameraOffset;
789    double _screenWorldCoords[4];
790    double _cameraOrientation[4];
791    double _cameraZoomRatio;
792    double _cameraPan[2];
793    float _bgColor[3];
794    bool _useCumulativeRange;
795    bool _cumulativeRangeOnlyVisible;
796    double _cumulativeScalarRange[2];
797    double _cumulativeVectorMagnitudeRange[2];
798    double _cumulativeVectorComponentRange[3][2];
799
800    ColorMapHashmap _colorMaps;
801    DataSetHashmap _dataSets;
802    Contour2DHashmap _contour2Ds;
803    Contour3DHashmap _contour3Ds;
804    CutplaneHashmap _cutplanes;
805    GlyphsHashmap _glyphs;
806    HeightMapHashmap _heightMaps;
807    LICHashmap _lics;
808    MoleculeHashmap _molecules;
809    PolyDataHashmap _polyDatas;
810    PseudoColorHashmap _pseudoColors;
811    StreamlinesHashmap _streamlines;
812    VolumeHashmap _volumes;
813
814    CameraMode _cameraMode;
815
816    vtkSmartPointer<vtkPlane> _cameraClipPlanes[4];
817    vtkSmartPointer<vtkPlane> _userClipPlanes[6];
818    vtkSmartPointer<vtkPlaneCollection> _activeClipPlanes;
819    vtkSmartPointer<vtkCubeAxesActor> _cubeAxesActor; // For 3D view
820#ifdef USE_CUSTOM_AXES
821    vtkSmartPointer<vtkRpCubeAxesActor2D> _cubeAxesActor2D; // For 2D view
822#else
823    vtkSmartPointer<vtkCubeAxesActor2D> _cubeAxesActor2D; // For 2D view
824#endif
825    vtkSmartPointer<vtkScalarBarActor> _scalarBarActor;
826    vtkSmartPointer<vtkRenderer> _renderer;
827    vtkSmartPointer<vtkRenderer> _legendRenderer;
828    vtkSmartPointer<vtkRenderWindow> _renderWindow;
829    vtkSmartPointer<vtkRenderWindow> _legendRenderWindow;
830};
831
832}
833}
834
835#endif
Note: See TracBrowser for help on using the repository browser.