1 // Copyright (C) 2007-2024 CEA, EDF, 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)
39 #include <Standard_DefineHandle.hxx>
42 class SALOME_Displayer;
44 class SALOME_InteractiveObject;
48 Base class for SALOME graphic object wrappers - presentations.
49 Presentations are temporary objects, so they can be created on the stack.
52 class PRS_EXPORT SALOME_Prs
56 explicit SALOME_Prs( const char* );
59 virtual ~SALOME_Prs() {}
62 const char* GetEntry() const;
64 //! Key method for double dispatch of display operation
65 virtual void DisplayIn( SALOME_View* ) const = 0;
67 //! Key method for double dispatch of erase operation
68 virtual void EraseIn( SALOME_View*, const bool = false ) const = 0;
70 //! Key method for double dispatch of pre-display operation
71 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const = 0;
73 //! Key method for double dispatch of post-display operation
74 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const = 0;
76 //! Key method for double dispatch of pre-erase operation
77 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const = 0;
79 //! Key method for double dispatch of post-erase operation
80 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const = 0;
82 //! Key method for double dispatch of update operation
83 virtual void Update( SALOME_Displayer* ) = 0;
85 //! Should return true, if this presentation contains a graphic object
86 virtual bool IsNull() const = 0;
88 //! Key method for double dispatch of activation of sub-shapes selection
89 virtual void LocalSelectionIn( SALOME_View*, const int ) const = 0;
90 virtual void LocalSelectionIn( SALOME_View*, const std::list<int> ) const;
92 // checks if shape is clippable
93 inline bool IsClippable() const
98 // makes shape clippable/not clippable
99 inline void SetClippable (bool isClippable)
101 myIsClippable = isClippable;
111 Base class for OpenCASCADE graphic object (AIS_InteractiveObject) wrappers.
112 This intermediate class is necessary to avoid dependencies from OCC libs.
115 class PRS_EXPORT SALOME_OCCPrs : public SALOME_Prs
119 explicit SALOME_OCCPrs(const char* e) : SALOME_Prs(e) {}
121 //! It uses double dispatch in order to
122 //! invoke Display() method corresponding to the actual type of presentation.
123 virtual void DisplayIn( SALOME_View* ) const;
125 //! It uses double dispatch in order to
126 //! invoke Erase() method corresponding to the actual type of presentation.
127 virtual void EraseIn( SALOME_View*, const bool = false ) const;
129 //! It uses double dispatch in order to
130 //! invoke BeforeDisplayIn() method corresponding to the actual type of presentation.
131 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
133 //! It uses double dispatch in order to
134 //! invoke AfterDisplayIn() method corresponding to the actual type of presentation.
135 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
137 //! It uses double dispatch in order to
138 //! invoke BeforeEraseIn() method corresponding to the actual type of presentation.
139 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const;
141 //! It uses double dispatch in order to
142 //! invoke AfterEraseIn() method corresponding to the actual type of presentation.
143 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const;
145 //! It uses double dispatch in order to
146 //! invoke Update() method corresponding to the actual type of presentation.
147 virtual void Update( SALOME_Displayer* );
149 //! Key method for double dispatch of activation of sub-shapes selection
150 virtual void LocalSelectionIn( SALOME_View*, const int ) const;
151 virtual void LocalSelectionIn( SALOME_View*, const std::list<int> ) const;
156 Base class for VTK graphic object (vtkActor) wrappers.
157 This intermediate class is necessary to avoid dependencies from VTK libs.
159 class PRS_EXPORT SALOME_VTKPrs : public SALOME_Prs
163 explicit SALOME_VTKPrs(const char* e) : SALOME_Prs(e) {}
165 //! It uses double dispatch in order to
166 //! invoke Display() method corresponding to the actual type of presentation.
167 virtual void DisplayIn( SALOME_View* ) const;
169 //! It uses double dispatch in order to
170 //! invoke Erase() method corresponding to the actual type of presentation.
171 virtual void EraseIn( SALOME_View*, const bool = false ) const;
173 //! It uses double dispatch in order to
174 //! invoke BeforeDisplayIn() method corresponding to the actual type of presentation.
175 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
177 //! It uses double dispatch in order to
178 //! invoke AfterDisplayIn() method corresponding to the actual type of presentation.
179 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
181 //! It uses double dispatch in order to
182 //! invoke BeforeEraseIn() method corresponding to the actual type of presentation.
183 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const;
185 //! It uses double dispatch in order to
186 //! invoke AfterEraseIn() method corresponding to the actual type of presentation.
187 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const;
189 //! It uses double dispatch in order to
190 //! invoke Update() method corresponding to the actual type of presentation.
191 virtual void Update( SALOME_Displayer* );
193 //! Key method for double dispatch of activation of sub-shapes selection
194 virtual void LocalSelectionIn( SALOME_View*, const int ) const;
198 \class SALOME_PV3DPrs
199 Base class for PV3D graphic object (pqPipelineSource) wrappers.
200 This intermediate class is necessary to avoid dependencies from ParaView libs.
203 class PRS_EXPORT SALOME_PV3DPrs : public SALOME_Prs
207 explicit SALOME_PV3DPrs(const char* e) : SALOME_Prs(e) {}
209 //! It uses double dispatch in order to
210 //! invoke Display() method corresponding to the actual type of presentation.
211 virtual void DisplayIn( SALOME_View* ) const;
213 //! It uses double dispatch in order to
214 //! invoke Erase() method corresponding to the actual type of presentation.
215 virtual void EraseIn( SALOME_View*, const bool = false ) const;
217 //! It uses double dispatch in order to
218 //! invoke BeforeDisplayIn() method corresponding to the actual type of presentation.
219 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
221 //! It uses double dispatch in order to
222 //! invoke AfterDisplayIn() method corresponding to the actual type of presentation.
223 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
225 //! It uses double dispatch in order to
226 //! invoke BeforeEraseIn() method corresponding to the actual type of presentation.
227 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const;
229 //! It uses double dispatch in order to
230 //! invoke AfterEraseIn() method corresponding to the actual type of presentation.
231 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const;
233 //! It uses double dispatch in order to
234 //! invoke Update() method corresponding to the actual type of presentation.
235 virtual void Update( SALOME_Displayer* );
237 //! Key method for double dispatch of activation of sub-shapes selection
238 virtual void LocalSelectionIn( SALOME_View*, const int ) const;
239 virtual void LocalSelectionIn( SALOME_View*, const std::list<int> ) const;
244 Base class for Plot2d graphic object (Plot2d_Curve) wrappers.
246 class PRS_EXPORT SALOME_Prs2d : public SALOME_Prs
250 explicit SALOME_Prs2d(const char* e) : SALOME_Prs(e) {}
252 //! It uses double dispatch in order to
253 //! invoke Display() method corresponding to the actual type of presentation.
254 virtual void DisplayIn( SALOME_View* ) const;
256 //! It uses double dispatch in order to
257 //! invoke Erase() method corresponding to the actual type of presentation.
258 virtual void EraseIn( SALOME_View*, const bool = false ) const;
260 //! It uses double dispatch in order to
261 //! invoke BeforeDisplayIn() method corresponding to the actual type of presentation.
262 virtual void BeforeDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
264 //! It uses double dispatch in order to
265 //! invoke AfterDisplayIn() method corresponding to the actual type of presentation.
266 virtual void AfterDisplayIn( SALOME_Displayer*, SALOME_View* ) const;
268 //! It uses double dispatch in order to
269 //! invoke BeforeEraseIn() method corresponding to the actual type of presentation.
270 virtual void BeforeEraseIn( SALOME_Displayer*, SALOME_View* ) const;
272 //! It uses double dispatch in order to
273 //! invoke AfterEraseIn() method corresponding to the actual type of presentation.
274 virtual void AfterEraseIn( SALOME_Displayer*, SALOME_View* ) const;
276 //! It uses double dispatch in order to
277 //! invoke Update() method corresponding to the actual type of presentation.
278 virtual void Update( SALOME_Displayer* );
280 //! Key method for double dispatch of activation of sub-shapes selection
281 virtual void LocalSelectionIn( SALOME_View*, const int ) const;
285 Base classes for object wrappers for any other visualization libraries should be added here!
289 Base class for SALOME views (or view frames)
291 class PRS_EXPORT SALOME_View
295 virtual ~SALOME_View() {}
297 //! This Display() method should be called to display given presentation
298 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
299 //! so that it could perform double dispatch.
300 void Display( SALOME_Displayer*, const SALOME_Prs* );
302 //! This Erase() method should be called to erase given presentation
303 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
304 //! so that it could perform double dispatch.
305 void Erase( SALOME_Displayer*, const SALOME_Prs*, const bool = false );
307 //! This EraseAll() method should be called to erase all presentations
308 //! created anywhere by anybody.
309 virtual void EraseAll( SALOME_Displayer*, const bool = false );
311 //! This LocalSelection() method should be called to activate sub-shapes selection
312 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
313 //! so that it could perform double dispatch.
314 void LocalSelection( const SALOME_Prs*, const int );
315 void LocalSelection( const SALOME_Prs*, const std::list<int> );
317 // Interface for derived views
319 // Display() methods for ALL kinds of presentation should appear here
320 virtual void Display( const SALOME_OCCPrs* );//!< Display SALOME_OCCPrs presentation.
321 virtual void Display( const SALOME_VTKPrs* );//!< Display SALOME_VTKPrs presentation.
322 virtual void Display( const SALOME_PV3DPrs* );//!< Display SALOME_PV3DPrs presentation.
323 virtual void Display( const SALOME_Prs2d* );//!< Display SALOME_Prs2d presentation.
324 // Add new Display() methods here...
326 // Erase() methods for ALL kinds of presentation should appear here
327 virtual void Erase( const SALOME_OCCPrs*, const bool = false );//!< Erase SALOME_OCCPrs
328 virtual void Erase( const SALOME_VTKPrs*, const bool = false );//!< Erase SALOME_VTKPrs
329 virtual void Erase( const SALOME_PV3DPrs*, const bool = false );//!< Erase SALOME_PV3DPrs
330 virtual void Erase( const SALOME_Prs2d*, const bool = false );//!< Erase SALOME_Prs2d
331 // Add new Erase() methods here...
333 // LocalSelection() methods for ALL kinds of presentation should appear here
334 virtual void LocalSelection( const SALOME_OCCPrs*, const int ); //!< Local selection SALOME_OCCPrs
335 virtual void LocalSelection( const SALOME_OCCPrs*, const std::list<int> );//!< Multiple local selection SALOME_OCCPrs
336 virtual void LocalSelection( const SALOME_VTKPrs*, const int ); //!< Local selection SALOME_VTKPrs
337 virtual void LocalSelection( const SALOME_PV3DPrs*, const int ); //!< Local selection SALOME_PV3DPrs
338 virtual void LocalSelection( const SALOME_Prs2d* , const int ); //!< Local selection SALOME_Prs2d
340 //! Deactivates selection of sub-shapes (must be redefined with OCC viewer)
341 virtual void GlobalSelection( const bool = false ) const;
343 //! Creates empty presentation of corresponding type
344 virtual SALOME_Prs* CreatePrs( const char* /*entry*/ = 0 ) { return 0; }
346 // Axiluary methods called before and after displaying of objects
347 virtual void BeforeDisplay( SALOME_Displayer*, const SALOME_Prs* );
348 virtual void AfterDisplay ( SALOME_Displayer*, const SALOME_Prs* );
350 // Axiluary methods called before and after erasing of objects
351 virtual void BeforeErase( SALOME_Displayer*, const SALOME_Prs* );
352 virtual void AfterErase ( SALOME_Displayer*, const SALOME_Prs* );
355 //! \retval Return false.
356 virtual bool isVisible( const Handle(SALOME_InteractiveObject)& ){ return false; }
357 virtual void Repaint() {} //!< Null body here.
358 virtual void GetVisible( SALOME_ListIO& /*theList*/ ) {}
362 \class SALOME_Displayer
363 Base class for SALOME displayers
365 class PRS_EXPORT SALOME_Displayer
369 virtual ~SALOME_Displayer() {/*! Null body here*/}
371 //! This Update() method should be called to update given presentation
372 //! created anywhere by anybody. It simply passes control to SALOME_Prs object
373 //! so that it could perform double dispatch.
374 void UpdatePrs( SALOME_Prs* );
376 // Interface for derived displayers
378 // Update() methods for ALL kinds of presentation should appear here
379 virtual void Update( SALOME_OCCPrs* );//!< Update SALOME_OCCPrs presentation.
380 virtual void Update( SALOME_VTKPrs* );//!< Update SALOME_VTKPrs presentation.
381 virtual void Update( SALOME_PV3DPrs* );//!< Update SALOME_PV3DPrs presentation.
382 virtual void Update( SALOME_Prs2d* );//!< Update SALOME_Prs2d presentation.
383 // Add new Update() methods here...
385 // Auxiliary methods called before and after displaying of objects
386 virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
387 virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
388 virtual void BeforeDisplay( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
389 virtual void AfterDisplay ( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
390 virtual void BeforeDisplay( SALOME_View*, const SALOME_PV3DPrs* ) {} //! Null body here
391 virtual void AfterDisplay ( SALOME_View*, const SALOME_PV3DPrs* ) {} //! Null body here
392 virtual void BeforeDisplay( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
393 virtual void AfterDisplay ( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
395 // Auxiliary methods called before and after erasing of objects
396 virtual void BeforeErase( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
397 virtual void AfterErase ( SALOME_View*, const SALOME_OCCPrs* ) {} //! Null body here
398 virtual void BeforeErase( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
399 virtual void AfterErase ( SALOME_View*, const SALOME_VTKPrs* ) {} //! Null body here
400 virtual void BeforeErase( SALOME_View*, const SALOME_PV3DPrs* ) {} //! Null body here
401 virtual void AfterErase ( SALOME_View*, const SALOME_PV3DPrs* ) {} //! Null body here
402 virtual void BeforeErase( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
403 virtual void AfterErase ( SALOME_View*, const SALOME_Prs2d* ) {} //! Null body here
405 // Auxiliary method called to update visibility state of presentation
406 virtual void UpdateVisibility( SALOME_View*, const SALOME_Prs*, bool );