mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-30 22:50:32 +05:00
PAL9022. before algo->Compute(), clean only elements directly bound to the shape a submesh is dedicated to
This commit is contained in:
parent
7c4308cd9f
commit
6674c3301f
@ -46,12 +46,11 @@ using namespace std;
|
|||||||
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
||||||
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
|
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
|
||||||
|
|
||||||
#include <TColStd_ListIteratorOfListOfInteger.hxx>
|
|
||||||
|
|
||||||
#ifdef _DEBUG_
|
#ifdef _DEBUG_
|
||||||
#include <gp_Pnt.hxx>
|
#include <gp_Pnt.hxx>
|
||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
#include <TopoDS.hxx>
|
#include <TopoDS.hxx>
|
||||||
|
#include <TopTools_IndexedMapOfShape.hxx>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -1110,6 +1109,35 @@ void SMESH_subMesh::DumpAlgoState(bool isMain)
|
|||||||
*/
|
*/
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
|
static void removeSubMesh( SMESHDS_Mesh * meshDS, const TopoDS_Shape& subShape)
|
||||||
|
{
|
||||||
|
SMESHDS_SubMesh * subMeshDS = meshDS->MeshElements(subShape);
|
||||||
|
if (subMeshDS!=NULL)
|
||||||
|
{
|
||||||
|
SMDS_ElemIteratorPtr ite=subMeshDS->GetElements();
|
||||||
|
while(ite->more())
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement * elt = ite->next();
|
||||||
|
//MESSAGE( " RM elt: "<<elt->GetID()<<" ( "<<elt->NbNodes()<<" )" );
|
||||||
|
meshDS->RemoveElement(elt);
|
||||||
|
}
|
||||||
|
|
||||||
|
SMDS_NodeIteratorPtr itn=subMeshDS->GetNodes();
|
||||||
|
while(itn->more())
|
||||||
|
{
|
||||||
|
const SMDS_MeshNode * node = itn->next();
|
||||||
|
//MESSAGE( " RM node: "<<node->GetID());
|
||||||
|
meshDS->RemoveNode(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
bool SMESH_subMesh::ComputeStateEngine(int event)
|
bool SMESH_subMesh::ComputeStateEngine(int event)
|
||||||
{
|
{
|
||||||
//MESSAGE("SMESH_subMesh::ComputeStateEngine");
|
//MESSAGE("SMESH_subMesh::ComputeStateEngine");
|
||||||
@ -1209,8 +1237,8 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
|
|||||||
_computeState = FAILED_TO_COMPUTE;
|
_computeState = FAILED_TO_COMPUTE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
RemoveSubMeshElementsAndNodes();
|
|
||||||
// compute
|
// compute
|
||||||
|
removeSubMesh( _meshDS, _subShape );
|
||||||
if (!algo->NeedDescretBoundary() && !algo->OnlyUnaryInput())
|
if (!algo->NeedDescretBoundary() && !algo->OnlyUnaryInput())
|
||||||
ret = ApplyToCollection( algo, GetCollection( gen, algo ) );
|
ret = ApplyToCollection( algo, GetCollection( gen, algo ) );
|
||||||
else
|
else
|
||||||
@ -1225,9 +1253,10 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
|
|||||||
|
|
||||||
#ifdef _DEBUG_
|
#ifdef _DEBUG_
|
||||||
// Show vertices location of a failed shape
|
// Show vertices location of a failed shape
|
||||||
TopExp_Explorer exp( _subShape, TopAbs_VERTEX);
|
TopTools_IndexedMapOfShape vMap;
|
||||||
for ( ; exp.More(); exp.Next() ) {
|
TopExp::MapShapes( _subShape, TopAbs_VERTEX, vMap );
|
||||||
gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( exp.Current() )));
|
for ( int iv = 1; iv <= vMap.Extent(); ++iv ) {
|
||||||
|
gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( vMap( iv ) )));
|
||||||
cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl;
|
cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1518,35 +1547,6 @@ void SMESH_subMesh::CleanDependants()
|
|||||||
*/
|
*/
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
static void removeSubMesh( SMESHDS_Mesh * meshDS, const TopoDS_Shape& subShape)
|
|
||||||
{
|
|
||||||
SMESHDS_SubMesh * subMeshDS = meshDS->MeshElements(subShape);
|
|
||||||
if (subMeshDS!=NULL)
|
|
||||||
{
|
|
||||||
SMDS_ElemIteratorPtr ite=subMeshDS->GetElements();
|
|
||||||
while(ite->more())
|
|
||||||
{
|
|
||||||
const SMDS_MeshElement * elt = ite->next();
|
|
||||||
//MESSAGE( " RM elt: "<<elt->GetID()<<" ( "<<elt->NbNodes()<<" )" );
|
|
||||||
meshDS->RemoveElement(elt);
|
|
||||||
}
|
|
||||||
|
|
||||||
SMDS_NodeIteratorPtr itn=subMeshDS->GetNodes();
|
|
||||||
while(itn->more())
|
|
||||||
{
|
|
||||||
const SMDS_MeshNode * node = itn->next();
|
|
||||||
//MESSAGE( " RM node: "<<node->GetID());
|
|
||||||
meshDS->RemoveNode(node);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
/*!
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
void SMESH_subMesh::RemoveSubMeshElementsAndNodes()
|
void SMESH_subMesh::RemoveSubMeshElementsAndNodes()
|
||||||
{
|
{
|
||||||
//SCRUTE(_subShape.ShapeType());
|
//SCRUTE(_subShape.ShapeType());
|
||||||
|
Loading…
Reference in New Issue
Block a user