1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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, or (at your option) any later version.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // SALOME VTKViewer : build VTK viewer into Salome desktop
24 // File : VTKViewer_ViewFrame.h
25 // Author : Nicolas REJNERI
27 #ifndef VTKViewer_Algorithm_H
28 #define VTKViewer_Algorithm_H
30 #include "VTKViewer.h"
32 #include <vtkActorCollection.h>
39 * This object should be used to avoid problems with recurring calls of GetActors() method of the vtkRenderer class.
41 * Instead of the following instructions:
43 * vtkRenderer* aRenderer = ...;
44 * vtkActorCollection* anActorCollection = aRenderer->GetActors();
45 * DoSomething( anActorCollection ); // where GetActors() could be called again
47 * A code like the following should be used:
49 * vtkRenderer* aRenderer = ...;
50 * vtkActorCollection* anActorCollection = aRenderer->GetActors();
51 * ActorCollectionCopy aCopy( anActorCollection );
52 * DoSomething( aCopy.GetActors() );
54 struct VTKVIEWER_EXPORT ActorCollectionCopy
56 vtkActorCollection* myActorCollection;
58 ActorCollectionCopy( vtkActorCollection* theActorCollection );
59 ~ActorCollectionCopy();
61 vtkActorCollection* GetActors() const;
64 /*!For each actor(for ex: someActor) from \a theCollection(that can be dynamic cast to type TActor)\n
65 * Call method \a theFun(someActor)
67 template<typename TActor, typename TFunction>
68 TFunction ForEach(vtkActorCollection *theCollection, TFunction theFun)
71 theCollection->InitTraversal();
72 while(vtkActor *anAct = theCollection->GetNextActor())
73 if(TActor *anActor = dynamic_cast<TActor*>(anAct))
79 /*!For each actor(for ex: someActor) from \a theCollection(that can be dynamic cast to type TActor and \n
80 * method \a thePredicate(someActor) return true) \n
81 * Call method \a theFun(someActor)
83 template<typename TActor, typename TPredicate, typename TFunction>
84 TFunction ForEachIf(vtkActorCollection *theCollection,
85 TPredicate thePredicate,
89 theCollection->InitTraversal();
90 while(vtkActor *anAct = theCollection->GetNextActor())
91 if(TActor *anActor = dynamic_cast<TActor*>(anAct))
92 if(thePredicate(anActor))
98 /*!Find actor from collection, that can be dynamicaly cast to \a TActor, \n
99 *and method \a thePredicate(someActor) return true) \n
102 template<typename TActor, typename TPredicate>
103 TActor* Find(vtkActorCollection *theCollection, TPredicate thePredicate)
106 theCollection->InitTraversal();
107 while(vtkActor *anAct = theCollection->GetNextActor())
108 if(TActor *anActor = dynamic_cast<TActor*>(anAct))
109 if(thePredicate(anActor))