using namespace std;
+//#include <vtkDebugLeaks.h>
+
+
//=============================================================================
/*!
* Constructor
_segmentation = _nbSegments = 10;
SMDS_Mesh::_meshList.clear();
MESSAGE(SMDS_Mesh::_meshList.size());
- _counters = new counters(100);
+ //_counters = new counters(100);
#ifdef WITH_SMESH_CANCEL_COMPUTE
_compute_canceled = false;
_sm_current = NULL;
#endif
+ //vtkDebugLeaks::SetExitError(0);
}
//=============================================================================
SMESH_Gen::~SMESH_Gen()
{
MESSAGE("SMESH_Gen::~SMESH_Gen");
+ std::map < int, StudyContextStruct * >::iterator i_sc = _mapStudyContext.begin();
+ for ( ; i_sc != _mapStudyContext.end(); ++i_sc )
+ {
+ delete i_sc->second->myDocument;
+ delete i_sc->second;
+ }
}
//=============================================================================
// check for preview dimension limitations
if ( aShapesId && GetShapeDim( aShType ) > (int)aDim )
{
- // clear compute state to not show previous compute errors
+ // clear compute state not to show previous compute errors
// if preview invoked less dimension less than previous
smToCompute->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
continue;
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();
// fix quadratic mesh by bending iternal links near concave boundary
if ( aShape.IsSame( aMesh.GetShapeToMesh() ) &&
if ( aLocIgnoAlgo ) // algo is hidden by a local algo of upper dim
{
+ theErrors.push_back( SMESH_Gen::TAlgoStateError() );
+ theErrors.back().Set( SMESH_Hypothesis::HYP_HIDDEN_ALGO, algo, false );
INFOS( "Local <" << algo->GetName() << "> is hidden by local <"
<< aLocIgnoAlgo->GetName() << ">");
}
int dim = algo->GetDim();
int aMaxGlobIgnoDim = ( aGlobIgnoAlgo ? aGlobIgnoAlgo->GetDim() : -1 );
- if ( dim < aMaxGlobIgnoDim )
+ if ( dim < aMaxGlobIgnoDim &&
+ ( isGlobal || !aGlobIgnoAlgo->SupportSubmeshes() ))
{
// algo is hidden by a global algo
+ theErrors.push_back( SMESH_Gen::TAlgoStateError() );
+ theErrors.back().Set( SMESH_Hypothesis::HYP_HIDDEN_ALGO, algo, true );
INFOS( ( isGlobal ? "Global" : "Local" )
<< " <" << algo->GetName() << "> is hidden by global <"
<< aGlobIgnoAlgo->GetName() << ">");
set<SMESH_subMesh*>& aCheckedMap,
list< SMESH_Gen::TAlgoStateError > & theErrors)
{
- if ( aSubMesh->GetSubShape().ShapeType() == TopAbs_VERTEX ||
- aCheckedMap.count( aSubMesh ))
+ switch ( aSubMesh->GetSubShape().ShapeType() )
+ {
+ case TopAbs_EDGE:
+ case TopAbs_FACE:
+ case TopAbs_SOLID: break; // check this submesh, it can be meshed
+ default:
+ return true; // not meshable submesh
+ }
+ if ( aCheckedMap.count( aSubMesh ))
return true;
//MESSAGE("=====checkMissing");
}
case SMESH_subMesh::MISSING_HYP: {
// notify if an algo missing hyp is attached to aSubMesh
- algo = aGen->GetAlgo( aMesh, aSubMesh->GetSubShape() );
+ algo = aSubMesh->GetAlgo();
ASSERT( algo );
bool IsGlobalHypothesis = aGen->IsGlobalHypothesis( algo, aMesh );
if (!IsGlobalHypothesis || !globalChecked[ algo->GetDim() ])
{
bool checkNoAlgo2 = ( algo->NeedDiscreteBoundary() );
SMESH_subMeshIteratorPtr itsub = aSubMesh->getDependsOnIterator( /*includeSelf=*/false,
- /*complexShapeFirst=*/false);
+ /*complexShapeFirst=*/true);
while ( itsub->more() )
{
// sub-meshes should not be checked further more
for (dim = 3; dim > 0; dim--)
{
if (aGlobAlgoArr[ dim ] &&
- !aGlobAlgoArr[ dim ]->NeedDiscreteBoundary())
+ !aGlobAlgoArr[ dim ]->NeedDiscreteBoundary() /*&&
+ !aGlobAlgoArr[ dim ]->SupportSubmeshes()*/ )
{
aGlobIgnoAlgo = aGlobAlgoArr[ dim ];
break;
if ( smToCheck->GetSubShape().ShapeType() == TopAbs_VERTEX)
break;
- if ( aCheckedSubs.insert( smToCheck ).second ) // not yet checked
- if (!checkMissing (this, theMesh, smToCheck, aTopAlgoDim,
- globalChecked, checkNoAlgo, aCheckedSubs, theErrors))
- {
- ret = false;
- if (smToCheck->GetAlgoState() == SMESH_subMesh::NO_ALGO )
- checkNoAlgo = false;
- }
+ if (!checkMissing (this, theMesh, smToCheck, aTopAlgoDim,
+ globalChecked, checkNoAlgo, aCheckedSubs, theErrors))
+ {
+ ret = false;
+ if (smToCheck->GetAlgoState() == SMESH_subMesh::NO_ALGO )
+ checkNoAlgo = false;
+ }
}
if ( !hasAlgo ) {