X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Selection.cxx;h=832c51ec18e0597a7b5d2b600d5bbb7dc338d030;hp=3661fa85304ecae7834acfa364b28035977602ed;hb=046f5915e17f5038b8a14e6606e9f4ebdeb212e2;hpb=193c49c87753b6ccabb2b5e6dc935aa480d2d43e diff --git a/src/SMESHGUI/SMESHGUI_Selection.cxx b/src/SMESHGUI/SMESHGUI_Selection.cxx index 3661fa853..832c51ec1 100644 --- a/src/SMESHGUI/SMESHGUI_Selection.cxx +++ b/src/SMESHGUI/SMESHGUI_Selection.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -32,6 +32,7 @@ #include "SMESHGUI_VTKUtils.h" #include "SMESHGUI_GEOMGenUtils.h" #include "SMESHGUI_ComputeDlg.h" +#include "SMESHGUI_ConvToQuadOp.h" #include #include @@ -129,9 +130,11 @@ QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const else if ( p=="isComputable" ) val = QVariant( isComputable( ind ) ); else if ( p=="isPreComputable" ) val = QVariant( isPreComputable( ind ) ); else if ( p=="hasGeomReference" ) val = QVariant( hasGeomReference( ind ) ); + else if ( p=="isEditableHyp" ) val = QVariant( isEditableHyp( ind ) ); else if ( p=="isImported" ) val = QVariant( isImported( ind ) ); else if ( p=="facesOrientationMode" ) val = QVariant( facesOrientationMode( ind ) ); else if ( p=="groupType" ) val = QVariant( groupType( ind ) ); + else if ( p=="isQuadratic" ) val = QVariant( isQuadratic( ind ) ); else if ( p=="quadratic2DMode") val = QVariant( quadratic2DMode( ind ) ); else if ( p=="isDistributionVisible") val = QVariant( isDistributionVisible( ind ) ); else if ( p=="isScalarBarVisible") val = QVariant( isScalarBarVisible( ind ) ); @@ -230,6 +233,24 @@ QString SMESHGUI_Selection::displayMode( int ind ) const return "Unknown"; } +//======================================================================= +//function : isQuadratic +//purpose : return true if the mesh has quadratic/bi-quadratic type +//======================================================================= + +bool SMESHGUI_Selection::isQuadratic( int ind ) const +{ + _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); + if ( !so ) + return false; + SMESH::SMESH_IDSource_var idSource = SMESH::SObjectToInterface( so ); + if ( idSource->_is_nil() ) + return false; + SMESHGUI_ConvToQuadOp::MeshDestinationType meshTgtType = SMESHGUI_ConvToQuadOp::DestinationMesh( idSource ); + if ( meshTgtType & SMESHGUI_ConvToQuadOp::Linear ) + return true; + return false; +} //======================================================================= //function : quadratic2DMode @@ -474,7 +495,7 @@ int SMESHGUI_Selection::dim( int ind ) const if ( !CORBA::is_nil( idSrc ) ) { SMESH::array_of_ElementType_var types = idSrc->GetTypes(); - for ( int i = 0; i < types->length(); ++ i) { + for ( size_t i = 0; i < types->length(); ++ i) { switch ( types[i] ) { case SMESH::EDGE : dim = std::max( dim, 1 ); break; case SMESH::FACE : dim = std::max( dim, 2 ); break; @@ -495,16 +516,23 @@ int SMESHGUI_Selection::dim( int ind ) const //purpose : return true for a ready-to-compute mesh //======================================================================= -QVariant SMESHGUI_Selection::isComputable( 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 ); - return QVariant( modeMap.size() > 0 ); + _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 QVariant( false ); + return false; } //======================================================================= @@ -512,7 +540,7 @@ QVariant SMESHGUI_Selection::isComputable( int ind ) const //purpose : returns true for a mesh with algorithms //======================================================================= -QVariant SMESHGUI_Selection::isPreComputable( int ind ) const +bool SMESHGUI_Selection::isPreComputable( int ind ) const { if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] == "Mesh" ) { @@ -523,11 +551,11 @@ QVariant SMESHGUI_Selection::isPreComputable( int ind ) const _PTR(SObject) pMesh = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); SMESHGUI_PrecomputeOp::getAssignedAlgos( pMesh, modeMap ); if ( modeMap.size() > 1 ) - return QVariant( ( modeMap.contains( SMESH::DIM_3D )) || - ( modeMap.contains( SMESH::DIM_2D ) && maxDim < 1 )); + return (( modeMap.contains( SMESH::DIM_3D )) || + ( modeMap.contains( SMESH::DIM_2D ) && maxDim < 1 )); } } - return QVariant( false ); + return false; } //======================================================================= @@ -535,15 +563,35 @@ QVariant SMESHGUI_Selection::isPreComputable( int ind ) const //purpose : returns true for a mesh or sub-mesh on geometry //======================================================================= -QVariant SMESHGUI_Selection::hasGeomReference( int ind ) const +bool SMESHGUI_Selection::hasGeomReference( int ind ) const { if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" ) { _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so ); - return QVariant( !shape->_is_nil() ); + return !shape->_is_nil(); + } + return false; +} + +//======================================================================= +//function : isEditableHyp +//purpose : +//======================================================================= + +bool SMESHGUI_Selection::isEditableHyp( int ind ) const +{ + bool isEditable = true; + if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] == "Hypothesis" ) + { + _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); + SMESH::SMESH_Hypothesis_var hyp = SMESH::SObjectToInterface( so ); + if ( !hyp->_is_nil() ) + { + isEditable = hyp->HasParameters(); + } } - return QVariant( false ); + return isEditable; } //======================================================================= @@ -551,17 +599,17 @@ QVariant SMESHGUI_Selection::hasGeomReference( int ind ) const //purpose : //======================================================================= -QVariant SMESHGUI_Selection::isVisible( int ind ) const +bool SMESHGUI_Selection::isVisible( int ind ) const { if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" ) { SMESH_Actor* actor = SMESH::FindActorByEntry( entry( ind ).toLatin1().data() ); if ( actor && actor->hasIO() ) { if ( SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView() ) - return QVariant( aViewWindow->isVisible( actor->getIO() ) ); + return aViewWindow->isVisible( actor->getIO() ); } } - return QVariant( false ); + return false; } //=======================================================================