00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _SO_VR_LDM_FILE_READER_
00024 #define _SO_VR_LDM_FILE_READER_
00025
00026 #include <Inventor/STL/string>
00027 #include <LDM/readers/SoLDMReader.h>
00028 #include <Inventor/threads/SbThread.h>
00029 #include <Inventor/STL/vector>
00030
00031 #ifdef _MSC_VER
00032 #pragma warning( push )
00033 #pragma warning(disable:4251)
00034 #endif
00035
00036 class SbThreadMutex;
00037 class SiBitFile;
00038
00039
00074 class SoVRLdmFileReader : public SoLDMReader
00075 {
00076 SO_FIELDCONTAINER_HEADER(SoVRLdmFileReader);
00077
00078 using SoLDMReader::getDataChar;
00079
00080 public:
00082 SoVRLdmFileReader();
00083
00090 virtual ReadError getDataChar( SbBox3f &size, SoDataSet::DataType &type, SbVec3i32 &dim );
00091
00095 virtual SbBool getMinMax(int64_t & min, int64_t & max);
00096
00101 virtual SbBool getMinMax(double & min, double & max);
00102
00109 virtual SbBool getHistogram(std::vector<int64_t>& numVox);
00110
00115 virtual int getNumSignificantBits() { return m_numSignificantBits; }
00116
00117 #if 1 SoDEPRECATED
00124 SoVRLdmFileReader(SoDataSet* ds);
00125
00126 #endif
00128 #if 1 SoDEPRECATED
00131 void getSubSlice( const SbBox2i32& subSlice, int sliceNumber, void * data );
00132
00133 #endif
00135 #if 1 SoDEPRECATED
00142 virtual SbBool getMinMax(int & min, int & max);
00143
00144 #endif
00146 private:
00147
00148
00149 virtual SbBool getHistogramAndValues(std::vector<int64_t>& numVox, std::vector<double>& values);
00150
00151
00152 virtual SbBool hasHistogram();
00153
00154 virtual void saveCustomsTags(FILE* ldmHeader);
00155
00162 virtual SbBool setOutputDataType( SbBool doChange, SoDataSet::DataType type );
00163
00169 virtual SbBool isThreadSafe() const;
00170
00171 private:
00172 bool m_isDataSigned;
00173 bool m_isDataFloat;
00174
00175 SoDataSet::DataType m_type;
00176
00177 int m_numSignificantBits;
00178
00179
00180 int64_t m_dataMin , m_dataMax;
00181 double m_dataMinD, m_dataMaxD;
00182
00183
00184 std::vector<int> m_entries;
00185 std::vector<int64_t> m_values;
00186 std::vector<double> m_valuesD;
00187 std::vector<int64_t> m_numVoxels;
00188
00189 virtual int handleHeader(TiXmlElement *);
00190
00191 private:
00192 void internalInit();
00193 bool isTagCustom(const SbString& tagValue );
00194
00195 SoDataSet* m_ds;
00196 bool m_changeFormat;
00197 SoDataSet::DataType m_typeOut;
00198 std::set<SbString> ldmKnownTags;
00199 };
00200
00201 #ifdef _MSC_VER
00202 #pragma warning( pop )
00203 #endif
00204
00205 #endif // _SO_VR_LDM_FILE_READER_
00206
00207
00208