2 // File : GEOM_EdgeFilter.cxx
3 // Created : Fri Dec 07 09:57:24 2001
4 // Author : Nicolas REJNERI
7 // Copyright : Open CASCADE
10 #include "GEOM_EdgeFilter.ixx"
11 #include "GEOM_Client.hxx"
13 #include "SALOME_InteractiveObject.hxx"
14 #include "GEOM_InteractiveObject.hxx"
15 #include "GEOM_ShapeTypeFilter.hxx"
16 #include "SALOME_TypeFilter.hxx"
18 #include "utilities.h"
19 #include "QAD_Application.h"
20 #include "QAD_Desktop.h"
21 #include "QAD_Study.h"
23 // Open CASCADE Includes
24 #include <BRepAdaptor_Curve.hxx>
25 #include <TopoDS_Edge.hxx>
30 static GEOM_Client ShapeReader;
34 enumeration TypeOfEdge is AnyEdge,Line,Circle;
36 GEOM_EdgeFilter::GEOM_EdgeFilter(const StdSelect_TypeOfEdge Edge,
37 GEOM::GEOM_Gen_ptr geom)
40 myComponentGeom = GEOM::GEOM_Gen::_narrow(geom);
43 Standard_Boolean GEOM_EdgeFilter::IsOk(const Handle(SALOME_InteractiveObject)& anObj) const
45 Handle(SALOME_TypeFilter) GeomFilter = new SALOME_TypeFilter( "GEOM" );
46 if ( !GeomFilter->IsOk(anObj) )
49 Handle(GEOM_ShapeTypeFilter) GeomShapeTypeFilter = new GEOM_ShapeTypeFilter( TopAbs_EDGE, myComponentGeom );
50 if ( !GeomShapeTypeFilter->IsOk(anObj) )
53 if ( anObj->hasEntry() ) {
54 QAD_Study* ActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
55 SALOMEDS::Study_var aStudy = ActiveStudy->getStudyDocument();
56 SALOMEDS::SObject_var obj = aStudy->FindObjectID( anObj->getEntry() );
57 SALOMEDS::GenericAttribute_var anAttr;
58 SALOMEDS::AttributeIOR_var anIOR;
59 if ( !obj->_is_nil() ) {
60 if (obj->FindAttribute(anAttr, "AttributeIOR")) {
61 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
62 GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( anIOR->Value() );
63 if ( aShape->_is_nil() )
66 TopoDS_Shape Shape = ShapeReader.GetShape( myComponentGeom, aShape );
71 case StdSelect_AnyEdge:
75 BRepAdaptor_Curve curv(TopoDS::Edge(Shape));
76 return (curv.GetType() == GeomAbs_Line);
79 case StdSelect_Circle:
80 BRepAdaptor_Curve curv(TopoDS::Edge(Shape));
81 return (curv.GetType() == GeomAbs_Circle);
87 if ( anObj->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
88 Handle(GEOM_InteractiveObject) GObject =
89 Handle(GEOM_InteractiveObject)::DownCast(anObj);
91 GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( GObject->getIOR() );
92 if ( aShape->_is_nil() )
95 TopoDS_Shape Shape = ShapeReader.GetShape( myComponentGeom, aShape );
100 case StdSelect_AnyEdge:
101 return Standard_True;
104 BRepAdaptor_Curve curv(TopoDS::Edge(Shape));
105 return (curv.GetType() == GeomAbs_Line);
108 case StdSelect_Circle:
109 BRepAdaptor_Curve curv(TopoDS::Edge(Shape));
110 return (curv.GetType() == GeomAbs_Circle);