Salome HOME
ed3fb578c1ee723f6870aa2fe19f1cb273967784
[modules/gui.git] / src / OCCViewer / OCCViewer_VService.cxx
1 /***********************************************************************
2
3      FONCTION :
4      ----------
5         Classe OCCViewer_VService :
6
7      HISTORIQUE DES MODIFICATIONS   :
8      --------------------------------
9       00-09-92 : GG  ; Creation.
10       25-02-98 : FMN ; PERF.27: Optimisation de la création d'une vue à partir d'une vue existante
11
12      REMARQUES :
13      -----------
14
15 ************************************************************************/
16
17 /*----------------------------------------------------------------------*/
18 /*
19  * Includes
20  */
21 //just to load the OpenGl shared library
22 //#include <OpenGl_GraphicDriver.hxx>
23
24 #include "OCCViewer_VService.h"
25 #include <V3d_Viewer.hxx>
26 #include <V3d_View.hxx>
27 #include <Viewer_Viewer.hxx>
28
29 #include <V2d_Viewer.hxx>
30 #include <V2d_View.hxx>
31 #include <Viewer_Viewer.hxx>
32
33 #ifdef WNT
34 #include <WNT_Window.hxx>
35 #include <Graphic3d_WNTGraphicDevice.hxx>
36 #include <WNT_GraphicDevice.hxx>
37 #include <WNT_GraphicDevice.hxx>
38 #include <WNT_WDriver.hxx>
39 #else
40 #include <Xw_Window.hxx>
41 #include <Graphic3d_GraphicDevice.hxx>
42 #include <Xw_Driver.hxx>
43 #include <Xdps_Driver.hxx>
44 #include <Xw_TypeOfMapping.hxx>
45 #endif
46
47 // For 2d
48 #define LOPTIM
49 #ifdef WNT
50 #ifndef LOPTIM
51 static Handle(WNT_GraphicDevice) XServiceDefault2dDevice;
52 static Handle(WNT_GraphicDevice) XServiceImageDevice;
53 #else
54 static Handle(WNT_GraphicDevice)& _XServiceDefault2dDevice() {
55 static Handle(WNT_GraphicDevice) XServiceDefault2dDevice;
56 return XServiceDefault2dDevice;
57 }
58 #define XServiceDefault2dDevice _XServiceDefault2dDevice()
59
60 static Handle(WNT_GraphicDevice)& _XServiceImageDevice() {
61 static Handle(WNT_GraphicDevice) XServiceImageDevice;
62 return XServiceImageDevice;
63 }
64 #define XServiceImageDevice _XServiceImageDevice()
65 #endif // LOPTIM
66 #else
67 #ifndef LOPTIM
68 static Handle(Xw_GraphicDevice) XServiceDefault2dDevice;
69 static Handle(Xw_GraphicDevice) XServiceImageDevice;
70 #else
71 static Handle(Xw_GraphicDevice)& _XServiceDefault2dDevice() {
72 static Handle(Xw_GraphicDevice) XServiceDefault2dDevice;
73 return XServiceDefault2dDevice;
74 }
75 #define XServiceDefault2dDevice _XServiceImageDevice()
76
77 static Handle(Xw_GraphicDevice)& _XServiceImageDevice() {
78 static Handle(Xw_GraphicDevice) XServiceImageDevice;
79 return XServiceImageDevice;
80 }
81 #define XServiceImageDevice _XServiceImageDevice()
82 #endif // LOPTIM
83 #endif // WNT
84
85 /*!
86     Maps CasCade view to the window [ static ]
87 */
88 void OCCViewer_VService::SetWindow( const Handle(V3d_View)& view,
89                                   const Standard_Integer hiwin,
90                                   const Standard_Integer lowin,
91                                   const Xw_WindowQuality quality )
92 {
93 #ifdef WNT
94   Handle(WNT_Window) w =
95       new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin );
96 #else
97   Handle(Xw_Window) w =
98       new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, quality );
99 #endif
100   view->SetWindow( w );
101 }
102
103 /*!
104     Magnifies 'view' based on previous view [ static ]
105 */
106 void OCCViewer_VService::SetMagnify( const Handle(V3d_View)& view,
107                                    const Standard_Integer hiwin,
108                                    const Standard_Integer lowin,
109                                    const Handle(V3d_View)& prevView,
110                                    const Standard_Integer x1,
111                                    const Standard_Integer y1,
112                                    const Standard_Integer x2,
113                                    const Standard_Integer y2,
114                                const Xw_WindowQuality aQuality )
115 {
116 #ifdef WNT
117   Handle(WNT_Window) w =
118       new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin );
119 #else
120   Handle(Xw_Window) w =
121       new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, aQuality );
122 #endif
123   view->SetMagnify( w, prevView, x1, y1, x2, y2 );
124 }
125
126 /*!
127     Creates viewer 3d [ static ]
128 */
129 Handle(V3d_Viewer) OCCViewer_VService::Viewer3d( const Standard_CString aDisplay,
130                                            const Standard_ExtString aName,
131                                            const Standard_CString aDomain,
132                                            const Standard_Real ViewSize ,
133                                            const V3d_TypeOfOrientation ViewProj,
134                                            const Standard_Boolean ComputedMode,
135                                            const Standard_Boolean aDefaultComputedMode )
136 {
137 #ifndef WNT
138     static Handle(Graphic3d_GraphicDevice) defaultdevice;
139     if ( defaultdevice.IsNull() )
140         defaultdevice = new Graphic3d_GraphicDevice( aDisplay );
141     return new V3d_Viewer( defaultdevice, aName, aDomain, ViewSize, ViewProj,
142                            Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT,
143                            ComputedMode, aDefaultComputedMode, V3d_TEX_NONE );
144 #else
145     static Handle(Graphic3d_WNTGraphicDevice) defaultdevice;
146     if ( defaultdevice.IsNull() )
147         defaultdevice = new Graphic3d_WNTGraphicDevice();
148     return new V3d_Viewer( defaultdevice, aName, aDomain, ViewSize, ViewProj,
149                            Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT,
150                            ComputedMode, aDefaultComputedMode, V3d_TEX_NONE);
151 #endif  // WNT
152 }
153
154 /*!
155     Creates view 2D and maps it to the window [ static ]
156 */
157 /*Handle(V2d_View) OCCViewer_VService::View2d( const Handle(V2d_Viewer)& aViewer,
158                                                            const Standard_Integer hiwin,
159                                                            const Standard_Integer lowin,
160                                                            const Xw_WindowQuality aQuality,
161                                                            const Standard_Boolean Update,
162                                                            const Quantity_NameOfColor BackColor )
163 {
164 #ifdef WNT
165     Handle(WNT_GraphicDevice) GD = Handle(WNT_GraphicDevice)::DownCast(aViewer->Device());
166     Handle(WNT_Window) W = new WNT_Window( GD, hiwin, lowin, BackColor );
167     Handle(WNT_WDriver) D = new WNT_WDriver( W );
168 #else
169     Handle(Xw_GraphicDevice) GD = Handle(Xw_GraphicDevice)::DownCast(aViewer->Device());
170     Handle(Xw_Window) W = new Xw_Window( GD, hiwin, lowin, aQuality, BackColor );
171     Handle(Xw_Driver) D = new Xw_Driver( W );
172 #endif
173     Handle(V2d_View)  V = new V2d_View( D, aViewer );
174     if ( Update )
175         V->Update();
176     return V;
177 }*/
178
179 /*!
180     Creates view 2D and maps it to the window [ static ]
181 */
182 /*Handle(V2d_View) OCCViewer_VService::dpsView2d( const Handle(V2d_Viewer)& aViewer,
183                                                               const Standard_Integer hiwin,
184                                                               const Standard_Integer lowin,
185                                                               const Xw_WindowQuality aQuality,
186                                                               const Standard_Boolean Update,
187                                                               const Quantity_NameOfColor BackColor )
188 {
189 #ifdef WNT
190     Handle(WNT_GraphicDevice) GD = Handle(WNT_GraphicDevice)::DownCast(aViewer->Device());
191     Handle(WNT_Window) W = new WNT_Window( GD, hiwin, lowin, BackColor );
192     W->SetBackground( BackColor );
193     Handle(WNT_WDriver) D = new WNT_WDriver( W );
194 #else
195     Handle(Xw_GraphicDevice) GD = Handle(Xw_GraphicDevice)::DownCast(aViewer->Device());
196     Handle(Xw_Window) W = new Xw_Window( GD,  hiwin, lowin, aQuality, BackColor );
197     Handle(Xdps_Driver) D = new Xdps_Driver( W );
198 #endif
199     Handle(V2d_View)  V = new V2d_View( D, aViewer );
200     if ( Update )
201         V->Update();
202     return V;
203 }*/
204
205 /*!
206     Creates viewer 2D [ static ]
207 */
208 /*Handle(V2d_Viewer) OCCViewer_VService::Viewer2d( const Standard_CString aDisplay,
209                                                            const Standard_ExtString aName,
210                                                            const Standard_CString aDomain )
211 {
212 #ifdef WNT
213     if ( XServiceDefault2dDevice.IsNull() )
214         XServiceDefault2dDevice = new WNT_GraphicDevice();
215 #else
216     if ( XServiceDefault2dDevice.IsNull() )
217         XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY );
218 #endif
219     return new V2d_Viewer( XServiceDefault2dDevice, aName, aDomain );
220 }*/
221
222 /*!
223     Creates viewer 2D [ static ]
224 */
225 /*Handle(V2d_Viewer) OCCViewer_VService::Viewer2d( const Standard_CString aDisplay,
226                                                            const Handle(Graphic2d_View)& aView,
227                                                            const Standard_ExtString aName,
228                                                            const Standard_CString aDomain )
229 {
230 #ifdef WNT
231     if ( XServiceDefault2dDevice.IsNull() )
232         XServiceDefault2dDevice = new WNT_GraphicDevice();
233 #else
234     if ( XServiceDefault2dDevice.IsNull() )
235         XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY );
236 #endif
237     return new V2d_Viewer( XServiceDefault2dDevice, aView, aName, aDomain );
238 }*/
239
240 /*!
241     Creates window driver [ static ]
242 */
243 Handle(Aspect_WindowDriver) OCCViewer_VService::WindowDriver( const Standard_CString aDisplay,
244                                                         const Standard_Integer ahiwin,
245                                                         const Standard_Integer alowin,
246                                                         const Quantity_NameOfColor aColor )
247 {
248 #ifdef WNT
249     if ( XServiceDefault2dDevice.IsNull() )
250         XServiceDefault2dDevice = new WNT_GraphicDevice();
251     Handle(WNT_Window) W = new WNT_Window( XServiceDefault2dDevice, ahiwin, alowin, aColor );
252     return new WNT_WDriver( W );
253 #else
254     if ( XServiceDefault2dDevice.IsNull() )
255         XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY );
256     Handle(Xw_Window) W = new Xw_Window( XServiceDefault2dDevice, ahiwin, alowin, Xw_WQ_DRAWINGQUALITY , aColor );
257     return new Xw_Driver( W );
258 #endif
259 }
260
261 /*!
262     Creates Xdps window driver [ static ]
263     On Win32 the same as OCCViewer_VService::WindowDriver()
264 */
265 Handle(Aspect_WindowDriver) OCCViewer_VService::XdpsDriver( const Standard_CString aDisplay,
266                                                       const Standard_Integer ahiwin,
267                                                       const Standard_Integer alowin,
268                                                       const Quantity_NameOfColor aColor )
269 {
270 #ifdef WNT
271     if ( XServiceDefault2dDevice.IsNull() )
272         XServiceDefault2dDevice = new WNT_GraphicDevice();
273     Handle(WNT_Window) W = new WNT_Window( XServiceDefault2dDevice, ahiwin, alowin, aColor );
274     return new WNT_WDriver( W );
275 #else
276     if ( XServiceDefault2dDevice.IsNull() )
277         XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY );
278     Handle(Xw_Window) W = new Xw_Window( XServiceDefault2dDevice, ahiwin, alowin,
279                                          Xw_WQ_DRAWINGQUALITY, aColor );
280     return new Xdps_Driver( W );
281 #endif
282 }
283
284 /*!
285     Creates Xw window driver [ static ]
286     On Win32 the same as OCCViewer_VService::WindowDriver()
287 */
288 Handle(Aspect_WindowDriver) OCCViewer_VService::ImageDriver( const Standard_CString aDisplay,
289                                                        const Standard_Integer ahiwin,
290                                                        const Standard_Integer alowin,
291                                                        const Quantity_NameOfColor aColor )
292 {
293 #ifdef WNT
294     if ( XServiceImageDevice.IsNull() )
295         XServiceImageDevice = new WNT_GraphicDevice();
296     Handle(WNT_Window) W = new WNT_Window( XServiceImageDevice, ahiwin, alowin, aColor );
297     return new WNT_WDriver( W );
298 #else
299     if ( XServiceImageDevice.IsNull() )
300         XServiceImageDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY );
301     Handle(Xw_Window) W = new Xw_Window( XServiceImageDevice, ahiwin, alowin,
302                                          Xw_WQ_PICTUREQUALITY, aColor );
303     return new Xw_Driver( W );
304 #endif
305 }