From 7013eafe2d76925036f7f2b0b26991cbfa1f8a23 Mon Sep 17 00:00:00 2001 From: prascle Date: Sun, 5 Dec 2010 22:57:20 +0000 Subject: [PATCH] PR: debug split into tetras --- src/SMESH/SMESH_MeshEditor.cxx | 6 +++--- src/SMESHDS/SMESHDS_SubMesh.cxx | 31 ++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 8 deletions(-) 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()); -- 2.39.2