f376ac72 |
1 | // Created on: 2001-07-02 |
2 | // Created by: Mathias BOSSHARD |
3 | // Copyright (c) 2001-2014 OPEN CASCADE SAS |
4 | // |
5 | // This file is part of Open CASCADE Technology software library. |
6 | // |
7 | // This library is free software; you can redistribute it and/or modify it under |
8 | // the terms of the GNU Lesser General Public License version 2.1 as published |
9 | // by the Free Software Foundation, with special exception defined in the file |
10 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
11 | // distribution for complete text of the license and disclaimer of any warranty. |
12 | // |
13 | // Alternatively, this file may be used under the terms of Open CASCADE |
14 | // commercial license or contractual agreement. |
15 | |
16 | #ifndef _AIS_TexturedShape_HeaderFile |
17 | #define _AIS_TexturedShape_HeaderFile |
18 | |
19 | #include <AIS_Shape.hxx> |
20 | #include <gp_Pnt2d.hxx> |
21 | #include <Graphic3d_NameOfTexture2D.hxx> |
22 | #include <Image_PixMap.hxx> |
23 | #include <Standard_DefineHandle.hxx> |
24 | #include <TCollection_AsciiString.hxx> |
cb389a77 |
25 | #include <Graphic3d_AspectFillArea3d.hxx> |
26 | #include <Graphic3d_Texture2Dmanual.hxx> |
27 | #include <Prs3d_Presentation.hxx> |
28 | #include <PrsMgr_PresentationManager3d.hxx> |
f376ac72 |
29 | |
30 | class Graphic3d_AspectFillArea3d; |
31 | class Graphic3d_Texture2Dmanual; |
f376ac72 |
32 | |
33 | //! This class allows to map textures on shapes. |
34 | //! Presentations modes AIS_WireFrame (0) and AIS_Shaded (1) behave in the same manner as in AIS_Shape, |
35 | //! whilst new modes 2 (bounding box) and 3 (texture mapping) extends it functionality. |
36 | //! |
37 | //! The texture itself is parametrized in (0,1)x(0,1). |
38 | //! Each face of a shape located in UV space is provided with these parameters: |
39 | //! - Umin - starting position in U |
40 | //! - Umax - ending position in U |
41 | //! - Vmin - starting position in V |
42 | //! - Vmax - ending position in V |
43 | //! Each face is triangulated and a texel is assigned to each node. |
44 | //! Facets are then filled using a linear interpolation of texture between each 'three texels'. |
45 | //! User can act on: |
46 | //! - the number of occurrences of the texture on the face |
47 | //! - the position of the origin of the texture |
48 | //! - the scale factor of the texture |
49 | class AIS_TexturedShape : public AIS_Shape |
50 | { |
51 | |
52 | public: //! @name main methods |
53 | |
54 | //! Initializes the textured shape. |
55 | Standard_EXPORT AIS_TexturedShape (const TopoDS_Shape& theShape); |
56 | |
57 | //! Sets the texture source. <theTextureFileName> can specify path to texture image or one of the standard predefined textures. |
58 | //! The accepted file types are those used in Image_AlienPixMap with extensions such as rgb, png, jpg and more. |
59 | //! To specify the standard predefined texture, the <theTextureFileName> should contain integer - the Graphic3d_NameOfTexture2D enumeration index. |
60 | //! Setting texture source using this method resets the source pixmap (if was set previously). |
61 | Standard_EXPORT virtual void SetTextureFileName (const TCollection_AsciiString& theTextureFileName); |
62 | |
63 | //! Sets the texture source. <theTexturePixMap> specifies image data. |
64 | //! Please note that the data should be in Bottom-Up order, the flag of Image_PixMap::IsTopDown() will be ignored by graphic driver. |
65 | //! Setting texture source using this method resets the source by filename (if was set previously). |
66 | Standard_EXPORT virtual void SetTexturePixMap (const Image_PixMap_Handle& theTexturePixMap); |
67 | |
68 | //! @return flag to control texture mapping (for presentation mode 3) |
69 | Standard_Boolean TextureMapState() const { return myToMapTexture; } |
70 | |
71 | //! Enables texture mapping |
72 | Standard_EXPORT void SetTextureMapOn(); |
73 | |
74 | //! Disables texture mapping |
75 | Standard_EXPORT void SetTextureMapOff(); |
76 | |
77 | //! @return path to the texture file |
78 | Standard_CString TextureFile() const { return myTextureFile.ToCString(); } |
79 | |
80 | //! @return the source pixmap for texture map |
81 | const Handle(Image_PixMap)& TexturePixMap() const { return myTexturePixMap; } |
82 | |
83 | public: //! @name methods to alter texture mapping properties |
84 | |
85 | //! Use this method to display the textured shape without recomputing the whole presentation. |
86 | //! Use this method when ONLY the texture content has been changed. |
87 | //! If other parameters (ie: scale factors, texture origin, texture repeat...) have changed, the whole presentation has to be recomputed: |
88 | //! @code |
89 | //! if (myShape->DisplayMode() == 3) |
90 | //! { |
91 | //! myAISContext->RecomputePrsOnly (myShape); |
92 | //! } |
93 | //! else |
94 | //! { |
95 | //! myAISContext->SetDisplayMode (myShape, 3, Standard_False); |
96 | //! myAISContext->Display (myShape, Standard_True); |
97 | //! } |
98 | //! @endcode |
99 | Standard_EXPORT void UpdateAttributes(); |
100 | |
7389f96d |
101 | //! Sets the color |
102 | Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor); |
103 | |
f376ac72 |
104 | //! Enables texture modulation |
105 | Standard_EXPORT void EnableTextureModulate(); |
106 | |
107 | //! Disables texture modulation |
108 | Standard_EXPORT void DisableTextureModulate(); |
109 | |
110 | //! @return texture repeat flag |
111 | Standard_Boolean TextureRepeat() const { return myToRepeat; } |
112 | |
113 | //! @return texture repeat U value |
114 | Standard_Real URepeat() const { return myUVRepeat.X(); } |
115 | |
116 | //! @return texture repeat V value |
117 | Standard_Real VRepeat() const { return myUVRepeat.Y(); } |
118 | |
119 | //! Sets the number of occurrences of the texture on each face. The texture itself is parameterized in (0,1) by (0,1). |
120 | //! Each face of the shape to be textured is parameterized in UV space (Umin,Umax) by (Vmin,Vmax). |
121 | //! If RepeatYN is set to false, texture coordinates are clamped in the range (0,1)x(0,1) of the face. |
122 | Standard_EXPORT void SetTextureRepeat (const Standard_Boolean theToRepeat, |
123 | const Standard_Real theURepeat = 1.0, |
124 | const Standard_Real theVRepeat = 1.0); |
125 | |
126 | //! @return true if texture UV origin has been modified |
127 | Standard_Boolean TextureOrigin() const { return myIsCustomOrigin; } |
128 | |
129 | //! @return texture origin U position (0.0 by default) |
130 | Standard_Real TextureUOrigin() const { return myUVOrigin.X(); } |
131 | |
132 | //! @return texture origin V position (0.0 by default) |
133 | Standard_Real TextureVOrigin() const { return myUVOrigin.Y(); } |
134 | |
135 | //! Use this method to change the origin of the texture. The texel (0,0) will be mapped to the surface (UOrigin,VOrigin) |
136 | Standard_EXPORT void SetTextureOrigin (const Standard_Boolean theToSetTextureOrigin, |
137 | const Standard_Real theUOrigin = 0.0, |
138 | const Standard_Real theVOrigin = 0.0); |
139 | |
140 | //! @return true if scale factor should be applied to texture mapping |
141 | Standard_Boolean TextureScale() const { return myToScale; } |
142 | |
143 | //! @return scale factor for U coordinate (1.0 by default) |
144 | Standard_Real TextureScaleU() const { return myUVScale.X(); } |
145 | |
146 | //! @return scale factor for V coordinate (1.0 by default) |
147 | Standard_Real TextureScaleV() const { return myUVScale.Y(); } |
148 | |
149 | //! Use this method to scale the texture (percent of the face). |
150 | //! You can specify a scale factor for both U and V. |
151 | //! Example: if you set ScaleU and ScaleV to 0.5 and you enable texture repeat, |
152 | //! the texture will appear twice on the face in each direction. |
153 | Standard_EXPORT void SetTextureScale (const Standard_Boolean theToSetTextureScale, |
154 | const Standard_Real theScaleU = 1.0, |
155 | const Standard_Real theScaleV = 1.0); |
156 | |
157 | //! @return true if displaying of triangles is requested |
158 | Standard_Boolean ShowTriangles() const { return myToShowTriangles; } |
159 | |
160 | //! Use this method to show the triangulation of the shape (for debugging etc.). |
7ccd27ca |
161 | Standard_EXPORT void ShowTriangles (const Standard_Boolean theToShowTriangles); |
f376ac72 |
162 | |
163 | //! @return true if texture color modulation is turned on |
164 | Standard_Boolean TextureModulate() const { return myModulate; } |
165 | |
166 | protected: //! @name overridden methods |
167 | |
168 | //! Compute presentation with texture mapping support. |
169 | Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& thePrsMgr, |
170 | const Handle(Prs3d_Presentation)& thePrs, |
171 | const Standard_Integer theMode); |
172 | |
8e3ebc7a |
173 | Standard_EXPORT void updateAttributes (const Handle(Prs3d_Presentation)& thePrs); |
174 | |
f376ac72 |
175 | protected: //! @name presentation fields |
176 | |
177 | Handle(Graphic3d_Texture2Dmanual) myTexture; |
178 | Handle(Graphic3d_AspectFillArea3d) myAspect; |
179 | |
180 | protected: //! @name texture source fields |
181 | |
182 | Handle(Image_PixMap) myTexturePixMap; |
183 | TCollection_AsciiString myTextureFile; |
184 | Graphic3d_NameOfTexture2D myPredefTexture; |
185 | |
186 | protected: //! @name texture mapping properties |
187 | |
188 | Standard_Boolean myToMapTexture; |
189 | Standard_Boolean myModulate; |
190 | gp_Pnt2d myUVOrigin; |
191 | Standard_Boolean myIsCustomOrigin; |
192 | gp_Pnt2d myUVRepeat; |
193 | Standard_Boolean myToRepeat; |
194 | gp_Pnt2d myUVScale; |
195 | Standard_Boolean myToScale; |
196 | Standard_Boolean myToShowTriangles; |
197 | |
198 | public: |
199 | |
200 | DEFINE_STANDARD_RTTI (AIS_TexturedShape) |
201 | |
202 | }; |
203 | |
204 | DEFINE_STANDARD_HANDLE (AIS_TexturedShape, AIS_Shape) |
205 | |
206 | #endif // _AIS_TexturedShape_HeaderFile |