From 4d658cb770439055f9cc48d39090a15e9bf878b7 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 8 May 2020 19:27:33 +0300 Subject: [PATCH] #19078 [CEA] Mesh Group - Group on filter fix places where component name "GEOM" is used --- src/PluginUtils/GeomSelectionTools.cxx | 78 +++++++------------ src/PluginUtils/GeomSelectionTools.h | 4 +- .../SMESH_NumberFilter.cxx | 22 ++---- src/SMESHGUI/SMESHGUI.cxx | 11 ++- src/SMESHGUI/SMESHGUI_FilterDlg.cxx | 2 + src/SMESH_I/SMESH_Filter_i.cxx | 2 + src/SMESH_I/SMESH_Gen_i_1.cxx | 11 ++- .../StdMeshersGUI_CartesianParamCreator.cxx | 8 +- .../StdMeshersGUI_QuadrangleParamWdg.cxx | 4 +- 9 files changed, 59 insertions(+), 83 deletions(-) diff --git a/src/PluginUtils/GeomSelectionTools.cxx b/src/PluginUtils/GeomSelectionTools.cxx index 8e634b1f0..6ef5b88b5 100644 --- a/src/PluginUtils/GeomSelectionTools.cxx +++ b/src/PluginUtils/GeomSelectionTools.cxx @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -144,7 +145,8 @@ std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject * @param entry the entry of the object * @return the name of the object */ -std::string GeomSelectionTools::getNameFromEntry(std::string entry){ +std::string GeomSelectionTools::getNameFromEntry(const std::string& entry) +{ std::string name = ""; _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry); if (aSO){ @@ -186,57 +188,38 @@ std::string GeomSelectionTools::getFirstSelectedComponentDataType() * Retrieve the shape type from the entry * @return the shape type from the entry, return TopAbs_SHAPE if the object does not define a shape or a group. */ -TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){ -// MESSAGE("GeomSelectionTools::entryToShapeType"<FindObjectID(entry); - if (aSO){ + if ( _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry)) + { _PTR(SObject) aRefSObj; - GEOM::GEOM_Object_var aShape; - // MESSAGE("Got a SO"); - // If selected object is a reference - if ( aSO->ReferencedObject( aRefSObj )) + if ( aSO->ReferencedObject( aRefSObj )) // If selected object is a reference aSO = aRefSObj; - // MESSAGE("aSO->GetFatherComponent()->ComponentDataType(): " << aSO->GetFatherComponent()->ComponentDataType()); - std::string aComponentType = aSO->GetFatherComponent()->ComponentDataType(); - if (aComponentType == "GEOM" || aComponentType == "SHAPERSTUDY") - aShape = SMESH::SObjectToInterface(aSO); - if ( !aShape->_is_nil() ){ - // MESSAGE("Got the Geom Object "); - // MESSAGE("Geom Object Type "<< aShape->GetType()); - SalomeApp_Application* anApp = GetSalomeApplication(); - if (anApp) { -// MESSAGE("Got Application"); - Engines::EngineComponent_var component = anApp->lcc()->FindOrLoad_Component( "FactoryServer", aComponentType.c_str()); - GEOM::GEOM_Gen_var _geomEngine = GEOM::GEOM_Gen::_narrow(component); -// MESSAGE("Got GEOM engine"); - // if the Geom Object is a group - if (aShape->GetType() == GEOM_GROUP){ -// MESSAGE("It's a group"); - GEOM::GEOM_IGroupOperations_wrap aGroupOp = - _geomEngine->GetIGroupOperations(); - ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape); - } - // if not - else { - GEOM_Client* aClient = new GEOM_Client(); - if ( aClient && !_geomEngine->_is_nil() ) { -// MESSAGE("GEOM client is OK and GEOM engine is not null"); - S = aClient->GetShape( _geomEngine, aShape ); - ShapeType=S.ShapeType(); - if ( ShapeType == TopAbs_COMPOUND ) - { - TopoDS_Iterator it( S ); - if ( it.More() ) - ShapeType = it.Value().ShapeType(); - } - } + GEOM::GEOM_Object_var aShape = SMESH::SObjectToInterface(aSO); + if ( !aShape->_is_nil() ) + { + ShapeType= (TopAbs_ShapeEnum)aShape->GetShapeType(); + // if the Geom Object is a group + if (aShape->GetType() == GEOM_GROUP) + { + GEOM::GEOM_Gen_var _geomEngine = aShape->GetGen(); + GEOM::GEOM_IGroupOperations_wrap aGroupOp = _geomEngine->GetIGroupOperations(); + ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape); + } + // if not + else if ( ShapeType == TopAbs_COMPOUND ) + { + TopoDS_Shape shape; + if (GEOMBase::GetShape(aShape, shape)) + { + TopoDS_Iterator it( shape ); + if ( it.More() ) + ShapeType = it.Value().ShapeType(); } } } } -// MESSAGE("ShapeType returned is " << ShapeType); return ShapeType; } @@ -246,9 +229,8 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){ */ TopAbs_ShapeEnum GeomSelectionTools:: getFirstSelectedShapeType() { - Handle(SALOME_InteractiveObject) anIO; - anIO=GeomSelectionTools::getFirstSelectedSalomeObject(); - return entryToShapeType(anIO->getEntry()); + Handle(SALOME_InteractiveObject) anIO=GeomSelectionTools::getFirstSelectedSalomeObject(); + return entryToShapeType(anIO->getEntry()); } /*! diff --git a/src/PluginUtils/GeomSelectionTools.h b/src/PluginUtils/GeomSelectionTools.h index d0e2c9b6e..6228f3492 100644 --- a/src/PluginUtils/GeomSelectionTools.h +++ b/src/PluginUtils/GeomSelectionTools.h @@ -58,10 +58,10 @@ public: Handle(SALOME_InteractiveObject) getFirstSelectedSalomeObject(); std::string getFirstSelectedEntry(); std::string getEntryOfObject(Handle(SALOME_InteractiveObject)); - std::string getNameFromEntry(std::string); + std::string getNameFromEntry(const std::string& ); std::string getFirstSelectedComponentDataType(); TopAbs_ShapeEnum getFirstSelectedShapeType(); - TopAbs_ShapeEnum entryToShapeType(std::string ); + TopAbs_ShapeEnum entryToShapeType(const std::string& ); GeomAbs_SurfaceType getFaceInformation(TopoDS_Shape); }; diff --git a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx b/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx index 9a11b1b2b..e5d480e35 100644 --- a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx +++ b/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx @@ -107,17 +107,14 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const return false; // Get GEOM engine - Engines::EngineComponent_var comp = - SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" ); - GEOM::GEOM_Gen_var geomEngine = GEOM::GEOM_Gen::_narrow( comp ); - if ( CORBA::is_nil( geomEngine ) ) + GEOM::GEOM_Gen_var geomEngine = aGeomObj->GetGen(); + if ( CORBA::is_nil( geomEngine )) return false; // Get shape from geom object and verify its parameters GEOM_Client aGeomClient; TopoDS_Shape aShape = aGeomClient.GetShape(geomEngine.in(), aGeomObj); - if (aShape.IsNull() || - !myShapeTypes.Contains(aShape.ShapeType())) + if (aShape.IsNull() || !myShapeTypes.Contains(aShape.ShapeType())) return false; if (myIsClosedOnly && aShape.ShapeType() == TopAbs_SHELL && !aShape.Closed()) @@ -129,16 +126,11 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const if (aMainShape.IsNull()) return false; - bool isFound = false; - TopAbs_ShapeEnum aShapeType = aShape.ShapeType(); - TopExp_Explorer anExp (aMainShape, aShapeType); - for (; anExp.More(); anExp.Next()) { - if (anExp.Current() == aShape) { - isFound = true; + TopExp_Explorer anExp (aMainShape, aShape.ShapeType()); + for (; anExp.More(); anExp.Next()) + if (anExp.Current() == aShape) break; - } - } - if (!isFound) + if (!anExp.More()) return false; } diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index b4bba728b..28862787d 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -97,12 +97,12 @@ #include "SMESH_version.h" -#include "SMESH_ControlsDef.hxx" #include "SMESH_Actor.h" #include "SMESH_ActorUtils.h" #include "SMESH_Client.hxx" +#include "SMESH_Comment.hxx" +#include "SMESH_ControlsDef.hxx" #include "SMESH_ScalarBarActor.h" -#include #include "SMESH_TypeFilter.hxx" // SALOME GUI includes @@ -5068,8 +5068,9 @@ bool SMESHGUI::isSelectionCompatible() SALOME_ListIteratorOfListIO It( selected ); for ( ; isCompatible && It.More(); It.Next()) isCompatible = - ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) || - ( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 ); + ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) || + ( strcmp("SHAPERSTUDY", It.Value()->getComponentDataType()) == 0 ) || + ( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 ); return isCompatible; } @@ -6332,8 +6333,6 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // componentName is used for encoding of entries when storing them in IParameters std::string componentName = myComponentSMESH->ComponentDataType(); - //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM"); - //if (!aSComponent) return; // IParameters _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative", diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx index 2fe2548d4..5d7f16093 100644 --- a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx @@ -3203,6 +3203,8 @@ bool SMESHGUI_FilterDlg::isValid() const myTable->GetThreshold(i, aName); std::vector<_PTR(SObject)> aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "GEOM"); + if (aList.size() == 0) + aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "SHAPERSTUDY"); if (aList.size() == 0) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), tr("BAD_SHAPE_NAME").arg(aName)); diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx index e354fe872..ae97ce1c6 100644 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ b/src/SMESH_I/SMESH_Filter_i.cxx @@ -137,6 +137,8 @@ static TopoDS_Shape getShapeByName( const char* theName ) { SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "GEOM" ); + if ( aList->length() == 0 ) + aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "SHAPERSTUDY" ); if ( aList->length() > 0 ) { CORBA::Object_var anObj = aList[ 0 ]->GetObject(); diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 94df9beb3..4c78e2316 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -196,10 +196,15 @@ bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR) SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(CORBA::Object_ptr theObject) { SALOMEDS::SObject_wrap aSO; - if ( !CORBA::is_nil( theObject )) + try { + if ( !CORBA::is_nil( theObject )) + { + CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject ); + aSO = getStudyServant()->FindObjectIOR( objStr.in() ); + } + } + catch (...) { - CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject ); - aSO = getStudyServant()->FindObjectIOR( objStr.in() ); } return aSO._retn(); } diff --git a/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx b/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx index e08e9e150..a1a4f6712 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx @@ -955,9 +955,7 @@ QFrame* StdMeshersGUI_CartesianParamCreator::buildFrame() if ( !shapeEntry.isEmpty() ) { // find origin - Handle(SALOME_InteractiveObject) io = - new SALOME_InteractiveObject( shapeEntry.toStdString().c_str(), "GEOM" ); - GEOM::GEOM_Object_var geomObj = SMESH::IObjectToInterface( io ); + GEOM::GEOM_Object_var geomObj = SMESH::EntryToInterface( shapeEntry ); if ( GEOMBase::GetShape( geomObj, shape ) && !shape.IsNull()) { Bnd_Box box; @@ -1394,9 +1392,7 @@ void StdMeshersGUI_CartesianParamCreator::onOptimalAxes(bool) if ( shapeEntry.isEmpty() ) return; - Handle(SALOME_InteractiveObject) io = - new SALOME_InteractiveObject( shapeEntry.toStdString().c_str(), "GEOM" ); - GEOM::GEOM_Object_var geomObj = SMESH::IObjectToInterface( io ); + GEOM::GEOM_Object_var geomObj = SMESH::EntryToInterface( shapeEntry ); if ( geomObj->_is_nil() ) return; diff --git a/src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.cxx index aa04fa8c4..c6905e049 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.cxx @@ -288,9 +288,7 @@ QString StdMeshersGUI_QuadrangleParamCreator::storeParams() const { QListWidgetItem* item = myShapesList->item(i); QString entry = item->data( Qt::UserRole ).toString(); - Handle(SALOME_InteractiveObject) io = - new SALOME_InteractiveObject( entry.toStdString().c_str(), "GEOM" ); - GEOM::GEOM_Object_var go = GEOMBase::ConvertIOinGEOMObject( io ); + GEOM::GEOM_Object_var go = SMESH::EntryToInterface( entry ); if ( !go->_is_nil() ) goList[ nbShapes++ ] = go; } -- 2.39.2