-// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
+//
// 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.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// License as published by the Free Software Foundation; either
+// 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
// File : SMESH_NumberFilter.cxx
// Module : SMESH
-
+//
#include "SMESH_NumberFilter.hxx"
+#include <SALOME_LifeCycleCORBA.hxx>
+
#include "GEOM_Client.hxx"
-#include "GeometryGUI.h"
#include "SUIT_Application.h"
#include "SUIT_Session.h"
+#include "SalomeApp_Application.h"
#include "SalomeApp_Study.h"
#include "LightApp_DataOwner.h"
#include "SALOMEDSClient_SObject.hxx"
#include "SALOMEDS_SObject.hxx"
-#include <TopTools_MapOfShape.hxx>
#include <TopExp_Explorer.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <TopExp.hxx>
/*!
* Class : SMESH_NumberFilter
if (aGeomObj->_is_nil())
return false;
+ // Get GEOM engine
+ 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;
- if ( CORBA::is_nil( GeometryGUI::GetGeomGen() ) && !GeometryGUI::InitGeomGen() )
- return false;
- TopoDS_Shape aShape = aGeomClient.GetShape(GeometryGUI::GetGeomGen(), aGeomObj);
- if (aShape.IsNull() ||
- !myShapeTypes.Contains(aShape.ShapeType()))
+ TopoDS_Shape aShape = aGeomClient.GetShape(geomEngine.in(), aGeomObj);
+ if (aShape.IsNull() || !myShapeTypes.Contains(aShape.ShapeType()))
return false;
if (myIsClosedOnly && aShape.ShapeType() == TopAbs_SHELL && !aShape.Closed())
// Verify whether shape of entry object is sub-shape of myMainObj
if (!myMainObj->_is_nil()) {
- TopoDS_Shape aMainShape = aGeomClient.GetShape(GeometryGUI::GetGeomGen(), myMainObj);
+ TopoDS_Shape aMainShape = aGeomClient.GetShape(geomEngine.in(), myMainObj);
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;
}
// Verify number of sub-shapes
- if (mySubShapeType == TopAbs_SHAPE);
+ if (mySubShapeType == TopAbs_SHAPE)
return true;
- TopExp_Explorer anExp2 (aShape, mySubShapeType);
- TopTools_MapOfShape aMap;
- for (; anExp2.More(); anExp2.Next())
- aMap.Add(anExp2.Current());
+ TopTools_IndexedMapOfShape aMap;
+ TopExp::MapShapes(aShape, mySubShapeType, aMap);
+
+ if ( myNumber )
+ return myNumber == aMap.Extent(); // given number
- return myNumber == aMap.Extent();
+ return aMap.Extent(); // at least one?
}
//=======================================================================
_PTR(Study) study = appStudy->studyDS();
QString entry = owner->entry();
- _PTR(SObject) aSO( study->FindObjectID( entry.latin1() ) ), aRefSO;
+ _PTR(SObject) aSO( study->FindObjectID( entry.toUtf8().data() ) ), aRefSO;
if( extractReference && aSO && aSO->ReferencedObject( aRefSO ) )
aSO = aRefSO;
return anObj._retn();
// Get geom object corresponding to the mesh
- _PTR(ChildIterator) anIter = study->NewChildIterator(aSO);
- for (; anIter->More(); anIter->Next()) {
- _PTR(SObject) aSO = anIter->Value();
- if (!aSO)
- continue;
- _PTR(SObject) aRefSO;
- _PTR(SObject) anObj;
- if (aSO->ReferencedObject(aRefSO))
- anObj = aRefSO;
-
- if (!anObj)
- anObj = aSO;
-
- anObject = _CAST(SObject,anObj)->GetObject();
- GEOM::GEOM_Object_var aMeshShape = GEOM::GEOM_Object::_narrow(anObject);
-
- if (!aMeshShape->_is_nil())
- return aMeshShape._retn();
+ if ( myKind == "SMESH" ) {
+ _PTR(ChildIterator) anIter = study->NewChildIterator(aSO);
+ for (; anIter->More(); anIter->Next()) {
+ _PTR(SObject) aSO = anIter->Value();
+ if (!aSO)
+ continue;
+ _PTR(SObject) aRefSO;
+ _PTR(SObject) anObj;
+ if (aSO->ReferencedObject(aRefSO))
+ anObj = aRefSO;
+
+ if (!anObj)
+ anObj = aSO;
+
+ anObject = _CAST(SObject,anObj)->GetObject();
+ GEOM::GEOM_Object_var aMeshShape = GEOM::GEOM_Object::_narrow(anObject);
+
+ if (!aMeshShape->_is_nil())
+ return aMeshShape._retn();
+ }
}
return GEOM::GEOM_Object::_nil();