]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Fix for
authorapo <apo@opencascade.com>
Mon, 21 Aug 2006 14:40:06 +0000 (14:40 +0000)
committerapo <apo@opencascade.com>
Mon, 21 Aug 2006 14:40:06 +0000 (14:40 +0000)
  Bug PAL13237 - CRASH after trying to select a cell for "Selection Info".
  Bug PAL13239 - Numerations of elements(nodes) for the same mesh in Mesh and Post-Pro modules are different.

The two bugs are bound together.
The integrated fixes provide more correct definition of mapping between MED and VTK as for MED Families as for MED Entities itself.
In case of definition of MED Families mapping it was necessary to increase the VTK index when the Family contains from mesh elements of different geometric type.
And MED indexes should be taken from MED not from VISU CONVERTER internal numeration.

src/CONVERTOR/VISU_Convertor_impl.cxx
src/CONVERTOR/VISU_Convertor_impl.hxx

index 174a0baf9ff3385b2fab49635340512b1ecaca91..c39f28fecda312d79f99b1df6114e6eeaf3003a1 100644 (file)
@@ -399,7 +399,7 @@ namespace VISU
   ::GetVTKOutput()
   {
     if(!myFilter.GetPointer()){
-      const TVTKAppendFilter& anAppendFilter = myIDMapper.GetFilter();
+      const TVTKAppendFilter& anAppendFilter = myIDMapper->GetFilter();
       TVTKOutput* aGeometry = anAppendFilter->GetOutput();
       
       const TVTKSource& aSource = mySource.GetSource();
@@ -419,42 +419,42 @@ namespace VISU
   TIDMapperFilter
   ::GetNodeObjID(vtkIdType theID) const
   {
-    return myIDMapper.GetNodeObjID(theID);
+    return myIDMapper->GetNodeObjID(theID);
   }
   
   vtkIdType
   TIDMapperFilter
   ::GetNodeVTKID(vtkIdType theID) const
   {
-    return myIDMapper.GetNodeVTKID(theID);
+    return myIDMapper->GetNodeVTKID(theID);
   }
 
   vtkFloatingPointType*  
   TIDMapperFilter
   ::GetNodeCoord(vtkIdType theObjID)
   {
-    return myIDMapper.GetNodeCoord(theObjID);
+    return myIDMapper->GetNodeCoord(theObjID);
   }
 
   vtkIdType
   TIDMapperFilter
   ::GetElemObjID(vtkIdType theID) const
   {
-    return myIDMapper.GetElemObjID(theID);
+    return myIDMapper->GetElemObjID(theID);
   }
 
   vtkIdType
   TIDMapperFilter
   ::GetElemVTKID(vtkIdType theID) const
   {
-    return myIDMapper.GetElemVTKID(theID);
+    return myIDMapper->GetElemVTKID(theID);
   }
 
   vtkCell* 
   TIDMapperFilter
   ::GetElemCell(vtkIdType theObjID)
   {
-    return myIDMapper.GetElemCell(theObjID);
+    return myIDMapper->GetElemCell(theObjID);
   }
   
 
@@ -1278,9 +1278,9 @@ namespace
        vtkIdType anID = *aSubMeshIDIter;
        PrintCells(i,aConnectivity,anArray[anID]);
        aCellTypesArray->SetValue(j++,(unsigned char)aVGeom);
-
-       anElemObj2VTKID[anID] = i;
-       aMeshID[i] = anID;
+       vtkIdType anObjID = aSubMesh.GetElemObjID(anID);
+       anElemObj2VTKID[anObjID] = i;
+       aMeshID[i] = anObjID;
       }
     }
     vtkIdType *pts = 0, npts = 0;
@@ -2024,7 +2024,7 @@ VISU_Convertor_impl
       TFamilyArr& aFamilyArr = aGroup->myFamilyArr;
       aFamilyArr.resize(aFamilySet.size());
 
-      for(vtkIdType anID = 0; anIter != aFamilySet.end(); anIter++){
+      for(vtkIdType anID = 0; anIter != aFamilySet.end(); anIter++, anID++){
        PFamilyImpl aFamily = *anIter;
        const std::string& aFamilyName = aFamily->myName;
        const VISU::TEntity& anEntity = aFamily->myEntity;
@@ -2033,9 +2033,10 @@ VISU_Convertor_impl
        VISU::TVTKOutput* anOutput = anIDMapper->GetVTKOutput();
        anAppendFilter->AddInput(anOutput);
 
+       vtkIdType aStartID = anElemObj2VTKID.size();
        vtkIdType aNbCells = anOutput->GetNumberOfCells();
        for(vtkIdType aCellID = 0; aCellID < aNbCells; aCellID++){
-         anElemObj2VTKID[aFamily->GetElemObjID(aCellID)] = aCellID;
+         anElemObj2VTKID[aFamily->GetElemObjID(aCellID)] = aStartID + aCellID;
        }
        aFamilyArr[anID] = aFamily;
       }
index 101de30413e90b255a0b4b3023e8cccb18c5875a..6069283339856526210bf76e02700e45f765b0f6 100644 (file)
@@ -164,6 +164,7 @@ namespace VISU
     TVTKOutput* 
     GetVTKOutput();
   };
+  typedef SharedPtr<TAppendFilter> PAppendFilter;
 
 
   //---------------------------------------------------------------
@@ -386,7 +387,7 @@ namespace VISU
   //! Specialize TIDMapper to provide VTK mapping for MED TIMESTAMP mesh
   struct TIDMapperFilter: virtual TMergeFilter
   {
-    TAppendFilter myIDMapper; //!< Responsible for numbering
+    PAppendFilter myIDMapper; //!< Responsible for numbering
     TSource mySource; //!< Keeps assigned data
 
     //! Reimplement the TIDMapper::GetNodeObjID