source: trunk/packages/vizservers/vtkvis/Renderer.h @ 3696

Last change on this file since 3696 was 3696, checked in by ldelgass, 11 years ago

Use imroved Arc API (arc can only represent a circular section, and setting
two endpoints could cause problems with endpts and center colinear and radii
from center to two endpoints differing). New API uses a center, start point,
normal and sweep angle. Also change Line to support polylines: protocol is
changed to require a Tcl list for point coordinates instead of a fixed 2
endpoints.

  • Property svn:eol-style set to native
File size: 33.5 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 VTKVIS_RENDERER_H
9#define VTKVIS_RENDERER_H
10
11#include <string>
12#include <vector>
13#include <tr1/unordered_map>
14#include <typeinfo>
15
16#include <vtkSmartPointer.h>
17#ifdef USE_CUSTOM_AXES
18#include "vtkRpCubeAxesActor.h"
19#else
20#include <vtkCubeAxesActor.h>
21#endif
22#include <vtkScalarBarActor.h>
23#include <vtkRenderer.h>
24#include <vtkRenderWindow.h>
25#include <vtkUnsignedCharArray.h>
26
27#include "ColorMap.h"
28#include "Types.h"
29#include "DataSet.h"
30#include "Arc.h"
31#include "Arrow.h"
32#include "Box.h"
33#include "Cone.h"
34#include "Contour2D.h"
35#include "Contour3D.h"
36#include "Cutplane.h"
37#include "Cylinder.h"
38#include "Disk.h"
39#include "Glyphs.h"
40#include "Group.h"
41#include "HeightMap.h"
42#include "LIC.h"
43#include "Line.h"
44#include "Molecule.h"
45#include "Outline.h"
46#include "PolyData.h"
47#include "Polygon.h"
48#include "PseudoColor.h"
49#include "Sphere.h"
50#include "Streamlines.h"
51#include "Volume.h"
52#include "Warp.h"
53#include "Trace.h"
54
55// Controls if TGA format is sent to client
56//#define RENDER_TARGA
57#define TARGA_BYTES_PER_PIXEL 3
58
59namespace VtkVis {
60
61/**
62 * \brief VTK Renderer
63 */
64class Renderer
65{
66public:
67    Renderer();
68    virtual ~Renderer();
69
70    enum AxisRangeMode {
71        RANGE_AUTO = 0,
72        RANGE_SCALE_BOUNDS,
73        RANGE_EXPLICIT
74    };
75
76    enum AxesFlyMode {
77        FLY_OUTER_EDGES = 0,
78        FLY_CLOSEST_TRIAD,
79        FLY_FURTHEST_TRIAD,
80        FLY_STATIC_EDGES,
81        FLY_STATIC_TRIAD
82    };
83
84    enum AxesTickPosition {
85        TICKS_INSIDE,
86        TICKS_OUTSIDE,
87        TICKS_BOTH
88    };
89
90    enum CameraMode {
91        PERSPECTIVE,
92        ORTHO,
93        IMAGE
94    };
95
96    enum Aspect {
97        ASPECT_NATIVE,
98        ASPECT_SQUARE,
99        ASPECT_WINDOW
100    };
101
102    enum LegendType {
103        LEGEND_SCALAR,
104        LEGEND_VECTOR_MAGNITUDE,
105        LEGEND_VECTOR_X,
106        LEGEND_VECTOR_Y,
107        LEGEND_VECTOR_Z
108    };
109
110    typedef std::string DataSetId;
111    typedef std::string ColorMapId;
112    typedef std::string FieldId;
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 setDataSetOpacity(const DataSetId& id, double opacity);
141
142    void setDataSetVisibility(const DataSetId& id, bool state);
143
144    void setUseCumulativeDataRange(bool state, bool onlyVisible = false);
145
146    bool getUseCumulativeRange();
147
148    bool setCumulativeDataRange(double *range, const char *name,
149                                DataSet::DataAttributeType type,
150                                int numComponents,
151                                int component = -1);
152
153    bool getCumulativeDataRange(double *range, const char *name,
154                                int numComponents,
155                                int component = -1);
156
157    bool getCumulativeDataRange(double *range, const char *name,
158                                DataSet::DataAttributeType type,
159                                int numComponents,
160                                int component = -1);
161
162    // Render window
163
164    /// Get the VTK render window object this Renderer uses
165    vtkRenderWindow *getRenderWindow()
166    {
167        return _renderWindow;
168    }
169
170    void setWindowSize(int width, int height);
171
172    int getWindowWidth() const;
173
174    int getWindowHeight() const;
175
176    // Lights
177
178    int addLight(float pos[3]);
179
180    vtkLight *getLight(int lightIdx);
181
182    void setLightSwitch(int lightIdx, bool state);
183
184    // Camera controls
185
186    void setViewAngle(int height);
187
188    /// Return the VTK camera object this Renderer uses
189    vtkCamera *getVtkCamera()
190    {
191        if (_renderer != NULL)
192            return _renderer->GetActiveCamera();
193        else
194            return NULL;
195    }
196
197    bool isCameraMaximized()
198    {
199        return (_cameraZoomRatio == 1.0 &&
200                _cameraPan[0] == 0.0 &&
201                _cameraPan[1] == 0.0);
202    }
203
204    void getImageCameraSizes(int *imgWidthPx, int *imgHeightPx,
205                             int *_pxOffsetX = NULL, int *_pxOffsetY = NULL);
206
207    double getImageCameraAspect();
208
209    void setCameraMode(CameraMode mode);
210
211    CameraMode getCameraMode() const;
212
213    void setCameraAspect(Aspect aspect);
214
215    void resetVtkCamera(double *bounds = NULL);
216
217    void resetCamera(bool resetOrientation = true);
218
219    void resetCameraClippingRange();
220
221    bool setCameraZoomRegionPixels(int x, int y, int width, int height);
222
223    bool setCameraZoomRegion(double x, double y, double width, double height);
224
225    void getCameraZoomRegion(double xywh[4]) const;
226
227    void getScreenWorldCoords(double xywh[4]) const;
228
229    void rotateCamera(double yaw, double pitch, double roll);
230
231    void setCameraOrientation(const double quat[4], bool absolute = true);
232
233    void panCamera(double x, double y, bool absolute = true);
234
235    void zoomCamera(double z, bool absolute = true);
236
237    void setCameraOrientationAndPosition(const double position[3],
238                                         const double focalPoint[3],
239                                         const double viewUp[3]);
240
241    void getCameraOrientationAndPosition(double position[3],
242                                         double focalPoint[3],
243                                         double viewUp[3]);
244
245    void eventuallyResetCamera()
246    {
247        _needsCameraReset = true;
248    }
249
250    bool needsCameraReset()
251    {
252        return _needsCameraReset;
253    }
254
255    void eventuallyResetCameraClippingRange()
256    {
257        _needsCameraClippingRangeReset = true;
258    }
259
260    bool needsCameraClippingRangeReset()
261    {
262        return _needsCameraClippingRangeReset;
263    }
264
265    // Rendering an image
266
267    void setBackgroundColor(float color[3]);
268
269    void setClipPlane(Axis axis, double ratio, int direction);
270
271    void setUseTwoSidedLighting(bool state);
272
273    void setUseDepthPeeling(bool state);
274
275    void eventuallyRender();
276
277    bool render();
278
279    void getRenderedFrame(vtkUnsignedCharArray *imgData);
280
281    // Axes
282
283    void setAxesOrigin(double x, double y, double z, bool useCustom = true);
284
285    void setAxesAutoBounds(bool state);
286
287    void setAxesBounds(double min, double max);
288
289    void setAxesAutoRange(bool state);
290
291    void setAxisBounds(Axis axis, double min, double max);
292
293    void setAxesScale(double scale);
294
295    void setAxesRange(double min, double max);
296
297    void setAxesLabelPowerScaling(int xPow, int yPow, int zPow, bool useCustom = true);
298
299    void setAxisAutoBounds(Axis axis, bool state);
300
301    void setAxisAutoRange(Axis axis, bool state);
302
303    void setAxisScale(Axis axis, double scale);
304
305    void setAxisRange(Axis axis, double min, double max);
306
307    void setAxesFlyMode(AxesFlyMode mode);
308
309    void setAxesVisibility(bool state);
310
311    void setAxesGridVisibility(bool state);
312
313    void setAxesInnerGridVisibility(bool state);
314
315    void setAxesGridpolysVisibility(bool state);
316
317    void setAxesLabelVisibility(bool state);
318
319    void setAxesTickVisibility(bool state);
320
321    void setAxesMinorTickVisibility(bool state);
322
323    void setAxesTickPosition(AxesTickPosition pos);
324
325    void setAxesColor(double color[3], double opacity = 1.0);
326
327    void setAxesTitleColor(double color[3], double opacity = 1.0);
328
329    void setAxesLabelColor(double color[3], double opacity = 1.0);
330
331    void setAxesLinesColor(double color[3], double opacity = 1.0);
332
333    void setAxesGridlinesColor(double color[3], double opacity = 1.0);
334
335    void setAxesInnerGridlinesColor(double color[3], double opacity = 1.0);
336
337    void setAxesGridpolysColor(double color[3], double opacity = 1.0);
338
339    void setAxesLabelScaling(bool autoScale, int xpow, int ypow, int zpow);
340
341    void setAxesPixelFontSize(double screenSize);
342
343    void setAxesTitleFont(const char *fontName);
344
345    void setAxesTitleFontSize(int sz);
346
347    void setAxesTitleOrientation(double orientation);
348
349    void setAxesLabelFont(const char *fontName);
350
351    void setAxesLabelFontSize(int sz);
352
353    void setAxesLabelOrientation(double orientation);
354
355    void setAxesLabelFormat(const char *format);
356
357    void setAxisVisibility(Axis axis, bool state);
358
359    void setAxisGridVisibility(Axis axis, bool state);
360
361    void setAxisInnerGridVisibility(Axis axis, bool state);
362
363    void setAxisGridpolysVisibility(Axis axis, bool state);
364
365    void setAxisLabelVisibility(Axis axis, bool state);
366
367    void setAxisTickVisibility(Axis axis, bool state);
368
369    void setAxisMinorTickVisibility(Axis axis, bool state);
370
371    void setAxisColor(Axis axis, double color[3], double opacity = 1.0);
372
373    void setAxisTitleColor(Axis axis, double color[3], double opacity = 1.0);
374
375    void setAxisLabelColor(Axis axis, double color[3], double opacity = 1.0);
376
377    void setAxisLinesColor(Axis axis, double color[3], double opacity = 1.0);
378
379    void setAxisGridlinesColor(Axis axis, double color[3], double opacity = 1.0);
380
381    void setAxisInnerGridlinesColor(Axis axis, double color[3], double opacity = 1.0);
382
383    void setAxisGridpolysColor(Axis axis, double color[3], double opacity = 1.0);
384
385    void setAxisTitle(Axis axis, const char *title);
386
387    void setAxisUnits(Axis axis, const char *units);
388
389    void setAxisTitleFont(Axis axis, const char *fontName);
390
391    void setAxisTitleFontSize(Axis axis, int sz);
392
393    void setAxisTitleOrientation(Axis axis, double orientation);
394
395    void setAxisLabelFont(Axis axis, const char *fontName);
396
397    void setAxisLabelFontSize(Axis axis, int sz);
398
399    void setAxisLabelOrientation(Axis axis, double orientation);
400
401    void setAxisLabelFormat(Axis axis, const char *format);
402
403    void eventuallyResetAxes()
404    {
405        _needsAxesReset = true;
406    }
407
408    bool needsAxesReset()
409    {
410        return _needsAxesReset;
411    }
412
413    // Colormaps
414
415    void addColorMap(const ColorMapId& id, ColorMap *colorMap);
416
417    void deleteColorMap(const ColorMapId& id);
418
419    ColorMap *getColorMap(const ColorMapId& id);
420
421    void setColorMapNumberOfTableEntries(const ColorMapId& id, int numEntries);
422
423    bool renderColorMap(const ColorMapId& id,
424                        const DataSetId& dataSetID,
425                        LegendType legendType,
426                        const char *fieldName,
427                        DataSet::DataAttributeType type,
428                        std::string& title,
429                        double range[2],
430                        int width, int height,
431                        bool opaque,
432                        int numLabels,
433                        vtkUnsignedCharArray *imgData);
434
435    bool renderColorMap(const ColorMapId& id,
436                        const DataSetId& dataSetID,
437                        LegendType legendType,
438                        const char *fieldName,
439                        std::string& title,
440                        double range[2],
441                        int width, int height,
442                        bool opaque,
443                        int numLabels,
444                        vtkUnsignedCharArray *imgData);
445
446    bool renderColorMap(const ColorMapId& id,
447                        const DataSetId& dataSetID,
448                        LegendType legendType,
449                        std::string& title,
450                        double range[2],
451                        int width, int height,
452                        bool opaque,
453                        int numLabels,
454                        vtkUnsignedCharArray *imgData);
455
456    // Generic GraphicsObject methods
457
458    GraphicsObject *getGenericGraphicsObject(const DataSetId& id);
459
460    template<class T>
461    T *getGraphicsObject(const DataSetId& id);
462
463    template<class T>
464    bool addGraphicsObject(const DataSetId& id);
465
466    template<class T>
467    void deleteGraphicsObject(const DataSetId& id);
468
469    template<class T>
470    void deleteAllGraphicsObjects();
471
472    template<class T>
473    void mergeGraphicsObjectBounds(double *bounds, bool onlyVisible);
474
475    template<class T>
476    void mergeGraphicsObjectUnscaledBounds(double *bounds, bool onlyVisible);
477
478    template<class T>
479    void updateGraphicsObjectFieldRanges();
480
481    template<class T>
482    void setGraphicsObjectClippingPlanes(vtkPlaneCollection *planes);
483
484    template<class T>
485    void setGraphicsObjectAspect(double aspectRatio);
486
487    template<class T>
488    void setGraphicsObjectInterpolateBeforeMapping(const DataSetId& id, bool state);
489
490    template<class T>
491    void setGraphicsObjectColorMap(const DataSetId& id, const ColorMapId& colorMapId);
492
493    template<class T>
494    void updateGraphicsObjectColorMap(ColorMap *cmap);
495
496    template<class T>
497    bool graphicsObjectColorMapUsed(ColorMap *cmap);
498
499    template<class T>
500    void setGraphicsObjectVolumeSlice(const DataSetId& id, Axis axis, double ratio);
501
502    //   Prop/Prop3D properties
503
504    template<class T>
505    void setGraphicsObjectOrientation(const DataSetId& id, double quat[4]);
506
507    template<class T>
508    void setGraphicsObjectOrientation(const DataSetId& id, double angle, double axis[3]);
509
510    template<class T>
511    void setGraphicsObjectOrigin(const DataSetId& id, double origin[3]);
512
513    template<class T>
514    void setGraphicsObjectPosition(const DataSetId& id, double pos[3]);
515
516    template<class T>
517    void setGraphicsObjectAspect(const DataSetId& id, double aspect);
518
519    template<class T>
520    void setGraphicsObjectScale(const DataSetId& id, double scale[3]);
521
522    template<class T>
523    void setGraphicsObjectTransform(const DataSetId& id, vtkMatrix4x4 *trans);
524
525    template<class T>
526    void setGraphicsObjectVisibility(const DataSetId& id, bool state);
527
528    //   Actor properties
529
530    template<class T>
531    void setGraphicsObjectColor(const DataSetId& id, float color[3]);
532
533    template<class T>
534    void setGraphicsObjectCullFace(const DataSetId& id, GraphicsObject::CullFace state);
535
536    template<class T>
537    void setGraphicsObjectCulling(const DataSetId& id, bool state);
538
539    template<class T>
540    void setGraphicsObjectEdgeVisibility(const DataSetId& id, bool state);
541
542    template<class T>
543    void setGraphicsObjectEdgeColor(const DataSetId& id, float color[3]);
544
545    template<class T>
546    void setGraphicsObjectEdgeWidth(const DataSetId& id, float edgeWidth);
547
548    template<class T>
549    void setGraphicsObjectAmbient(const DataSetId& id, double coeff);
550
551    template<class T>
552    void setGraphicsObjectDiffuse(const DataSetId& id, double coeff);
553
554    template<class T>
555    void setGraphicsObjectShadingModel(const DataSetId& id, GraphicsObject::ShadingModel state);
556
557    template<class T>
558    void setGraphicsObjectSpecular(const DataSetId& id, double coeff, double power);
559
560    template<class T>
561    void setGraphicsObjectLighting(const DataSetId& id, bool state);
562
563    template<class T>
564    void setGraphicsObjectOpacity(const DataSetId& id, double opacity);
565
566    template<class T>
567    void setGraphicsObjectPointSize(const DataSetId& id, float size);
568
569    template<class T>
570    void setGraphicsObjectWireframe(const DataSetId& id, bool state);
571
572    // For Shapes:
573
574    template<class T>
575    void setGraphicsObjectFlipNormals(const DataSetId& id, bool state);
576
577    // Arcs
578
579    bool addArc(const DataSetId& id, double center[3], double pt1[3],
580                double normal[3], double angle);
581
582    void setArcResolution(const DataSetId& id, int res);
583
584    // Arrows
585
586    bool addArrow(const DataSetId& id, double tipRadius, double shaftRadius,
587                  double tipLength, bool flipNormals = false);
588
589    void setArrowResolution(const DataSetId& id, int resTip, int resShaft);
590
591    // Boxes
592
593    bool addBox(const DataSetId& id, double xLen, double yLen, double zLen,
594                bool flipNormals = false);
595
596    // Cones
597
598    bool addCone(const DataSetId& id, double radius, double height, bool cap,
599                 bool flipNormals = false);
600
601    void setConeResolution(const DataSetId& id, int res);
602
603    // 2D Contour plots
604
605    bool addContour2D(const DataSetId& id, int numContours);
606
607    bool addContour2D(const DataSetId& id, const std::vector<double>& contours);
608
609    void setContour2DContourField(const DataSetId& id, const char *fieldName);
610
611    void setContour2DNumContours(const DataSetId& id, int numContours);
612
613    void setContour2DContourList(const DataSetId& id, const std::vector<double>& contours);
614
615    void setContour2DColorMode(const DataSetId& id,
616                               Contour2D::ColorMode mode,
617                               const char *name, double range[2] = NULL);
618
619    void setContour2DColorMode(const DataSetId& id,
620                               Contour2D::ColorMode mode,
621                               DataSet::DataAttributeType type,
622                               const char *name, double range[2] = NULL);
623
624    // 3D Contour (isosurface) plots
625
626    bool addContour3D(const DataSetId& id, int numContours);
627
628    bool addContour3D(const DataSetId& id, const std::vector<double>& contours);
629
630    void setContour3DContourField(const DataSetId& id, const char *fieldName);
631
632    void setContour3DNumContours(const DataSetId& id, int numContours);
633
634    void setContour3DContourList(const DataSetId& id, const std::vector<double>& contours);
635
636    void setContour3DColorMode(const DataSetId& id,
637                               Contour3D::ColorMode mode,
638                               const char *name, double range[2] = NULL);
639
640    void setContour3DColorMode(const DataSetId& id,
641                               Contour3D::ColorMode mode,
642                               DataSet::DataAttributeType type,
643                               const char *name, double range[2] = NULL);
644
645    // Cutplanes
646
647    void setCutplaneCloudStyle(const DataSetId& id,
648                               Cutplane::CloudStyle style);
649
650    void setCutplaneOutlineVisibility(const DataSetId& id, bool state);
651
652    void setCutplaneSliceVisibility(const DataSetId& id, Axis axis, bool state);
653
654    void setCutplaneColorMode(const DataSetId& id,
655                              Cutplane::ColorMode mode,
656                              const char *name, double range[2] = NULL);
657
658    void setCutplaneColorMode(const DataSetId& id,
659                              Cutplane::ColorMode mode,
660                              DataSet::DataAttributeType type,
661                              const char *name, double range[2] = NULL);
662
663    // Cylinders
664
665    bool addCylinder(const DataSetId& id, double radius, double height, bool cap, bool flipNormals = false);
666
667    void setCylinderCapping(const DataSetId& id, bool state);
668
669    void setCylinderResolution(const DataSetId& id, int res);
670
671    // Disks
672
673    bool addDisk(const DataSetId& id, double innerRadius, double outerRadius, bool flipNormals = false);
674
675    void setDiskResolution(const DataSetId& id, int resRadial, int resCircum);
676
677    // Glyphs
678
679    bool addGlyphs(const DataSetId& id, Glyphs::GlyphShape shape);
680
681    void setGlyphsShape(const DataSetId& id, Glyphs::GlyphShape shape);
682
683    void setGlyphsOrientMode(const DataSetId& id, bool state, const char *name);
684
685    void setGlyphsQuality(const DataSetId& id, double quality);
686
687    void setGlyphsColorMode(const DataSetId& id,
688                            Glyphs::ColorMode mode,
689                            const char *name,
690                            double range[2] = NULL);
691
692    void setGlyphsScalingMode(const DataSetId& id,
693                              Glyphs::ScalingMode mode,
694                              const char *name,
695                              double range[2] = NULL);
696
697    void setGlyphsNormalizeScale(const DataSetId& id, bool normalize);
698
699    void setGlyphsScaleFactor(const DataSetId& id, double scale);
700
701    // Groups
702
703    bool addGroup(const DataSetId& id, const std::vector<Group::NodeId>& nodeList);
704
705    void addChildrenToGroup(const DataSetId& id, const std::vector<Group::NodeId>& nodeList);
706
707    void removeChildrenFromGroup(const DataSetId& id, const std::vector<Group::NodeId>& nodeList);
708
709    // Height maps
710
711    bool addHeightMap(const DataSetId& id, int numContours, double heightScale);
712
713    bool addHeightMap(const DataSetId& id, const std::vector<double>& contours, double heightScale);
714
715    void setHeightMapHeightScale(const DataSetId& id, double scale);
716
717    void setHeightMapCloudStyle(const DataSetId& id,
718                                HeightMap::CloudStyle style);
719
720    void setHeightMapNumContours(const DataSetId& id, int numContours);
721
722    void setHeightMapContourList(const DataSetId& id, const std::vector<double>& contours);
723
724    void setHeightMapContourSurfaceVisibility(const DataSetId& id, bool state);
725
726    void setHeightMapContourLineVisibility(const DataSetId& id, bool state);
727
728    void setHeightMapContourLineColorMapEnabled(const DataSetId& id, bool mode);
729
730    void setHeightMapContourEdgeColor(const DataSetId& id, float color[3]);
731
732    void setHeightMapContourEdgeWidth(const DataSetId& id, float edgeWidth);
733
734    void setHeightMapColorMode(const DataSetId& id,
735                               HeightMap::ColorMode mode,
736                               const char *name, double range[2] = NULL);
737
738    void setHeightMapColorMode(const DataSetId& id,
739                               HeightMap::ColorMode mode,
740                               DataSet::DataAttributeType type,
741                               const char *name, double range[2] = NULL);
742
743
744    // Lines
745
746    bool addLine(const DataSetId& id, double pt1[3], double pt2[3]);
747
748    bool addLine(const DataSetId& id, std::vector<double> points);
749
750    // Molecules
751
752    void setMoleculeAtomQuality(const DataSetId& id, double quality);
753
754    void setMoleculeBondQuality(const DataSetId& id, double quality);
755
756    void setMoleculeAtomRadiusScale(const DataSetId& id, double scale);
757
758    void setMoleculeBondRadiusScale(const DataSetId& id, double scale);
759
760    void setMoleculeAtomScaling(const DataSetId& id, Molecule::AtomScaling scaling);
761
762    void setMoleculeAtomVisibility(const DataSetId& id, bool state);
763
764    void setMoleculeAtomLabelField(const DataSetId& id, const char *fieldName);
765
766    void setMoleculeAtomLabelVisibility(const DataSetId& id, bool state);
767
768    void setMoleculeBondVisibility(const DataSetId& id, bool state);
769
770    void setMoleculeBondStyle(const DataSetId& id, Molecule::BondStyle style);
771
772    void setMoleculeBondColorMode(const DataSetId& id, Molecule::BondColorMode mode);
773
774    void setMoleculeBondColor(const DataSetId& id, float color[3]);
775
776    void setMoleculeColorMode(const DataSetId& id,
777                              Molecule::ColorMode mode,
778                              const char *name, double range[2] = NULL);
779
780    void setMoleculeColorMode(const DataSetId& id,
781                              Molecule::ColorMode mode,
782                              DataSet::DataAttributeType type,
783                              const char *name, double range[2] = NULL);
784
785    // N-sided Regular Polygons
786
787    bool addPolygon(const DataSetId& id, int numSides, double center[3], double normal[3], double radius);
788
789    // PolyData meshes
790
791    void setPolyDataCloudStyle(const DataSetId& id,
792                               PolyData::CloudStyle style);
793
794    // Color-mapped surfaces
795
796    void setPseudoColorCloudStyle(const DataSetId& id,
797                                  PseudoColor::CloudStyle style);
798
799    void setPseudoColorColorMode(const DataSetId& id,
800                                 PseudoColor::ColorMode mode,
801                                 const char *name, double range[2] = NULL);
802
803    void setPseudoColorColorMode(const DataSetId& id,
804                                 PseudoColor::ColorMode mode,
805                                 DataSet::DataAttributeType type,
806                                 const char *name, double range[2] = NULL);
807
808    // Spheres
809
810    bool addSphere(const DataSetId& id, double center[3], double radius, bool flipNormals = false);
811
812    void setSphereSection(const DataSetId& id,
813                          double thetaStart, double thetaEnd,
814                          double phiStart, double phiEnd);
815
816    void setSphereResolution(const DataSetId& id, int thetaRes, int phiRes);
817
818    // Streamlines
819
820    void setStreamlinesColorMode(const DataSetId& id,
821                                 Streamlines::ColorMode mode,
822                                 const char *name, double range[2] = NULL);
823
824    void setStreamlinesColorMode(const DataSetId& id,
825                                 Streamlines::ColorMode mode,
826                                 DataSet::DataAttributeType type,
827                                 const char *name, double range[2] = NULL);
828
829    void setStreamlinesLength(const DataSetId& id, double length);
830
831    void setStreamlinesNumberOfSeedPoints(const DataSetId& id, int numPoints);
832
833    void setStreamlinesSeedColor(const DataSetId& id, float color[3]);
834
835    void setStreamlinesSeedPointSize(const DataSetId& id, float size);
836
837    void setStreamlinesSeedToMeshPoints(const DataSetId& id,
838                                        int maxPoints = 500);
839
840    void setStreamlinesSeedToFilledMesh(const DataSetId& id, int numPoints);
841
842    bool setStreamlinesSeedToMeshPoints(const DataSetId& id,
843                                        char *data, size_t nbytes,
844                                        int maxPoints = 500);
845
846    bool setStreamlinesSeedToFilledMesh(const DataSetId& id,
847                                        char *data, size_t nbytes,
848                                        int numPoints);
849
850    void setStreamlinesSeedToRake(const DataSetId& id,
851                                  double start[3], double end[3],
852                                  int numPoints);
853
854    void setStreamlinesSeedToDisk(const DataSetId& id,
855                                  double center[3], double normal[3],
856                                  double radius, double innerRadius,
857                                  int numPoints);
858
859    void setStreamlinesSeedToPolygon(const DataSetId& id,
860                                     double center[3], double normal[3],
861                                     double angle, double radius,
862                                     int numSides);
863
864    void setStreamlinesSeedToFilledPolygon(const DataSetId& id,
865                                           double center[3], double normal[3],
866                                           double angle, double radius,
867                                           int numSides, int numPoints);
868
869    void setStreamlinesSeedVisibility(const DataSetId& id, bool state);
870
871    void setStreamlinesTerminalSpeed(const DataSetId& id, double speed);
872
873    void setStreamlinesTypeToLines(const DataSetId& id);
874
875    void setStreamlinesTypeToTubes(const DataSetId& id, int numSides, double radius);
876
877    void setStreamlinesTypeToRibbons(const DataSetId& id, double width, double angle);
878
879    // Volumes
880
881    void setVolumeSampleDistance(const DataSetId& id, double distance);
882
883    // Warps
884
885    void setWarpCloudStyle(const DataSetId& id,
886                           Warp::CloudStyle style);
887
888    void setWarpColorMode(const DataSetId& id,
889                          Warp::ColorMode mode,
890                          const char *name, double range[2] = NULL);
891
892    void setWarpColorMode(const DataSetId& id,
893                          Warp::ColorMode mode,
894                          DataSet::DataAttributeType type,
895                          const char *name, double range[2] = NULL);
896
897
898    void setWarpWarpScale(const DataSetId& id, double scale);
899
900private:
901    typedef std::tr1::unordered_map<DataSetId, DataSet *> DataSetHashmap;
902    typedef std::tr1::unordered_map<FieldId, double *> FieldRangeHashmap;
903    typedef std::tr1::unordered_map<ColorMapId, ColorMap *> ColorMapHashmap;
904
905    typedef std::tr1::unordered_map<DataSetId, Arc *> ArcHashmap;
906    typedef std::tr1::unordered_map<DataSetId, Arrow *> ArrowHashmap;
907    typedef std::tr1::unordered_map<DataSetId, Box *> BoxHashmap;
908    typedef std::tr1::unordered_map<DataSetId, Cone *> ConeHashmap;
909    typedef std::tr1::unordered_map<DataSetId, Contour2D *> Contour2DHashmap;
910    typedef std::tr1::unordered_map<DataSetId, Contour3D *> Contour3DHashmap;
911    typedef std::tr1::unordered_map<DataSetId, Cutplane *> CutplaneHashmap;
912    typedef std::tr1::unordered_map<DataSetId, Cylinder *> CylinderHashmap;
913    typedef std::tr1::unordered_map<DataSetId, Disk *> DiskHashmap;
914    typedef std::tr1::unordered_map<DataSetId, Glyphs *> GlyphsHashmap;
915    typedef std::tr1::unordered_map<DataSetId, Group *> GroupHashmap;
916    typedef std::tr1::unordered_map<DataSetId, HeightMap *> HeightMapHashmap;
917    typedef std::tr1::unordered_map<DataSetId, LIC *> LICHashmap;
918    typedef std::tr1::unordered_map<DataSetId, Line *> LineHashmap;
919    typedef std::tr1::unordered_map<DataSetId, Molecule *> MoleculeHashmap;
920    typedef std::tr1::unordered_map<DataSetId, Outline *> OutlineHashmap;
921    typedef std::tr1::unordered_map<DataSetId, PolyData *> PolyDataHashmap;
922    typedef std::tr1::unordered_map<DataSetId, Polygon *> PolygonHashmap;
923    typedef std::tr1::unordered_map<DataSetId, PseudoColor *> PseudoColorHashmap;
924    typedef std::tr1::unordered_map<DataSetId, Sphere *> SphereHashmap;
925    typedef std::tr1::unordered_map<DataSetId, Streamlines *> StreamlinesHashmap;
926    typedef std::tr1::unordered_map<DataSetId, Volume *> VolumeHashmap;
927    typedef std::tr1::unordered_map<DataSetId, Warp *> WarpHashmap;
928
929    void _setCameraZoomRegionPixels(int x, int y, int width, int height);
930
931    void _setCameraZoomRegion(double x, double y, double width, double height);
932
933    //static void printCameraInfo(vtkCamera *camera);
934
935    static void setCameraFromMatrix(vtkCamera *camera, vtkMatrix4x4 &mat);
936
937    static void mergeBounds(double *boundsDest, const double *bounds1, const double *bounds2);
938
939    template<class T>
940    std::tr1::unordered_map<DataSetId, T *>& getGraphicsObjectHashmap();
941
942    void setObjectAspects(double aspectRatio);
943
944    void collectBounds(double *bounds, bool onlyVisible);
945
946    void collectUnscaledBounds(double *bounds, bool onlyVisible);
947
948    void collectDataRanges();
949
950    void collectDataRanges(double *range, const char *name,
951                           DataSet::DataAttributeType type,
952                           int component, bool onlyVisible);
953
954    void clearFieldRanges();
955
956    void clearUserFieldRanges();
957
958    void initFieldRanges();
959
960    void updateFieldRanges();
961
962    void updateColorMap(ColorMap *cmap);
963
964    bool colorMapUsed(ColorMap *cmap);
965
966    void computeDisplayToWorld(double x, double y, double z, double worldPt[4]);
967
968    void computeWorldToDisplay(double x, double y, double z, double displayPt[3]);
969
970    void computeScreenWorldCoords();
971
972    bool is2D(const double bounds[6],
973              PrincipalPlane *plane,
974              double *offset) const;
975
976    void initCamera(bool initCameraMode = false);
977
978    void sceneBoundsChanged();
979
980    void initAxes();
981
982    void resetAxes(double bounds[6] = NULL);
983
984    void setAxesBounds(double bounds[6] = NULL);
985
986    void setAxesRanges();
987
988    void computeAxesScale();
989
990    void setCameraClippingPlanes();
991
992    bool _needsRedraw;
993    bool _needsAxesReset;
994    bool _needsCameraClippingRangeReset;
995    bool _needsCameraReset;
996
997    int _windowWidth, _windowHeight;
998    CameraMode _cameraMode;
999    Aspect _cameraAspect;
1000    double _imgWorldOrigin[2];
1001    double _imgWorldDims[2];
1002    double _imgWindowWorldDims[2];
1003    double _userImgWorldOrigin[2];
1004    double _userImgWorldDims[2];
1005    PrincipalPlane _imgCameraPlane;
1006    double _imgCameraOffset;
1007    double _screenWorldCoords[4];
1008    double _cameraOrientation[4];
1009    double _cameraZoomRatio;
1010    double _cameraPan[2];
1011    float _bgColor[3];
1012    bool _useCumulativeRange;
1013    bool _cumulativeRangeOnlyVisible;
1014
1015    FieldRangeHashmap _scalarPointDataRange;
1016    FieldRangeHashmap _vectorPointDataRange;
1017    FieldRangeHashmap _vectorCompPointDataRange[3];
1018    FieldRangeHashmap _scalarCellDataRange;
1019    FieldRangeHashmap _vectorCellDataRange;
1020    FieldRangeHashmap _vectorCompCellDataRange[3];
1021
1022    FieldRangeHashmap _userScalarPointDataRange;
1023    FieldRangeHashmap _userVectorPointDataRange;
1024    FieldRangeHashmap _userVectorCompPointDataRange[3];
1025    FieldRangeHashmap _userScalarCellDataRange;
1026    FieldRangeHashmap _userVectorCellDataRange;
1027    FieldRangeHashmap _userVectorCompCellDataRange[3];
1028
1029    bool _axesAutoBounds[3];
1030    double _axesUserBounds[6];
1031    AxisRangeMode _axesRangeMode[3];
1032    double _axesScale[3];
1033
1034    ColorMapHashmap _colorMaps;
1035    DataSetHashmap _dataSets;
1036    ArcHashmap _arcs;
1037    ArrowHashmap _arrows;
1038    BoxHashmap _boxes;
1039    ConeHashmap _cones;
1040    Contour2DHashmap _contour2Ds;
1041    Contour3DHashmap _contour3Ds;
1042    CutplaneHashmap _cutplanes;
1043    CylinderHashmap _cylinders;
1044    DiskHashmap _disks;
1045    GlyphsHashmap _glyphs;
1046    GroupHashmap _groups;
1047    HeightMapHashmap _heightMaps;
1048    LICHashmap _lics;
1049    LineHashmap _lines;
1050    MoleculeHashmap _molecules;
1051    OutlineHashmap _outlines;
1052    PolyDataHashmap _polyDatas;
1053    PolygonHashmap _polygons;
1054    PseudoColorHashmap _pseudoColors;
1055    SphereHashmap _spheres;
1056    StreamlinesHashmap _streamlines;
1057    VolumeHashmap _volumes;
1058    WarpHashmap _warps;
1059
1060    vtkSmartPointer<vtkPlane> _cameraClipPlanes[4];
1061    vtkSmartPointer<vtkPlane> _userClipPlanes[6];
1062    vtkSmartPointer<vtkPlaneCollection> _activeClipPlanes;
1063#ifdef USE_CUSTOM_AXES
1064    vtkSmartPointer<vtkRpCubeAxesActor> _cubeAxesActor;
1065#else
1066    vtkSmartPointer<vtkCubeAxesActor> _cubeAxesActor;
1067#endif
1068    vtkSmartPointer<vtkScalarBarActor> _scalarBarActor;
1069    vtkSmartPointer<vtkRenderer> _renderer;
1070    vtkSmartPointer<vtkRenderer> _legendRenderer;
1071    vtkSmartPointer<vtkRenderWindow> _renderWindow;
1072    vtkSmartPointer<vtkRenderWindow> _legendRenderWindow;
1073};
1074
1075}
1076
1077#endif
Note: See TracBrowser for help on using the repository browser.