#17336 [CEA 17333] Mesh offset generates a segmentation violation

This commit is contained in:
eap 2019-09-03 15:47:17 +03:00
parent 9de03403fe
commit 2954414714
2 changed files with 7 additions and 3 deletions

View File

@ -6367,7 +6367,7 @@ SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
* \param [in] theValue - offset value * \param [in] theValue - offset value
* \param [out] theTgtMesh - a mesh to add offset elements to * \param [out] theTgtMesh - a mesh to add offset elements to
* \param [in] theMakeGroups - to generate groups * \param [in] theMakeGroups - to generate groups
* \return PGroupIDs - IDs of created groups * \return PGroupIDs - IDs of created groups. NULL means failure
*/ */
//================================================================================ //================================================================================
@ -6454,6 +6454,8 @@ SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::Offset( TIDSortedElemSet & theElem
PGroupIDs newGroupIDs; PGroupIDs newGroupIDs;
if ( theMakeGroups ) if ( theMakeGroups )
newGroupIDs = generateGroups( srcNodes, srcElems, "offset", theTgtMesh, false ); newGroupIDs = generateGroups( srcNodes, srcElems, "offset", theTgtMesh, false );
else
newGroupIDs.reset( new std::list< int > );
return newGroupIDs; return newGroupIDs;
} }

View File

@ -4115,8 +4115,6 @@ SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::Offset( SMESH::SMESH_IDSource_ptr theO
} }
else else
{ {
theGroups = theCopyGroups ? getGroups( groupIds.get() ) : new SMESH::ListOfGroups;
if ( *theMeshName && mesh_var->NbFaces() == 0 ) if ( *theMeshName && mesh_var->NbFaces() == 0 )
{ {
// new mesh empty, remove it // new mesh empty, remove it
@ -4126,6 +4124,10 @@ SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::Offset( SMESH::SMESH_IDSource_ptr theO
builder->RemoveObjectWithChildren( meshSO ); builder->RemoveObjectWithChildren( meshSO );
THROW_SALOME_CORBA_EXCEPTION("Offset failed", SALOME::INTERNAL_ERROR); THROW_SALOME_CORBA_EXCEPTION("Offset failed", SALOME::INTERNAL_ERROR);
} }
if ( !groupIds ) // nothing changed in the current mesh
THROW_SALOME_CORBA_EXCEPTION("Offset failed", SALOME::INTERNAL_ERROR);
theGroups = theCopyGroups ? getGroups( groupIds.get() ) : new SMESH::ListOfGroups;
// result of Offset() is a tuple (mesh, groups) // result of Offset() is a tuple (mesh, groups)
if ( mesh_var->_is_nil() ) pyDump << myMesh_i->_this() << ", "; if ( mesh_var->_is_nil() ) pyDump << myMesh_i->_this() << ", ";