X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Selection.cxx;h=b6976df864921b7e5219e1bf10c74d7c794b9f9a;hp=ab6bad8120f1049d1bb8eb93fee46b20535b9f23;hb=ccb5e3c25bf204e839c0094f50f543eacedba5e6;hpb=c98d9fcd7f02c1f1f5c24dd3e709ed75228d66c4 diff --git a/src/SMESHGUI/SMESHGUI_Selection.cxx b/src/SMESHGUI/SMESHGUI_Selection.cxx index ab6bad812..b6976df86 100644 --- a/src/SMESHGUI/SMESHGUI_Selection.cxx +++ b/src/SMESHGUI/SMESHGUI_Selection.cxx @@ -28,11 +28,12 @@ // SMESH includes #include "SMESHGUI_Selection.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_GEOMGenUtils.h" +#include "SMESHGUI.h" #include "SMESHGUI_ComputeDlg.h" #include "SMESHGUI_ConvToQuadOp.h" +#include "SMESHGUI_GEOMGenUtils.h" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_VTKUtils.h" #include #include @@ -118,7 +119,9 @@ QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const QVariant val; if ( p=="client" ) val = QVariant( LightApp_Selection::parameter( p ) ); else if ( p=="type" ) val = QVariant( myTypes[ind] ); - else if ( p=="elemTypes" ) val = QVariant( elemTypes( ind ) ); + else if ( p=="hasActor" ) val = QVariant( getActor( ind ) != 0 ); + else if ( p=="elemTypes" ) val = QVariant( elemTypes( ind, false ) ); + else if ( p=="objElemTypes" ) val = QVariant( elemTypes( ind, true ) ); else if ( p=="isAutoColor" ) val = QVariant( isAutoColor( ind ) ); else if ( p=="numberOfNodes" ) val = QVariant( numberOfNodes( ind ) ); else if ( p=="dim" ) val = QVariant( dim( ind ) ); @@ -141,6 +144,7 @@ QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const else if ( p=="hasChildren") val = QVariant( hasChildren( ind ) ); else if ( p=="nbChildren") val = QVariant( nbChildren( ind ) ); else if ( p=="isContainer") val = QVariant( isContainer( ind ) ); + else if ( p=="guiState") val = QVariant( guiState() ); if ( val.isValid() ) return val; @@ -165,7 +169,7 @@ QVariant SMESHGUI_Selection::parameter( const QString& p ) const //======================================================================= //function : getVtkOwner -//purpose : +//purpose : //======================================================================= SMESH_Actor* SMESHGUI_Selection::getActor( int ind ) const @@ -181,18 +185,42 @@ SMESH_Actor* SMESHGUI_Selection::getActor( int ind ) const //purpose : may return {'Elem0d' 'Edge' 'Face' 'Volume' 'BallElem'} at most //======================================================================= -QList SMESHGUI_Selection::elemTypes( int ind ) const +QList SMESHGUI_Selection::elemTypes( int ind, bool fromObj ) const { QList types; SMESH_Actor* actor = getActor( ind ); if ( actor ) { TVisualObjPtr object = actor->GetObject(); if ( object ) { - if ( object->GetNbEntities( SMDSAbs_0DElement )) types.append( "Elem0d" ); - if ( object->GetNbEntities( SMDSAbs_Ball )) types.append( "BallElem" ); if ( object->GetNbEntities( SMDSAbs_Edge )) types.append( "Edge" ); if ( object->GetNbEntities( SMDSAbs_Face )) types.append( "Face" ); if ( object->GetNbEntities( SMDSAbs_Volume )) types.append( "Volume" ); + if ( object->GetNbEntities( SMDSAbs_0DElement )) types.append( "Elem0d" ); + if ( object->GetNbEntities( SMDSAbs_Ball )) types.append( "BallElem" ); + } + } + else if ( fromObj ) + { + if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" ) + { + _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); + CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() ); + SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( obj ); + if ( !CORBA::is_nil( idSrc ) ) + { + SMESH::array_of_ElementType_var typeVar = idSrc->GetTypes(); + for ( CORBA::ULong i = 0; i < typeVar->length(); ++i ) + switch ( typeVar[i] ) { + case SMESH::EDGE: types.append( "Edge" ); break; + case SMESH::FACE: types.append( "Face" ); break; + case SMESH::VOLUME: types.append( "Volume" ); break; + case SMESH::ELEM0D: types.append( "Elem0d" ); break; + case SMESH::BALL: types.append( "BallElem" ); break; + case SMESH::ALL: + case SMESH::NODE: + case SMESH::NB_ELEMENT_TYPES: break; + } + } } } return types; @@ -436,13 +464,10 @@ bool SMESHGUI_Selection::isAutoColor( int ind ) const if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" ) { _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); - CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() ); - - if ( !CORBA::is_nil( obj ) ) { - SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj ); - if ( !CORBA::is_nil( mesh ) ) - return mesh->GetAutoColor(); - } + CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() ); + SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj ); + if ( !CORBA::is_nil( mesh ) ) + return mesh->GetAutoColor(); } return false; } @@ -518,11 +543,18 @@ int SMESHGUI_Selection::dim( int ind ) const bool SMESHGUI_Selection::isComputable( int ind ) const { - if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] == "Mesh" ) + if ( ind >= 0 && ind < myTypes.count() && ( myTypes[ind] == "Mesh" || + myTypes[ind].startsWith("Mesh " ))) { QMap modeMap; - _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); - SMESHGUI_PrecomputeOp::getAssignedAlgos( so, modeMap ); + _PTR(SObject) meshSO = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); + + _PTR(SComponent) component = meshSO->GetFatherComponent(); + if ( meshSO->Depth() - component->Depth() > 1 ) // sub-mesh, get a mesh + while ( meshSO->Depth() - component->Depth() > 1 ) + meshSO = meshSO->GetFather(); + + SMESHGUI_PrecomputeOp::getAssignedAlgos( meshSO, modeMap ); return modeMap.size() > 0; } return false; @@ -767,6 +799,16 @@ bool SMESHGUI_Selection::isImported( const int ind ) const return res; } +//======================================================================= +//function : guiState +//purpose : +//======================================================================= + +int SMESHGUI_Selection::guiState() +{ + return SMESHGUI::GetSMESHGUI() ? SMESHGUI::GetSMESHGUI()->GetState() : -1; +} + //======================================================================= //function : groupType //purpose :