X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FPluginUtils%2FGeomSelectionTools.cxx;h=8e634b1f055b93b3975d2442402b5a1353a01ce4;hp=03151a6405b4420d3df7b491b9ff234e8acb4b48;hb=0fc0831670e27a5611b941c52dc152fd63964515;hpb=6bac08c1a81f34d3f21c550bd92f83654b2546a5 diff --git a/src/PluginUtils/GeomSelectionTools.cxx b/src/PluginUtils/GeomSelectionTools.cxx index 03151a640..8e634b1f0 100644 --- a/src/PluginUtils/GeomSelectionTools.cxx +++ b/src/PluginUtils/GeomSelectionTools.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -28,17 +28,15 @@ #include #include -#include -#include -#include -#include #include +#include #include +#include +#include -#include -#include -#include #include +#include +#include #include "utilities.h" @@ -47,21 +45,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; } /*! @@ -139,7 +126,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 @@ -159,7 +146,7 @@ std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject */ std::string GeomSelectionTools::getNameFromEntry(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 +169,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 @@ -203,7 +190,7 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){ // MESSAGE("GeomSelectionTools::entryToShapeType"<FindObjectID(entry); + _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry); if (aSO){ _PTR(SObject) aRefSObj; GEOM::GEOM_Object_var aShape; @@ -212,7 +199,8 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){ if ( aSO->ReferencedObject( aRefSObj )) aSO = aRefSObj; // MESSAGE("aSO->GetFatherComponent()->ComponentDataType(): " << aSO->GetFatherComponent()->ComponentDataType()); - if ( strcmp(aSO->GetFatherComponent()->ComponentDataType().c_str(),"GEOM") == 0) + std::string aComponentType = aSO->GetFatherComponent()->ComponentDataType(); + if (aComponentType == "GEOM" || aComponentType == "SHAPERSTUDY") aShape = SMESH::SObjectToInterface(aSO); if ( !aShape->_is_nil() ){ // MESSAGE("Got the Geom Object "); @@ -220,14 +208,14 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){ SalomeApp_Application* anApp = GetSalomeApplication(); if (anApp) { // MESSAGE("Got Application"); - Engines::EngineComponent_var component = anApp->lcc()->FindOrLoad_Component( "FactoryServer","GEOM" ); + 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(myStudy->StudyId()); + _geomEngine->GetIGroupOperations(); ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape); } // if not @@ -237,6 +225,12 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){ // 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(); + } } } } @@ -275,7 +269,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 */