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

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

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…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...