X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMFiltersSelection%2FGEOM_FaceFilter.cxx;h=b9ee8122b5e644ba8f30170f071a1dafcb50c1c3;hb=357991964c4929ef01edcf1d55eddd67f8512c29;hp=aca4648e4dc10863a9d1a90bdef38d6019f9638b;hpb=0f1369c27fd6a84ba1149c3c5f3ed181acc055f1;p=modules%2Fgeom.git diff --git a/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx b/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx index aca4648e4..b9ee8122b 100644 --- a/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx +++ b/src/GEOMFiltersSelection/GEOM_FaceFilter.cxx @@ -1,184 +1,77 @@ -// GEOM GEOMFiltersSelection : filter selector for the viewer +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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 : GEOM_FaceFilter.cxx -// Author : Nicolas REJNERI -// Module : GEOM -// $Header$ - -using namespace std; -#include "GEOM_FaceFilter.ixx" -#include "GEOM_Client.hxx" - -#include "SALOME_InteractiveObject.hxx" -#include "GEOM_InteractiveObject.hxx" -#include "GEOM_ShapeTypeFilter.hxx" -#include "SALOME_TypeFilter.hxx" -#include "utilities.h" -#include "QAD_Application.h" -#include "QAD_Desktop.h" -#include "QAD_Study.h" +#include "GEOM_FaceFilter.h" -// Open CASCADE Includes #include #include -#include #include -#include - - -static GEOM_Client ShapeReader; +#include -/*! - enumeration TypeOfFace is AnyFace,Plane,Cylinder,Sphere,Torus,Revol,Cone; -*/ -GEOM_FaceFilter::GEOM_FaceFilter(const StdSelect_TypeOfFace Face, - GEOM::GEOM_Gen_ptr geom) +//======================================================================= +// function : GEOM_FaceFilter +// purpose : +//======================================================================= +GEOM_FaceFilter::GEOM_FaceFilter( SalomeApp_Study* study, const int kind ) +: GEOM_SelectionFilter( study ), +myKind( kind ) { - myKind = Face; - myComponentGeom = GEOM::GEOM_Gen::_narrow(geom); + add( TopAbs_FACE ); } -Standard_Boolean GEOM_FaceFilter::IsOk(const Handle(SALOME_InteractiveObject)& anObj) const +//======================================================================= +// function : ~GEOM_SelectionFilter +// purpose : +//======================================================================= +GEOM_FaceFilter::~GEOM_FaceFilter() { - Handle(SALOME_TypeFilter) GeomFilter = new SALOME_TypeFilter( "GEOM" ); - if ( !GeomFilter->IsOk(anObj) ) - return false; - - Handle(GEOM_ShapeTypeFilter) GeomShapeTypeFilter = new GEOM_ShapeTypeFilter( TopAbs_FACE, myComponentGeom ); - if ( !GeomShapeTypeFilter->IsOk(anObj) ) - return false; +} - if ( anObj->hasEntry() ) { - QAD_Study* ActiveStudy = QAD_Application::getDesktop()->getActiveStudy(); - SALOMEDS::Study_var aStudy = ActiveStudy->getStudyDocument(); - SALOMEDS::SObject_var obj = aStudy->FindObjectID( anObj->getEntry() ); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeIOR_var anIOR; - if ( !obj->_is_nil() ) { - if (obj->FindAttribute(anAttr, "AttributeIOR")) { - anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( anIOR->Value() ); - if ( aShape->_is_nil() ) - return false; - - TopoDS_Shape Shape = ShapeReader.GetShape( myComponentGeom, aShape ); - if ( Shape.IsNull() ) - return false; - - switch (myKind) { - case StdSelect_AnyFace: - return Standard_True; - case StdSelect_Plane: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Plane); - } - case StdSelect_Cylinder: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Cylinder); - } - case StdSelect_Sphere: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Sphere); - } - case StdSelect_Torus: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return ( surf.GetType() == GeomAbs_Torus); - } - case StdSelect_Revol: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return ( surf.GetType() == GeomAbs_Cylinder || - surf.GetType() == GeomAbs_Cone || - surf.GetType() == GeomAbs_Torus || - surf.GetType() == GeomAbs_Sphere || - surf.GetType() == GeomAbs_SurfaceOfRevolution ); - } - case StdSelect_Cone: // en attendant la liberation du cdl, on l'utilise pour Cone - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Cone); - } - } - } - } - } - - if ( anObj->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject)) ) { - Handle(GEOM_InteractiveObject) GObject = - Handle(GEOM_InteractiveObject)::DownCast(anObj); - - GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( GObject->getIOR() ); - if ( aShape->_is_nil() ) - return false; - - TopoDS_Shape Shape = ShapeReader.GetShape( myComponentGeom, aShape ); - if ( Shape.IsNull() ) - return false; - - switch (myKind) { - case StdSelect_AnyFace: - return Standard_True; - case StdSelect_Plane: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Plane); - } - case StdSelect_Cylinder: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Cylinder); - } - case StdSelect_Sphere: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Sphere); - } - case StdSelect_Torus: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return ( surf.GetType() == GeomAbs_Torus); - } - case StdSelect_Revol: - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return ( surf.GetType() == GeomAbs_Cylinder || - surf.GetType() == GeomAbs_Cone || - surf.GetType() == GeomAbs_Torus || - surf.GetType() == GeomAbs_Sphere || - surf.GetType() == GeomAbs_SurfaceOfRevolution ); - } - case StdSelect_Cone: // en attendant la liberation du cdl, on l'utilise pour Cone - { - BRepAdaptor_Surface surf(TopoDS::Face(Shape)); - return (surf.GetType() == GeomAbs_Cone); - } +//======================================================================= +// function : isShapeOk +// purpose : +//======================================================================= +bool GEOM_FaceFilter::isShapeOk( const TopoDS_Shape& theShape ) const +{ + if ( !theShape.IsNull() && theShape.ShapeType() == TopAbs_FACE ) + { + BRepAdaptor_Surface aSurf( TopoDS::Face( theShape ) ); + GeomAbs_SurfaceType aType = aSurf.GetType(); + + switch ( myKind ) + { + case StdSelect_AnyFace: return Standard_True; + case StdSelect_Plane: return ( aType == GeomAbs_Plane ); + case StdSelect_Cylinder: return ( aType == GeomAbs_Cylinder); + case StdSelect_Sphere: return ( aType == GeomAbs_Sphere); + case StdSelect_Torus: return ( aType == GeomAbs_Torus); + case StdSelect_Revol: return ( aType == GeomAbs_Cylinder || + aType == GeomAbs_Cone || + aType == GeomAbs_Torus || + aType == GeomAbs_Sphere || + aType == GeomAbs_SurfaceOfRevolution ); + case StdSelect_Cone: return ( aType == GeomAbs_Cone); } } return false; } +