当前位置: 首页 > 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. 环境准备…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

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

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

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...