X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FPluginUtils%2FGeomSelectionTools.cxx;h=1e27cd4100343aea1f553f2ec1fcf00809a2bdfd;hp=13a0befdcb6b58810fac866e65af168d922f595d;hb=HEAD;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce diff --git a/src/PluginUtils/GeomSelectionTools.cxx b/src/PluginUtils/GeomSelectionTools.cxx index 13a0befdc..a24664c26 100644 --- a/src/PluginUtils/GeomSelectionTools.cxx +++ b/src/PluginUtils/GeomSelectionTools.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -28,17 +28,16 @@ #include #include -#include -#include -#include -#include +#include #include +#include #include +#include +#include -#include -#include -#include #include +#include +#include #include "utilities.h" @@ -47,21 +46,10 @@ /*! * Constructor - * @param aStudy pointer to the Study * */ -GeomSelectionTools::GeomSelectionTools(_PTR(Study) aStudy) -{ - myStudy = aStudy; -} - -/*! - * Accessor to the Study used by this GeomSelectionTools object - * @return The study used by the GeomSelectionTools class - */ -_PTR(Study) GeomSelectionTools::getMyStudy() +GeomSelectionTools::GeomSelectionTools() { - return myStudy; } /*! @@ -96,7 +84,7 @@ LightApp_SelectionMgr* GeomSelectionTools::selectionMgr() */ SALOME_ListIO* GeomSelectionTools::getSelectedSalomeObjects() { - SALOME_ListIO* selected; + SALOME_ListIO* selected = new SALOME_ListIO; LightApp_SelectionMgr* aSel = selectionMgr(); aSel->selectedObjects( *selected, NULL, false ); return selected; @@ -139,7 +127,7 @@ std::string GeomSelectionTools::getFirstSelectedEntry() */ std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject) anIO){ std::string entry=""; - _PTR(SObject) aSO = myStudy->FindObjectID(anIO->getEntry()); + _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(anIO->getEntry()); if (aSO){ _PTR(SObject) aRefSObj; // If selected object is a reference @@ -157,9 +145,10 @@ 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 = myStudy->FindObjectID(entry); + _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry); if (aSO){ _PTR(SObject) aRefSObj; // If selected object is a reference @@ -182,7 +171,7 @@ std::string GeomSelectionTools::getFirstSelectedComponentDataType() Handle(SALOME_InteractiveObject) anIO; std::string DataType=""; anIO=GeomSelectionTools::getFirstSelectedSalomeObject(); - _PTR(SObject) aSO = myStudy->FindObjectID(anIO->getEntry()); + _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(anIO->getEntry()); if (aSO){ _PTR(SObject) aRefSObj; // If selected object is a reference @@ -199,50 +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()); - if ( strcmp(aSO->GetFatherComponent()->ComponentDataType().c_str(),"GEOM") == 0) - 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","GEOM" ); - 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(myStudy->StudyId()); - 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(); - } + 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; } @@ -252,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()); } /*! @@ -275,7 +251,6 @@ GeomAbs_SurfaceType GeomSelectionTools::getFaceInformation(TopoDS_Shape S) GeomAbs_SurfaceType surf_type=GeomAbs_OtherSurface ; if (!S.IsNull() && S.ShapeType()==TopAbs_FACE){ TopoDS_Face f=TopoDS::Face(S); - Handle(Geom_Surface) surf = BRep_Tool::Surface(f); BRepAdaptor_Surface surf_adap(f); /* Global Information */