00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00022 #ifndef __vtkExodusIIReaderParser_h
00023 #define __vtkExodusIIReaderParser_h
00024
00025 #include "vtkXMLParser.h"
00026 #include "vtkSmartPointer.h"
00027
00028 #include <vtksys/ios/sstream>
00029 #include <vtkstd/map>
00030 #include <vtkstd/vector>
00031 #include <vtkstd/set>
00032 #include <vtkstd/string>
00033
00034 class vtkMutableDirectedGraph;
00035 class vtkStringArray;
00036 class vtkUnsignedCharArray;
00037
00038 class VTK_HYBRID_EXPORT vtkExodusIIReaderParser : public vtkXMLParser
00039 {
00040 public:
00041 static vtkExodusIIReaderParser* New();
00042 vtkTypeMacro(vtkExodusIIReaderParser, vtkXMLParser);
00043 void PrintSelf(ostream& os, vtkIndent indent);
00044
00046
00047 vtkGetObjectMacro(SIL, vtkMutableDirectedGraph);
00049
00051 void Go(const char* filename);
00052
00053
00054
00055 bool HasInformationAboutBlock(int id)
00056 {
00057 return (this->BlockID_To_VertexID.find(id) != this->BlockID_To_VertexID.end());
00058 }
00059
00062 vtkstd::string GetBlockName(int id);
00063
00065
00067 void GetBlockIds(vtkstd::set<int>& blockIdsSet)
00068 {
00069 vtkstd::map<int, vtkIdType>::iterator iter;
00070 for (iter = this->BlockID_To_VertexID.begin();
00071 iter != this->BlockID_To_VertexID.end();
00072 ++iter)
00073 {
00074 blockIdsSet.insert(iter->first);
00075 }
00076 }
00078
00079 protected:
00080 vtkExodusIIReaderParser();
00081 ~vtkExodusIIReaderParser();
00082
00083 virtual void StartElement( const char* tagName, const char** attrs);
00084 virtual void EndElement(const char* tagName);
00085 void FinishedParsing();
00086
00087 const char* GetValue(const char* attr,const char** attrs)
00088 {
00089 int i;
00090 for (i=0;attrs[i];i+=2)
00091 {
00092 const char* name=strrchr(attrs[i],':');
00093 if (!name)
00094 {
00095 name=attrs[i];
00096 }
00097 else
00098 {
00099 name++;
00100 }
00101 if (strcmp(attr,name)==0)
00102 {
00103 return attrs[i+1];
00104 }
00105 }
00106 return NULL;
00107 }
00108
00109
00110 vtkIdType AddVertexToSIL(const char* name);
00111 vtkIdType AddChildEdgeToSIL(vtkIdType src, vtkIdType dst);
00112 vtkIdType AddCrossEdgeToSIL(vtkIdType src, vtkIdType dst);
00113
00117 vtkIdType GetPartVertex(const char* part_number_instance_string);
00118
00119
00120
00121 vtkstd::map<int, vtkIdType> BlockID_To_VertexID;
00122
00123
00124
00125 vtkstd::map<int, vtkstd::string> BlockID_To_MaterialName;
00126
00127
00128
00129 vtkstd::map<vtkstd::string, vtkIdType> MaterialName_To_VertexID;
00130
00131 vtkstd::map<vtkIdType, vtkstd::string> PartVertexID_To_Descriptions;
00132
00133
00134
00135
00136
00137 vtkstd::map<vtkIdType, vtkstd::string> MaterialSpecifications;
00138
00139
00140
00141 vtkstd::map<vtkstd::string, vtkIdType> Part_To_VertexID;
00142
00143
00144 vtkstd::map<int, vtkstd::string> BlockID_To_Part;
00145
00146 vtkMutableDirectedGraph* SIL;
00147 vtkSmartPointer<vtkStringArray> NamesArray;
00148 vtkSmartPointer<vtkUnsignedCharArray> CrossEdgesArray;
00149
00150 vtkstd::string BlockPartNumberString;
00151
00152 vtkIdType RootVertex;
00153 vtkIdType BlocksVertex;
00154 vtkIdType AssembliesVertex;
00155 vtkIdType MaterialsVertex;
00156 vtkstd::vector<vtkIdType> CurrentVertex;
00157
00158 bool InBlocks;
00159 bool InMaterialAssignments;
00160
00161 private:
00162 vtkExodusIIReaderParser(const vtkExodusIIReaderParser&);
00163 void operator=(const vtkExodusIIReaderParser&);
00164
00165 };
00166
00167 #endif
00168