-// Copyright (C) 2007-2013 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
// 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 <GEOM_Client.hxx>
-#include <SMESHGUI_Utils.h>
-#include <boost/shared_ptr.hpp>
+#include <GEOMBase.h>
#include <GEOMImpl_Types.hxx>
+#include <GEOM_Client.hxx>
#include <GEOM_wrap.hxx>
+#include <SALOME_ListIO.hxx>
+#include <SMESHGUI_Utils.h>
-#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"
/*!
* 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;
}
/*!
*/
SALOME_ListIO* GeomSelectionTools::getSelectedSalomeObjects()
{
- SALOME_ListIO* selected;
+ SALOME_ListIO* selected = new SALOME_ListIO;
LightApp_SelectionMgr* aSel = selectionMgr();
aSel->selectedObjects( *selected, NULL, false );
return selected;
*/
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
* @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
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
* 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"<<entry );
- TopoDS_Shape S = TopoDS_Shape();
+TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(const std::string& entry)
+{
TopAbs_ShapeEnum ShapeType = TopAbs_SHAPE;
- _PTR(SObject) aSO = myStudy->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<GEOM::GEOM_Object>(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<GEOM::GEOM_Object>(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;
}
*/
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());
}
/*!
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 */