From: prascle Date: Sun, 5 Dec 2010 22:57:20 +0000 (+0000) Subject: PR: debug split into tetras X-Git-Tag: V6_2_0a1~2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=7013eafe2d76925036f7f2b0b26991cbfa1f8a23;p=modules%2Fsmesh.git PR: debug split into tetras --- diff --git a/src/SMESH/SMESH_MeshEditor.cxx b/src/SMESH/SMESH_MeshEditor.cxx index 5579ca090..4a970ffa2 100644 --- a/src/SMESH/SMESH_MeshEditor.cxx +++ b/src/SMESH/SMESH_MeshEditor.cxx @@ -1717,10 +1717,10 @@ void SMESH_MeshEditor::SplitVolumesIntoTetra (const TIDSortedElemSet & theElems, } for ( int i = 0; i < triangles.size(); ++i ) { - if ( !triangles.back() ) continue; + if ( !triangles[i] ) continue; if ( fSubMesh ) - fSubMesh->AddElement( triangles.back()); - newElems.Append( triangles.back() ); + fSubMesh->AddElement( triangles[i]); + newElems.Append( triangles[i] ); } ReplaceElemInGroups( face, triangles, GetMeshDS() ); GetMeshDS()->RemoveFreeElement( face, fSubMesh, /*fromGroups=*/false ); diff --git a/src/SMESHDS/SMESHDS_SubMesh.cxx b/src/SMESHDS/SMESHDS_SubMesh.cxx index 58f29ea4e..ada454b9c 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.cxx +++ b/src/SMESHDS/SMESHDS_SubMesh.cxx @@ -55,13 +55,34 @@ void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME) if (!IsComplexSubmesh()) { //MESSAGE("in " << myIndex << " AddElement "<< ME->GetID()); - int idInSubShape = ME->getIdInShape(); - if (idInSubShape != -1) + int oldShapeId = ME->getshapeId(); + if ( oldShapeId > 0 ) { - MESSAGE("add element in subshape already belonging to a subshape " - << ME->GetID() << " " << ME->getIdInShape() << " " << ME->getshapeId()); - throw SALOME_Exception(LOCALIZED("add element in subshape already belonging to a subshape")); + if (oldShapeId != myIndex) + { + MESSAGE("add element in subshape already belonging to another subshape " + << ME->GetID() << " " << oldShapeId << " " << myIndex); + throw SALOME_Exception(LOCALIZED("add element in subshape already belonging to a subshape")); + } + else + { + int idInSubShape = ME->getIdInShape(); + MESSAGE("add element in subshape already belonging to that subshape " + << ME->GetID() << " " << oldShapeId << " " << idInSubShape); + // check if ok: do nothing if ok + if ((idInSubShape == -1) || (idInSubShape >= myElements.size())) + { + MESSAGE("out of bounds"); + throw SALOME_Exception(LOCALIZED("out of bounds")); + } + if (ME != myElements[idInSubShape]) + { + MESSAGE("not the same element"); + throw SALOME_Exception(LOCALIZED("not the same element")); + } + } } + SMDS_MeshElement* elem = (SMDS_MeshElement*) (ME); elem->setShapeId(myIndex); elem->setIdInShape(myElements.size());