// Author : Paul RASCLE, EDF
// Module : SMESH
//
+#define CHRONODEF
#include "SMESH_Gen.hxx"
#include "SMESH_subMesh.hxx"
#include "SMESH_HypoFilter.hxx"
#include "SMESHDS_Document.hxx"
#include "SMDS_MeshElement.hxx"
#include "SMDS_MeshNode.hxx"
+#include "SMDS_Mesh.hxx"
#include "utilities.h"
#include "OpUtil.hxx"
#include <TopTools_ListOfShape.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include "memoire.h"
+
using namespace std;
//=============================================================================
SMESH_Gen::SMESH_Gen()
{
- MESSAGE("SMESH_Gen::SMESH_Gen");
- _localId = 0;
- _hypId = 0;
- _segmentation = _nbSegments = 10;
+ MESSAGE("SMESH_Gen::SMESH_Gen");
+ _localId = 0;
+ _hypId = 0;
+ _segmentation = _nbSegments = 10;
+ SMDS_Mesh::_meshList.clear();
+ MESSAGE(SMDS_Mesh::_meshList.size());
+ _counters = new counters(100);
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ _compute_canceled = false;
+ _sm_current = NULL;
+#endif
}
//=============================================================================
TSetOfInt* aShapesId)
{
MESSAGE("SMESH_Gen::Compute");
+ MEMOSTAT;
bool ret = true;
}
if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
+ {
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ if (_compute_canceled)
+ return false;
+ _sm_current = smToCompute;
+#endif
smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE );
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ _sm_current = NULL;
+#endif
+ }
// we check all the submeshes here and detect if any of them failed to compute
if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE)
else if ( aShapesId )
aShapesId->insert( smToCompute->GetId() );
}
+ //aMesh.GetMeshDS()->Modified();
return ret;
}
else
smWithAlgoSupportingSubmeshes.push_front( smToCompute );
else
{
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ if (_compute_canceled)
+ return false;
+ _sm_current = smToCompute;
+#endif
smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE );
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ _sm_current = NULL;
+#endif
if ( aShapesId )
aShapesId->insert( smToCompute->GetId() );
}
}
// ------------------------------------------------------------
- // sort list of meshes according to mesh order
+ // sort list of submeshes according to mesh order
// ------------------------------------------------------------
aMesh.SortByMeshOrder( smWithAlgoSupportingSubmeshes );
if ( aShapesId && GetShapeDim( aShType ) > (int)aDim )
continue;
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ if (_compute_canceled)
+ return false;
+ _sm_current = sm;
+#endif
sm->ComputeStateEngine( SMESH_subMesh::COMPUTE );
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ _sm_current = NULL;
+#endif
if ( aShapesId )
aShapesId->insert( sm->GetId() );
}
}
MESSAGE( "VSR - SMESH_Gen::Compute() finished, OK = " << ret);
+ MEMOSTAT;
+
+ SMESHDS_Mesh *myMesh = aMesh.GetMeshDS();
+ myMesh->adjustStructure();
+ MESSAGE("*** compactMesh after compute");
+ myMesh->compactMesh();
+ //myMesh->adjustStructure();
+ list<int> listind = myMesh->SubMeshIndices();
+ list<int>::iterator it = listind.begin();
+ int total = 0;
+ for(; it != listind.end(); ++it)
+ {
+ ::SMESHDS_SubMesh *subMesh = myMesh->MeshElements(*it);
+ total += subMesh->getSize();
+ }
+ MESSAGE("total elements and nodes in submesh sets:" << total);
+ MESSAGE("Number of node objects " << SMDS_MeshNode::nbNodes);
+ MESSAGE("Number of cell objects " << SMDS_MeshCell::nbCells);
+ //myMesh->dumpGrid();
+ //aMesh.GetMeshDS()->Modified();
return ret;
}
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+//=============================================================================
+/*!
+ * Prepare Compute a mesh
+ */
+//=============================================================================
+void SMESH_Gen::PrepareCompute(SMESH_Mesh & aMesh,
+ const TopoDS_Shape & aShape)
+{
+ _compute_canceled = false;
+ _sm_current = NULL;
+}
+//=============================================================================
+/*!
+ * Cancel Compute a mesh
+ */
+//=============================================================================
+void SMESH_Gen::CancelCompute(SMESH_Mesh & aMesh,
+ const TopoDS_Shape & aShape)
+{
+ _compute_canceled = true;
+ if(_sm_current)
+ {
+ _sm_current->ComputeStateEngine( SMESH_subMesh::COMPUTE_CANCELED );
+ }
+}
+#endif
+
//=============================================================================
/*!
* Evaluate a mesh