2 // File : GEOM_FaceFilter.cxx
3 // Created : Fri Dec 07 09:57:24 2001
4 // Author : Nicolas REJNERI
7 // Copyright : Open CASCADE
10 #include "GEOM_FaceFilter.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_Surface.hxx>
25 #include <TopoDS_Face.hxx>
26 #include <TopoDS_Shape.hxx>
31 static GEOM_Client ShapeReader;
34 enumeration TypeOfFace is AnyFace,Plane,Cylinder,Sphere,Torus,Revol,Cone;
36 GEOM_FaceFilter::GEOM_FaceFilter(const StdSelect_TypeOfFace Face,
37 GEOM::GEOM_Gen_ptr geom)
40 myComponentGeom = GEOM::GEOM_Gen::_narrow(geom);
43 Standard_Boolean GEOM_FaceFilter::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_FACE, 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_AnyFace:
75 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
76 return (surf.GetType() == GeomAbs_Plane);
78 case StdSelect_Cylinder:
80 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
81 return (surf.GetType() == GeomAbs_Cylinder);
83 case StdSelect_Sphere:
85 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
86 return (surf.GetType() == GeomAbs_Sphere);
90 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
91 return ( surf.GetType() == GeomAbs_Torus);
95 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
96 return ( surf.GetType() == GeomAbs_Cylinder ||
97 surf.GetType() == GeomAbs_Cone ||
98 surf.GetType() == GeomAbs_Torus ||
99 surf.GetType() == GeomAbs_Sphere ||
100 surf.GetType() == GeomAbs_SurfaceOfRevolution );
102 case StdSelect_Cone: // en attendant la liberation du cdl, on l'utilise pour Cone
104 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
105 return (surf.GetType() == GeomAbs_Cone);
112 if ( anObj->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
113 Handle(GEOM_InteractiveObject) GObject =
114 Handle(GEOM_InteractiveObject)::DownCast(anObj);
116 GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( GObject->getIOR() );
117 if ( aShape->_is_nil() )
120 TopoDS_Shape Shape = ShapeReader.GetShape( myComponentGeom, aShape );
121 if ( Shape.IsNull() )
125 case StdSelect_AnyFace:
126 return Standard_True;
127 case StdSelect_Plane:
129 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
130 return (surf.GetType() == GeomAbs_Plane);
132 case StdSelect_Cylinder:
134 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
135 return (surf.GetType() == GeomAbs_Cylinder);
137 case StdSelect_Sphere:
139 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
140 return (surf.GetType() == GeomAbs_Sphere);
142 case StdSelect_Torus:
144 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
145 return ( surf.GetType() == GeomAbs_Torus);
147 case StdSelect_Revol:
149 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
150 return ( surf.GetType() == GeomAbs_Cylinder ||
151 surf.GetType() == GeomAbs_Cone ||
152 surf.GetType() == GeomAbs_Torus ||
153 surf.GetType() == GeomAbs_Sphere ||
154 surf.GetType() == GeomAbs_SurfaceOfRevolution );
156 case StdSelect_Cone: // en attendant la liberation du cdl, on l'utilise pour Cone
158 BRepAdaptor_Surface surf(TopoDS::Face(Shape));
159 return (surf.GetType() == GeomAbs_Cone);