Salome HOME
0020951: EDF 1501 SMESH: Conversion linear/quadratic with medium nodes on geometry...
authoreap <eap@opencascade.com>
Wed, 4 Aug 2010 12:02:49 +0000 (12:02 +0000)
committereap <eap@opencascade.com>
Wed, 4 Aug 2010 12:02:49 +0000 (12:02 +0000)
 * Fix for usecase: open the atached study, convert Mesh_1 from
   quadratic, unassign GHS3D algo -> SIGSEGV. Reason is that the same
   SMDS_SpacePosition is shared by all nodes in different solids.

src/SMESH_I/SMESH_Gen_i.cxx

index bf958aee5067bce244635dff5087ce70d977ef51..4bd6147c558bc0b93e463db922c9a25c585120db 100644 (file)
@@ -3247,13 +3247,15 @@ public:
   }
   PositionCreator() {
     myFuncTable.resize( (size_t) TopAbs_SHAPE, & PositionCreator::defaultPosition );
-    myFuncTable[ TopAbs_FACE ] = & PositionCreator::facePosition;
-    myFuncTable[ TopAbs_EDGE ] = & PositionCreator::edgePosition;
+    myFuncTable[ TopAbs_SOLID  ] = & PositionCreator::volumePosition;
+    myFuncTable[ TopAbs_FACE   ] = & PositionCreator::facePosition;
+    myFuncTable[ TopAbs_EDGE   ] = & PositionCreator::edgePosition;
     myFuncTable[ TopAbs_VERTEX ] = & PositionCreator::vertexPosition;
   }
 private:
   SMDS_PositionPtr edgePosition()    const { return SMDS_PositionPtr( new SMDS_EdgePosition  ); }
   SMDS_PositionPtr facePosition()    const { return SMDS_PositionPtr( new SMDS_FacePosition  ); }
+  SMDS_PositionPtr volumePosition()  const { return SMDS_PositionPtr( new SMDS_SpacePosition ); }
   SMDS_PositionPtr vertexPosition()  const { return SMDS_PositionPtr( new SMDS_VertexPosition); }
   SMDS_PositionPtr defaultPosition() const { return SMDS_SpacePosition::originSpacePosition();  }
   typedef SMDS_PositionPtr (PositionCreator:: * FmakePos)() const;