Salome HOME
Merge from OCC_development_generic_2006
[modules/gui.git] / src / SVTK / SVTK_Functor.h
1 // Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
2 // 
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either 
6 // version 2.1 of the License.
7 // 
8 // This library is distributed in the hope that it will be useful 
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public  
14 // License along with this library; if not, write to the Free Software 
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/
18 //
19 #ifndef SVTK_Functor_H
20 #define SVTK_Functor_H
21
22 #include <functional>
23
24 #include <string>
25
26 #include <VTKViewer_Functor.h>
27
28 #include "SALOME_InteractiveObject.hxx"
29
30 /*!
31   \file SVTK_Functor.h
32   This file contains numbers of functors that allows user to perform corresponding operations with existing presentations.
33   Combination with algorithms it gives powerful, flexible and simple to extend way to introduce new type of operation.
34 */
35
36 namespace SVTK
37 {
38   using namespace VTK;
39
40   //! This functor check, if the actor have pointed entry
41   template<class TActor> 
42   struct TIsSameEntry
43   {
44     std::string myEntry;
45     //! To construct the functor
46     TIsSameEntry(const char* theEntry): 
47       myEntry(theEntry) 
48     {}
49     //! To calculate the functor
50     bool operator()(TActor* theActor)
51     {
52       if ( theActor->hasIO() )
53       {
54         Handle(SALOME_InteractiveObject) anIO = theActor->getIO();
55         if ( anIO->hasEntry() )
56           return myEntry == anIO->getEntry();
57       }
58       return false;
59     }
60   };
61
62
63   //----------------------------------------------------------------
64   //! This functor check, if the actor point to the same #SALOME_InteractiveObject
65   template<class TActor> 
66   struct TIsSameIObject
67   {
68     Handle(SALOME_InteractiveObject) myIObject;
69     //! To construct the functor
70     TIsSameIObject(const Handle(SALOME_InteractiveObject)& theIObject):
71       myIObject(theIObject)
72     {}
73     //! To calculate the functor
74     bool operator()(TActor* theActor)
75     {
76       if(theActor->hasIO())
77       {
78         Handle(SALOME_InteractiveObject) anIO = theActor->getIO();
79         return myIObject->isSame(anIO);
80       }
81       return false;
82     }
83   };
84
85
86   //----------------------------------------------------------------
87   /*!
88     This highlight every input actor
89   */
90   template<class TActor> 
91   struct THighlight
92   {
93     bool myIsHighlight;
94     //! To construct the functor
95     THighlight(bool theIsHighlight):
96       myIsHighlight( theIsHighlight ) 
97     {}
98     //! To calculate the functor
99     void operator()(TActor* theActor) 
100     {
101       if(theActor->GetVisibility() && theActor->GetMapper())
102         theActor->highlight( myIsHighlight );
103     }
104   };
105
106 }
107
108
109 #endif