0026936: Drawbacks of inlining in new type system in OCCT 7.0 -- automatic
[occt.git] / src / Graphic3d / Graphic3d_AspectFillArea3d.hxx
1 // Created on: 1991-11-04
2 // Created by: NW,JPB,CAL
3 // Copyright (c) 1991-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _Graphic3d_AspectFillArea3d_HeaderFile
18 #define _Graphic3d_AspectFillArea3d_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <Standard_Boolean.hxx>
24 #include <Graphic3d_MaterialAspect.hxx>
25 #include <Standard_Integer.hxx>
26 #include <Standard_ShortReal.hxx>
27 #include <Graphic3d_ShaderProgram.hxx>
28 #include <Aspect_AspectFillArea.hxx>
29 #include <Aspect_InteriorStyle.hxx>
30 #include <Aspect_TypeOfLine.hxx>
31 #include <Standard_Real.hxx>
32 class Graphic3d_TextureMap;
33 class Quantity_Color;
34 class Graphic3d_MaterialAspect;
35
36
37 class Graphic3d_AspectFillArea3d;
38 DEFINE_STANDARD_HANDLE(Graphic3d_AspectFillArea3d, Aspect_AspectFillArea)
39
40 //! This class permits the creation and updating of
41 //! a graphic attribute context for opaque 3d
42 //! primitives (polygons, triangles, quadrilaterals)
43 //! Keywords: Face, FillArea, Triangle, Quadrangle, Polygon,
44 //! TriangleMesh, QuadrangleMesh, Edge, Border, Interior,
45 //! Color, Type, Width, Style, Hatch, Material,
46 //! BackFaceRemoval, DistinguishMode
47 class Graphic3d_AspectFillArea3d : public Aspect_AspectFillArea
48 {
49
50 public:
51
52   
53   //! Creates a context table for fill area primitives
54   //! defined with the following default values:
55   //!
56   //! InteriorStyle       : IS_EMPTY
57   //! InteriorColor       : NOC_CYAN1
58   //! EdgeColor           : NOC_WHITE
59   //! EdgeLineType        : TOL_SOLID
60   //! EdgeWidth           : 1.0
61   //! FrontMaterial       : NOM_BRASS
62   //! BackMaterial        : NOM_BRASS
63   //!
64   //! Display of back-facing filled polygons.
65   //! No distinction between external and internal
66   //! faces of FillAreas.
67   //! The edges are not drawn.
68   //! Polygon offset parameters: mode = Aspect_POM_None, factor = 1., units = 0.
69   Standard_EXPORT Graphic3d_AspectFillArea3d();
70   
71   //! Creates a context table for fill area primitives
72   //! defined with the specified values.
73   //!
74   //! Display of back-facing filled polygons.
75   //! No distinction between external and internal
76   //! faces of FillAreas.
77   //! The edges are not drawn.
78   //! Polygon offset parameters: mode = Aspect_POM_None, factor = 1., units = 0.
79   //! Warning
80   //! EdgeWidth is the "line width scale factor".   The
81   //! nominal line width is 1 pixel.   The width of the line is
82   //! determined by applying the line width scale factor to
83   //! this nominal line width.   The supported line widths
84   //! vary by 1-pixel units.
85   Standard_EXPORT Graphic3d_AspectFillArea3d(const Aspect_InteriorStyle Interior, const Quantity_Color& InteriorColor, const Quantity_Color& EdgeColor, const Aspect_TypeOfLine EdgeLineType, const Standard_Real EdgeWidth, const Graphic3d_MaterialAspect& FrontMaterial, const Graphic3d_MaterialAspect& BackMaterial);
86   
87   //! Allows the display of back-facing filled
88   //! polygons.
89   Standard_EXPORT void AllowBackFace();
90   
91   //! Modifies the surface material of internal faces
92   Standard_EXPORT void SetBackMaterial (const Graphic3d_MaterialAspect& AMaterial);
93   
94   //! Allows distinction between external and internal
95   //! faces of FillAreas.
96   Standard_EXPORT void SetDistinguishOn();
97   
98   //! Forbids distinction between external and internal
99   //! faces of FillAreas.
100   Standard_EXPORT void SetDistinguishOff();
101   
102   //! The edges of FillAreas are drawn.
103   Standard_EXPORT void SetEdgeOn();
104   
105   //! The edges of FillAreas are not drawn.
106   Standard_EXPORT void SetEdgeOff();
107   
108   //! Modifies the surface material of external faces
109   Standard_EXPORT void SetFrontMaterial (const Graphic3d_MaterialAspect& AMaterial);
110   
111   //! Suppress the display of back-facing filled
112   //! polygons.
113   //! A back-facing polygon is defined as a polygon whose
114   //! vertices are in a clockwise order with respect
115   //! to screen coordinates.
116   Standard_EXPORT void SuppressBackFace();
117   
118   Standard_EXPORT void SetTextureMap (const Handle(Graphic3d_TextureMap)& ATexture);
119   
120   Standard_EXPORT void SetTextureMapOn();
121   
122   Standard_EXPORT void SetTextureMapOff();
123   
124   //! Sets up OpenGL polygon offsets mechanism.
125   //! <aMode> parameter can contain various combinations of
126   //! Aspect_PolygonOffsetMode enumeration elements (Aspect_POM_None means
127   //! that polygon offsets are not changed).
128   //! If <aMode> is different from Aspect_POM_Off and Aspect_POM_None, then <aFactor> and <aUnits>
129   //! arguments are used by graphic renderer to calculate a depth offset value:
130   //!
131   //! offset = <aFactor> * m + <aUnits> * r, where
132   //! m - maximum depth slope for the polygon currently being displayed,
133   //! r - minimum window coordinates depth resolution (implementation-specific)
134   //!
135   //! Deafult settings for OCC 3D viewer: mode = Aspect_POM_Fill, factor = 1., units = 0.
136   //!
137   //! Negative offset values move polygons closer to the viewport,
138   //! while positive values shift polygons away.
139   //! Consult OpenGL reference for details (glPolygonOffset function description).
140   Standard_EXPORT void SetPolygonOffsets (const Standard_Integer aMode, const Standard_ShortReal aFactor = 1.0, const Standard_ShortReal aUnits = 0.0);
141   
142   //! Sets up OpenGL/GLSL shader program.
143   Standard_EXPORT void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram);
144   
145   //! Returns the Back Face Removal status.
146   //! Standard_True if SuppressBackFace is activated.
147   Standard_EXPORT Standard_Boolean BackFace() const;
148   
149   //! Returns the Distinguish Mode status.
150   Standard_EXPORT Standard_Boolean Distinguish() const;
151   
152   //! Returns Standard_True if the edges are drawn and
153   //! Standard_False if the edges are not drawn.
154   Standard_EXPORT Standard_Boolean Edge() const;
155   
156   //! Returns the surface material of internal faces
157   Standard_EXPORT const Graphic3d_MaterialAspect& BackMaterial() const;
158   
159   //! Returns the surface material of external faces
160   Standard_EXPORT const Graphic3d_MaterialAspect& FrontMaterial() const;
161   
162   Standard_EXPORT Handle(Graphic3d_TextureMap) TextureMap() const;
163   
164   Standard_EXPORT Standard_Boolean TextureMapState() const;
165   
166   //! Returns current polygon offsets settings.
167   Standard_EXPORT void PolygonOffsets (Standard_Integer& aMode, Standard_ShortReal& aFactor, Standard_ShortReal& aUnits) const;
168   
169   Standard_EXPORT const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const;
170
171
172
173
174   DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d,Aspect_AspectFillArea)
175
176 protected:
177
178
179
180
181 private:
182
183
184   Standard_Boolean DistinguishModeActive;
185   Standard_Boolean EdgeModeActive;
186   Standard_Boolean BackFaceRemovalActive;
187   Handle(Graphic3d_TextureMap) MyTextureMap;
188   Standard_Boolean MyTextureMapState;
189   Graphic3d_MaterialAspect MyFrontMaterial;
190   Graphic3d_MaterialAspect MyBackMaterial;
191   Standard_Integer MyPolygonOffsetMode;
192   Standard_ShortReal MyPolygonOffsetFactor;
193   Standard_ShortReal MyPolygonOffsetUnits;
194   Handle(Graphic3d_ShaderProgram) MyShaderProgram;
195
196
197 };
198
199
200
201
202
203
204
205 #endif // _Graphic3d_AspectFillArea3d_HeaderFile