当前位置: 首页 > news >正文

opencascade AIS_TexturedShape源码学习 贴纹理

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.hxx>void 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中创建和显示带纹理的形状。

参考

相关文章:

opencascade AIS_TexturedShape源码学习 贴纹理

opencascade AIS_TexturedShape opencascade 贴纹理 前言 //! 该类允许在形状上映射纹理。 //! 显示模式 AIS_WireFrame (0) 和 AIS_Shaded (1) 的行为与 AIS_Shape 中的行为相同&#xff0c; //! 而新模式 2 (包围盒) 和 3 (纹理映射) 扩展了其功能。 //! //! 纹理本身在 (0…...

C# winform 串口读取字节流,MB级别字节流

一、串口读取字节流 在 C# 中使用 Windows Forms (WinForms) 应用程序进行串口通信时&#xff0c;通常会使用 System.IO.Ports 命名空间中的 SerialPort 类。以下是一个简单的示例&#xff0c;展示了如何设置一个串口并读取字节流。 步骤 1: 添加引用 确保你的项目中已经包含…...

创建一个简单的单链表

1.头文件的Slist.h的代码 #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> typedef int SListint; typedef struct Slist//单链表 {SListint data;struct Slist* next; }SL;//尾插 void SlistPushBank(SL*…...

15.1 Zookeeper简介安装及基础使用

1. Zookeeper介绍 1.1 介绍 1.2 应用场景简介 1.3 zookeeper工作原理 1.4 zookeeper特点...

详细说明Java中Map和Set接口的使用方法

Map与Set的基本概念与场景 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有&#xff1a; 1. 直接遍历&#xff0c;时间复杂度为O(N)&#xff0c;元素如果比较多效率会非常慢。 2. 二分查找&#x…...

CSS3 scale 适配

Scale适配&#xff0c;在前端开发中&#xff0c;特别是在CSS3中&#xff0c;主要指的是使用scale()函数对元素进行缩放处理&#xff0c;以适应不同的屏幕尺寸或达到特定的视觉效果。以下是对Scale适配的详细介绍&#xff1a; 一、基本概念 scale() 是CSS3中transform属性的一…...

SX_初识GitLab_1

1、对GitLab的理解&#xff1a; 目前对GitLab的理解是其本质是一个远程代码托管平台&#xff0c;上面托管多个项目&#xff0c;每个项目都有一个master主分支和若干其他分支&#xff0c;远程代码能下载到本机&#xff0c;本机代码也能上传到远程平台 1.分支的作用&#xff1a…...

这才是 PHP 高性能框架 Workerman 的立命之本

大家好&#xff0c;我是码农先森。 在这个大家都崇尚高性能的时代&#xff0c;程序员的谈笑间句句都离不开高性能&#xff0c;仿佛嘴角边不挂着「高性能」三个字都会显得自己很 Low&#xff0c;其中众所皆知的 Nginx 就是高性能的代表。有些朋友可能连什么是高性能都不一定理解…...

Python——记录pip问题(解决下载慢、升级失败问题)

在python开发中&#xff0c;经常需要使用到各种各样的库。 pip又是我们常用的安装工具。但是国外的源下载速度实在太慢&#xff0c;经常导致超时。 有很多朋友刚刚学Python的时候&#xff0c;会来问为什么pip下载东西这么慢啊&#xff1f; 而且pycharm里面下载库也是非常的慢…...

Windows Server 2025 Preview 部署 Ⅰ—— ISO下载和硬件要求

目录 1. 预览版下载2. Windows 服务器的硬件要求2.1安装 Windows Server 2025 虚拟机注意事项2.2 CPU2.3 RAM / Memory2.4 存储 Storage2.5 网络 Network2.6 其他需求 1. 预览版下载 下载网站&#xff1a;https://www.microsoft.com/en-in/evalcenter/download-windows-server…...

AI2-CUDA、CuDNN、TensorRT的详细安装教程

