00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00030 #ifndef __vtkGlyph3DMapper_h
00031 #define __vtkGlyph3DMapper_h
00032
00033 #include "vtkMapper.h"
00034 #include "vtkGlyph3D.h"
00035 #include "vtkWeakPointer.h"
00036
00037 class VTK_RENDERING_EXPORT vtkGlyph3DMapper : public vtkMapper
00038 {
00039 public:
00040 static vtkGlyph3DMapper* New();
00041 vtkTypeMacro(vtkGlyph3DMapper, vtkMapper);
00042 void PrintSelf(ostream& os, vtkIndent indent);
00043
00044 enum ArrayIndexes
00045 {
00046 SCALE = 0,
00047 SOURCE_INDEX = 1,
00048 MASK = 2,
00049 ORIENTATION = 3
00050 };
00051
00052
00054
00057 void SetSourceConnection(int idx, vtkAlgorithmOutput* algOutput);
00058 void SetSourceConnection(vtkAlgorithmOutput* algOutput)
00059 {
00060 this->SetSourceConnection(0, algOutput);
00061 }
00063
00065 void SetSource(int idx, vtkPolyData *pd);
00066
00069 void SetSource(vtkPolyData *pd);
00070
00072 vtkPolyData *GetSource(int idx=0);
00073
00075
00078 vtkSetMacro(Scaling, bool);
00079 vtkBooleanMacro(Scaling, bool);
00080 vtkGetMacro(Scaling, bool);
00082
00084
00088 vtkSetMacro(ScaleMode, int);
00089 vtkGetMacro(ScaleMode, int);
00091
00093
00095 vtkSetMacro(ScaleFactor,double);
00096 vtkGetMacro(ScaleFactor,double);
00098
00099
00100 enum ScaleModes
00101 {
00102 NO_DATA_SCALING = 0,
00103 SCALE_BY_MAGNITUDE = 1,
00104 SCALE_BY_COMPONENTS = 2
00105 };
00106
00107 void SetScaleModeToScaleByMagnitude()
00108 { this->SetScaleMode(SCALE_BY_MAGNITUDE); }
00109 void SetScaleModeToScaleByVectorComponents()
00110 { this->SetScaleMode(SCALE_BY_COMPONENTS); }
00111 void SetScaleModeToNoDataScaling()
00112 { this->SetScaleMode(NO_DATA_SCALING); }
00113 const char *GetScaleModeAsString();
00114
00116
00117 vtkSetVector2Macro(Range,double);
00118 vtkGetVectorMacro(Range,double,2);
00120
00122
00124 vtkSetMacro(Orient, bool);
00125 vtkGetMacro(Orient, bool);
00126 vtkBooleanMacro(Orient, bool);
00128
00130
00133 vtkSetClampMacro(OrientationMode, int, DIRECTION, ROTATION);
00134 vtkGetMacro(OrientationMode, int);
00135 void SetOrientationModeToDirection()
00136 { this->SetOrientationMode(vtkGlyph3DMapper::DIRECTION); }
00137 void SetOrientationModeToRotation()
00138 { this->SetOrientationMode(vtkGlyph3DMapper::ROTATION); }
00139 const char* GetOrientationModeAsString();
00140
00141 enum OrientationModes
00142 {
00143 DIRECTION=0,
00144 ROTATION=1
00145 };
00146
00148
00150
00152 vtkSetMacro(Clamping, bool);
00153 vtkGetMacro(Clamping, bool);
00154 vtkBooleanMacro(Clamping, bool);
00156
00158
00163 vtkSetMacro(SourceIndexing, bool);
00164 vtkGetMacro(SourceIndexing, bool);
00165 vtkBooleanMacro(SourceIndexing, bool);
00167
00169 virtual double *GetBounds();
00170
00173 virtual void GetBounds(double bounds[6]);
00174
00176 virtual void Render(vtkRenderer *ren, vtkActor *act);
00177
00179
00184 vtkSetMacro(NestedDisplayLists, bool);
00185 vtkGetMacro(NestedDisplayLists, bool);
00186 vtkBooleanMacro(NestedDisplayLists, bool);
00188
00190
00195 vtkSetMacro(Masking, bool);
00196 vtkGetMacro(Masking, bool);
00197 vtkBooleanMacro(Masking, bool);
00199
00204 void SetMaskArray(const char* maskarrayname);
00205
00214 void SetMaskArray(int fieldAttributeType);
00215
00229 void SetOrientationArray(const char* orientationarrayname);
00230
00247 void SetOrientationArray(int fieldAttributeType);
00248
00252 void SetScaleArray(const char* scalarsarrayname);
00253
00257 void SetScaleArray(int fieldAttributeType);
00258
00263 void SetSourceIndexArray(const char* arrayname);
00264
00269 void SetSourceIndexArray(int fieldAttributeType);
00270
00272
00275 vtkSetMacro(SelectionColorId,unsigned int);
00276 vtkGetMacro(SelectionColorId,unsigned int);
00278
00280
00281 vtkSetMacro(SelectMode, int);
00283
00285
00289 virtual bool GetSupportsSelection()
00290 { return true; }
00291
00292 protected:
00293 vtkGlyph3DMapper();
00294 ~vtkGlyph3DMapper();
00296
00297 virtual int RequestUpdateExtent(vtkInformation *request,
00298 vtkInformationVector **inInfo,
00299 vtkInformationVector *outInfo);
00300
00301 virtual int FillInputPortInformation(int port,
00302 vtkInformation *info);
00303
00304 vtkPolyData *GetSource(int idx, vtkInformationVector *sourceInfo);
00305
00307
00308 vtkDataArray* GetMaskArray(vtkDataSet* input);
00309 vtkDataArray* GetSourceIndexArray(vtkDataSet* input);
00310 vtkDataArray* GetOrientationArray(vtkDataSet* input);
00311 vtkDataArray* GetScaleArray(vtkDataSet* input);
00312 vtkUnsignedCharArray* GetColors(vtkDataSet* input);
00314
00315 bool Scaling;
00316 double ScaleFactor;
00317 int ScaleMode;
00318
00319 double Range[2];
00320 bool Orient;
00321 bool Clamping;
00322 bool SourceIndexing;
00323 bool Masking;
00324 int OrientationMode;
00325 bool NestedDisplayLists;
00326
00327 unsigned int SelectionColorId;
00328 int SelectMode;
00329
00330 private:
00331 vtkGlyph3DMapper(const vtkGlyph3DMapper&);
00332 void operator=(const vtkGlyph3DMapper&);
00333
00335
00336 bool GetBoundsInternal(vtkDataSet* ds, double ds_bounds[6]);
00337
00338 };
00340
00341 #endif