Salome HOME
23514: EDF 16031 - SMESH freezes
[modules/smesh.git] / src / PluginUtils / GeomSelectionTools.cxx
index 07c7f0830a68a915f99f32231d0b6d66b87049c0..0a9be930932a69e3e95ac543e7661c1813c439b0 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  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
 // 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
 #include <SalomeApp_Application.h>
 #include <SUIT_Session.h>
 
-#include <SALOME_ListIteratorOfListIO.hxx>
+#include <GEOMImpl_Types.hxx>
 #include <GEOM_Client.hxx>
+#include <GEOM_wrap.hxx>
+#include <SALOME_ListIO.hxx>
 #include <SMESHGUI_Utils.h>
-#include <boost/shared_ptr.hpp>
-#include <GEOMImpl_Types.hxx>
 
-#include <TopoDS.hxx>
-#include <BRep_Tool.hxx>
-#include <Handle_Geom_Surface.hxx>
 #include <BRepAdaptor_Surface.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Iterator.hxx>
 
 #include "utilities.h"
 
@@ -95,7 +94,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;
@@ -225,7 +224,8 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){
         // if the Geom Object is a group
         if (aShape->GetType() == GEOM_GROUP){
 //           MESSAGE("It's a group");
-          GEOM::GEOM_IGroupOperations_var aGroupOp = _geomEngine->GetIGroupOperations(myStudy->StudyId());
+          GEOM::GEOM_IGroupOperations_wrap aGroupOp =
+            _geomEngine->GetIGroupOperations(myStudy->StudyId());
           ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape);
         }
         // if not
@@ -235,6 +235,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();
+            }
           }
         }
       }
@@ -273,7 +279,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 */