1
/*=========================================================================
3
Program: Ionization FRont Interactive Tool (IFRIT)
7
Copyright (c) 2002-2006 Nick Gnedin
10
This file may be distributed and/or modified under the terms of the
11
GNU General Public License version 2 as published by the Free Software
12
Foundation and appearing in the file LICENSE.GPL included in the
13
packaging of this file.
15
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
16
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
19
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
=========================================================================*/
29
#ifndef IVECTORFIELDVIEWOBJECT_H
30
#define IVECTORFIELDVIEWOBJECT_H
33
#include "ifieldviewobject.h"
36
#include "iposition.h"
38
class iBoundedDiskSource;
39
class iBoundedPlaneSource;
40
class iBoundedSphereSource;
41
class iMarkerViewObject;
42
class iVectorFieldGlyphParallelPipeline;
43
class iVectorFieldGlyphSerialPipeline;
44
class iVectorFieldStreamLineParallelPipeline;
45
class iVectorFieldStreamLineSerialPipeline;
52
class iVectorFieldViewObject : public iFieldViewObject
55
friend class iExtensionFactory;
59
static iVectorFieldViewObject* New(iViewModule *vm);
60
static const iObjectType& Type();
62
IOBJECT_DECLARE_GETSET1(Method,int);
63
// virtual void SetMethod(int m);
64
// inline int GetMethod() const { return mMethod; }
66
IOBJECT_DECLARE_GETSET(LineQuality,mLineQuality,int);
67
// virtual void SetLineQuality(int q);
68
// inline int GetLineQuality() const { return mLineQuality; }
70
IOBJECT_DECLARE_GETSET1(LineLength,float);
71
// virtual void SetLineLength(float q);
72
// inline float GetLineLength() const { return mLineLength; }
74
IOBJECT_DECLARE_GETSET1(LineDir,int);
75
// virtual void SetLineDir(int n);
76
// inline int GetLineDir() const { return mLineDir; }
78
IOBJECT_DECLARE_GETSET1(TubeSize,int);
79
// virtual void SetTubeSize(int t);
80
// inline int GetTubeSize() const { return mTubeSize; }
82
IOBJECT_DECLARE_GETSET1(TubeRangeFactor,float);
83
// virtual void SetTubeRangeFactor(float q);
84
// inline float GetTubeRangeFactor() const { return mTubeRangeFactor; }
86
IOBJECT_DECLARE_GETSET1(TubeVariationFactor,float);
87
// virtual void SetTubeVariationFactor(float q);
88
// inline float GetTubeVariationFactor() const { return mTubeVariationFactor; }
90
IOBJECT_DECLARE_GETSET1(SourceType,int);
91
// virtual void SetSourceType(int v);
92
// inline int GetSourceType() const { return mSourceType; }
94
IOBJECT_DECLARE_GETSET(NumberOfStreamLines,mNumLines,int);
95
// virtual void SetNumberOfStreamLines(int v);
96
// inline int GetNumberOfStreamLines() const { return mNumLines; }
98
IOBJECT_DECLARE_GETSET_DISTANCE(SourceSize,mSourceSize); // for sphere
99
//virtual void SetSourceSize(const iDistance &o);
100
//inline const iDistance& GetSourceSize() const { return mSourceSize; }
102
IOBJECT_DECLARE_GETSET(SourceOpacity,mOpacities[1],float);
103
//virtual void SetSourceObjectOpacity(float o);
104
//inline float GetSourceObjectOpacity() const { return mOpacities[1]; }
106
IOBJECT_DECLARE_GETSET(ShowSourceObject,mSourceShow,bool); // for sphere
107
//virtual void SetShowSourceObject(bool o);
108
//inline float GetShowSourceObject() const { return mSourceShow; }
110
IOBJECT_DECLARE_GETSET(AttachSourceToMarker,mAttachedMarkerIndex,int); // for sphere and plane
111
//virtual void SetAttachSourceToMarker(int m);
112
//inline int GetAttachSourceToMarker() const { return mAttachedMarkerIndex; }
114
virtual void SetSourcePositionToPickedPoint();
115
static const iObjectKey& KeySourcePositionToPickedPoint(); // action key
117
IOBJECT_DECLARE_GETSET_POSITION(SourcePosition,mSourcePos);
118
//virtual void SetSourcePosition(const iPosition &p);
119
//inline const iPosition& GetSourcePosition() const { return mSourcePos; }
121
virtual void SetSourceDirection(const float n[3]); // for plane
122
inline const float* GetSourceDirection() const { return mSourceDir; }
123
static const iObjectKey& KeySourceDirection();
125
virtual void UpdateAfterMarkerMove();
126
virtual void UpdateAfterMarkerAdd(iMarkerViewObject *);
127
virtual void UpdateAfterMarkerDelete(iMarkerViewObject *);
129
virtual iVectorFieldGlyphParallelPipeline* CreateGlyphParallelPipeline();
130
virtual iVectorFieldGlyphSerialPipeline* CreateGlyphSerialPipeline();
132
virtual iVectorFieldStreamLineParallelPipeline* CreateStreamLineParallelPipeline();
133
virtual iVectorFieldStreamLineSerialPipeline* CreateStreamLineSerialPipeline();
138
IFIELDVIEWOBJECT_DECLARE_INHERITED_KEYS;
139
IFIELDVIEWOBJECT_DECLARE_INHERITED_MEMBERS;
143
iVectorFieldViewObject(iViewModule *vm, const iDataInfo &info);
144
virtual ~iVectorFieldViewObject();
146
void DetachFromMarker();
148
virtual void UpdatePipelines();
149
virtual void UpdateColorByExtra();
150
virtual void UpdateStreamLineSource();
152
iDistance mSourceSize;
153
iPosition mSourcePos;
156
int mAttachedMarkerIndex;
157
int mMethod, mTubeSize, mLineQuality;
158
float mLineLength, mSourceDir[3];
159
int mLineDir, mSourceType, mNumLines;
160
float mTubeRangeFactor, mTubeVariationFactor;
164
vtkPoints *mStreamLineSourcePoints;
165
vtkCellArray *mStreamLineSourceVerts;
166
vtkFloatArray *mStreamLineSourceNorms;
168
iBoundedDiskSource *mSourceDisk;
169
iBoundedPlaneSource *mSourcePlane;
170
iBoundedSphereSource *mSourceSphere;
172
iVectorFieldGlyphParallelPipeline *mGlyphPipeline;
173
iVectorFieldStreamLineParallelPipeline *mStreamLinePipeline;
176
#endif // IVECTORFIELDVIEWOBJECT_H