0023000: Improve the way the gradient and textured background is managed in 3d viewer
[occt.git] / src / OpenGl / OpenGl_View.hxx
CommitLineData
2166f0fa
SK
1// File: OpenGl_View.hxx
2// Created: 20 September 2011
3// Author: Sergey ZERCHANINOV
4// Copyright: OPEN CASCADE 2011
5
6#ifndef _OpenGl_View_Header
7#define _OpenGl_View_Header
8
9#include <MMgt_TShared.hxx>
10#include <Standard_DefineHandle.hxx>
11
12#include <TColStd_Array2OfReal.hxx>
13#include <NCollection_List.hxx>
14
15#include <Quantity_NameOfColor.hxx>
16#include <Aspect_FillMethod.hxx>
17#include <Aspect_GradientFillMethod.hxx>
18#include <Aspect_TypeOfTriedronPosition.hxx>
19#include <Aspect_CLayer2d.hxx>
20
21#include <InterfaceGraphic_Graphic3d.hxx>
22#include <InterfaceGraphic_Visual3d.hxx>
23
24#include <Graphic3d_CView.hxx>
25#include <Graphic3d_CGraduatedTrihedron.hxx>
26#include <Visual3d_TypeOfSurfaceDetail.hxx>
27
28#include <OpenGl_telem_view.hxx>
29
30#include <OpenGl_Light.hxx>
31#include <OpenGl_PriorityList.hxx>
32
33#include <Handle_OpenGl_Trihedron.hxx>
34#include <Handle_OpenGl_GraduatedTrihedron.hxx>
35#include <Handle_OpenGl_Workspace.hxx>
36#include <Handle_OpenGl_View.hxx>
37
38struct OPENGL_BG_TEXTURE
39{
40 Tuint TexId;
41 Tint Width;
42 Tint Height;
43 Aspect_FillMethod Style;
44};
45
46struct OPENGL_BG_GRADIENT
47{
48 TEL_COLOUR color1;
49 TEL_COLOUR color2;
50 Aspect_GradientFillMethod type;
51};
52
53struct OPENGL_EXTRA_REP
54{
55 Tfloat vrp[3];
56 Tfloat vpn[3];
57 Tfloat vup[3];
58 TEL_VIEW_MAPPING map;
59 Tfloat scaleFactors[3];
60};
61
62struct OPENGL_CLIP_REP
63{
64 Standard_Real equation[4];
65 IMPLEMENT_MEMORY_OPERATORS
66};
67
68struct OPENGL_ZCLIP
69{
70 struct {
71 Standard_Boolean IsOn;
72 Standard_ShortReal Limit; /* in the range [0., 1.] */
73 } Back;
74 struct {
75 Standard_Boolean IsOn;
76 Standard_ShortReal Limit; /* in the range [0., 1.] */
77 } Front;
78};
79
80struct OPENGL_FOG
81{
82 Standard_Boolean IsOn;
83 Standard_ShortReal Front; /* in the range [0., 1.] */
84 Standard_ShortReal Back; /* in the range [0., 1.] */
85 TEL_COLOUR Color;
86};
87
88class OpenGl_Structure;
89
90class OpenGl_View : public MMgt_TShared
91{
92 public:
93 OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext);
94 virtual ~OpenGl_View ();
95
96 void SetTextureEnv (const Standard_Integer AId) { myTextureEnv = AId; }
97 void SetSurfaceDetail (const Visual3d_TypeOfSurfaceDetail AMode) { mySurfaceDetail = AMode; }
98 void SetBackfacing (const Standard_Integer AMode);
99 void SetLights (const CALL_DEF_VIEWCONTEXT &AContext);
100 void SetAntiAliasing (const Standard_Boolean AMode) { myAntiAliasing = AMode; }
101 void SetClippingPlanes (const CALL_DEF_VIEWCONTEXT &AContext);
102 void SetVisualisation (const CALL_DEF_VIEWCONTEXT &AContext);
103
104 void SetClipLimit (const CALL_DEF_VIEW &ACView);
105 void SetMapping (const CALL_DEF_VIEW &ACView);
106 void SetOrientation (const CALL_DEF_VIEW &ACView);
107
108 void SetFog (const CALL_DEF_VIEW &ACView, const Standard_Boolean AFlag);
109
110 void TriedronDisplay (const Aspect_TypeOfTriedronPosition APosition, const Quantity_NameOfColor AColor, const Standard_Real AScale, const Standard_Boolean AsWireframe);
111 void TriedronErase ();
112
113 void GraduatedTrihedronDisplay (const Graphic3d_CGraduatedTrihedron &ACubic);
114 void GraduatedTrihedronErase ();
115
116 Standard_Boolean ProjectObjectToRaster (const Standard_Integer w, const Standard_Integer h,
117 const Standard_ShortReal x, const Standard_ShortReal y, const Standard_ShortReal z,
118 Standard_ShortReal &xr, Standard_ShortReal &yr);
119 Standard_Boolean ProjectRasterToObject (const Standard_Integer w, const Standard_Integer h,
120 const Standard_Integer xr, const Standard_Integer yr,
121 Standard_ShortReal &x, Standard_ShortReal &y, Standard_ShortReal &z);
122 Standard_Boolean ProjectRasterToObjectWithRay (const Standard_Integer w, const Standard_Integer h,
123 const Standard_Integer xr, const Standard_Integer yr,
124 Standard_ShortReal &x, Standard_ShortReal &y, Standard_ShortReal &z,
125 Standard_ShortReal &dx, Standard_ShortReal &dy, Standard_ShortReal &dz);
126 void GetMatrices (TColStd_Array2OfReal& theMatOrient,
127 TColStd_Array2OfReal& theMatMapping,
128 const Standard_Boolean theIsCustom) const;
129
130 Standard_Real Height () const { return (myExtra.map.window.xmax - myExtra.map.window.xmin); }
131 Standard_Real Width () const { return (myExtra.map.window.ymax - myExtra.map.window.ymin); }
132
133 Standard_Integer Backfacing () const { return myBackfacing; }
134
135 const TEL_TRANSFORM_PERSISTENCE * BeginTransformPersistence ( const TEL_TRANSFORM_PERSISTENCE *ATransPers );
136 void EndTransformPersistence ();
137
138 void DisplayStructure (const OpenGl_Structure *AStructure, const Standard_Integer APriority) { myStructures.Add(AStructure,APriority); }
139 void EraseStructure (const OpenGl_Structure *AStructure) { myStructures.Remove(AStructure); }
140
141 void CreateBackgroundTexture (const Standard_CString AFileName, const Aspect_FillMethod AFillStyle);
142 void SetBackgroundTextureStyle (const Aspect_FillMethod FillStyle);
143 void SetBackgroundGradient (const Quantity_Color& AColor1, const Quantity_Color& AColor2, const Aspect_GradientFillMethod AType);
144 void SetBackgroundGradientType (const Aspect_GradientFillMethod AType);
145
146 void Render (const Handle(OpenGl_Workspace) &AWorkspace,
147 const Graphic3d_CView& ACView,
148 const Aspect_CLayer2d& ACUnderLayer,
149 const Aspect_CLayer2d& ACOverLayer);
150
151 // Type definition
152 //
153 DEFINE_STANDARD_RTTI(OpenGl_View)
154
155 protected:
156
157 void RenderStructs (const Handle(OpenGl_Workspace) &AWorkspace);
158 void RedrawLayer2d (const Handle(OpenGl_Workspace) &AWorkspace, const Graphic3d_CView& ACView, const Aspect_CLayer2d& ACLayer);
159
160 Standard_Integer myTextureEnv; //WSTextureEnv
161 Visual3d_TypeOfSurfaceDetail mySurfaceDetail; //WSSurfaceDetail
162 Standard_Integer myBackfacing; //WSBackfacing
163
164 OPENGL_BG_TEXTURE myBgTexture; //WSBgTexture
165 OPENGL_BG_GRADIENT myBgGradient; //WSBgGradient
166
167 //{ myViewRep
168 Tmatrix3 myOrientationMatrix;
169 Tmatrix3 myMappingMatrix;
170
171 //Tint shield_indicator;
172 //TEL_COLOUR shield_colour;
173 //Tint border_indicator;
174 //TEL_COLOUR border_colour;
175 //Tint active_status;
176
177 OPENGL_ZCLIP myZClip;
178 NCollection_List<OPENGL_CLIP_REP> myClippingPlanes;
179
180 OPENGL_EXTRA_REP myExtra;
181 //}
182
183 OPENGL_FOG myFog;
184 Handle(OpenGl_Trihedron) myTrihedron;
185 Handle(OpenGl_GraduatedTrihedron) myGraduatedTrihedron;
186
187 //View_LABViewContext
188 int myVisualization;
189 int myIntShadingMethod;
190
191 //View_LABLight
192 OpenGl_ListOfLight myLights;
193
194 //View_LABPlane
195 //View_LABAliasing
196 Standard_Boolean myAntiAliasing;
197
198 //View_LABDepthCueing - fixed index used
199
200 OpenGl_PriorityList myStructures;
201
202 int myAnimationListIndex;
203 Standard_Boolean myAnimationListReady;
204
205 const TEL_TRANSFORM_PERSISTENCE *myTransPers;
206 Standard_Boolean myIsTransPers;
207
208 Standard_Boolean myResetFLIST;
209
210 public:
211 IMPLEMENT_MEMORY_OPERATORS
212};
213
214#endif //_OpenGl_View_Header