From 395112afac3d1d22056f3650681e3378adb6310c Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 11 Mar 2014 19:46:54 +0400 Subject: [PATCH] 22364: EDF SMESH: Create Mesh dialog box improvement: hide inapplicable algorithms/hypotheses 1) Some fixes 2) pass toCheckAll=true to IsApplicable() only if a shape is geom group --- src/SMESHGUI/SMESHGUI_MeshOp.cxx | 70 +++++++++++++++---------------- src/SMESH_SWIG/smeshBuilder.py | 19 ++++----- src/SMESH_SWIG/smesh_algorithm.py | 6 --- 3 files changed, 43 insertions(+), 52 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index 626081091..5a3702c64 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -41,6 +41,7 @@ #include #include #include +#include // SALOME GUI includes #include @@ -2535,33 +2536,40 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI int anCurrentAvailableAlgo = 0; bool isNone = true; switch ( theIndex ) { - case MT_ANY:{ + case MT_ANY: anCompareType = "ANY"; aDim = SMESH::DIM_3D; - } - break; - case MT_TRIANGULAR:{ + break; + case MT_TRIANGULAR: aDim = SMESH::DIM_2D; anCompareType = "TRIA"; - } - break; - case MT_QUADRILATERAL:{ + break; + case MT_QUADRILATERAL: aDim = SMESH::DIM_2D; anCompareType = "QUAD"; - } - break; - case MT_TETRAHEDRAL:{ + break; + case MT_TETRAHEDRAL: aDim = SMESH::DIM_3D; anCompareType = "TETRA"; - } - break; - case MT_HEXAHEDRAL:{ + break; + case MT_HEXAHEDRAL: aDim = SMESH::DIM_3D; anCompareType = "HEXA"; - } - break; + break; default:; } + + bool toCheckIsApplicableToAll = !myIsMesh; + GEOM::GEOM_Object_var aGeomVar; + QString anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); + if ( _PTR(SObject) so = studyDS()->FindObjectID( anEntry.toLatin1().data() )) + { + CORBA::Object_var obj = _CAST( SObject,so )->GetObject(); + aGeomVar = GEOM::GEOM_Object::_narrow( obj ); + if ( !aGeomVar->_is_nil() && toCheckIsApplicableToAll ) + toCheckIsApplicableToAll = ( aGeomVar->GetType() == GEOM_GROUP ); + } + if ( anCompareType == "ANY" ) { for ( int dim = SMESH::DIM_2D; dim <= SMESH::DIM_3D; dim++ ) @@ -2572,7 +2580,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI availableHyps( dim, Algo, anAvailableAlgs, anAvailableAlgsData ); //return current algo in current tab and set new algorithm list HypothesisData* algoCur; - if ( !isNone && !myAvailableHypData[dim][Algo].empty() ){ + if ( !isNone && !myAvailableHypData[dim][Algo].empty() ) { algoCur = myAvailableHypData[dim][Algo].at( currentHyp( dim, Algo ) ); } myAvailableHypData[dim][Algo].clear(); @@ -2580,19 +2588,14 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI for (int i = 0 ; i < anAvailableAlgsData.count(); i++) { HypothesisData* curAlgo = anAvailableAlgsData.at(i); - QString anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - GEOM::GEOM_Object_var aGeomVar = GEOM::GEOM_Object::_nil(); - if ( _PTR(SObject) pGeom = studyDS()->FindObjectID( anEntry.toLatin1().data() )) - { - aGeomVar= GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() ); - } if ( aGeomVar->_is_nil() || - ( !aGeomVar->_is_nil() && SMESH::IsApplicable( curAlgo->TypeName, aGeomVar, !myIsMesh ))){ + SMESH::IsApplicable( curAlgo->TypeName, aGeomVar, toCheckIsApplicableToAll )) + { anAvailableAlgs.append( curAlgo->Label ); myAvailableHypData[dim][Algo].append( curAlgo ); } } - if ( !isNone && algoCur ){ + if ( !isNone && algoCur ) { for (int i = 0 ; i < myAvailableHypData[dim][Algo].count(); i++) { HypothesisData* algoAny = myAvailableHypData[dim][Algo].at(i); @@ -2603,7 +2606,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI } } } - else if ( !isNone ){ + else if ( !isNone ) { isAvailableChoiceAlgo = true; anCurrentAvailableAlgo = currentHyp( dim, Algo ); } @@ -2657,27 +2660,22 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI QStringList::const_iterator inElemType = algoIn->OutputTypes.begin(); for ( ; inElemType != algoIn->OutputTypes.end(); inElemType++ ) { - if ( *inElemType == anCurrentCompareType ){ + if ( *inElemType == anCurrentCompareType ) { isAvailableAlgo = true; break; } } - if ( isAvailableAlgo || algoIn->OutputTypes.count()==0 ){ - QString anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - GEOM::GEOM_Object_var aGeomVar = GEOM::GEOM_Object::_nil(); - if ( _PTR(SObject) pGeom = studyDS()->FindObjectID( anEntry.toLatin1().data() )) - { - aGeomVar= GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() ); - } + if ( isAvailableAlgo || algoIn->OutputTypes.count()==0 ) { if ( aGeomVar->_is_nil() || myMaxShapeDim != dim || - ( !aGeomVar->_is_nil() && SMESH::IsApplicable( algoIn->TypeName, aGeomVar, !myIsMesh ))){ + SMESH::IsApplicable( algoIn->TypeName, aGeomVar, toCheckIsApplicableToAll )) + { anAvailableAlgs.append( algoIn->Label ); myAvailableHypData[dim][Algo].append( algoIn ); myFilteredAlgoData[dim].append( algoIn ); } } //algorithm will be active, if the chosen algorithm available in the current mesh type - if ( !isNoneAlg && isAvailableAlgo && algoIn->Label == anCurrentAlgo ){ + if ( !isNoneAlg && isAvailableAlgo && algoIn->Label == anCurrentAlgo ) { isAvailableChoiceAlgo = true; anCurrentAvailableAlgo = anAvailableAlgs.count() - 1 ; } @@ -2700,7 +2698,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI } } } - else if ( !isNone ){ + else if ( !isNone ) { if ( aDim == SMESH::DIM_2D){ myDlg->disableTab( SMESH::DIM_3D ); setCurrentHyp( SMESH::DIM_3D, Algo, -1); diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 7c4acfad4..222e4f9dc 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -1563,25 +1563,24 @@ class Mesh: if not geom: geom = self.mesh.GetShapeToMesh() pass - hyp_name = GetName( hyp ) - geom_name = "" - if geom: - geom_name = geom.GetName() isApplicable = True if self.mesh.HasShapeToMesh(): hyp_type = hyp.GetName() lib_name = hyp.GetLibName() isSubMesh = ( not geom.IsSame( self.mesh.GetShapeToMesh() )) - isApplicable = self.smeshpyD.IsApplicable(hyp_name, lib_name, geom, isSubMesh) + isApplicable = self.smeshpyD.IsApplicable(hyp_type, lib_name, geom, isSubMesh) if isApplicable: AssureGeomPublished( self, geom, "shape for %s" % hyp.GetName()) status = self.mesh.AddHypothesis(geom, hyp) - isAlgo = hyp._narrow( SMESH_Algo ) - TreatHypoStatus( status, hyp_name, geom_name, isAlgo ) - return status else: - TreatHypoStatus( HYP_BAD_GEOMETRY, hyp_name, geom_name, isAlgo ) - return HYP_BAD_GEOMETRY + status = HYP_BAD_GEOMETRY + hyp_name = GetName( hyp ) + geom_name = "" + if geom: + geom_name = geom.GetName() + isAlgo = hyp._narrow( SMESH_Algo ) + TreatHypoStatus( status, hyp_name, geom_name, isAlgo ) + return status ## Return True if an algorithm of hypothesis is assigned to a given shape # @param hyp a hypothesis to check diff --git a/src/SMESH_SWIG/smesh_algorithm.py b/src/SMESH_SWIG/smesh_algorithm.py index a0c368a0a..cac705e12 100644 --- a/src/SMESH_SWIG/smesh_algorithm.py +++ b/src/SMESH_SWIG/smesh_algorithm.py @@ -195,17 +195,11 @@ class Mesh_Algorithm: if geom is None and mesh.mesh.HasShapeToMesh(): raise RuntimeError, "Attemp to create " + algo + " algoritm on None shape" self.mesh = mesh - name = "" if not geom or geom.IsSame( mesh.geom ): self.geom = mesh.geom else: self.geom = geom AssureGeomPublished( mesh, geom ) - try: - name = GetName(geom) - pass - except: - pass self.subm = mesh.mesh.GetSubMesh(geom, algo.GetName()) self.algo = algo status = mesh.AddHypothesis(self.algo, self.geom) -- 2.30.2