Salome HOME
DCQ : Merge with Ecole_Ete_a6.
[modules/smesh.git] / src / SMESH_I / SMESH_Filter_i.hxx
1 //  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses\r
2 //\r
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,\r
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS \r
5 // \r
6 //  This library is free software; you can redistribute it and/or \r
7 //  modify it under the terms of the GNU Lesser General Public \r
8 //  License as published by the Free Software Foundation; either \r
9 //  version 2.1 of the License. \r
10 // \r
11 //  This library is distributed in the hope that it will be useful, \r
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of \r
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU \r
14 //  Lesser General Public License for more details. \r
15 // \r
16 //  You should have received a copy of the GNU Lesser General Public \r
17 //  License along with this library; if not, write to the Free Software \r
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA \r
19 // \r
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org \r
21 //\r
22 //\r
23 //\r
24 //  File   : SMESH_Filter_i.hxx\r
25 //  Author : Alexey Petrov, OCC\r
26 //  Module : SMESH\r
27 \r
28 #ifndef _SMESH_FILTER_I_HXX_\r
29 #define _SMESH_FILTER_I_HXX_\r
30 \r
31 #include <SALOMEconfig.h>\r
32 #include CORBA_SERVER_HEADER(SMESH_Filter)\r
33 #include "SALOME_GenericObj_i.hh"\r
34 \r
35 class SMESHDS_Mesh;\r
36 class gp_Pnt;\r
37 class gp_XYZ;\r
38 class TColgp_SequenceOfXYZ;\r
39 \r
40 namespace SMESH{\r
41 \r
42 /*\r
43                                 FUNCTORS\r
44 */\r
45 \r
46 /*\r
47   Class       : NumericalFunctor_i\r
48   Description : Base class for numerical functors \r
49   \r
50     PortableServer::POA_ptr thePOA\r
51 \r
52 */\r
53 \r
54 class NumericalFunctor_i: public virtual POA_SMESH::NumericalFunctor,\r
55                           public virtual SALOME::GenericObj_i\r
56 {\r
57 public:\r
58                           NumericalFunctor_i();\r
59   void                    SetMesh( SMESH_Mesh_ptr theMesh );\r
60   virtual int             GetType() const = 0;\r
61 \r
62 protected:\r
63   bool                    getPoints( const int             theId, \r
64                                      TColgp_SequenceOfXYZ& theRes ) const;\r
65 protected:\r
66   SMESHDS_Mesh*           myMesh;\r
67 };\r
68 \r
69 /*\r
70   Class       : SMESH_MinimumAngleFunct\r
71   Description : Functor for calculation of minimum angle\r
72 */\r
73 \r
74 class MinimumAngle_i: public virtual POA_SMESH::MinimumAngle,\r
75                       public virtual NumericalFunctor_i\r
76 {\r
77 public:\r
78   CORBA::Double           GetValue( CORBA::Long theElementId );\r
79   virtual int             GetType() const;\r
80 };\r
81 \r
82 /*\r
83   Class       : AspectRatio_i\r
84   Description : Functor for calculating aspect ratio\r
85 */\r
86 \r
87 class AspectRatio_i: public virtual POA_SMESH::AspectRatio,\r
88                      public virtual NumericalFunctor_i\r
89 {\r
90 public:\r
91   CORBA::Double           GetValue(CORBA::Long theElementId);\r
92   virtual int             GetType() const;\r
93 };\r
94 \r
95 /*\r
96   Class       : Warping_i\r
97   Description : Functor for calculating warping\r
98 */\r
99 \r
100 class Warping_i: public virtual POA_SMESH::Warping,\r
101                  public virtual NumericalFunctor_i\r
102 {\r
103 public:\r
104   CORBA::Double           GetValue(CORBA::Long theElementId);\r
105   virtual int             GetType() const;\r
106 \r
107 private:\r
108   double                  ComputeA( const gp_XYZ&, const gp_XYZ&, \r
109                                     const gp_XYZ&, const gp_XYZ& ) const;\r
110 };\r
111 \r
112 /*\r
113   Class       : Taper_i\r
114   Description : Functor for calculating taper\r
115 */\r
116 \r
117 class Taper_i: public virtual POA_SMESH::Taper,\r
118                public virtual NumericalFunctor_i\r
119 {\r
120 public:\r
121   CORBA::Double           GetValue( CORBA::Long theElementId );\r
122   virtual int             GetType() const;\r
123 };\r
124 \r
125 /*\r
126   Class       : Skew_i\r
127   Description : Functor for calculating skew in degrees\r
128 */\r
129 \r
130 class Skew_i: public virtual POA_SMESH::Skew,\r
131               public virtual NumericalFunctor_i\r
132 {\r
133 public:\r
134   CORBA::Double           GetValue( CORBA::Long theElementId );\r
135   virtual int             GetType() const;\r
136 };\r
137 \r
138 /*\r
139   Class       : Area_i\r
140   Description : Functor for calculating area\r
141 */\r
142 \r
143 class Area_i: public virtual POA_SMESH::Area,\r
144               public virtual NumericalFunctor_i\r
145 {\r
146 public:\r
147   CORBA::Double           GetValue( CORBA::Long theElementId );\r
148   virtual int             GetType() const;\r
149 };\r
150 \r
151 /*\r
152   Class       : Length_i\r
153   Description : Functor for calculating length of edge\r
154 */\r
155 \r
156 class Length_i: public virtual POA_SMESH::Length,\r
157                 public virtual NumericalFunctor_i\r
158 {\r
159 public:\r
160   CORBA::Double           GetValue( CORBA::Long theElementId );\r
161   virtual int             GetType() const;\r
162 };\r
163 \r
164 /*\r
165   Class       : MultiConnection_i\r
166   Description : Functor for calculating number of faces conneted to the edge\r
167 */\r
168 \r
169 class MultiConnection_i: public virtual POA_SMESH::MultiConnection,\r
170                         public virtual NumericalFunctor_i\r
171 {\r
172 public:\r
173   CORBA::Double           GetValue( CORBA::Long theElementId );\r
174   virtual int             GetType() const;\r
175 };\r
176 \r
177 \r
178 /*\r
179                             PREDICATES\r
180 */\r
181 \r
182 /*\r
183   Class       : Predicate_i\r
184   Description : Base class for all predicates\r
185 */\r
186 \r
187 class Predicate_i: public virtual POA_SMESH::Predicate,\r
188                    public virtual SALOME::GenericObj_i\r
189 {\r
190 public:\r
191                           Predicate_i();\r
192   virtual int             GetType() const = 0;\r
193 };\r
194 \r
195 \r
196 /*\r
197   Class       : FreeBorders_i\r
198   Description : Predicate for free borders\r
199 */\r
200 \r
201 class FreeBorders_i: public virtual POA_SMESH::FreeBorders,\r
202                      public virtual Predicate_i\r
203 {\r
204 public:\r
205                           FreeBorders_i();\r
206   void                    SetMesh( SMESH_Mesh_ptr theMesh );\r
207   CORBA::Boolean          IsSatisfy( CORBA::Long theElementId );\r
208   virtual int             GetType() const;\r
209 \r
210 protected:\r
211   SMESHDS_Mesh*           myMesh;\r
212 };\r
213 \r
214 /*\r
215   Class       : Comparator_i\r
216   Description : Base class for comparators\r
217 */\r
218 \r
219 class Comparator_i: public virtual POA_SMESH::Comparator,\r
220                     public virtual Predicate_i\r
221 {\r
222 public:\r
223                           Comparator_i();\r
224   virtual                 ~Comparator_i();\r
225 \r
226   void                    SetMesh( SMESH_Mesh_ptr theMesh );\r
227   void                    SetMargin( CORBA::Double );\r
228   void                    SetNumFunctor( NumericalFunctor_ptr );\r
229 \r
230   virtual int             GetType() const;\r
231 \r
232 protected:\r
233   CORBA::Double           myMargin;\r
234   NumericalFunctor_i*     myFunctor;\r
235 };\r
236 \r
237 /*\r
238   Class       : LessThan_i\r
239   Description : Comparator "<"\r
240 */\r
241 \r
242 class LessThan_i: public virtual POA_SMESH::LessThan,\r
243                   public virtual Comparator_i\r
244 {\r
245 public:\r
246   CORBA::Boolean          IsSatisfy( CORBA::Long theElementId );\r
247 };\r
248 \r
249 /*\r
250   Class       : MoreThan_i\r
251   Description : Comparator ">"\r
252 */\r
253 class MoreThan_i: public virtual POA_SMESH::MoreThan,\r
254                   public virtual Comparator_i\r
255 {\r
256 public:\r
257   CORBA::Boolean          IsSatisfy( CORBA::Long theElementId );\r
258 };\r
259 \r
260 /*\r
261   Class       : EqualTo_i\r
262   Description : Comparator "="\r
263 */\r
264 class EqualTo_i: public virtual POA_SMESH::EqualTo,\r
265                  public virtual Comparator_i\r
266 {\r
267 public:\r
268                           EqualTo_i();\r
269 \r
270   CORBA::Boolean          IsSatisfy( CORBA::Long theElementId );\r
271 \r
272   void                    SetTolerance( CORBA::Double );\r
273 \r
274 private:\r
275   CORBA::Double           myToler;\r
276 };\r
277 \r
278 /*\r
279   Class       : Logical_i\r
280   Description : Base class for logical predicate\r
281 */\r
282 \r
283 class Logical_i: public virtual POA_SMESH::Logical,\r
284                  public virtual Predicate_i\r
285   \r
286 {\r
287 };\r
288 \r
289 /*\r
290   Class       : LogicalNOT_i\r
291   Description : Logical NOT predicate\r
292 */\r
293 \r
294 class LogicalNOT_i: public virtual POA_SMESH::LogicalNOT,\r
295                     public virtual Logical_i\r
296 {\r
297 public:\r
298                           LogicalNOT_i();\r
299   virtual                 ~LogicalNOT_i();\r
300 \r
301   CORBA::Boolean          IsSatisfy( CORBA::Long );\r
302 \r
303   void                    SetMesh( SMESH_Mesh_ptr );\r
304   void                    SetPredicate( Predicate_ptr );\r
305 \r
306   virtual int             GetType() const;\r
307 \r
308 private:\r
309   Predicate_i*            myPredicate;\r
310 };\r
311 \r
312 \r
313 /*\r
314   Class       : LogicalBinary_i\r
315   Description : Base class for binary logical predicate\r
316 */\r
317 \r
318 class LogicalBinary_i: public virtual POA_SMESH::LogicalBinary,\r
319                                    public virtual Logical_i\r
320 {\r
321 public:\r
322                           LogicalBinary_i();\r
323   virtual                 ~LogicalBinary_i();\r
324 \r
325   void                    SetMesh( SMESH_Mesh_ptr );\r
326 \r
327   void                    SetPredicate1( Predicate_ptr );\r
328   void                    SetPredicate2( Predicate_ptr );\r
329 \r
330   virtual int             GetType() const;\r
331 \r
332 protected:\r
333   Predicate_i*            myPredicate1;\r
334   Predicate_i*            myPredicate2;\r
335 };\r
336 \r
337 /*\r
338   Class       : LogicalAND_i\r
339   Description : Logical AND\r
340 */\r
341 \r
342 class LogicalAND_i: public virtual POA_SMESH::LogicalAND,\r
343                     public virtual LogicalBinary_i\r
344 {\r
345 public:\r
346   CORBA::Boolean          IsSatisfy( CORBA::Long theElementId );\r
347 };\r
348 \r
349 /*\r
350   Class       : LogicalOR_i\r
351   Description : Logical OR\r
352 */\r
353 \r
354 class LogicalOR_i: public virtual POA_SMESH::LogicalOR,\r
355                    public virtual LogicalBinary_i\r
356 {\r
357 public:\r
358   CORBA::Boolean          IsSatisfy( CORBA::Long theElementId );\r
359 };\r
360 \r
361 \r
362 /*\r
363                                FILTER\r
364 */\r
365 \r
366 class Filter_i: public virtual POA_SMESH::Filter,\r
367                       public virtual SALOME::GenericObj_i\r
368 {\r
369 public:\r
370                           Filter_i();\r
371   virtual                 ~Filter_i();\r
372   void                    SetPredicate(Predicate_ptr );\r
373   long_array*             GetElementsId(SMESH_Mesh_ptr );\r
374   void                    SetMesh( SMESH_Mesh_ptr );\r
375 \r
376 protected:\r
377   Predicate_i*            myPredicate;\r
378 };\r
379 \r
380 \r
381 /*\r
382                             FILTER MANAGER\r
383 */\r
384 \r
385 class FilterManager_i: public virtual POA_SMESH::FilterManager,\r
386                                    public virtual SALOME::GenericObj_i\r
387 {\r
388 public:\r
389                           FilterManager_i();\r
390   MinimumAngle_ptr        CreateMinimumAngle();\r
391   AspectRatio_ptr         CreateAspectRatio();\r
392   Warping_ptr             CreateWarping();\r
393   Taper_ptr               CreateTaper();\r
394   Skew_ptr                CreateSkew();\r
395   Area_ptr                CreateArea();\r
396   Length_ptr              CreateLength();\r
397   MultiConnection_ptr     CreateMultiConnection();\r
398   \r
399   FreeBorders_ptr         CreateFreeBorders();\r
400 \r
401   LessThan_ptr            CreateLessThan();\r
402   MoreThan_ptr            CreateMoreThan();\r
403   EqualTo_ptr             CreateEqualTo();\r
404   \r
405   LogicalNOT_ptr          CreateLogicalNOT();\r
406   LogicalAND_ptr          CreateLogicalAND();\r
407   LogicalOR_ptr           CreateLogicalOR();\r
408 \r
409   Filter_ptr              CreateFilter();\r
410 };\r
411 \r
412 \r
413 \r
414 };\r
415 \r
416 \r
417 #endif\r