网站设计与网页制作培训,观澜做网站,常州市城市建设局网站,太平桥网站建设opencascade AIS_TexturedShape opencascade 贴纹理
前言
//! 该类允许在形状上映射纹理。 //! 显示模式 AIS_WireFrame (0) 和 AIS_Shaded (1) 的行为与 AIS_Shape 中的行为相同#xff0c; //! 而新模式 2 (包围盒) 和 3 (纹理映射) 扩展了其功能。 //! //! 纹理本身在 (0…opencascade AIS_TexturedShape opencascade 贴纹理
前言
//! 该类允许在形状上映射纹理。 //! 显示模式 AIS_WireFrame (0) 和 AIS_Shaded (1) 的行为与 AIS_Shape 中的行为相同 //! 而新模式 2 (包围盒) 和 3 (纹理映射) 扩展了其功能。 //! //! 纹理本身在 (0,1)x(0,1) 的参数空间内进行参数化。 //! 形状的每个位于 UV 空间中的面都具有以下参数 //! - Umin - U 方向的起始位置 //! - Umax - U 方向的结束位置 //! - Vmin - V 方向的起始位置 //! - Vmax - V 方向的结束位置 //! 每个面都被三角化并且每个节点被分配一个纹素。 //! 面片然后使用纹理的线性插值填充每个 ‘三个纹素’ 之间的区域。 //! 用户可以控制 //! - 纹理在面上的重复次数 //! - 纹理原点的位置 //! - 纹理的缩放因子 该类用于在形状上进行纹理映射介绍了纹理的参数化方式、面的参数化、三角化和纹理映射的基本原理以及用户可以控制的几个关键因素。 方法
1
初始化带纹理的形状。 Standard_EXPORT AIS_TexturedShape (const TopoDS_Shape theShape);
2
//! 设置纹理源。 可以指定纹理图像的路径或标准预定义纹理之一。 //! 接受的文件类型与 Image_AlienPixMap 中使用的类型相同如 rgb、png、jpg 等。 //! 若要指定标准预定义纹理 应包含 Graphic3d_NameOfTexture2D 枚举索引。 //! 使用此方法设置纹理源会重置源像素图如果之前设置过。 Standard_EXPORT virtual void SetTextureFileName (const TCollection_AsciiString theTextureFileName);
3
//! 设置纹理源。 指定图像数据。 //! 注意数据应按从底向上的顺序排列图形驱动程序将忽略 Image_PixMap::IsTopDown() 标志。 //! 使用此方法设置纹理源会重置源文件名如果之前设置过。 Standard_EXPORT virtual void SetTexturePixMap (const Handle(Image_PixMap) theTexturePixMap);
3
//! return 控制纹理映射的标志用于显示模式 3 Standard_Boolean TextureMapState() const { return myToMapTexture; }
4
//! 启用纹理映射 Standard_EXPORT void SetTextureMapOn();
5
//! 禁用纹理映射 Standard_EXPORT void SetTextureMapOff();
6
//! return 纹理文件的路径 Standard_CString TextureFile() const { return myTextureFile.ToCString(); }
7
//! return 纹理映射的源像素图 const Handle(Image_PixMap) TexturePixMap() const { return myTexturePixMap; }
8
public: //! name 修改纹理映射属性的方法
9
//! 使用此方法显示带纹理的形状而无需重新计算整个表示。 //! 当仅更改纹理内容时使用此方法。 //! 如果其他参数例如缩放因子、纹理原点、纹理重复等发生了变化则必须重新计算整个表示 //! code //! if (myShape-DisplayMode() 3) //! { //! myAISContext-RecomputePrsOnly (myShape); //! } //! else //! { //! myAISContext-SetDisplayMode (myShape, 3, Standard_False); //! myAISContext-Display (myShape, Standard_True); //! } //! endcode Standard_EXPORT void UpdateAttributes();
10
//! 设置颜色。 Standard_EXPORT virtual void SetColor (const Quantity_Color theColor) Standard_OVERRIDE;
11
//! 移除颜色设置。 Standard_EXPORT virtual void UnsetColor() Standard_OVERRIDE;
12
//! 设置材料方面。 Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect theAspect) Standard_OVERRIDE;
13
//! 移除材料方面设置。 Standard_EXPORT virtual void UnsetMaterial() Standard_OVERRIDE;
14
//! 启用纹理调制 Standard_EXPORT void EnableTextureModulate();
15
//! 禁用纹理调制 Standard_EXPORT void DisableTextureModulate();
17
//! return 纹理重复标志 Standard_Boolean TextureRepeat() const { return myToRepeat; }
18
//! return 纹理重复的 U 值 Standard_Real URepeat() const { return myUVRepeat.X(); }
19
//! return 纹理重复的 V 值 Standard_Real VRepeat() const { return myUVRepeat.Y(); }
20
//! 设置每个面上的纹理重复次数。纹理本身在 (0,1)x(0,1) 的参数空间内进行参数化。 //! 要纹理化的形状的每个面在 UV 空间中为 (Umin,Umax) x (Vmin,Vmax) 进行参数化。 //! 如果 RepeatYN 设置为 false则纹理坐标被夹在面的 (0,1)x(0,1) 范围内。 Standard_EXPORT void SetTextureRepeat (const Standard_Boolean theToRepeat, const Standard_Real theURepeat 1.0, const Standard_Real theVRepeat 1.0);
21
//! return 如果纹理 UV 原点已修改则返回 true Standard_Boolean TextureOrigin() const { return myIsCustomOrigin; }
22
//! return 纹理原点的 U 位置默认为 0.0 Standard_Real TextureUOrigin() const { return myUVOrigin.X(); }
23
//! return 纹理原点的 V 位置默认为 0.0 Standard_Real TextureVOrigin() const { return myUVOrigin.Y(); }
24
//! 使用此方法更改纹理的原点。纹素 (0,0) 将映射到表面 (UOrigin,VOrigin) Standard_EXPORT void SetTextureOrigin (const Standard_Boolean theToSetTextureOrigin, const Standard_Real theUOrigin 0.0, const Standard_Real theVOrigin 0.0);
25
//! return 如果应用纹理映射的比例因子则返回 true Standard_Boolean TextureScale() const { return myToScale; }
26
//! return U 坐标的比例因子默认为 1.0 Standard_Real TextureScaleU() const { return myUVScale.X(); }
27
//! return V 坐标的比例因子默认为 1.0 Standard_Real TextureScaleV() const { return myUVScale.Y(); }
28
//! 使用此方法缩放纹理面的百分比。 //! 您可以为 U 和 V 分别指定一个比例因子。 //! 例如如果将 ScaleU 和 ScaleV 设置为 0.5 并启用纹理重复 //! 则纹理将在每个方向上在面上显示两次。 Standard_EXPORT void SetTextureScale (const Standard_Boolean theToSetTextureScale, const Standard_Real theScaleU 1.0, const Standard_Real theScaleV 1.0);
29
//! return 如果请求显示三角形则返回 true Standard_Boolean ShowTriangles() const { return myToShowTriangles; }
30
//! 使用此方法显示形状的三角化用于调试等。 Standard_EXPORT void ShowTriangles (const Standard_Boolean theToShowTriangles);
31
//! return 如果启用了纹理颜色调制则返回 true Standard_Boolean TextureModulate() const { return myModulate; }
32
//! 如果支持指定的显示模式扩展 AIS_Shape 的显示模式 3则返回 true。 virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) const Standard_OVERRIDE { return theMode 0 theMode 3; }
用法用例
OpenCascade中的AIS_TexturedShape类用于在形状上应用纹理以下是一个简单的用法示例
#include AIS_TexturedShape.hxx
#include Graphic3d_AspectFillArea3d.hxx
#include TopoDS.hxx
#include TopExp_Explorer.hxx
#include BRep_Builder.hxx
#include BRepPrimAPI_MakeBox.hxx
#include AIS_InteractiveContext.hxx
#include Quantity_Color.hxx
#include Aspect_TypeOfFacingModel.hxxvoid createTexturedShape(const Handle(AIS_InteractiveContext) context) {// 创建一个长方体作为示例形状BRep_Builder builder;TopoDS_Shape shape;BRepPrimAPI_MakeBox box(gp_Pnt(-50, -50, -50), gp_Pnt(50, 50, 50));shape box.Shape();// 创建AIS_TexturedShape对象Handle(AIS_TexturedShape) texturedShape new AIS_TexturedShape(shape);// 设置纹理文件示例使用路径指定纹理图像texturedShape-SetTextureFileName(path/to/texture.png);// 设置纹理映射属性texturedShape-SetTextureMapOn();texturedShape-SetTextureRepeat(true, 2.0, 1.0); // 设置纹理在 U 方向重复两次在 V 方向重复一次texturedShape-SetTextureScale(true, 0.5, 0.5); // 缩放纹理大小为原来的一半// 将AIS_TexturedShape添加到交互上下文中显示context-Display(texturedShape, Standard_True);
}int main() {// 创建OpenCascade交互上下文Handle(AIS_InteractiveContext) context new AIS_InteractiveContext();// 创建带纹理的形状并显示createTexturedShape(context);// 进入主事件循环或其他逻辑...return 0;
}在上述示例中我们首先创建了一个简单的长方体形状并将其作为示例形状。然后我们创建了一个AIS_TexturedShape对象并设置了纹理文件的路径以及纹理的映射属性包括重复次数和缩放因子。最后我们将AIS_TexturedShape对象添加到交互上下文中显示。这个示例展示了如何使用AIS_TexturedShape类在OpenCascade中创建和显示带纹理的形状。
参考