Salome HOME
Merge from V6_main 11/02/2013
[modules/smesh.git] / src / SMESH_I / SMESH_Filter_i.hxx
1 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21
22 //  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
23 //  File   : SMESH_Filter_i.hxx
24 //  Author : Alexey Petrov, OCC
25 //  Module : SMESH
26
27 #ifndef _SMESH_FILTER_I_HXX_
28 #define _SMESH_FILTER_I_HXX_
29
30 #include "SMESH.hxx"
31
32 #include <SALOMEconfig.h>
33 #include CORBA_SERVER_HEADER(SMESH_Filter)
34
35 #include <LDOM_Document.hxx>
36 #include <TopoDS_Shape.hxx>
37
38 #include "SALOME_GenericObj_i.hh"
39 #include "SMESH_ControlsDef.hxx"
40
41 #include <list>
42
43 class SMESHDS_Mesh;
44
45 namespace SMESH
46 {
47
48   // ================================================================================
49   namespace Controls
50   {
51
52     /*
53       Class       : BelongToGeom
54       Description : Predicate for verifying whether entiy belong to
55       specified geometrical support
56     */
57     class SMESH_I_EXPORT BelongToGeom: public virtual Predicate
58     {
59     public:
60       BelongToGeom();
61
62       virtual void                    SetMesh( const SMDS_Mesh* theMesh );
63       virtual void                    SetGeom( const TopoDS_Shape& theShape );
64
65       virtual bool                    IsSatisfy( long theElementId );
66
67       virtual void                    SetType( SMDSAbs_ElementType theType );
68       virtual                         SMDSAbs_ElementType GetType() const;
69
70       TopoDS_Shape                    GetShape();
71       const SMESHDS_Mesh*             GetMeshDS() const;
72
73       void                            SetTolerance( double );
74       double                          GetTolerance();
75
76     private:
77       virtual void                    init();
78
79       TopoDS_Shape                    myShape;
80       const SMESHDS_Mesh*             myMeshDS;
81       SMDSAbs_ElementType             myType;
82       bool                            myIsSubshape;
83       double                          myTolerance;          // only if myIsSubshape == false
84       Controls::ElementsOnShapePtr    myElementsOnShapePtr; // only if myIsSubshape == false
85     };
86     typedef boost::shared_ptr<BelongToGeom> BelongToGeomPtr;
87
88     /*
89       Class       : LyingOnGeom
90       Description : Predicate for verifying whether entiy lying or partially lying on
91       specified geometrical support
92     */
93     class SMESH_I_EXPORT LyingOnGeom: public virtual Predicate
94     {
95     public:
96       LyingOnGeom();
97       
98       virtual void                    SetMesh( const SMDS_Mesh* theMesh );
99       virtual void                    SetGeom( const TopoDS_Shape& theShape );
100       
101       virtual bool                    IsSatisfy( long theElementId );
102       
103       virtual void                    SetType( SMDSAbs_ElementType theType );
104       virtual                         SMDSAbs_ElementType GetType() const;
105       
106       TopoDS_Shape                    GetShape();
107       const SMESHDS_Mesh*             GetMeshDS() const;
108
109       void                            SetTolerance( double );
110       double                          GetTolerance();
111       
112       virtual bool                    Contains( const SMESHDS_Mesh*     theMeshDS,
113                                                 const TopoDS_Shape&     theShape,
114                                                 const SMDS_MeshElement* theElem,
115                                                 TopAbs_ShapeEnum        theFindShapeEnum,
116                                                 TopAbs_ShapeEnum        theAvoidShapeEnum = TopAbs_SHAPE );
117     private:
118       virtual void                    init();
119
120       TopoDS_Shape                    myShape;
121       const SMESHDS_Mesh*             myMeshDS;
122       SMDSAbs_ElementType             myType;
123       bool                            myIsSubshape;
124       double                          myTolerance;          // only if myIsSubshape == false
125       Controls::ElementsOnShapePtr    myElementsOnShapePtr; // only if myIsSubshape == false
126     };
127     typedef boost::shared_ptr<LyingOnGeom> LyingOnGeomPtr;
128
129   } // namespace Controls
130
131   // ================================================================================
132   /*
133     FUNCTORS
134   */
135   
136   /*
137     Class       : Functor_i
138     Description : An abstact class for all functors 
139   */
140   class SMESH_I_EXPORT Functor_i: public virtual POA_SMESH::Functor,
141                                   public virtual SALOME::GenericObj_i
142   {
143   public:
144     void                            SetMesh( SMESH_Mesh_ptr theMesh );
145     Controls::FunctorPtr            GetFunctor(){ return myFunctorPtr;}
146     ElementType                     GetElementType();
147     
148   protected:
149     Functor_i();
150     ~Functor_i();
151   protected:                                
152     Controls::FunctorPtr            myFunctorPtr;
153   };
154   
155   /*
156     Class       : NumericalFunctor_i
157     Description : Base class for numerical functors 
158   */
159   class SMESH_I_EXPORT NumericalFunctor_i: public virtual POA_SMESH::NumericalFunctor,
160                                            public virtual Functor_i
161   {
162   public:
163     CORBA::Double                   GetValue( CORBA::Long theElementId );
164     SMESH::Histogram*               GetHistogram(CORBA::Short nbIntervals, CORBA::Boolean isLogarithmic);
165     void                            SetPrecision( CORBA::Long thePrecision );
166     CORBA::Long                     GetPrecision();
167     Controls::NumericalFunctorPtr   GetNumericalFunctor();
168     
169   protected:
170     Controls::NumericalFunctorPtr   myNumericalFunctorPtr;
171   };
172   
173   
174   /*
175     Class       : SMESH_MinimumAngleFunct
176     Description : Functor for calculation of minimum angle
177   */
178   class SMESH_I_EXPORT MinimumAngle_i: public virtual POA_SMESH::MinimumAngle,
179                                        public virtual NumericalFunctor_i
180   {
181   public:
182     MinimumAngle_i();
183     FunctorType                     GetFunctorType();
184   };
185   
186   
187   /*
188     Class       : AspectRatio_i
189     Description : Functor for calculating aspect ratio
190   */
191   class SMESH_I_EXPORT AspectRatio_i: public virtual POA_SMESH::AspectRatio,
192                                       public virtual NumericalFunctor_i
193   {
194   public:
195     AspectRatio_i();
196     FunctorType                     GetFunctorType();
197   };
198   
199   
200   /*
201     Class       : AspectRatio3D_i
202     Description : Functor for calculating aspect ratio for 3D
203   */
204   class SMESH_I_EXPORT AspectRatio3D_i: public virtual POA_SMESH::AspectRatio3D,
205                                         public virtual NumericalFunctor_i
206   {
207   public:
208     AspectRatio3D_i();
209     FunctorType                     GetFunctorType();
210   };
211   
212
213   /*
214     Class       : Warping_i
215     Description : Functor for calculating warping
216   */
217   class SMESH_I_EXPORT Warping_i: public virtual POA_SMESH::Warping,
218                                   public virtual NumericalFunctor_i
219   {
220   public:
221     Warping_i();
222     FunctorType                     GetFunctorType();
223   };
224   
225   
226   /*
227     Class       : Taper_i
228     Description : Functor for calculating taper
229   */
230   class SMESH_I_EXPORT Taper_i: public virtual POA_SMESH::Taper,
231                                 public virtual NumericalFunctor_i
232   {
233   public:
234     Taper_i();
235     FunctorType                     GetFunctorType();
236   };
237   
238   
239   /*
240     Class       : Skew_i
241     Description : Functor for calculating skew in degrees
242   */
243   class SMESH_I_EXPORT Skew_i: public virtual POA_SMESH::Skew,
244                                public virtual NumericalFunctor_i
245   {
246   public:
247     Skew_i();
248     FunctorType                     GetFunctorType();
249   };
250   
251   
252   /*
253     Class       : Area_i
254     Description : Functor for calculating area
255   */
256   class SMESH_I_EXPORT Area_i: public virtual POA_SMESH::Area,
257                                public virtual NumericalFunctor_i
258   {
259   public:
260     Area_i();
261     FunctorType                     GetFunctorType();
262   };
263   
264   
265   /*
266     Class       : Volume3D_i
267     Description : Functor for calculating volume of 3D element
268   */
269   class SMESH_I_EXPORT Volume3D_i: public virtual POA_SMESH::Volume3D,
270                                    public virtual NumericalFunctor_i
271   {
272   public:
273     Volume3D_i();
274     FunctorType                     GetFunctorType();
275   };
276   
277   
278   /*
279     Class       : MaxElementLength2D_i
280     Description : Functor for calculating maximum length of 2D element
281   */
282   class SMESH_I_EXPORT MaxElementLength2D_i: public virtual POA_SMESH::MaxElementLength2D,
283                                              public virtual NumericalFunctor_i
284   {
285   public:
286     MaxElementLength2D_i();
287     FunctorType                     GetFunctorType();
288   };
289   
290   
291   /*
292     Class       : MaxElementLength3D_i
293     Description : Functor for calculating maximum length of 3D element
294   */
295   class SMESH_I_EXPORT MaxElementLength3D_i: public virtual POA_SMESH::MaxElementLength3D,
296                                              public virtual NumericalFunctor_i
297   {
298   public:
299     MaxElementLength3D_i();
300     FunctorType                     GetFunctorType();
301   };
302   
303   
304   /*
305     Class       : Length_i
306     Description : Functor for calculating length of edge
307   */
308   class SMESH_I_EXPORT Length_i: public virtual POA_SMESH::Length,
309                                  public virtual NumericalFunctor_i
310   {
311   public:
312     Length_i();
313     FunctorType                     GetFunctorType();
314   };
315   
316   /*
317     Class       : Length2D_i
318     Description : Functor for calculating length of edge
319   */
320   class SMESH_I_EXPORT Length2D_i: public virtual POA_SMESH::Length2D,
321                                    public virtual NumericalFunctor_i
322   {
323   public:
324     Length2D_i();
325     SMESH::Length2D::Values*        GetValues();
326     FunctorType                     GetFunctorType();
327     
328   protected:
329     Controls::Length2DPtr          myLength2DPtr;
330   };
331   
332   
333   /*
334     Class       : MultiConnection_i
335     Description : Functor for calculating number of faces conneted to the edge
336   */
337   class SMESH_I_EXPORT MultiConnection_i: public virtual POA_SMESH::MultiConnection,
338                                           public virtual NumericalFunctor_i
339   {
340   public:
341     MultiConnection_i();
342     FunctorType                     GetFunctorType();
343   };
344   
345   /*
346     Class       : MultiConnection2D_i
347     Description : Functor for calculating number of faces conneted to the edge
348   */
349   class SMESH_I_EXPORT MultiConnection2D_i: public virtual POA_SMESH::MultiConnection2D,
350                                             public virtual NumericalFunctor_i
351   {
352   public:
353     MultiConnection2D_i();
354     SMESH::MultiConnection2D::Values*  GetValues();
355     FunctorType                        GetFunctorType();
356     
357   protected:
358     Controls::MultiConnection2DPtr     myMulticonnection2DPtr;
359   };
360   
361   /*
362     Class       : BallDiameter_i
363     Description : Functor returning diameter of a ball element
364   */
365   class SMESH_I_EXPORT BallDiameter_i: public virtual POA_SMESH::BallDiameter,
366                                        public virtual NumericalFunctor_i
367   {
368   public:
369     BallDiameter_i();
370     FunctorType                     GetFunctorType();
371   };
372   
373   
374   /*
375     PREDICATES
376   */
377   /*
378     Class       : Predicate_i
379     Description : Base class for all predicates
380   */
381   class SMESH_I_EXPORT Predicate_i: public virtual POA_SMESH::Predicate,
382                                     public virtual Functor_i
383   {
384   public:
385     CORBA::Boolean                  IsSatisfy( CORBA::Long theElementId );
386     Controls::PredicatePtr          GetPredicate();
387     
388   protected:
389     Controls::PredicatePtr          myPredicatePtr;
390   };
391   
392   
393   /*
394     Class       : BadOrientedVolume_i
395     Description : Verify whether a mesh volume is incorrectly oriented from
396     the point of view of MED convention
397   */
398   class SMESH_I_EXPORT BadOrientedVolume_i: public virtual POA_SMESH::BadOrientedVolume,
399                                             public virtual Predicate_i
400   {
401   public:
402     BadOrientedVolume_i();
403     FunctorType                     GetFunctorType();
404   };
405   
406   /*
407     Class       : BareBorderVolume_i
408     Description : Verify whether a mesh volume has a free facet without a face on it
409   */
410   class SMESH_I_EXPORT BareBorderVolume_i: public virtual POA_SMESH::BareBorderVolume,
411                                            public virtual Predicate_i
412   {
413   public:
414     BareBorderVolume_i();
415     FunctorType                     GetFunctorType();
416   };
417   
418   /*
419     Class       : BareBorderFace_i
420     Description : Verify whether a mesh face has a free border without an edge on it
421   */
422   class SMESH_I_EXPORT BareBorderFace_i: public virtual POA_SMESH::BareBorderFace,
423                                          public virtual Predicate_i
424   {
425   public:
426     BareBorderFace_i();
427     FunctorType                     GetFunctorType();
428   };
429   
430   /*
431     Class       : OverConstrainedVolume_i
432     Description : Verify whether a mesh volume has only one facet shared with other volumes
433   */
434   class SMESH_I_EXPORT OverConstrainedVolume_i: public virtual POA_SMESH::OverConstrainedVolume,
435                                                 public virtual Predicate_i
436   {
437   public:
438     OverConstrainedVolume_i();
439     FunctorType                     GetFunctorType();
440   };
441   
442   /*
443     Class       : OverConstrainedFace_i
444     Description : Verify whether a mesh face has only one border shared with other faces
445   */
446   class SMESH_I_EXPORT OverConstrainedFace_i: public virtual POA_SMESH::OverConstrainedFace,
447                                               public virtual Predicate_i
448   {
449   public:
450     OverConstrainedFace_i();
451     FunctorType                     GetFunctorType();
452   };
453   
454   /*
455     Class       : BelongToGeom_i
456     Description : Predicate for selection on geometrical support
457   */
458   class SMESH_I_EXPORT BelongToGeom_i: public virtual POA_SMESH::BelongToGeom,
459                                        public virtual Predicate_i
460   {
461   public:
462     BelongToGeom_i();
463     virtual                         ~BelongToGeom_i();
464     
465     void                            SetGeom( GEOM::GEOM_Object_ptr theGeom );
466     void                            SetElementType( ElementType theType );
467     FunctorType                     GetFunctorType();
468     
469     void                            SetGeom( const TopoDS_Shape& theShape );
470     
471     void                            SetShapeName( const char* theName );
472     void                            SetShape( const char* theID, const char* theName );
473     char*                           GetShapeName();
474     char*                           GetShapeID();
475
476     void                            SetTolerance( CORBA::Double );
477     CORBA::Double                   GetTolerance();
478     
479   protected:
480     Controls::BelongToGeomPtr       myBelongToGeomPtr;
481     char*                           myShapeName;
482     char*                           myShapeID;
483   };
484   
485   /*
486     Class       : BelongToSurface_i
487     Description : Verify whether mesh element lie in pointed Geom planar object
488   */
489   class SMESH_I_EXPORT BelongToSurface_i: public virtual POA_SMESH::BelongToSurface,
490                                           public virtual Predicate_i
491   {
492   public:
493     BelongToSurface_i( const Handle(Standard_Type)& );
494     virtual                         ~BelongToSurface_i();
495     
496     void                            SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType );
497     
498     void                            SetShapeName( const char* theName, ElementType theType );
499     void                            SetShape( const char* theID, const char* theName, ElementType theType );
500     char*                           GetShapeName();
501     char*                           GetShapeID();
502
503     void                            SetTolerance( CORBA::Double );
504     CORBA::Double                   GetTolerance();
505     
506     void                            SetUseBoundaries( CORBA::Boolean theUseBndRestrictions );
507     CORBA::Boolean                  GetUseBoundaries();
508
509   protected:
510     Controls::ElementsOnSurfacePtr  myElementsOnSurfacePtr;
511     char*                           myShapeName;
512     char*                           myShapeID;
513     Handle(Standard_Type)           mySurfaceType;
514   };
515   
516   /*
517     Class       : BelongToPlane_i
518     Description : Verify whether mesh element lie in pointed Geom planar object
519   */
520   class SMESH_I_EXPORT BelongToPlane_i: public virtual POA_SMESH::BelongToPlane,
521                                         public virtual BelongToSurface_i
522   {
523   public:
524     BelongToPlane_i();
525     void                            SetPlane( GEOM::GEOM_Object_ptr theGeom, ElementType theType );
526     FunctorType                     GetFunctorType();
527   };
528   
529   /*
530     Class       : BelongToCylinder_i
531     Description : Verify whether mesh element lie in pointed Geom cylindrical object
532   */
533   class SMESH_I_EXPORT BelongToCylinder_i: public virtual POA_SMESH::BelongToCylinder,
534                                            public virtual BelongToSurface_i
535   {
536   public:
537     BelongToCylinder_i();
538     void                            SetCylinder( GEOM::GEOM_Object_ptr theGeom, ElementType theType );
539     FunctorType                     GetFunctorType();
540   };
541
542   /*
543     Class       : BelongToGenSurface_i
544     Description : Verify whether mesh element lie on pointed Geom surfasic object
545   */
546   class BelongToGenSurface_i: public virtual POA_SMESH::BelongToGenSurface,
547                               public virtual BelongToSurface_i
548   {
549   public:
550     BelongToGenSurface_i();
551     void                            SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType );
552     FunctorType                     GetFunctorType();
553   };
554   
555   /*
556     Class       : LyingOnGeom_i
557     Description : Predicate for selection on geometrical support(lying or partially lying)
558   */
559   class SMESH_I_EXPORT LyingOnGeom_i: public virtual POA_SMESH::LyingOnGeom,
560                                       public virtual Predicate_i
561   {
562   public:
563     LyingOnGeom_i();
564     virtual                         ~LyingOnGeom_i();
565     
566     void                            SetGeom( GEOM::GEOM_Object_ptr theGeom );
567     void                            SetElementType( ElementType theType );
568     FunctorType                     GetFunctorType();
569     
570     void                            SetGeom( const TopoDS_Shape& theShape );
571     
572     void                            SetShapeName( const char* theName );
573     void                            SetShape( const char* theID, const char* theName );
574     char*                           GetShapeName();
575     char*                           GetShapeID();
576
577     void                            SetTolerance( CORBA::Double );
578     CORBA::Double                   GetTolerance();
579     
580   protected:
581     Controls::LyingOnGeomPtr        myLyingOnGeomPtr;
582     char*                           myShapeName;
583     char*                           myShapeID;
584   };
585   
586   /*
587     Class       : FreeBorders_i
588     Description : Predicate for free borders
589   */
590   class SMESH_I_EXPORT FreeBorders_i: public virtual POA_SMESH::FreeBorders,
591                                       public virtual Predicate_i
592   {
593   public:
594     FreeBorders_i();
595     FunctorType                     GetFunctorType();
596   };
597   
598   
599   /*
600     Class       : FreeEdges_i
601     Description : Predicate for free edges
602   */
603   class SMESH_I_EXPORT FreeEdges_i: public virtual POA_SMESH::FreeEdges,
604                                     public virtual Predicate_i
605   {
606   public:
607     FreeEdges_i();
608     SMESH::FreeEdges::Borders*      GetBorders();
609     FunctorType                     GetFunctorType();
610     
611   protected:
612     Controls::FreeEdgesPtr          myFreeEdgesPtr;
613   };
614   
615
616   /*
617     Class       : FreeFaces_i
618     Description : Predicate for free faces
619   */
620   class SMESH_I_EXPORT FreeFaces_i: public virtual POA_SMESH::FreeFaces,
621                                     public virtual Predicate_i
622   {
623   public:
624     FreeFaces_i();
625     FunctorType                     GetFunctorType();
626   };
627   
628
629   /*
630     Class       : FreeNodes_i
631     Description : Predicate for free nodes
632   */
633   class SMESH_I_EXPORT FreeNodes_i: public virtual POA_SMESH::FreeNodes,
634                                     public virtual Predicate_i
635   {
636   public:
637     FreeNodes_i();
638     FunctorType                     GetFunctorType();
639   };
640   
641   
642   /*
643     Class       : EqualNodes_i
644     Description : Predicate for equal nodes
645   */
646   class SMESH_I_EXPORT EqualNodes_i: public virtual POA_SMESH::EqualNodes,
647                                      public virtual Predicate_i
648   {
649   public:
650     EqualNodes_i();
651     FunctorType                     GetFunctorType();
652     void                            SetTolerance( double );
653     double                          GetTolerance();
654
655   private:
656     Controls::CoincidentNodesPtr myCoincidentNodesPtr;
657   };
658   /*
659     Class       : EqualEdges_i
660     Description : Predicate for equal edges
661   */
662   class SMESH_I_EXPORT EqualEdges_i: public virtual POA_SMESH::EqualEdges,
663                                      public virtual Predicate_i
664   {
665   public:
666     EqualEdges_i();
667     FunctorType                     GetFunctorType();
668   };
669   /*
670     Class       : EqualFaces_i
671     Description : Predicate for equal Faces
672   */
673   class SMESH_I_EXPORT EqualFaces_i: public virtual POA_SMESH::EqualFaces,
674                                      public virtual Predicate_i
675   {
676   public:
677     EqualFaces_i();
678     FunctorType                     GetFunctorType();
679   };
680   /*
681     Class       : EqualVolumes_i
682     Description : Predicate for equal Volumes
683   */
684   class SMESH_I_EXPORT EqualVolumes_i: public virtual POA_SMESH::EqualVolumes,
685                                        public virtual Predicate_i
686   {
687   public:
688     EqualVolumes_i();
689     FunctorType                     GetFunctorType();
690   };
691   
692   
693   /*
694     Class       : RangeOfIds_i
695     Description : Predicate for Range of Ids
696   */
697   class SMESH_I_EXPORT RangeOfIds_i: public virtual POA_SMESH::RangeOfIds,
698                                      public virtual Predicate_i
699   {
700   public:
701     RangeOfIds_i();
702     void                            SetRange( const SMESH::long_array& theIds );
703     CORBA::Boolean                  SetRangeStr( const char* theRange );
704     char*                           GetRangeStr();
705     
706     void                            SetElementType( ElementType theType );
707     FunctorType                     GetFunctorType();
708     
709   protected:
710     Controls::RangeOfIdsPtr         myRangeOfIdsPtr;
711   };
712
713   /*
714     Class       : LinearOrQuadratic_i
715     Description : Verify whether a mesh element is linear
716   */
717   class SMESH_I_EXPORT LinearOrQuadratic_i: public virtual POA_SMESH::LinearOrQuadratic,
718                                             public virtual Predicate_i
719   {
720   public:
721     LinearOrQuadratic_i();
722     FunctorType                    GetFunctorType();
723     void                           SetElementType( ElementType theType );
724
725   private:
726    Controls::LinearOrQuadraticPtr  myLinearOrQuadraticPtr;
727   };
728   
729   /*
730     Class       : GroupColor_i
731     Description : Functor for check color of group to whic mesh element belongs to
732   */
733   class SMESH_I_EXPORT GroupColor_i: public virtual POA_SMESH::GroupColor,
734                                      public virtual Predicate_i
735   {
736   public:
737     GroupColor_i();
738     FunctorType             GetFunctorType();
739
740     void                    SetElementType( ElementType theType );
741     void                    SetColorStr( const char* theColor );
742     char*                   GetColorStr();
743
744   private:
745     Controls::GroupColorPtr myGroupColorPtr;
746   };
747   
748   /*
749     Class       : ElemGeomType_i
750     Description : Functor for check element geometry type
751   */
752   class SMESH_I_EXPORT ElemGeomType_i: public virtual POA_SMESH::ElemGeomType,
753                                        public virtual Predicate_i
754   {
755   public:
756     ElemGeomType_i();
757     FunctorType             GetFunctorType();
758
759     void                    SetElementType ( ElementType  theType );
760     void                    SetGeometryType( GeometryType theType );
761     GeometryType            GetGeometryType() const;
762
763   private:
764     Controls::ElemGeomTypePtr myElemGeomTypePtr;
765   };
766   
767   /*
768     Class       : CoplanarFaces_i
769     Description : Returns true if a mesh face is a coplanar neighbour to a given one
770   */
771   class SMESH_I_EXPORT CoplanarFaces_i: public virtual POA_SMESH::CoplanarFaces,
772                                         public virtual Predicate_i
773   {
774   public:
775     CoplanarFaces_i();
776     FunctorType             GetFunctorType();
777
778     void                    SetFace ( CORBA::Long theFaceID );
779     void                    SetTolerance( CORBA::Double theToler );
780     char*                   GetFaceAsString () const;
781     CORBA::Long             GetFace () const;
782     CORBA::Double           GetTolerance () const;
783   private:
784     Controls::CoplanarFacesPtr myCoplanarFacesPtr;
785   };
786   
787   /*
788     Class       : Comparator_i
789     Description : Base class for comparators
790   */
791   class SMESH_I_EXPORT Comparator_i: public virtual POA_SMESH::Comparator,
792                                      public virtual Predicate_i
793   {
794   public:
795     virtual                         ~Comparator_i();
796     
797     virtual void                    SetMargin( CORBA::Double );
798     virtual void                    SetNumFunctor( NumericalFunctor_ptr );
799     
800     Controls::ComparatorPtr         GetComparator();
801     NumericalFunctor_i*             GetNumFunctor_i();
802     CORBA::Double                   GetMargin();
803     
804   protected:
805     Comparator_i();
806   protected:                                  
807     Controls::ComparatorPtr         myComparatorPtr;
808     NumericalFunctor_i*             myNumericalFunctor;
809   };
810   
811   
812   /*
813     Class       : LessThan_i
814     Description : Comparator "<"
815   */
816   class SMESH_I_EXPORT LessThan_i: public virtual POA_SMESH::LessThan,
817                                    public virtual Comparator_i
818   {
819   public:
820     LessThan_i();
821     FunctorType                     GetFunctorType();
822   };
823   
824   
825   /*
826     Class       : MoreThan_i
827     Description : Comparator ">"
828   */
829   class SMESH_I_EXPORT MoreThan_i: public virtual POA_SMESH::MoreThan,
830                                    public virtual Comparator_i
831   {
832   public:
833     MoreThan_i();
834     FunctorType                     GetFunctorType();
835   };
836   
837   
838   /*
839     Class       : EqualTo_i
840     Description : Comparator "="
841   */
842   class SMESH_I_EXPORT EqualTo_i: public virtual POA_SMESH::EqualTo,
843                                   public virtual Comparator_i
844   {
845   public:
846     EqualTo_i();
847     virtual void                    SetTolerance( CORBA::Double );
848     CORBA::Double                   GetTolerance();
849     FunctorType                     GetFunctorType();
850     
851   protected:
852     Controls::EqualToPtr            myEqualToPtr;
853   };
854   
855   
856   /*
857     Class       : LogicalNOT_i
858     Description : Logical NOT predicate
859   */
860   class SMESH_I_EXPORT LogicalNOT_i: public virtual POA_SMESH::LogicalNOT,
861                                      public virtual Predicate_i
862   {
863   public:
864     LogicalNOT_i();
865   virtual                         ~LogicalNOT_i();
866     
867     virtual void                    SetPredicate( Predicate_ptr );
868     Predicate_i*                    GetPredicate_i();
869     FunctorType                     GetFunctorType();
870     
871   protected:
872     Controls::LogicalNOTPtr         myLogicalNOTPtr;
873     Predicate_i*                    myPredicate;
874   };
875   
876   
877   /*
878     Class       : LogicalBinary_i
879     Description : Base class for binary logical predicate
880   */
881   class SMESH_I_EXPORT LogicalBinary_i: public virtual POA_SMESH::LogicalBinary,
882                                         public virtual Predicate_i
883   {
884   public:
885     virtual                         ~LogicalBinary_i();
886     virtual void                    SetMesh( SMESH_Mesh_ptr theMesh );
887     virtual void                    SetPredicate1( Predicate_ptr );
888     virtual void                    SetPredicate2( Predicate_ptr );
889     
890     Controls::LogicalBinaryPtr      GetLogicalBinary();
891     Predicate_i*                    GetPredicate1_i();
892     Predicate_i*                    GetPredicate2_i();
893     
894   protected:
895     LogicalBinary_i();
896   protected:  
897     Controls::LogicalBinaryPtr      myLogicalBinaryPtr;
898     Predicate_i*                    myPredicate1;
899     Predicate_i*                    myPredicate2;
900   };
901   
902   
903   /*
904     Class       : LogicalAND_i
905     Description : Logical AND
906   */
907   class SMESH_I_EXPORT LogicalAND_i: public virtual POA_SMESH::LogicalAND,
908                                      public virtual LogicalBinary_i
909   {
910   public:
911     LogicalAND_i();
912     FunctorType                     GetFunctorType();
913   };
914   
915   
916   /*
917     Class       : LogicalOR_i
918     Description : Logical OR
919   */
920   class SMESH_I_EXPORT LogicalOR_i: public virtual POA_SMESH::LogicalOR,
921                                     public virtual LogicalBinary_i
922   {
923   public:
924     LogicalOR_i();
925     FunctorType                     GetFunctorType();
926   };
927   
928   
929   /*
930     FILTER
931   */
932   class SMESH_I_EXPORT Filter_i: public virtual POA_SMESH::Filter,
933                                  public virtual SALOME::GenericObj_i
934   {
935   public:
936     Filter_i();
937     ~Filter_i();
938     
939     virtual
940     void
941     SetPredicate( Predicate_ptr );
942
943     virtual
944     void
945     SetMesh( SMESH_Mesh_ptr );
946
947     static
948     void
949     GetElementsId( Predicate_i*,
950                    const SMDS_Mesh*,
951                    Controls::Filter::TIdSequence& );
952     static
953     void           
954     GetElementsId( Predicate_i*,
955                    SMESH_Mesh_ptr,
956                    Controls::Filter::TIdSequence& );
957     
958     virtual
959     long_array*      
960     GetElementsId( SMESH_Mesh_ptr );
961
962     virtual
963     ElementType      
964     GetElementType();
965     
966     virtual
967     CORBA::Boolean   
968     GetCriteria( SMESH::Filter::Criteria_out theCriteria );
969
970     virtual
971     CORBA::Boolean
972     SetCriteria( const SMESH::Filter::Criteria& theCriteria );
973     
974     virtual
975     Predicate_ptr
976     GetPredicate();
977
978     Predicate_i*     GetPredicate_i();
979
980     // =========================
981     // SMESH_IDSource interface
982     // =========================
983     virtual SMESH::long_array*           GetIDs();
984     virtual SMESH::long_array*           GetMeshInfo();
985     virtual SMESH::array_of_ElementType* GetTypes();
986     virtual SMESH::SMESH_Mesh_ptr        GetMesh();
987     virtual bool                         IsMeshInfoCorrect() { return true; }
988
989     /*!
990      * \brief Object notified on change of predicate
991      */
992     struct TPredicateChangeWaiter
993     {
994       virtual void PredicateChanged() = 0;
995     };
996     void AddWaiter( TPredicateChangeWaiter* waiter );
997     void RemoveWaiter( TPredicateChangeWaiter* waiter );
998
999   private:
1000     Controls::Filter myFilter;
1001     Predicate_i*     myPredicate;
1002     SMESH_Mesh_var   myMesh;
1003
1004     std::list<TPredicateChangeWaiter*> myWaiters;
1005   };
1006   
1007   
1008   /*
1009     FILTER LIBRARY
1010   */
1011   class SMESH_I_EXPORT FilterLibrary_i: public virtual POA_SMESH::FilterLibrary,
1012                                         public virtual SALOME::GenericObj_i
1013   {
1014   public:
1015     FilterLibrary_i( const char* theFileName );
1016     FilterLibrary_i();
1017     ~FilterLibrary_i();
1018     
1019     Filter_ptr              Copy( const char* theFilterName );
1020     
1021     CORBA::Boolean          Add     ( const char* theFilterName, Filter_ptr theFilter );
1022     CORBA::Boolean          AddEmpty( const char* theFilterName, ElementType theType );
1023     CORBA::Boolean          Delete  ( const char* theFilterName );
1024     CORBA::Boolean          Replace ( const char* theFilterName, 
1025                                       const char* theNewName, 
1026                                       Filter_ptr  theFilter );
1027     
1028     CORBA::Boolean          Save();
1029     CORBA::Boolean          SaveAs( const char* aFileName );
1030     
1031     CORBA::Boolean          IsPresent( const char* aFilterName );
1032     CORBA::Long             NbFilters( ElementType );
1033     string_array*           GetNames( ElementType );
1034     string_array*           GetAllNames();
1035     void                    SetFileName( const char* theFileName );
1036     char*                   GetFileName();
1037     
1038   private:
1039     char*                   myFileName;
1040     LDOM_Document           myDoc;
1041     FilterManager_var       myFilterMgr;
1042   };
1043   
1044   
1045   /*
1046     FILTER MANAGER
1047   */
1048   
1049   class SMESH_I_EXPORT FilterManager_i: public virtual POA_SMESH::FilterManager,
1050                                         public virtual SALOME::GenericObj_i
1051   {
1052   public:
1053     FilterManager_i();
1054     ~FilterManager_i();
1055
1056     MinimumAngle_ptr          CreateMinimumAngle();
1057     AspectRatio_ptr           CreateAspectRatio();
1058     AspectRatio3D_ptr         CreateAspectRatio3D();
1059     Warping_ptr               CreateWarping();
1060     Taper_ptr                 CreateTaper();
1061     Skew_ptr                  CreateSkew();
1062     Area_ptr                  CreateArea();
1063     Volume3D_ptr              CreateVolume3D();
1064     MaxElementLength2D_ptr    CreateMaxElementLength2D();
1065     MaxElementLength3D_ptr    CreateMaxElementLength3D();
1066     Length_ptr                CreateLength();
1067     Length2D_ptr              CreateLength2D();
1068     MultiConnection_ptr       CreateMultiConnection();
1069     MultiConnection2D_ptr     CreateMultiConnection2D();
1070     BallDiameter_ptr          CreateBallDiameter();
1071     
1072     BelongToGeom_ptr          CreateBelongToGeom();
1073     BelongToPlane_ptr         CreateBelongToPlane();
1074     BelongToCylinder_ptr      CreateBelongToCylinder();
1075     BelongToGenSurface_ptr    CreateBelongToGenSurface();
1076     
1077     LyingOnGeom_ptr           CreateLyingOnGeom();
1078     
1079     FreeBorders_ptr           CreateFreeBorders();
1080     FreeEdges_ptr             CreateFreeEdges();
1081     FreeNodes_ptr             CreateFreeNodes();
1082     FreeFaces_ptr             CreateFreeFaces();
1083
1084     EqualNodes_ptr            CreateEqualNodes();
1085     EqualEdges_ptr            CreateEqualEdges();
1086     EqualFaces_ptr            CreateEqualFaces();
1087     EqualVolumes_ptr          CreateEqualVolumes();
1088
1089     RangeOfIds_ptr            CreateRangeOfIds();
1090     BadOrientedVolume_ptr     CreateBadOrientedVolume();
1091     BareBorderFace_ptr        CreateBareBorderFace();
1092     BareBorderVolume_ptr      CreateBareBorderVolume();
1093     OverConstrainedFace_ptr   CreateOverConstrainedFace();
1094     OverConstrainedVolume_ptr CreateOverConstrainedVolume();
1095     LinearOrQuadratic_ptr     CreateLinearOrQuadratic();
1096     GroupColor_ptr            CreateGroupColor();
1097     ElemGeomType_ptr          CreateElemGeomType();
1098     CoplanarFaces_ptr         CreateCoplanarFaces();
1099
1100     LessThan_ptr              CreateLessThan();
1101     MoreThan_ptr              CreateMoreThan();
1102     EqualTo_ptr               CreateEqualTo();
1103     
1104     LogicalNOT_ptr            CreateLogicalNOT();
1105     LogicalAND_ptr            CreateLogicalAND();
1106     LogicalOR_ptr             CreateLogicalOR();
1107     
1108     Filter_ptr                CreateFilter();
1109     
1110     FilterLibrary_ptr         LoadLibrary( const char* aFileName );
1111     FilterLibrary_ptr         CreateLibrary();
1112     CORBA::Boolean            DeleteLibrary( const char* aFileName );
1113   };
1114   
1115   
1116   Predicate_i* 
1117   GetPredicate( SMESH::Predicate_ptr thePredicate );
1118
1119   const char*        FunctorTypeToString(SMESH::FunctorType ft);
1120   SMESH::FunctorType StringToFunctorType(const char*       str);
1121 }
1122
1123
1124 #endif