// this method is called from destructor of group (PAL6331)
//_impl->RemoveGroup( aGroup->GetLocalID() );
aGroup->myMeshServant = 0;
- aGroup->Destroy();
+ aGroup->UnRegister();
}
}
_mapGroups.clear();
continue;
SMESH_subMesh_i* aSubMesh = dynamic_cast<SMESH_subMesh_i*>(SMESH_Gen_i::GetServant(itSM->second).in());
if (aSubMesh) {
- aSubMesh->Destroy();
+ aSubMesh->UnRegister();
}
}
_mapSubMeshIor.clear();
continue;
SMESH_Hypothesis_i* aHypo = dynamic_cast<SMESH_Hypothesis_i*>(SMESH_Gen_i::GetServant(itH->second).in());
if (aHypo) {
- aHypo->Destroy();
+ aHypo->UnRegister();
}
}
_mapHypo.clear();
try
{
- NCollection_Map< int > anIds;
+ vector< int > anIds;
SMESH::ElementType aType = SMESH::ALL;
for ( int g = 0, n = theGroups.length(); g < n; g++ )
{
for ( int i = 0, n = aCurrIds->length(); i < n; i++ )
{
int aCurrId = aCurrIds[ i ];
- anIds.Add( aCurrId );
+ anIds.push_back( aCurrId );
}
}
// Create array of identifiers
SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( anIds.Extent() );
+ aResIds->length( anIds.size() );
- NCollection_Map< int >::Iterator anIter( anIds );
- for ( int i = 0; anIter.More(); anIter.Next(), i++ )
+ //NCollection_Map< int >::Iterator anIter( anIds );
+ for ( int i = 0; i<anIds.size(); i++ )
{
- aResIds[ i ] = anIter.Value();
+ aResIds[ i ] = anIds[i];
}
aResGrp->Add( aResIds );
// create map of ids
int nbGrp = theGroups.length();
- NCollection_Map< int > anIds;
+ vector< int > anIds;
NCollection_DataMap< int, int >::Iterator anIter( anIdToCount );
for ( ; anIter.More(); anIter.Next() )
{
int aCurrId = anIter.Key();
int aCurrNb = anIter.Value();
if ( aCurrNb == nbGrp )
- anIds.Add( aCurrId );
+ anIds.push_back( aCurrId );
}
// Create group
// Create array of identifiers
SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( anIds.Extent() );
+ aResIds->length( anIds.size() );
- NCollection_Map< int >::Iterator aListIter( anIds );
- for ( int i = 0; aListIter.More(); aListIter.Next(), i++ )
+ //NCollection_Map< int >::Iterator aListIter( anIds );
+ for ( int i = 0; i<anIds.size(); i++ )
{
- aResIds[ i ] = aListIter.Value();
+ aResIds[ i ] = anIds[i];
}
aResGrp->Add( aResIds );
try
{
- NCollection_Map< int > aToolIds;
+ set< int > aToolIds;
SMESH::ElementType aType = SMESH::ALL;
int g, n;
// iterate through tool groups
for ( int i = 0, n = aCurrIds->length(); i < n; i++ )
{
int aCurrId = aCurrIds[ i ];
- aToolIds.Add( aCurrId );
+ aToolIds.insert( aCurrId );
}
}
- NCollection_Map< int > anIds; // result
+ vector< int > anIds; // result
// Iterate through main group
for ( g = 0, n = theMainGroups.length(); g < n; g++ )
for ( int i = 0, n = aCurrIds->length(); i < n; i++ )
{
int aCurrId = aCurrIds[ i ];
- if ( !aToolIds.Contains( aCurrId ) )
- anIds.Add( aCurrId );
+ if ( !aToolIds.count( aCurrId ) )
+ anIds.push_back( aCurrId );
}
}
// Create array of identifiers
SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( anIds.Extent() );
+ aResIds->length( anIds.size() );
- NCollection_Map< int >::Iterator anIter( anIds );
- for ( int i = 0; anIter.More(); anIter.Next(), i++ )
+ for (int i=0; i<anIds.size(); i++ )
{
- aResIds[ i ] = anIter.Value();
+ aResIds[ i ] = anIds[i];
}
aResGrp->Add( aResIds );
{
// Create map of nodes from all groups
- NCollection_Map< int > aNodeMap;
+ set< int > aNodeMap;
for ( int g = 0, n = theGroups.length(); g < n; g++ )
{
int aCurrId = aCurrIds[ i ];
const SMDS_MeshNode* aNode = aMeshDS->FindNode( aCurrId );
if ( aNode )
- aNodeMap.Add( aNode->GetID() );
+ aNodeMap.insert( aNode->GetID() );
}
}
else
const SMDS_MeshNode* aNode =
dynamic_cast<const SMDS_MeshNode*>( aNodeIter->next() );
if ( aNode )
- aNodeMap.Add( aNode->GetID() );
+ aNodeMap.insert( aNode->GetID() );
}
}
}
// Get result identifiers
- NCollection_Map< int > aResultIds;
+ vector< int > aResultIds;
if ( theElemType == SMESH::NODE )
{
- NCollection_Map< int >::Iterator aNodeIter( aNodeMap );
- for ( ; aNodeIter.More(); aNodeIter.Next() )
- aResultIds.Add( aNodeIter.Value() );
+ //NCollection_Map< int >::Iterator aNodeIter( aNodeMap );
+ set<int>::iterator iter = aNodeMap.begin();
+ for ( ; iter != aNodeMap.end(); iter++ )
+ aResultIds.push_back( *iter);
}
else
{
// Create list of elements of given dimension constructed on the nodes
- NCollection_Map< int > anElemList;
- NCollection_Map< int >::Iterator aNodeIter( aNodeMap );
- for ( ; aNodeIter.More(); aNodeIter.Next() )
+ vector< int > anElemList;
+ //NCollection_Map< int >::Iterator aNodeIter( aNodeMap );
+ //for ( ; aNodeIter.More(); aNodeIter.Next() )
+ set<int>::iterator iter = aNodeMap.begin();
+ for ( ; iter != aNodeMap.end(); iter++ )
{
const SMDS_MeshElement* aNode =
- dynamic_cast<const SMDS_MeshElement*>( aMeshDS->FindNode( aNodeIter.Value() ) );
+ dynamic_cast<const SMDS_MeshElement*>( aMeshDS->FindNode( *iter ) );
if ( !aNode )
continue;
const SMDS_MeshElement* anElem =
dynamic_cast<const SMDS_MeshElement*>( anElemIter->next() );
if ( anElem && anElem->GetType() == anElemType )
- anElemList.Add( anElem->GetID() );
+ anElemList.push_back( anElem->GetID() );
}
}
// check whether all nodes of elements are present in nodes map
- NCollection_Map< int >::Iterator anIter( anElemList );
- for ( ; anIter.More(); anIter.Next() )
+ //NCollection_Map< int >::Iterator anIter( anElemList );
+ //for ( ; anIter.More(); anIter.Next() )
+ for (int i=0; i< anElemList.size(); i++)
{
- const SMDS_MeshElement* anElem = aMeshDS->FindElement( anIter.Value() );
+ const SMDS_MeshElement* anElem = aMeshDS->FindElement( anElemList[i] );
if ( !anElem )
continue;
{
const SMDS_MeshNode* aNode =
dynamic_cast<const SMDS_MeshNode*>( aNodeIter->next() );
- if ( !aNode || !aNodeMap.Contains( aNode->GetID() ) )
+ if ( !aNode || !aNodeMap.count( aNode->GetID() ) )
{
isOk = false;
break;
}
}
if ( isOk )
- aResultIds.Add( anElem->GetID() );
+ aResultIds.push_back( anElem->GetID() );
}
}
// Create array of identifiers
SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( aResultIds.Extent() );
+ aResIds->length( aResultIds.size() );
- NCollection_Map< int >::Iterator aResIter( aResultIds );
- for ( int i = 0; aResIter.More(); aResIter.Next(), i++ )
- aResIds[ i ] = aResIter.Value();
+ //NCollection_Map< int >::Iterator aResIter( aResultIds );
+ //for ( int i = 0; aResIter.More(); aResIter.Next(), i++ )
+ for (int i=0; i< aResultIds.size(); i++)
+ aResIds[ i ] = aResultIds[i];
aResGrp->Add( aResIds );
// Remove strings corresponding to group creation
const char* theName,
const TopoDS_Shape& theShape )
{
+ std::string newName;
+ if ( !theName || strlen( theName ) == 0 )
+ {
+ std::set< std::string > presentNames;
+ std::map<int, SMESH::SMESH_GroupBase_ptr>::const_iterator i_gr = _mapGroups.begin();
+ for ( ; i_gr != _mapGroups.end(); ++i_gr )
+ presentNames.insert( i_gr->second->GetName() );
+ do {
+ newName = "noname_Group_" + SMESH_Comment( presentNames.size() + 1 );
+ } while ( !presentNames.insert( newName ).second );
+ theName = newName.c_str();
+ }
int anId;
SMESH::SMESH_GroupBase_var aGroup;
if ( _impl->AddGroup( (SMDSAbs_ElementType)theElemType, theName, anId, theShape )) {
return _impl->HasModificationsToDiscard();
}
+static SALOMEDS::Color getUniqueColor( const std::list<SALOMEDS::Color>& theReservedColors )
+{
+ const int MAX_ATTEMPTS = 100;
+ int cnt = 0;
+ double tolerance = 0.5;
+ SALOMEDS::Color col;
+
+ bool ok = false;
+ while ( !ok ) {
+ // generate random color
+ double red = (double)rand() / RAND_MAX;
+ double green = (double)rand() / RAND_MAX;
+ double blue = (double)rand() / RAND_MAX;
+ // check existence in the list of the existing colors
+ bool matched = false;
+ std::list<SALOMEDS::Color>::const_iterator it;
+ for ( it = theReservedColors.begin(); it != theReservedColors.end() && !matched; ++it ) {
+ SALOMEDS::Color color = *it;
+ double tol = fabs( color.R - red ) + fabs( color.G - green ) + fabs( color.B - blue );
+ matched = tol < tolerance;
+ }
+ if ( (cnt+1) % 20 == 0 ) tolerance = tolerance/2;
+ ok = ( ++cnt == MAX_ATTEMPTS ) || !matched;
+ col.R = red;
+ col.G = green;
+ col.B = blue;
+ }
+ return col;
+}
+
//=============================================================================
/*!
*
{
Unexpect aCatch(SALOME_SalomeException);
_impl->SetAutoColor(theAutoColor);
+
+ std::list<SALOMEDS::Color> aReservedColors;
+ map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.begin();
+ for ( ; it != _mapGroups.end(); it++ ) {
+ if ( CORBA::is_nil( it->second )) continue;
+ SALOMEDS::Color aColor = getUniqueColor( aReservedColors );
+ it->second->SetColor( aColor );
+ aReservedColors.push_back( aColor );
+ }
}
//=============================================================================
// No sense in returning ids of elements along with ids of nodes:
// when theElemType == SMESH::ALL, return node ids only if
// there are no elements
- if ( theElemType == SMESH::NODE || theElemType == SMESH::ALL && nbElements == 0 )
+ if ( theElemType == SMESH::NODE || (theElemType == SMESH::ALL && nbElements == 0) )
return GetNodesId();
aResult->length( nbElements );
{
if ( SMDS_PositionPtr pos = aNode->GetPosition() )
{
- aNodePosition->shapeID = pos->GetShapeId();
+ aNodePosition->shapeID = aNode->getshapeId();
switch ( pos->GetTypeOfPosition() ) {
case SMDS_TOP_EDGE:
aNodePosition->shapeType = GEOM::EDGE;
aNodePosition->params.length(1);
aNodePosition->params[0] =
- static_cast<SMDS_EdgePosition*>( pos.get() )->GetUParameter();
+ static_cast<SMDS_EdgePosition*>( pos )->GetUParameter();
break;
case SMDS_TOP_FACE:
aNodePosition->shapeType = GEOM::FACE;
aNodePosition->params.length(2);
aNodePosition->params[0] =
- static_cast<SMDS_FacePosition*>( pos.get() )->GetUParameter();
+ static_cast<SMDS_FacePosition*>( pos )->GetUParameter();
aNodePosition->params[1] =
- static_cast<SMDS_FacePosition*>( pos.get() )->GetVParameter();
+ static_cast<SMDS_FacePosition*>( pos )->GetVParameter();
break;
case SMDS_TOP_VERTEX:
aNodePosition->shapeType = GEOM::VERTEX;
// try to find node
const SMDS_MeshNode* aNode = aSMESHDS_Mesh->FindNode(id);
if(aNode) {
- SMDS_PositionPtr pos = aNode->GetPosition();
- if(!pos)
- return -1;
- else
- return pos->GetShapeId();
+ return aNode->getshapeId();
}
return -1;