1 // Copyright (C) 2007-2014 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
27 #if defined PRS_EXPORTS || defined SalomePrs_EXPORTS
28 #define PRS_EXPORT __declspec(dllexport)
30 #define PRS_EXPORT __declspec(dllimport)
37 class SALOME_Displayer;
39 class Handle_SALOME_InteractiveObject;
45 Base class for SALOME graphic object wrappers - presentations.
46 Presentations are temporary objects, so they can be created on the stack.
49 class PRS_EXPORT SALOME_Prs
53 explicit SALOME_Prs( const char* );
56 virtual ~SALOME_Prs() {}
59 const char* GetEntry() const;
61 //! Key method for double dispatch of display operation
62 virtual void DisplayIn( SALOME_View* ) const = 0;
64 //! Key method for double dispatch of erase operation
65 virtual void EraseIn( SALOME_View*, const bool = false ) const = 0;
67 //! Key method for double dispatch of pre-display operation
68 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const = 0;
70 //! Key method for double dispatch of post-display operation
71 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const = 0;
73 //! Key method for double dispatch of pre-erase operation
74 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const = 0;
76 //! Key method for double dispatch of post-erase operation
77 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const = 0;
79 //! Key method for double dispatch of update operation
80 virtual void Update( SALOME_Displayer* ) = 0;
82 //! Should return true, if this presentation contains a graphic object
83 virtual bool IsNull() const = 0;
85 //! Key method for double dispatch of activation of sub-shapes selection
86 virtual void LocalSelectionIn( SALOME_View*, const int ) const = 0;
88 // checks if shape is clippable
89 inline bool IsClippable() const
94 // makes shape clippable/not clippable
95 inline void SetClippable (bool isClippable)
97 myIsClippable = isClippable;
107 Base class for OpenCASCADE graphic object (AIS_InteractiveObject) wrappers.
108 This intermediate class is necessary to avoid dependencies from OCC libs.
111 class PRS_EXPORT SALOME_OCCPrs : public SALOME_Prs
115 explicit SALOME_OCCPrs(const char* e) : SALOME_Prs(e) {}
117 //! It uses double dispatch in order to
118 //! invoke Display() method corresponding to the actual type of presentation.
119 virtual void DisplayIn( SALOME_View* ) const;
121 //! It uses double dispatch in order to
122 //! invoke Erase() method corresponding to the actual type of presentation.
123 virtual void EraseIn( SALOME_View*, const bool = false ) const;
125 //! It uses double dispatch in order to
126 //! invoke BeforeDisplayIn() method corresponding to the actual type of presentation.
127 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
129 //! It uses double dispatch in order to
130 //! invoke AfterDisplayIn() method corresponding to the actual type of presentation.
131 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
133 //! It uses double dispatch in order to
134 //! invoke BeforeEraseIn() method corresponding to the actual type of presentation.
135 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const;
137 //! It uses double dispatch in order to
138 //! invoke AfterEraseIn() method corresponding to the actual type of presentation.
139 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const;
141 //! It uses double dispatch in order to
142 //! invoke Update() method corresponding to the actual type of presentation.
143 virtual void Update( SALOME_Displayer* );
145 //! Key method for double dispatch of activation of sub-shapes selection
146 virtual void LocalSelectionIn( SALOME_View*, const int ) const;
151 Base class for VTK graphic object (vtkActor) wrappers.
152 This intermediate class is necessary to avoid dependencies from VTK libs.
154 class PRS_EXPORT SALOME_VTKPrs : public SALOME_Prs
158 explicit SALOME_VTKPrs(const char* e) : SALOME_Prs(e) {}
160 //! It uses double dispatch in order to
161 //! invoke Display() method corresponding to the actual type of presentation.
162 virtual void DisplayIn( SALOME_View* ) const;
164 //! It uses double dispatch in order to
165 //! invoke Erase() method corresponding to the actual type of presentation.
166 virtual void EraseIn( SALOME_View*, const bool = false ) const;
168 //! It uses double dispatch in order to
169 //! invoke BeforeDisplayIn() method corresponding to the actual type of presentation.
170 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
172 //! It uses double dispatch in order to
173 //! invoke AfterDisplayIn() method corresponding to the actual type of presentation.
174 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
176 //! It uses double dispatch in order to
177 //! invoke BeforeEraseIn() method corresponding to the actual type of presentation.
178 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const;
180 //! It uses double dispatch in order to
181 //! invoke AfterEraseIn() method corresponding to the actual type of presentation.
182 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const;
184 //! It uses double dispatch in order to
185 //! invoke Update() method corresponding to the actual type of presentation.
186 virtual void Update( SALOME_Displayer* );
188 //! Key method for double dispatch of activation of sub-shapes selection
189 virtual void LocalSelectionIn( SALOME_View*, const int ) const;
194 Base class for Plot2d graphic object (Plot2d_Curve) wrappers.
196 class PRS_EXPORT SALOME_Prs2d : public SALOME_Prs
200 explicit SALOME_Prs2d(const char* e) : SALOME_Prs(e) {}
202 //! It uses double dispatch in order to
203 //! invoke Display() method corresponding to the actual type of presentation.
204 virtual void DisplayIn( SALOME_View* ) const;
206 //! It uses double dispatch in order to
207 //! invoke Erase() method corresponding to the actual type of presentation.
208 virtual void EraseIn( SALOME_View*, const bool = false ) const;
210 //! It uses double dispatch in order to
211 //! invoke BeforeDisplayIn() method corresponding to the actual type of presentation.
212 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
214 //! It uses double dispatch in order to
215 //! invoke AfterDisplayIn() method corresponding to the actual type of presentation.
216 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
218 //! It uses double dispatch in order to
219 //! invoke BeforeEraseIn() method corresponding to the actual type of presentation.
220 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const;
222 //! It uses double dispatch in order to
223 //! invoke AfterEraseIn() method corresponding to the actual type of presentation.
224 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const;
226 //! It uses double dispatch in order to
227 //! invoke Update() method corresponding to the actual type of presentation.
228 virtual void Update( SALOME_Displayer* );
230 //! Key method for double dispatch of activation of sub-shapes selection
231 virtual void LocalSelectionIn( SALOME_View*, const int ) const;
235 Base classes for object wrappers for any other visualization libraries should be added here!
239 Base class for SALOME views (or view frames)
241 class PRS_EXPORT SALOME_View
245 virtual ~SALOME_View() {}
247 //! This Display() method should be called to display given presentation
248 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
249 //! so that it could perform double dispatch.
250 void Display( SALOME_Displayer*, const SALOME_Prs* );
252 //! This Erase() method should be called to erase given presentation
253 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
254 //! so that it could perform double dispatch.
255 void Erase( SALOME_Displayer*, const SALOME_Prs*, const bool = false );
257 //! This EraseAll() method should be called to erase all presentations
258 //! created anywhere by anybody.
259 virtual void EraseAll( SALOME_Displayer*, const bool = false );
261 //! This LocalSelection() method should be called to activate sub-shapes selection
262 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
263 //! so that it could perform double dispatch.
264 void LocalSelection( const SALOME_Prs*, const int );
266 // Interface for derived views
268 // Display() methods for ALL kinds of presentation should appear here
269 virtual void Display( const SALOME_OCCPrs* );//!< Display SALOME_OCCPrs presentation.
270 virtual void Display( const SALOME_VTKPrs* );//!< Display SALOME_VTKPrs presentation.
271 virtual void Display( const SALOME_Prs2d* );//!< Display SALOME_Prs2d presentation.
272 // Add new Display() methods here...
274 // Erase() methods for ALL kinds of presentation should appear here
275 virtual void Erase( const SALOME_OCCPrs*, const bool = false );//!< Erase SALOME_OCCPrs
276 virtual void Erase( const SALOME_VTKPrs*, const bool = false );//!< Erase SALOME_VTKPrs
277 virtual void Erase( const SALOME_Prs2d*, const bool = false );//!< Erase SALOME_Prs2d
278 // Add new Erase() methods here...
280 // LocalSelection() methods for ALL kinds of presentation should appear here
281 virtual void LocalSelection( const SALOME_OCCPrs*, const int );//!< Local selection SALOME_OCCPrs
282 virtual void LocalSelection( const SALOME_VTKPrs*, const int );//!< Local selection SALOME_VTKPrs
283 virtual void LocalSelection( const SALOME_Prs2d* , const int );//!< Local selection SALOME_Prs2d
285 //! Deactivates selection of sub-shapes (must be redefined with OCC viewer)
286 virtual void GlobalSelection( const bool = false ) const;
288 //! Creates empty presenation of corresponding type
289 virtual SALOME_Prs* CreatePrs( const char* /*entry*/ = 0 ) { return 0; }
291 // Axiluary methods called before and after displaying of objects
292 virtual void BeforeDisplay( SALOME_Displayer*, const SALOME_Prs* );
293 virtual void AfterDisplay ( SALOME_Displayer*, const SALOME_Prs* );
295 // Axiluary methods called before and after erasing of objects
296 virtual void BeforeErase( SALOME_Displayer*, const SALOME_Prs* );
297 virtual void AfterErase ( SALOME_Displayer*, const SALOME_Prs* );
300 //! \retval Return false.
301 virtual bool isVisible( const Handle_SALOME_InteractiveObject& ){ return false; }
302 virtual void Repaint() {} //!< Null body here.
303 virtual void GetVisible( SALOME_ListIO& theList ) {}
307 \class SALOME_Displayer
308 Base class for SALOME displayers
310 class PRS_EXPORT SALOME_Displayer
314 virtual ~SALOME_Displayer() {/*! Null body here*/}
316 //! This Update() method should be called to update given presentation
317 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
318 //! so that it could perform double dispatch.
319 void UpdatePrs( SALOME_Prs* );
321 // Interface for derived displayers
323 // Update() methods for ALL kinds of presentation should appear here
324 virtual void Update( SALOME_OCCPrs* );//!< Update SALOME_OCCPrs presentation.
325 virtual void Update( SALOME_VTKPrs* );//!< Update SALOME_VTKPrs presentation.
326 virtual void Update( SALOME_Prs2d* );//!< Update SALOME_Prs2d presentation.
327 // Add new Update() methods here...
329 // Axiluary methods called before and after displaying of objects
330 virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
331 virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
332 virtual void BeforeDisplay( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
333 virtual void AfterDisplay ( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
334 virtual void BeforeDisplay( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
335 virtual void AfterDisplay ( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
337 // Axiluary methods called before and after erasing of objects
338 virtual void BeforeErase( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
339 virtual void AfterErase ( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
340 virtual void BeforeErase( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
341 virtual void AfterErase ( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
342 virtual void BeforeErase( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
343 virtual void AfterErase ( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
345 // Axiluary method called to update visibility state of presentation
346 virtual void UpdateVisibility( SALOME_View*, const SALOME_Prs*, bool );