22434: [CEA 1022] If selection is disabled, the contextual menu of VTK view does not update on selected object

Fix processOwner() for the case of disabled SVTK selection
This commit is contained in:
eap 2013-12-05 09:32:23 +00:00
parent 370bb866cf
commit 78bfc8db7d

View File

@ -93,10 +93,16 @@ bool SMESHGUI_Selection::processOwner( const LightApp_DataOwner* ow )
{ {
const LightApp_SVTKDataOwner* owner = const LightApp_SVTKDataOwner* owner =
dynamic_cast<const LightApp_SVTKDataOwner*> ( ow ); dynamic_cast<const LightApp_SVTKDataOwner*> ( ow );
if( owner ) if( owner ) {
myActors.append( dynamic_cast<SMESH_Actor*>( owner->GetActor() ) ); myActors.append( dynamic_cast<SMESH_Actor*>( owner->GetActor() ) );
else }
else if ( ow ) { // SVTK selection disabled
QString entry = ow->entry();
myActors.append( SMESH::FindActorByEntry( entry.toStdString().c_str() ));
}
else {
myActors.append( 0 ); myActors.append( 0 );
}
return true; return true;
} }
@ -433,7 +439,7 @@ int SMESHGUI_Selection::dim( int ind ) const
case SMESH::BALL : dim = std::max( dim, 0 ); break; case SMESH::BALL : dim = std::max( dim, 0 ); break;
default: break; default: break;
} }
} }
} }
} }
} }
@ -454,19 +460,19 @@ QVariant SMESHGUI_Selection::isComputable( int ind ) const
if( !CORBA::is_nil( obj ) ) { if( !CORBA::is_nil( obj ) ) {
SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj ); SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
if ( !CORBA::is_nil( mesh ) ) { if ( !CORBA::is_nil( mesh ) ) {
if ( mesh->HasShapeToMesh() ) { if ( mesh->HasShapeToMesh() ) {
GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so ); GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
return QVariant( !shape->_is_nil() ); return QVariant( !shape->_is_nil() );
} }
else else
{ {
return QVariant( mesh->NbFaces() !=0 ); return QVariant( mesh->NbFaces() !=0 );
} }
} }
else else
{ {
GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so ); GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
return QVariant( !shape->_is_nil() ); return QVariant( !shape->_is_nil() );
} }
} }
} }
@ -582,42 +588,42 @@ int SMESHGUI_Selection::type( const QString& entry, _PTR(Study) study )
if ( objComponent->ComponentDataType() == "SMESH" ) { if ( objComponent->ComponentDataType() == "SMESH" ) {
if ( objComponent->GetIOR() == obj->GetIOR() ) { if ( objComponent->GetIOR() == obj->GetIOR() ) {
res = SMESH::COMPONENT; res = SMESH::COMPONENT;
} }
else { else {
int aLevel = obj->Depth() - objComponent->Depth(), int aLevel = obj->Depth() - objComponent->Depth(),
aFTag = objFather->Tag(), aFTag = objFather->Tag(),
anOTag = obj->Tag(); anOTag = obj->Tag();
switch ( aLevel ) switch ( aLevel )
{ {
case 1: case 1:
if ( anOTag >= SMESH::Tag_FirstMeshRoot ) if ( anOTag >= SMESH::Tag_FirstMeshRoot )
res = SMESH::MESH; res = SMESH::MESH;
break; break;
case 2: case 2:
switch ( aFTag ) switch ( aFTag )
{ {
case SMESH::Tag_HypothesisRoot: res = SMESH::HYPOTHESIS; break; case SMESH::Tag_HypothesisRoot: res = SMESH::HYPOTHESIS; break;
case SMESH::Tag_AlgorithmsRoot: res = SMESH::ALGORITHM; break; case SMESH::Tag_AlgorithmsRoot: res = SMESH::ALGORITHM; break;
default: break; default: break;
} }
break; break;
case 3: case 3:
switch ( aFTag ) switch ( aFTag )
{ {
case SMESH::Tag_SubMeshOnVertex: res = SMESH::SUBMESH_VERTEX; break; case SMESH::Tag_SubMeshOnVertex: res = SMESH::SUBMESH_VERTEX; break;
case SMESH::Tag_SubMeshOnEdge: res = SMESH::SUBMESH_EDGE; break; case SMESH::Tag_SubMeshOnEdge: res = SMESH::SUBMESH_EDGE; break;
case SMESH::Tag_SubMeshOnFace: res = SMESH::SUBMESH_FACE; break; case SMESH::Tag_SubMeshOnFace: res = SMESH::SUBMESH_FACE; break;
case SMESH::Tag_SubMeshOnSolid: res = SMESH::SUBMESH_SOLID; break; case SMESH::Tag_SubMeshOnSolid: res = SMESH::SUBMESH_SOLID; break;
case SMESH::Tag_SubMeshOnCompound: res = SMESH::SUBMESH_COMPOUND; break; case SMESH::Tag_SubMeshOnCompound: res = SMESH::SUBMESH_COMPOUND; break;
default: default:
if ( aFTag >= SMESH::Tag_FirstGroup) res = SMESH::GROUP; if ( aFTag >= SMESH::Tag_FirstGroup) res = SMESH::GROUP;
else res = SMESH::SUBMESH; else res = SMESH::SUBMESH;
break; break;
} }
break; break;
} }
} }
} }
} }