Salome HOME
NRI : KERNEL is now defined in KERNELCatalog.
[modules/kernel.git] / src / OCCViewer / OCCViewer_VService.cxx
1 using namespace std;
2 //  File      : OCCViewer_VService.cxx
3 //  Created   : Wed Mar 20 10:36:38 2002
4 //  Author    : GG, FMN, Nicolas REJNERI
5 //  Project   : SALOME
6 //  Module    : OCCViewer
7 //  Copyright : Open CASCADE 2002
8 //  $Header$
9
10 #include "OCCViewer_VService.h"
11
12 // Open CASCADE Includes
13 #include <V3d_Viewer.hxx>
14 #include <V3d_View.hxx>
15 #include <Viewer_Viewer.hxx>
16
17 #include <V2d_Viewer.hxx>
18 #include <V2d_View.hxx>
19 #include <Viewer_Viewer.hxx>
20
21 #ifdef WNT
22 #include <WNT_Window.hxx>
23 #include <Graphic3d_WNTGraphicDevice.hxx>
24 #include <WNT_GraphicDevice.hxx>
25 #include <WNT_GraphicDevice.hxx>
26 #include <WNT_WDriver.hxx>
27 #else
28 #include <Xw_Window.hxx>
29 #include <Graphic3d_GraphicDevice.hxx>
30 #include <Xw_Driver.hxx>
31 #include <Xdps_Driver.hxx>
32 #include <Xw_TypeOfMapping.hxx>
33 #endif
34
35 // For 2d
36 #define LOPTIM
37 #ifdef WNT
38 #ifndef LOPTIM
39 static Handle(WNT_GraphicDevice) XServiceDefault2dDevice;
40 static Handle(WNT_GraphicDevice) XServiceImageDevice;
41 #else 
42 static Handle(WNT_GraphicDevice)& _XServiceDefault2dDevice() {
43 static Handle(WNT_GraphicDevice) XServiceDefault2dDevice;
44 return XServiceDefault2dDevice;
45 }
46 #define XServiceDefault2dDevice _XServiceDefault2dDevice()
47
48 static Handle(WNT_GraphicDevice)& _XServiceImageDevice() {
49 static Handle(WNT_GraphicDevice) XServiceImageDevice;
50 return XServiceImageDevice;
51 }
52 #define XServiceImageDevice _XServiceImageDevice()
53 #endif // LOPTIM
54 #else
55 #ifndef LOPTIM
56 static Handle(Xw_GraphicDevice) XServiceDefault2dDevice;
57 static Handle(Xw_GraphicDevice) XServiceImageDevice;
58 #else 
59 static Handle(Xw_GraphicDevice)& _XServiceDefault2dDevice() {
60 static Handle(Xw_GraphicDevice) XServiceDefault2dDevice;
61 return XServiceDefault2dDevice;
62 }
63 #define XServiceDefault2dDevice _XServiceImageDevice()
64
65 static Handle(Xw_GraphicDevice)& _XServiceImageDevice() {
66 static Handle(Xw_GraphicDevice) XServiceImageDevice;
67 return XServiceImageDevice;
68 }
69 #define XServiceImageDevice _XServiceImageDevice()
70 #endif // LOPTIM
71 #endif // WNT
72
73
74 // ====================================  3D  ================================================================
75 /*----------------------------------------------------------------------*/
76
77 void OCCViewer_VService::SetWindow (const Handle(V3d_View)& aView,
78                                     const Standard_Integer hiwin,
79                                     const Standard_Integer lowin,
80                                     const Xw_WindowQuality aQuality) 
81 {
82 #ifdef WNT
83   Handle(WNT_Window) w = new WNT_Window(Handle(Graphic3d_WNTGraphicDevice)::DownCast(aView->Viewer()->Device()),hiwin,lowin);
84 #else
85   Handle(Xw_Window) w = new Xw_Window(Handle(Graphic3d_GraphicDevice)::DownCast(aView->Viewer()->Device()),hiwin,lowin,aQuality);
86 #endif
87   aView->SetWindow(w);
88 //  aView->SetShadingModel(V3d_GOURAUD);
89 }
90
91 /*----------------------------------------------------------------------*/
92
93 void OCCViewer_VService::SetMagnify (const Handle(V3d_View)& aView,
94                                      const Standard_Integer hiwin,
95                                      const Standard_Integer lowin,
96                                      const Handle(V3d_View)& aPreviousView,
97                                      const Standard_Integer x1,
98                                      const Standard_Integer y1,
99                                      const Standard_Integer x2,
100                                      const Standard_Integer y2,
101                                      const Xw_WindowQuality aQuality) 
102 {
103 #ifdef WNT
104   Handle(WNT_Window) w = new WNT_Window(Handle(Graphic3d_WNTGraphicDevice)::DownCast(aView->Viewer()->Device()),hiwin,lowin);
105 #else
106   Handle(Xw_Window) w = new Xw_Window(Handle(Graphic3d_GraphicDevice)::DownCast(aView->Viewer()->Device()),hiwin,lowin,aQuality);
107 #endif // WNT
108
109   aView->SetMagnify(w,aPreviousView,x1,y1,x2,y2);
110 //  aView->SetShadingModel(V3d_GOURAUD);
111 //  aView->SetSurfaceDetail(V3d_TEX_NONE);
112 //  aView->SetVisualization(V3d_WIREFRAME);
113 //  aView->SetVisualization(V3d_ZBUFFER);
114 }
115 /*----------------------------------------------------------------------*/
116
117 Handle(V3d_Viewer) OCCViewer_VService::Viewer( const Standard_CString aDisplay,
118                                                const Standard_ExtString aName,
119                                                const Standard_CString aDomain,
120                                                const Standard_Real ViewSize,
121                                                const V3d_TypeOfOrientation ViewProj,
122                                                const Standard_Boolean ComputedMode,
123                                                const Standard_Boolean aDefaultComputedMode )
124 {
125 #ifndef WNT
126 static Handle(Graphic3d_GraphicDevice) defaultdevice;
127     
128  if(defaultdevice.IsNull()) defaultdevice = new Graphic3d_GraphicDevice(aDisplay);
129  return new V3d_Viewer(defaultdevice,aName,aDomain,ViewSize,ViewProj,
130                        Quantity_NOC_GRAY30,V3d_ZBUFFER,V3d_GOURAUD,V3d_WAIT,
131                        ComputedMode,aDefaultComputedMode,V3d_TEX_NONE);
132 #else
133  static Handle(Graphic3d_WNTGraphicDevice) defaultdevice;
134  
135  if(defaultdevice.IsNull()) defaultdevice = new Graphic3d_WNTGraphicDevice();
136  return new V3d_Viewer(defaultdevice,aName,aDomain,ViewSize,ViewProj,
137                        Quantity_NOC_GRAY30,V3d_ZBUFFER,V3d_GOURAUD,V3d_WAIT,
138                        ComputedMode,aDefaultComputedMode,V3d_TEX_NONE);
139 #endif  // WNT
140 }
141
142 /*----------------------------------------------------------------------*/
143 // ====================================  2D  ================================================================
144 Handle(V2d_View) OCCViewer_VService::XView( const Handle(V2d_Viewer)& aViewer,
145                                             const Standard_Integer hiwin,
146                                             const Standard_Integer lowin,
147                                             const Xw_WindowQuality aQuality,
148                                             const Standard_Boolean Update,
149                                             const Quantity_NameOfColor BackColor)
150 {
151 #ifdef WNT
152   Handle(WNT_GraphicDevice) GD = Handle(WNT_GraphicDevice)::DownCast(aViewer->Device());
153   Handle(WNT_Window) W = new WNT_Window(GD,hiwin,lowin,BackColor);
154   Handle(WNT_WDriver) D = new WNT_WDriver(W);
155 #else
156   Handle(Xw_GraphicDevice) GD = Handle(Xw_GraphicDevice)::DownCast(aViewer->Device());
157   Handle(Xw_Window) W = new Xw_Window(GD,hiwin,lowin,aQuality,BackColor);
158   Handle(Xw_Driver) D = new Xw_Driver(W);
159 #endif
160   
161   Handle(V2d_View)  V = new V2d_View(D,aViewer);
162   if(Update) V->Update();
163   return V;
164 }
165
166 Handle(V2d_View)  OCCViewer_VService::XdpsView( const Handle(V2d_Viewer)& aViewer,
167                                                 const Standard_Integer hiwin,
168                                                 const Standard_Integer lowin,
169                                                 const Xw_WindowQuality aQuality,
170                                                 const Standard_Boolean Update,
171                                                 const Quantity_NameOfColor BackColor) 
172 {
173 #ifdef WNT
174   Handle(WNT_GraphicDevice) GD = Handle(WNT_GraphicDevice)::DownCast(aViewer->Device());  
175   Handle(WNT_Window) W = new WNT_Window(GD,hiwin,lowin,BackColor);
176 //POP
177   W->SetBackground(BackColor);
178 //POP
179   Handle(WNT_WDriver) D = new WNT_WDriver(W);
180 #else
181   Handle(Xw_GraphicDevice) GD = Handle(Xw_GraphicDevice)::DownCast(aViewer->Device());  
182   Handle(Xw_Window) W = new Xw_Window(GD,hiwin,lowin,aQuality,BackColor);
183   Handle(Xdps_Driver) D = new Xdps_Driver(W);
184 #endif
185   Handle(V2d_View)  V = new V2d_View(D,aViewer);
186   if(Update) V->Update();
187   return V;
188 }
189
190 Handle(V2d_Viewer) OCCViewer_VService::Viewer( const Standard_CString aDisplay,
191                                                const Standard_ExtString aName,
192                                                const Standard_CString aDomain) 
193 {
194 #ifdef WNT
195   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new WNT_GraphicDevice();
196 #else
197   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new Xw_GraphicDevice(aDisplay,Xw_TOM_READONLY);
198 #endif
199   return new V2d_Viewer(XServiceDefault2dDevice,aName,aDomain);
200 }
201
202 Handle(V2d_Viewer) OCCViewer_VService::Viewer( const Standard_CString aDisplay,
203                                                const Handle(Graphic2d_View)& aView,
204                                                const Standard_ExtString aName,
205                                                const Standard_CString aDomain) 
206 {
207 #ifdef WNT
208   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new WNT_GraphicDevice();
209 #else
210   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new Xw_GraphicDevice(aDisplay,Xw_TOM_READONLY);
211 #endif
212   return new V2d_Viewer(XServiceDefault2dDevice,aView,aName,aDomain);
213 }
214
215 Handle(Aspect_WindowDriver) OCCViewer_VService::WindowDriver( const Standard_CString aDisplay,
216                                                               const Standard_Integer ahiwin,
217                                                               const Standard_Integer alowin,
218                                                               const Quantity_NameOfColor aColor) 
219 {
220 #ifdef WNT
221   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new WNT_GraphicDevice();
222   Handle(WNT_Window) W = new WNT_Window(XServiceDefault2dDevice,ahiwin,alowin,aColor);
223   return new WNT_WDriver(W);
224 #else
225   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new Xw_GraphicDevice(aDisplay,Xw_TOM_READONLY);
226   Handle(Xw_Window) W = new Xw_Window(XServiceDefault2dDevice,ahiwin,alowin,Xw_WQ_DRAWINGQUALITY,aColor);
227   return new Xw_Driver(W);
228 #endif
229 }
230
231 Handle(Aspect_WindowDriver) OCCViewer_VService::XdpsDriver( const Standard_CString aDisplay, 
232                                                             const Standard_Integer ahiwin,
233                                                             const Standard_Integer alowin,
234                                                             const Quantity_NameOfColor aColor) 
235 {
236 #ifdef WNT
237   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new WNT_GraphicDevice();
238   Handle(WNT_Window) W = new WNT_Window(XServiceDefault2dDevice,ahiwin,alowin,aColor);
239   return new WNT_WDriver(W);
240 #else
241   if(XServiceDefault2dDevice.IsNull()) XServiceDefault2dDevice = new Xw_GraphicDevice(aDisplay,Xw_TOM_READONLY);
242   Handle(Xw_Window) W = new Xw_Window(XServiceDefault2dDevice,ahiwin,alowin,Xw_WQ_DRAWINGQUALITY,aColor);
243   return new Xdps_Driver(W);
244 #endif
245 }
246
247 Handle(Aspect_WindowDriver) OCCViewer_VService::ImageDriver( const Standard_CString aDisplay,
248                                                              const Standard_Integer ahiwin, 
249                                                              const Standard_Integer alowin,
250                                                              const Quantity_NameOfColor aColor) 
251 {
252 #ifdef WNT
253   if(XServiceImageDevice.IsNull()) XServiceImageDevice = new WNT_GraphicDevice();
254   Handle(WNT_Window) W = new WNT_Window(XServiceImageDevice,ahiwin,alowin,aColor);
255   return new WNT_WDriver(W);
256 #else
257   if(XServiceImageDevice.IsNull()) XServiceImageDevice = new Xw_GraphicDevice(aDisplay,Xw_TOM_READONLY);
258   Handle(Xw_Window) W = new Xw_Window(XServiceImageDevice,ahiwin,alowin,Xw_WQ_PICTUREQUALITY,aColor);
259   return new Xw_Driver(W);
260 #endif
261 }