00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef SO_HEIGHTFIELD_GEOMETRY_H
00026 #define SO_HEIGHTFIELD_GEOMETRY_H
00027
00028 #ifdef _MSC_VER
00029 #pragma warning( push )
00030 #pragma warning(disable:4251)
00031 #endif
00032
00033 #include <VolumeViz/nodes/SoVolumeData.h>
00034 #include <Inventor/fields/SoSFDouble.h>
00035 #include <Inventor/fields/SoSFFloat.h>
00036
00117 class SoHeightFieldGeometry : public SoVolumeData
00118 {
00119 SO_NODE_HEADER( SoHeightFieldGeometry );
00120
00121 public:
00123 SoHeightFieldGeometry();
00124
00130 SoSFDouble undefinedValue;
00131
00132
00133 private:
00134 static void initClass();
00135 static void exitClass();
00136
00140 virtual void notify(SoNotList *list);
00141
00146 virtual bool getBbox(SoLDMTileID tileId, SbBox3f& box);
00147
00151 inline double transformHeightValue(double val) const;
00152
00156 double getValueD(const SbVec3i32 &pos,
00157 SoBufferObject *dataBufferObject,
00158 SbBool realValue);
00159
00160 private:
00161 virtual ~SoHeightFieldGeometry();
00162
00164 virtual void readChar();
00165
00167 template<typename T> double
00168 getValue(void* dataPtr, int64_t address);
00169
00170
00171 virtual void setUseUserUndefinedValue(bool useUserUndefinedValue);
00172
00173 private:
00178 bool m_useUserUndefinedValue;
00179 };
00180
00181
00182
00183 double
00184 SoHeightFieldGeometry::transformHeightValue(double val) const
00185 {
00186 return m_type.normalize(val);
00187 }
00188
00189 #ifdef _MSC_VER
00190 #pragma warning( pop )
00191 #endif
00192
00193 #endif // SO_HEIGHTFIELD_GEOMETRY_H
00194
00195
00196