|
||||
File indexing completed on 2025-01-18 10:02:55
0001 // Created on: 2001-07-02 0002 // Created by: Mathias BOSSHARD 0003 // Copyright (c) 2001-2014 OPEN CASCADE SAS 0004 // 0005 // This file is part of Open CASCADE Technology software library. 0006 // 0007 // This library is free software; you can redistribute it and/or modify it under 0008 // the terms of the GNU Lesser General Public License version 2.1 as published 0009 // by the Free Software Foundation, with special exception defined in the file 0010 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 0011 // distribution for complete text of the license and disclaimer of any warranty. 0012 // 0013 // Alternatively, this file may be used under the terms of Open CASCADE 0014 // commercial license or contractual agreement. 0015 0016 #ifndef _AIS_TexturedShape_HeaderFile 0017 #define _AIS_TexturedShape_HeaderFile 0018 0019 #include <AIS_Shape.hxx> 0020 #include <gp_Pnt2d.hxx> 0021 #include <Graphic3d_NameOfTexture2D.hxx> 0022 #include <Image_PixMap.hxx> 0023 #include <Standard_Type.hxx> 0024 #include <TCollection_AsciiString.hxx> 0025 #include <Graphic3d_AspectFillArea3d.hxx> 0026 #include <Prs3d_Presentation.hxx> 0027 #include <PrsMgr_PresentationManager.hxx> 0028 0029 class Graphic3d_AspectFillArea3d; 0030 class Graphic3d_Texture2D; 0031 0032 //! This class allows to map textures on shapes. 0033 //! Presentations modes AIS_WireFrame (0) and AIS_Shaded (1) behave in the same manner as in AIS_Shape, 0034 //! whilst new modes 2 (bounding box) and 3 (texture mapping) extends it functionality. 0035 //! 0036 //! The texture itself is parametrized in (0,1)x(0,1). 0037 //! Each face of a shape located in UV space is provided with these parameters: 0038 //! - Umin - starting position in U 0039 //! - Umax - ending position in U 0040 //! - Vmin - starting position in V 0041 //! - Vmax - ending position in V 0042 //! Each face is triangulated and a texel is assigned to each node. 0043 //! Facets are then filled using a linear interpolation of texture between each 'three texels'. 0044 //! User can act on: 0045 //! - the number of occurrences of the texture on the face 0046 //! - the position of the origin of the texture 0047 //! - the scale factor of the texture 0048 class AIS_TexturedShape : public AIS_Shape 0049 { 0050 0051 public: //! @name main methods 0052 0053 //! Initializes the textured shape. 0054 Standard_EXPORT AIS_TexturedShape (const TopoDS_Shape& theShape); 0055 0056 //! Sets the texture source. <theTextureFileName> can specify path to texture image or one of the standard predefined textures. 0057 //! The accepted file types are those used in Image_AlienPixMap with extensions such as rgb, png, jpg and more. 0058 //! To specify the standard predefined texture, the <theTextureFileName> should contain integer - the Graphic3d_NameOfTexture2D enumeration index. 0059 //! Setting texture source using this method resets the source pixmap (if was set previously). 0060 Standard_EXPORT virtual void SetTextureFileName (const TCollection_AsciiString& theTextureFileName); 0061 0062 //! Sets the texture source. <theTexturePixMap> specifies image data. 0063 //! Please note that the data should be in Bottom-Up order, the flag of Image_PixMap::IsTopDown() will be ignored by graphic driver. 0064 //! Setting texture source using this method resets the source by filename (if was set previously). 0065 Standard_EXPORT virtual void SetTexturePixMap (const Handle(Image_PixMap)& theTexturePixMap); 0066 0067 //! @return flag to control texture mapping (for presentation mode 3) 0068 Standard_Boolean TextureMapState() const { return myToMapTexture; } 0069 0070 //! Enables texture mapping 0071 Standard_EXPORT void SetTextureMapOn(); 0072 0073 //! Disables texture mapping 0074 Standard_EXPORT void SetTextureMapOff(); 0075 0076 //! @return path to the texture file 0077 Standard_CString TextureFile() const { return myTextureFile.ToCString(); } 0078 0079 //! @return the source pixmap for texture map 0080 const Handle(Image_PixMap)& TexturePixMap() const { return myTexturePixMap; } 0081 0082 public: //! @name methods to alter texture mapping properties 0083 0084 //! Use this method to display the textured shape without recomputing the whole presentation. 0085 //! Use this method when ONLY the texture content has been changed. 0086 //! If other parameters (ie: scale factors, texture origin, texture repeat...) have changed, the whole presentation has to be recomputed: 0087 //! @code 0088 //! if (myShape->DisplayMode() == 3) 0089 //! { 0090 //! myAISContext->RecomputePrsOnly (myShape); 0091 //! } 0092 //! else 0093 //! { 0094 //! myAISContext->SetDisplayMode (myShape, 3, Standard_False); 0095 //! myAISContext->Display (myShape, Standard_True); 0096 //! } 0097 //! @endcode 0098 Standard_EXPORT void UpdateAttributes(); 0099 0100 //! Sets the color. 0101 Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor) Standard_OVERRIDE; 0102 0103 //! Removes settings for the color. 0104 Standard_EXPORT virtual void UnsetColor() Standard_OVERRIDE; 0105 0106 //! Sets the material aspect. 0107 Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theAspect) Standard_OVERRIDE; 0108 0109 //! Removes settings for material aspect. 0110 Standard_EXPORT virtual void UnsetMaterial() Standard_OVERRIDE; 0111 0112 //! Enables texture modulation 0113 Standard_EXPORT void EnableTextureModulate(); 0114 0115 //! Disables texture modulation 0116 Standard_EXPORT void DisableTextureModulate(); 0117 0118 //! @return texture repeat flag 0119 Standard_Boolean TextureRepeat() const { return myToRepeat; } 0120 0121 //! @return texture repeat U value 0122 Standard_Real URepeat() const { return myUVRepeat.X(); } 0123 0124 //! @return texture repeat V value 0125 Standard_Real VRepeat() const { return myUVRepeat.Y(); } 0126 0127 //! Sets the number of occurrences of the texture on each face. The texture itself is parameterized in (0,1) by (0,1). 0128 //! Each face of the shape to be textured is parameterized in UV space (Umin,Umax) by (Vmin,Vmax). 0129 //! If RepeatYN is set to false, texture coordinates are clamped in the range (0,1)x(0,1) of the face. 0130 Standard_EXPORT void SetTextureRepeat (const Standard_Boolean theToRepeat, 0131 const Standard_Real theURepeat = 1.0, 0132 const Standard_Real theVRepeat = 1.0); 0133 0134 //! @return true if texture UV origin has been modified 0135 Standard_Boolean TextureOrigin() const { return myIsCustomOrigin; } 0136 0137 //! @return texture origin U position (0.0 by default) 0138 Standard_Real TextureUOrigin() const { return myUVOrigin.X(); } 0139 0140 //! @return texture origin V position (0.0 by default) 0141 Standard_Real TextureVOrigin() const { return myUVOrigin.Y(); } 0142 0143 //! Use this method to change the origin of the texture. The texel (0,0) will be mapped to the surface (UOrigin,VOrigin) 0144 Standard_EXPORT void SetTextureOrigin (const Standard_Boolean theToSetTextureOrigin, 0145 const Standard_Real theUOrigin = 0.0, 0146 const Standard_Real theVOrigin = 0.0); 0147 0148 //! @return true if scale factor should be applied to texture mapping 0149 Standard_Boolean TextureScale() const { return myToScale; } 0150 0151 //! @return scale factor for U coordinate (1.0 by default) 0152 Standard_Real TextureScaleU() const { return myUVScale.X(); } 0153 0154 //! @return scale factor for V coordinate (1.0 by default) 0155 Standard_Real TextureScaleV() const { return myUVScale.Y(); } 0156 0157 //! Use this method to scale the texture (percent of the face). 0158 //! You can specify a scale factor for both U and V. 0159 //! Example: if you set ScaleU and ScaleV to 0.5 and you enable texture repeat, 0160 //! the texture will appear twice on the face in each direction. 0161 Standard_EXPORT void SetTextureScale (const Standard_Boolean theToSetTextureScale, 0162 const Standard_Real theScaleU = 1.0, 0163 const Standard_Real theScaleV = 1.0); 0164 0165 //! @return true if displaying of triangles is requested 0166 Standard_Boolean ShowTriangles() const { return myToShowTriangles; } 0167 0168 //! Use this method to show the triangulation of the shape (for debugging etc.). 0169 Standard_EXPORT void ShowTriangles (const Standard_Boolean theToShowTriangles); 0170 0171 //! @return true if texture color modulation is turned on 0172 Standard_Boolean TextureModulate() const { return myModulate; } 0173 0174 //! Return true if specified display mode is supported (extends AIS_Shape with Display Mode 3). 0175 virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) const Standard_OVERRIDE { return theMode >= 0 && theMode <= 3; } 0176 0177 protected: //! @name overridden methods 0178 0179 //! Compute presentation with texture mapping support. 0180 Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr, 0181 const Handle(Prs3d_Presentation)& thePrs, 0182 const Standard_Integer theMode) Standard_OVERRIDE; 0183 0184 Standard_EXPORT void updateAttributes (const Handle(Prs3d_Presentation)& thePrs); 0185 0186 protected: //! @name presentation fields 0187 0188 Handle(Graphic3d_Texture2D) myTexture; 0189 Handle(Graphic3d_AspectFillArea3d) myAspect; 0190 0191 protected: //! @name texture source fields 0192 0193 Handle(Image_PixMap) myTexturePixMap; 0194 TCollection_AsciiString myTextureFile; 0195 Graphic3d_NameOfTexture2D myPredefTexture; 0196 0197 protected: //! @name texture mapping properties 0198 0199 Standard_Boolean myToMapTexture; 0200 Standard_Boolean myModulate; 0201 Standard_Boolean myIsCustomOrigin; 0202 Standard_Boolean myToRepeat; 0203 Standard_Boolean myToScale; 0204 Standard_Boolean myToShowTriangles; 0205 0206 public: 0207 0208 DEFINE_STANDARD_RTTIEXT(AIS_TexturedShape,AIS_Shape) 0209 0210 }; 0211 0212 DEFINE_STANDARD_HANDLE (AIS_TexturedShape, AIS_Shape) 0213 0214 #endif // _AIS_TexturedShape_HeaderFile
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |