X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMFiltersSelection%2FGEOM_EdgeFilter.cxx;h=a73bb3eb268d525a8807cfa1c6404cef2a09b705;hb=e7e908bf4c7c8bec141fe2d3b4a9924ddaea6c04;hp=e61d3d30f3764e9684ee7379bf81f3b713c03322;hpb=46fb51231345bb027081f198d3db8daccbc2ae2f;p=modules%2Fgeom.git diff --git a/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx b/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx index e61d3d30f..a73bb3eb2 100644 --- a/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx +++ b/src/GEOMFiltersSelection/GEOM_EdgeFilter.cxx @@ -1,134 +1,66 @@ -// GEOM GEOMFiltersSelection : filter selector for the viewer -// -// 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. +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// 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. +// 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. // -// 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 +// 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_EdgeFilter.cxx -// Author : Nicolas REJNERI -// Module : GEOM -// $Header$ - -using namespace std; -#include "GEOM_EdgeFilter.ixx" -#include "GEOM_Client.hxx" +#include "GEOM_EdgeFilter.h" -#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" - -// Open CASCADE Includes #include #include #include -#include - - -static GEOM_Client ShapeReader; +#include - -/*! - enumeration TypeOfEdge is AnyEdge,Line,Circle; -*/ -GEOM_EdgeFilter::GEOM_EdgeFilter(const StdSelect_TypeOfEdge Edge, - GEOM::GEOM_Gen_ptr geom) +//======================================================================= +// function : GEOM_EdgeFilter +// purpose : +//======================================================================= +GEOM_EdgeFilter::GEOM_EdgeFilter( SalomeApp_Study* study, const int kind ) +: GEOM_SelectionFilter( study ), +myKind( kind ) { - myKind = Edge; - myComponentGeom = GEOM::GEOM_Gen::_narrow(geom); + add( TopAbs_EDGE ); } -Standard_Boolean GEOM_EdgeFilter::IsOk(const Handle(SALOME_InteractiveObject)& anObj) const +//======================================================================= +// function : ~GEOM_SelectionFilter +// purpose : +//======================================================================= +GEOM_EdgeFilter::~GEOM_EdgeFilter() { - Handle(SALOME_TypeFilter) GeomFilter = new SALOME_TypeFilter( "GEOM" ); - if ( !GeomFilter->IsOk(anObj) ) - return false; - - Handle(GEOM_ShapeTypeFilter) GeomShapeTypeFilter = new GEOM_ShapeTypeFilter( TopAbs_EDGE, 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_AnyEdge: - return Standard_True; - case StdSelect_Line: - { - BRepAdaptor_Curve curv(TopoDS::Edge(Shape)); - return (curv.GetType() == GeomAbs_Line); - } - break; - case StdSelect_Circle: - BRepAdaptor_Curve curv(TopoDS::Edge(Shape)); - return (curv.GetType() == GeomAbs_Circle); - } - } - } - } - - 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_AnyEdge: - return Standard_True; - case StdSelect_Line: - { - BRepAdaptor_Curve curv(TopoDS::Edge(Shape)); - return (curv.GetType() == GeomAbs_Line); - } - break; - case StdSelect_Circle: - BRepAdaptor_Curve curv(TopoDS::Edge(Shape)); - return (curv.GetType() == GeomAbs_Circle); +//======================================================================= +// function : isShapeOk +// purpose : +//======================================================================= +bool GEOM_EdgeFilter::isShapeOk( const TopoDS_Shape& theShape ) const +{ + if ( !theShape.IsNull() && theShape.ShapeType() == TopAbs_EDGE ) + { + BRepAdaptor_Curve aCurve( TopoDS::Edge( theShape ) ); + GeomAbs_CurveType aType = aCurve.GetType(); + + switch ( myKind ) + { + case StdSelect_AnyEdge: return Standard_True; + case StdSelect_Line: return ( aType == GeomAbs_Line ); + case StdSelect_Circle: return ( aType == GeomAbs_Circle ); } } return false; } +