一、查看本机的显卡 首先你要看你的电脑是否有NVIDIA的独立显卡&#xff0c;你可以在设备管理器-显示适配器中查看 点击“开始”--找到“NVIDA Control Panel” 点击帮助--系统信息--组件&#xff0c;查看NVCUDA.DLL对应的产品名称&#xff0c;就可以看住CUDA的版本号 这里的版…...

TCP连接中重复使用了两个相同的端口怎么办

1.检查并避免重复配置&#xff1a; 首先&#xff0c;应该检查系统的配置和应用程序的设置&#xff0c;确保没有错误地将多个服务或进程配置为使用相同的端口号。 使用网络监控工具&#xff08;如netstat、ss等&#xff09;来查看当前哪些端口正在被使用。 2.使用端口复用选项…...

如何自定义异常

目录 为什么自定义异常自定义异常的步骤参考资料 为什么自定义异常 自定义异常是指开发者根据应用程序的需求和逻辑&#xff0c;自行定义的异常类。与 Java 提供的标准异常类&#xff08;如 NullPointerException、IOException 等&#xff09;不同&#xff0c;自定义异常允许程…...

C++中的依赖注入

目录 1.概述 2.构造函数注入 3.setter方法注入 4.接口注入 5.依赖注入框架 6.依赖注入容器 7.依赖注入框架的工作原理 8.依赖注入的优势 9.总结 1.概述 依赖注入是一种设计模式&#xff0c;它允许我们在不直接创建对象的情况下为对象提供其依赖项&#xff1b;它通过将…...

CSS平面转换-平移

平面转换-平移 属性 transform: translate(X轴移动距离, Y轴移动距离); 取值 像素单位取值百分比&#xff08;参照盒子自身尺寸计算结果&#xff09;正负均可 技巧translate()只写一个值表示只沿着X轴移动单独设置X或Y轴距离&#xff1a;translateX()或translateY() 代码 …...

Linux-3:Shell编程——基础语法(0-50%)

目录 前言 一、变量 1.定义变量 2.使用变量 3.修改变量 4.将命令的结果赋值给变量 5.只读变量 6.删除变量 二、传递参数 三、字符串 1.字符串举例 2.统计字符串长度 3.字符串拼接 4.截取字符串 总结 前言 Shell是一种程序设计语言。作为命令语言&#xff0c;它…...

C++ --> string类模拟实现(附源码)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言&#xff1a; C中STL扮演着极其重要的角色&#xff0c;学习C重中之重的就是学习STL&#xff0c;虽然string不作为containers的其中一员&#xff0c;但是也是值得学习的le类。下面就进行string的模拟实现 string的模拟…...

基于PHP+MySQL组合开发的微信活动投票小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代&#xff0c;微信作为社交媒体的巨头&#xff0c;为企业和个人提供了丰富的互动营销平台。其中&#xff0c;投票活动作为一种有效的用户参与和互动方式&#xff0c;被广泛应用于各种场景。为了满足这一需求&#xff0c;我们推出了一款基于PHPMySQL组…...

利用Arcgis设置分式标注(分子分母标注)

因工作需要&#xff0c;需要设置分式标注&#xff0c;下面详细介绍下如何利用arcgis 设置分式标注&#xff0c;以下操作以供参考&#xff0c;如有疑义可提出。 一、准备工作 软件&#xff1a;arcmap 示例数据&#xff1a;行政区shp矢量图 二、操作步骤 1.添加数据 将行政区sh…...

大麦网抢票攻略:使用Python Selenium实现

随着互联网技术的发展&#xff0c;在线购票已成为人们获取演出、比赛等活动门票的主要方式。然而&#xff0c;面对热门活动&#xff0c;门票往往在开售瞬间被抢购一空。为了解决这一问题&#xff0c;本文将介绍如何利用Python和Selenium技术实现大麦网的自动抢票。 1. 环境准备…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...