X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHFiltersSelection%2FSMESH_NumberFilter.cxx;h=d8633f307516d25b168d1dfa282d3ca0a6490def;hb=21c57ac1ede30f0bee01db8fbec004e6956eaafe;hp=3f0cd8834bfbc16666048532837aa1941f8c356b;hpb=c38c10811a065cf5b13e8807ed71864d92ca7d80;p=modules%2Fsmesh.git diff --git a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx b/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx index 3f0cd8834..d8633f307 100644 --- a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx +++ b/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx @@ -1,22 +1,45 @@ +// Copyright (C) 2007-2008 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 +// 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 +// 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 "GEOMBase.h" +#include "GEOM_Client.hxx" +#include "GeometryGUI.h" #include "SUIT_Application.h" #include "SUIT_Session.h" #include "SalomeApp_Study.h" -#include "SalomeApp_DataOwner.h" +#include "LightApp_DataOwner.h" #include "SALOME_InteractiveObject.hxx" #include "SALOMEDSClient_SObject.hxx" #include "SALOMEDS_SObject.hxx" -#include #include +#include +#include /*! * Class : SMESH_NumberFilter @@ -81,9 +104,11 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const return false; // Get shape from geom object and verify its parameters - TopoDS_Shape aShape; - if (!GEOMBase::GetShape(aGeomObj, aShape) || - aShape.IsNull() || + 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())) return false; @@ -92,8 +117,8 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const // Verify whether shape of entry object is sub-shape of myMainObj if (!myMainObj->_is_nil()) { - TopoDS_Shape aMainShape; - if (!GEOMBase::GetShape(myMainObj, aMainShape)) + TopoDS_Shape aMainShape = aGeomClient.GetShape(GeometryGUI::GetGeomGen(), myMainObj); + if (aMainShape.IsNull()) return false; bool isFound = false; @@ -113,12 +138,13 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const 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? } //======================================================================= @@ -126,10 +152,10 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const // Purpose : Retrieve geom object from SALOME_InteractiveObject //======================================================================= GEOM::GEOM_Object_ptr SMESH_NumberFilter::getGeom - (const SUIT_DataOwner* theDataOwner) const + (const SUIT_DataOwner* theDataOwner, const bool extractReference ) const { - const SalomeApp_DataOwner* owner = - dynamic_cast(theDataOwner); + const LightApp_DataOwner* owner = + dynamic_cast(theDataOwner); SalomeApp_Study* appStudy = dynamic_cast (SUIT_Session::session()->activeApplication()->activeStudy()); @@ -141,7 +167,10 @@ GEOM::GEOM_Object_ptr SMESH_NumberFilter::getGeom _PTR(Study) study = appStudy->studyDS(); QString entry = owner->entry(); - _PTR(SObject) aSO(study->FindObjectID(entry.latin1())); + _PTR(SObject) aSO( study->FindObjectID( entry.toLatin1().data() ) ), aRefSO; + if( extractReference && aSO && aSO->ReferencedObject( aRefSO ) ) + aSO = aRefSO; + if (!aSO) return GEOM::GEOM_Object::_nil(); @@ -151,24 +180,26 @@ GEOM::GEOM_Object_ptr SMESH_NumberFilter::getGeom 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();