mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-28 02:10:35 +05:00
0022367: EDF SMESH: Notification on concurrent algorithms/hypotheses
This commit is contained in:
parent
8b7d977779
commit
53fcb605c1
@ -827,6 +827,11 @@ module SMESH
|
|||||||
* Methods to set meshing order of submeshes
|
* Methods to set meshing order of submeshes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Return \c true if a meshing order not yet set for a concurrent sub-mesh
|
||||||
|
*/
|
||||||
|
boolean IsUnorderedSubMesh(in long submeshID);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Return submesh objects list in meshing order
|
* \brief Return submesh objects list in meshing order
|
||||||
*/
|
*/
|
||||||
|
@ -295,7 +295,8 @@ bool SMESHGUI_MeshOrderMgr::SetMeshOrder( const ListListId& theListListIds )
|
|||||||
_PTR(SObject) aSmObj = smIter->Value();
|
_PTR(SObject) aSmObj = smIter->Value();
|
||||||
SMESH::SMESH_subMesh_var sm =
|
SMESH::SMESH_subMesh_var sm =
|
||||||
SMESH::SObjectToInterface<SMESH::SMESH_subMesh>( aSmObj );
|
SMESH::SObjectToInterface<SMESH::SMESH_subMesh>( aSmObj );
|
||||||
mapOfSubMesh[ sm->GetId() ] = SMESH::SMESH_subMesh::_duplicate(sm);
|
if ( !sm->_is_nil() )
|
||||||
|
mapOfSubMesh[ sm->GetId() ] = SMESH::SMESH_subMesh::_duplicate(sm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5100,8 +5100,37 @@ void findCommonSubMesh (list<const SMESH_subMesh*>& theSubMeshList,
|
|||||||
//theCommon.insert( theSubMesh );
|
//theCommon.insert( theSubMesh );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
bool isSubMeshInList ( int smID, const TListOfListOfInt& smLists )
|
||||||
|
{
|
||||||
|
TListOfListOfInt::const_iterator listsIt = smLists.begin();
|
||||||
|
for ( ; listsIt != smLists.end(); ++listsIt )
|
||||||
|
{
|
||||||
|
const TListOfInt& smIDs = *listsIt;
|
||||||
|
if ( std::find( smIDs.begin(), smIDs.end(), smID ) != smIDs.end() )
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Return \c true if a meshing order not yet set for a concurrent sub-mesh
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
CORBA::Boolean SMESH_Mesh_i::IsUnorderedSubMesh(CORBA::Long submeshID)
|
||||||
|
{
|
||||||
|
TListOfListOfInt anOrder = GetImpl().GetMeshOrder(); // already defined order
|
||||||
|
if ( isSubMeshInList( submeshID, anOrder ))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TListOfListOfInt allConurrent = findConcurrentSubMeshes();
|
||||||
|
return isSubMeshInList( submeshID, allConurrent );
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
* \brief Return submesh objects list in meshing order
|
* \brief Return submesh objects list in meshing order
|
||||||
@ -5116,10 +5145,33 @@ SMESH::submesh_array_array* SMESH_Mesh_i::GetMeshOrder()
|
|||||||
if ( !aMeshDS )
|
if ( !aMeshDS )
|
||||||
return aResult._retn();
|
return aResult._retn();
|
||||||
|
|
||||||
::SMESH_Mesh& mesh = GetImpl();
|
TListOfListOfInt anOrder = GetImpl().GetMeshOrder(); // already defined order
|
||||||
TListOfListOfInt anOrder = mesh.GetMeshOrder(); // is there already defined order?
|
TListOfListOfInt allConurrent = findConcurrentSubMeshes();
|
||||||
if ( !anOrder.size() ) {
|
anOrder.splice( anOrder.end(), allConurrent );
|
||||||
|
|
||||||
|
int listIndx = 0;
|
||||||
|
TListOfListOfInt::iterator listIt = anOrder.begin();
|
||||||
|
for(; listIt != anOrder.end(); listIt++, listIndx++ )
|
||||||
|
unionLists( *listIt, anOrder, listIndx + 1 );
|
||||||
|
|
||||||
|
// convert submesh ids into interface instances
|
||||||
|
// and dump command into python
|
||||||
|
convertMeshOrder( anOrder, aResult, false );
|
||||||
|
|
||||||
|
return aResult._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Finds concurrent sub-meshes
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
TListOfListOfInt SMESH_Mesh_i::findConcurrentSubMeshes()
|
||||||
|
{
|
||||||
|
TListOfListOfInt anOrder;
|
||||||
|
::SMESH_Mesh& mesh = GetImpl();
|
||||||
|
{
|
||||||
// collect submeshes and detect concurrent algorithms and hypothesises
|
// collect submeshes and detect concurrent algorithms and hypothesises
|
||||||
TDimHypList dimHypListArr[4]; // dimHyp list for each shape dimension
|
TDimHypList dimHypListArr[4]; // dimHyp list for each shape dimension
|
||||||
|
|
||||||
@ -5194,11 +5246,8 @@ SMESH::submesh_array_array* SMESH_Mesh_i::GetMeshOrder()
|
|||||||
for(; listIt != anOrder.end(); listIt++, listIndx++ )
|
for(; listIt != anOrder.end(); listIt++, listIndx++ )
|
||||||
unionLists( *listIt, anOrder, listIndx + 1 );
|
unionLists( *listIt, anOrder, listIndx + 1 );
|
||||||
}
|
}
|
||||||
// convert submesh ids into interface instances
|
|
||||||
// and dump command into python
|
|
||||||
convertMeshOrder( anOrder, aResult, false );
|
|
||||||
|
|
||||||
return aResult._retn();
|
return anOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -5287,7 +5336,8 @@ void SMESH_Mesh_i::convertMeshOrder (const TListOfListOfInt& theIdsOrder,
|
|||||||
SMESH::submesh_array_var aResSubSet = new SMESH::submesh_array();
|
SMESH::submesh_array_var aResSubSet = new SMESH::submesh_array();
|
||||||
aResSubSet->length(aSubOrder.size());
|
aResSubSet->length(aSubOrder.size());
|
||||||
TListOfInt::const_iterator subIt = aSubOrder.begin();
|
TListOfInt::const_iterator subIt = aSubOrder.begin();
|
||||||
for( int j = 0; subIt != aSubOrder.end(); subIt++ ) {
|
int j;
|
||||||
|
for( j = 0; subIt != aSubOrder.end(); subIt++ ) {
|
||||||
if ( _mapSubMeshIor.find(*subIt) == _mapSubMeshIor.end() )
|
if ( _mapSubMeshIor.find(*subIt) == _mapSubMeshIor.end() )
|
||||||
continue;
|
continue;
|
||||||
SMESH::SMESH_subMesh_var subMesh =
|
SMESH::SMESH_subMesh_var subMesh =
|
||||||
@ -5301,7 +5351,8 @@ void SMESH_Mesh_i::convertMeshOrder (const TListOfListOfInt& theIdsOrder,
|
|||||||
}
|
}
|
||||||
if ( theIsDump )
|
if ( theIsDump )
|
||||||
aPythonDump << " ]";
|
aPythonDump << " ]";
|
||||||
theResOrder[ listIndx++ ] = aResSubSet;
|
if ( j > 1 )
|
||||||
|
theResOrder[ listIndx++ ] = aResSubSet;
|
||||||
}
|
}
|
||||||
// correct number of lists
|
// correct number of lists
|
||||||
theResOrder.length( listIndx );
|
theResOrder.length( listIndx );
|
||||||
|
@ -585,6 +585,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
SMESH::string_array* GetLastParameters();
|
SMESH::string_array* GetLastParameters();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Return \c true if a meshing order not yet set for a concurrent sub-mesh
|
||||||
|
*/
|
||||||
|
CORBA::Boolean IsUnorderedSubMesh(CORBA::Long submeshID);
|
||||||
/*!
|
/*!
|
||||||
* \brief Return submesh objects list in meshing order
|
* \brief Return submesh objects list in meshing order
|
||||||
*/
|
*/
|
||||||
@ -653,6 +657,11 @@ private:
|
|||||||
SMESH::submesh_array_array& theSubMeshOrder,
|
SMESH::submesh_array_array& theSubMeshOrder,
|
||||||
const bool theIsDump);
|
const bool theIsDump);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Finds concurrent sub-meshes
|
||||||
|
*/
|
||||||
|
TListOfListOfInt findConcurrentSubMeshes();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
static int _idGenerator;
|
static int _idGenerator;
|
||||||
|
Loading…
Reference in New Issue
Block a user