Salome HOME
Merge from master to omu/insitu.
[modules/paravis.git] / src / Plugins / MEDReader / IO / vtkMEDReader.cxx
index 4169733c35c696f36fe4d1c999fc5b3f6e10777e..92ecc7d4ce7f8366d216db49fca3e474ddd5cfd6 100644 (file)
@@ -197,7 +197,24 @@ private:
 };
 
 vtkStandardNewMacro(vtkMEDReader);
-vtkInformationKeyMacro(vtkMEDReader, META_DATA, DataObjectMetaData);
+
+// vtkInformationKeyMacro(vtkMEDReader, META_DATA, DataObjectMetaData); // Here we need to customize vtkMEDReader::META_DATA method
+// start of overload of vtkInformationKeyMacro
+static vtkInformationDataObjectMetaDataKey *vtkMEDReader_META_DATA=new vtkInformationDataObjectMetaDataKey("META_DATA","vtkMEDReader");
+
+vtkInformationDataObjectMetaDataKey *vtkMEDReader::META_DATA()  
+{
+  static const char ZE_KEY[]="vtkMEDReader::META_DATA";
+  vtkInformationDataObjectMetaDataKey *ret(vtkMEDReader_META_DATA);
+  MEDCoupling::GlobalDict *gd(MEDCoupling::GlobalDict::GetInstance());
+  if(!gd->hasKey(ZE_KEY))
+    {// here META_DATA is put on global var to be exchanged with other filters without dependancy of MEDReader. Please do not change ZE_KEY !
+      std::ostringstream oss; oss << ret;
+      gd->setKeyValue(ZE_KEY,oss.str());
+    }
+  return ret;
+}
+// end of overload of vtkInformationKeyMacro
 
 vtkMEDReader::vtkMEDReader():Internal(new vtkMEDReaderInternal(this))
 {
@@ -492,21 +509,16 @@ void vtkMEDReader::UpdateSIL(vtkInformation* request, vtkInformation *info)
 {
   if(!this->Internal)
       return;
-  vtkMutableDirectedGraph *sil(vtkMutableDirectedGraph::New());
-
-  // This Should be more clever, TODO
-  std::string meshName(this->BuildSIL(sil));
-  if(meshName!=this->Internal->DftMeshName)
+  std::string meshName(this->Internal->Tree.getActiveMeshName());
+  if(!this->Internal->SIL || meshName!=this->Internal->DftMeshName)
     {
+      vtkMutableDirectedGraph *sil(vtkMutableDirectedGraph::New());
+      this->BuildSIL(sil);
       if(this->Internal->SIL)
         this->Internal->SIL->Delete();
       this->Internal->SIL=sil;
       this->Internal->DftMeshName=meshName;
     }
-  else
-    {
-      sil->Delete();
-    }
 }
 
 /*!