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
00069 class SoVRLdmFileReader : public SoLDMReader
00070 {
00071 SO_FIELDCONTAINER_HEADER(SoVRLdmFileReader);
00072
00073 using SoLDMReader::getDataChar;
00074
00075 public:
00077 SoVRLdmFileReader();
00078
00085 virtual ReadError getDataChar( SbBox3f &size, SoDataSet::DataType &type, SbVec3i32 &dim );
00086
00090 virtual SbBool getMinMax(int64_t & min, int64_t & max);
00091
00096 virtual SbBool getMinMax(double & min, double & max);
00097
00104 virtual SbBool getHistogram(std::vector<int64_t>& numVox);
00105
00110 virtual int getNumSignificantBits() { return m_numSignificantBits; }
00111
00112 #if 1 SoDEPRECATED
00115 void getSubSlice( const SbBox2i32& subSlice, int sliceNumber, void * data );
00116
00117 #endif
00119 #if 1 SoDEPRECATED
00126 virtual SbBool getMinMax(int & min, int & max);
00127
00128 #endif
00130 private:
00131
00132
00133 virtual SbBool getHistogramAndValues(std::vector<int64_t>& numVox, std::vector<double>& values);
00134
00135
00136 virtual SbBool hasHistogram();
00137
00138 virtual void saveCustomsTags(FILE* ldmHeader);
00139
00146 virtual SbBool setOutputDataType( SbBool doChange, SoDataSet::DataType type );
00147
00153 virtual SbBool isThreadSafe() const;
00154
00155 private:
00156 bool m_isDataSigned;
00157 bool m_isDataFloat;
00158
00159 SoDataSet::DataType m_type;
00160
00161 int m_numSignificantBits;
00162
00163
00164 int64_t m_dataMin , m_dataMax;
00165 double m_dataMinD, m_dataMaxD;
00166
00167
00168 std::vector<int> m_entries;
00169 std::vector<int64_t> m_values;
00170 std::vector<double> m_valuesD;
00171 std::vector<int64_t> m_numVoxels;
00172
00173 virtual int handleHeader(TiXmlElement *);
00174
00175 private:
00176 void internalInit();
00177 bool isTagCustom(const SbString& tagValue );
00178
00179 SoDataSet* m_ds;
00180 bool m_changeFormat;
00181 SoDataSet::DataType m_typeOut;
00182 std::set<SbString> ldmKnownTags;
00183 };
00184
00185 #ifdef _MSC_VER
00186 #pragma warning( pop )
00187 #endif
00188
00189 #endif // _SO_VR_LDM_FILE_READER_
00190
00191
00192