mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-15 10:08:34 +05:00
0021136: EDF 1748 SMESH: SetAutoColor has no effect in a python script
This commit is contained in:
parent
18e0bef9d9
commit
ddc98ff4c0
@ -695,20 +695,13 @@
|
|||||||
if( aMainObject->_is_nil() )
|
if( aMainObject->_is_nil() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
aMainObject->SetAutoColor( true );
|
aMainObject->SetAutoColor( true ); // mesh groups are re-colored here
|
||||||
|
|
||||||
QList<SALOMEDS::Color> aReservedColors;
|
|
||||||
|
|
||||||
SMESH::ListOfGroups aListOfGroups = *aMainObject->GetGroups();
|
SMESH::ListOfGroups aListOfGroups = *aMainObject->GetGroups();
|
||||||
for( int i = 0, n = aListOfGroups.length(); i < n; i++ )
|
for( int i = 0, n = aListOfGroups.length(); i < n; i++ )
|
||||||
{
|
{
|
||||||
SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i];
|
SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i];
|
||||||
SALOMEDS::Color aCurrentColor = aGroupObject->GetColor();
|
SALOMEDS::Color aColor = aGroupObject->GetColor();
|
||||||
|
|
||||||
SALOMEDS::Color aColor = SMESHGUI::getUniqueColor( aReservedColors );
|
|
||||||
aGroupObject->SetColor( aColor );
|
|
||||||
aReservedColors.append( aColor );
|
|
||||||
|
|
||||||
_PTR(SObject) aGroupSObject = SMESH::FindSObject(aGroupObject);
|
_PTR(SObject) aGroupSObject = SMESH::FindSObject(aGroupObject);
|
||||||
if (aGroupSObject) {
|
if (aGroupSObject) {
|
||||||
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aGroupSObject->GetID().c_str())) {
|
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aGroupSObject->GetID().c_str())) {
|
||||||
|
@ -2302,6 +2302,36 @@ CORBA::Boolean SMESH_Mesh_i::HasModificationsToDiscard() throw(SALOME::SALOME_Ex
|
|||||||
return _impl->HasModificationsToDiscard();
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
*
|
*
|
||||||
@ -2311,6 +2341,15 @@ void SMESH_Mesh_i::SetAutoColor(CORBA::Boolean theAutoColor) throw(SALOME::SALOM
|
|||||||
{
|
{
|
||||||
Unexpect aCatch(SALOME_SalomeException);
|
Unexpect aCatch(SALOME_SalomeException);
|
||||||
_impl->SetAutoColor(theAutoColor);
|
_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 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
Loading…
Reference in New Issue
Block a user