首页 > 编程语言 >【源码翻译之交互式对象包 AIS-AIS_ColoredShape.hxx文件 多颜色交互式对象

【源码翻译之交互式对象包 AIS-AIS_ColoredShape.hxx文件 多颜色交互式对象

时间:2024-05-24 22:27:56浏览次数:15  
标签:const Shape AIS 形状 源码 交互式 Handle ColoredShape

类AIS_ColoredShape

形状的呈现具有可自定义的子形状属性。
在这里插入图片描述
此类可以将topods的子拓扑分别设置不同的颜色
然后作为一个整体显示

成员类型定义文档

◆ DataMapOfDrawerCompd
typedef NCollection_IndexedDataMap<Handle<AIS_ColoredDrawer>, TopoDS_Compound, TColStd_MapTransientHasher> AIS_ColoredShape::DataMapOfDrawerCompd protected

考虑子形状颜色映射计算呈现。


构造函数与析构函数文档

◆ AIS_ColoredShape() [1/2]
AIS_ColoredShape::AIS_ColoredShape(const TopoDS_Shape & theShape)

默认构造函数。

◆ AIS_ColoredShape() [2/2]
AIS_ColoredShape::AIS_ColoredShape(const Handle<AIS_Shape> & theShape)

拷贝构造函数。


成员函数文档

◆ addShapesWithCustomProps()
void AIS_ColoredShape::addShapesWithCustomProps(const Handle<Prs3d_Presentation> & thePrs, const DataMapOfDrawerCompd * theDrawerOpenedShapePerType, const DataMapOfDrawerCompd & theDrawerClosedFaces, const Standard_Integer theMode) protected

将形状添加到呈现中。

参数:

  • thePrs:呈现
  • theDrawerOpenedShapePerType:具有独特属性的形状映射
  • theDrawerClosedFaces:封闭面的属性映射
  • theMode:显示模式
◆ bindSubShapes()
void AIS_ColoredShape::bindSubShapes(AIS_DataMapOfShapeDrawer & theShapeDrawerMap, const TopoDS_Shape & theKeyShape, const Handle<AIS_ColoredDrawer> & theDrawer) const protected

解析 theKeyShape 成子形状,在其中搜索 theBaseShape,将所有解析的子形状与 theOriginKeyShape 绑定,并将所有绑定存储在 theShapeDrawerMap 中。

参数:

  • theShapeDrawerMap:形状映射:解析并找到的 theBaseShape 子形状 -> theOriginKeyShape
  • theKeyShape:要解析(解析)为较小(在拓扑意义上)子形状的新绑定循环的形状
  • theDrawer:分配的绘制器
◆ ChangeCustomAspectsMap()
AIS_DataMapOfShapeDrawer & AIS_ColoredShape::ChangeCustomAspectsMap() inline

返回自定义外观的映射。

◆ ClearCustomAspects()
virtual void AIS_ColoredShape::ClearCustomAspects() virtual

重置自定义子形状外观的映射。

◆ Compute()
virtual void AIS_ColoredShape::Compute(const Handle<PrsMgr_PresentationManager> & thePrsMgr, const Handle<Prs3d_Presentation> & thePrs, const Standard_Integer theMode) overrideprotectedvirtual

考虑子形状颜色映射计算呈现。

从 AIS_Shape 重实现。

在 XCAFPrs_AISObject 中重新实现。

◆ ComputeSelection()
virtual void AIS_ColoredShape::ComputeSelection(const Handle<SelectMgr_Selection> & theSelection, const Standard_Integer theMode) overrideprotectedvirtual

考虑子形状隐藏状态计算选择。

从 AIS_Shape 重实现。

◆ computeSubshapeSelection()
void AIS_ColoredShape::computeSubshapeSelection(const Handle<AIS_ColoredDrawer> & theParentDrawer, const AIS_DataMapOfShapeDrawer & theShapeDrawerMap, const TopoDS_Shape & theShape, const Handle<StdSelect_BRepOwner> & theOwner, const Handle<SelectMgr_Selection> & theSelection, const TopAbs_ShapeEnum theTypOfSel, const Standard_Integer thePriority, const Standard_Real theDeflection, const Standard_Real theDeflAngle) protected

考虑隐藏状态将子形状添加到选择中(递归)。

参数:

  • theParentDrawer:父形状的绘制器
  • theShapeDrawerMap:形状映射
  • theShape:计算敏感实体的形状
  • theOwner:可选择的所有者对象
  • theSelection:要附加新敏感实体的选择
  • theTypOfSel:选择类型
  • theDeflection:线性偏差
  • theDeflAngle:角偏差
◆ CustomAspects()
virtual Handle<AIS_ColoredDrawer> AIS_ColoredShape::CustomAspects(const TopoDS_Shape & theShape) virtual

自定义指定子形状的属性。如果形状不是主形状的子形状,则将其存储在映射中但忽略。此方法可用于标记具有可自定义属性的子形状。

◆ CustomAspectsMap()
const AIS_DataMapOfShapeDrawer & AIS_ColoredShape::CustomAspectsMap() const inline

返回自定义外观的映射。

◆ dispatchColors()
static Standard_Boolean AIS_ColoredShape::dispatchColors(const Handle<AIS_ColoredDrawer> & theParentDrawer, const TopoDS_Shape & theShapeToParse, const AIS_DataMapOfShapeDrawer & theShapeDrawerMap, const TopAbs_ShapeEnum theParentType, const Standard_Boolean theIsParentClosed, DataMapOfDrawerCompd * theDrawerOpenedShapePerType, DataMapOfDrawerCompd & theDrawerClosedFaces) staticprotected

递归函数以映射形状。

参数:

  • theParentDrawer:用于未详细说明形状的绘制器(默认颜色)
  • theShapeToParse:要递归解析的子形状
  • theShapeDrawerMap:形状映射 子形状(在基础形状中) -> 绘制器
  • theParentType:父子形状类型
  • theIsParentClosed:指示指定形状是否为封闭实心部分的标志
  • theDrawerOpenedShapePerType:要填充的形状类型数组
  • theDrawerClosedFaces:封闭面映射
◆ fillSubshapeDrawerMap()
void AIS_ColoredShape::fillSubshapeDrawerMap(AIS_DataMapOfShapeDrawer & theSubshapeDrawerMap) const protected

将 myShapeColors 映射(KeyshapeColored -> Color)提取到子形状映射(Subshape -> Color)。当彩色形状不是基础形状的一部分(但子形状是)并且实际上是子形状的容器时,这需要。

◆ isShapeEntirelyVisible()
Standard_Boolean AIS_ColoredShape::isShapeEntirelyVisible() const protected

检查 myShapeColors 中的所有形状的可见性。

◆ SetColor()
virtual void AIS_ColoredShape::SetColor(const Quantity_Color & theColor) overridevirtual

设置整个形状的颜色。

从 AIS_Shape 重实现。

◆ SetCustomColor()
void AIS_ColoredShape::SetCustomColor(const TopoDS_Shape & theShape, const Quantity_Color & theColor)

自定义指定子形状的颜色。

◆ SetCustomTransparency()
void AIS_ColoredShape::SetCustomTransparency(const TopoDS_Shape & theShape, Standard_Real theTransparency)

自定义指定子形状的透明度。

◆ SetCustomWidth()
void AIS_ColoredShape::SetCustomWidth(const TopoDS_Shape & theShape, const Standard_Real theLineWidth)

自定义指定子形状的线宽。

◆ SetMaterial()
virtual void AIS_ColoredShape::SetMaterial(const Graphic3d_MaterialAspect & theAspect) overridevirtual

设置材质外观。

从 AIS_Shape 重实现。

在 XCAFPrs_AISObject 中重新实现。

◆ SetTransparency()
virtual void AIS_ColoredShape::SetTransparency(const Standard_Real theValue) overridevirtual

设置透明度值。

从 AIS_Shape 重实现。

◆ SetWidth()
virtual void AIS_ColoredShape::SetWidth(const Standard_Real theLineWidth) overridevirtual

设置整个形状的线宽。

从 AIS_Shape 重实现。

◆ UnsetCustomAspects()
void AIS_ColoredShape::UnsetCustomAspects(const TopoDS_Shape & theShape, const Standard_Boolean theToUnregister = Standard_False)

重置指定子形状的自定义属性。

参数:

  • theToUnregister:是否从映射中取消注册子形状
◆ UnsetTransparency()
virtual void AIS_ColoredShape::UnsetTransparency() overridevirtual

删除重建复合形状中的透明度设置。

从 AIS_Shape 重实现。

◆ UnsetWidth()
virtual void AIS_ColoredShape::UnsetWidth() overridevirtual

设置整个形状的线宽。

从 AIS_Shape 重实现。


字段文档

◆ myShapeColors
AIS_DataMapOfShapeDrawer AIS_ColoredShape::myShapeColors protected

考虑子形状颜色映射计算呈现。

用法示例

AIS_ColoredShape 是一个用于显示具有自定义子形状属性的彩色形状的类。它允许您为特定子形状设置颜色、透明度和线宽等属性。以下是 AIS_ColoredShape 的一些常见用法示例。

初始化

  1. 创建一个 TopoDS_Shape 对象:

    TopoDS_Shape myShape = ...; // 通过加载或创建一个形状
    
  2. 使用 TopoDS_Shape 创建 AIS_ColoredShape 对象:

    Handle(AIS_ColoredShape) coloredShape = new AIS_ColoredShape(myShape);
    

设置子形状的自定义属性

  1. 设置子形状的颜色:

    TopoDS_Shape subShape = ...; // 获取子形状
    Quantity_Color customColor(Quantity_NOC_RED); // 设定红色
    coloredShape->SetCustomColor(subShape, customColor);
    
  2. 设置子形状的透明度:

    Standard_Real transparency = 0.5; // 设定透明度(0到1之间)
    coloredShape->SetCustomTransparency(subShape, transparency);
    
  3. 设置子形状的线宽:

    Standard_Real lineWidth = 2.0; // 设定线宽
    coloredShape->SetCustomWidth(subShape, lineWidth);
    

清除子形状的自定义属性

  1. 清除子形状的自定义颜色:

    coloredShape->UnsetCustomAspects(subShape);
    
  2. 清除所有子形状的自定义属性:

    coloredShape->ClearCustomAspects();
    

显示形状

  1. 将形状添加到视图中:
    Handle(V3d_View) aView = ...; // 获取视图
    Handle(AIS_InteractiveContext) aContext = ...; // 获取交互上下文
    aContext->Display(coloredShape, Standard_True);
    

例子1

以下是一个完整的示例,演示如何使用 AIS_ColoredShape 类来创建一个彩色形状并为其子形状设置自定义属性:

#include <AIS_ColoredShape.hxx>
#include <TopoDS_Shape.hxx>
#include <Quantity_Color.hxx>
#include <AIS_InteractiveContext.hxx>
#include <V3d_View.hxx>

// 创建一个形状
TopoDS_Shape myShape = ...; // 通过加载或创建一个形状

// 创建 AIS_ColoredShape 对象
Handle(AIS_ColoredShape) coloredShape = new AIS_ColoredShape(myShape);

// 获取一个子形状
TopoDS_Shape subShape = ...; // 获取子形状

// 设置子形状的颜色
Quantity_Color customColor(Quantity_NOC_RED); // 设定红色
coloredShape->SetCustomColor(subShape, customColor);

// 设置子形状的透明度
Standard_Real transparency = 0.5; // 设定透明度(0到1之间)
coloredShape->SetCustomTransparency(subShape, transparency);

// 设置子形状的线宽
Standard_Real lineWidth = 2.0; // 设定线宽
coloredShape->SetCustomWidth(subShape, lineWidth);

// 获取视图和交互上下文
Handle(V3d_View) aView = ...; // 获取视图
Handle(AIS_InteractiveContext) aContext = ...; // 获取交互上下文

// 将彩色形状添加到视图中
aContext->Display(coloredShape, Standard_True);

总结

AIS_ColoredShape 类提供了一种方便的方法来为复杂形状及其子形状设置和管理自定义属性。通过这种方式,您可以在 OpenCASCADE 中以更加细粒度的方式控制形状的外观。

示例2

为了展示 AIS_ColoredShape 类的效果,我们将创建一个简单的 OpenCASCADE 应用程序,用于显示一个彩色立方体,并为其面设置不同的颜色、透明度和线宽。

完整示例代码

#include <AIS_ColoredShape.hxx>
#include <AIS_InteractiveContext.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <Quantity_Color.hxx>
#include <TopoDS_Shape.hxx>
#include <V3d_View.hxx>
#include <Graphic3d.hxx>
#include <WNT_Window.hxx>
#include <Aspect_Handle.hxx>

int main(int argc, char* argv[])
{
    // 初始化 OpenCASCADE 应用程序的窗口和视图
    Handle(Aspect_DisplayConnection) aDisplayConnection = new Aspect_DisplayConnection();
    Handle(Graphic3d_GraphicDriver) aGraphicDriver = Graphic3d::InitGraphicDriver(aDisplayConnection);
    
    if (aGraphicDriver.IsNull()) {
        std::cerr << "Error: Unable to create graphic driver." << std::endl;
        return 1;
    }

    Handle(V3d_Viewer) aViewer = new V3d_Viewer(aGraphicDriver, Standard_ExtString("Visu3D"), "", 1000.0, V3d_XposYnegZpos, Quantity_NOC_GRAY20, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT);
    Handle(WNT_Window) aWindow = new WNT_Window("OpenCASCADE Demo", Handle(WNT_WClass)::DownCast(aDisplayConnection->GetDisplayConnection()), Aspect_Handle(), 0, 0, 800, 600, Aspect_FM_NONE);
    Handle(V3d_View) aView = aViewer->CreateView();
    aView->SetWindow(aWindow);

    if (!aWindow->IsMapped()) aWindow->Map();

    Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);

    // 创建一个立方体形状
    TopoDS_Shape myShape = BRepPrimAPI_MakeBox(100.0, 100.0, 100.0).Shape();

    // 创建 AIS_ColoredShape 对象
    Handle(AIS_ColoredShape) coloredShape = new AIS_ColoredShape(myShape);

    // 设置立方体每个面的不同颜色、透明度和线宽
    TopExp_Explorer exp(myShape, TopAbs_FACE);
    int faceIndex = 0;
    while (exp.More()) {
        TopoDS_Shape face = exp.Current();
        
        // 设置颜色
        Quantity_Color color;
        switch (faceIndex) {
            case 0: color = Quantity_Color(Quantity_NOC_RED); break;
            case 1: color = Quantity_Color(Quantity_NOC_GREEN); break;
            case 2: color = Quantity_Color(Quantity_NOC_BLUE1); break;
            case 3: color = Quantity_Color(Quantity_NOC_YELLOW); break;
            case 4: color = Quantity_Color(Quantity_NOC_MAGENTA); break;
            case 5: color = Quantity_Color(Quantity_NOC_CYAN1); break;
            default: color = Quantity_Color(Quantity_NOC_WHITE); break;
        }
        coloredShape->SetCustomColor(face, color);

        // 设置透明度
        coloredShape->SetCustomTransparency(face, 0.3);

        // 设置线宽
        coloredShape->SetCustomWidth(face, 2.0);

        exp.Next();
        faceIndex++;
    }

    // 将彩色形状添加到视图中
    aContext->Display(coloredShape, Standard_True);
    aView->FitAll();

    // 保持窗口打开
    while (true) {
        aView->Redraw();
    }

    return 0;
}

编译和运行

要编译并运行此示例,您需要安装 OpenCASCADE 库,并设置好编译环境。这里是一个简单的 CMakeLists.txt 文件示例:

cmake_minimum_required(VERSION 3.10)
project(OpenCASCADE_ColoredShape)

find_package(OpenCASCADE REQUIRED)

add_executable(OpenCASCADE_ColoredShape main.cpp)
target_link_libraries(OpenCASCADE_ColoredShape ${OpenCASCADE_LIBRARIES})
include_directories(${OpenCASCADE_INCLUDE_DIR})

将上述代码保存为 main.cpp,并在同一目录下创建 CMakeLists.txt 文件。然后在命令行中运行以下命令来编译和运行程序:

mkdir build
cd build
cmake ..
make
./OpenCASCADE_ColoredShape

预期效果

程序运行后,将会显示一个带有彩色面的立方体。每个面将有不同的颜色,透明度为 0.3,线宽为 2.0。您可以旋转和缩放视图以查看立方体的各个面。

总结

这个示例展示了如何使用 OpenCASCADE 库中的 AIS_ColoredShape 类来创建和显示一个具有自定义子形状属性的彩色形状。通过这种方式,您可以更细致地控制复杂形状的显示效果。

标签:const,Shape,AIS,形状,源码,交互式,Handle,ColoredShape
From: https://blog.csdn.net/weixin_45751713/article/details/139185696

相关文章

  • cmakelist 编译源码生成动态静态库并链接到项目
    当我们使用vscode编译c++代码时,需要加入第三方代码,而它没有库时。这时候我们就需要自己写一个Cmakelist编译成库,然后链接到自己的项目上。下面我以qt的qtpropertybrowser类为例,这个类并不在qt的标准库中,若是在qtcreator中使用,需要在pro引入该文件路径(qt安装目录里-\Qt\5......
  • Java韩顺平满汉楼项目,带源码!!!
    文章目录满汉楼1、程序框架图2、前置工作:配置相应文件和创建mhl数据库3、需求说明4、界面设计(1)用户登录(2)二级菜单1、显示餐桌状态2、预定餐桌3、显示所有菜品4、点餐服务5、查看账单6、结账9、退出满汉楼5、具体代码(1)先设计界面(2)进行用户登录判断功能实现第一步:在mysql......
  • 美容美发行业收银系统源码、美业SaaS系统源码
    美业SaaS系统连锁多门店美业收银系统源码多门店管理/会员管理/预约管理/排班管理/商品管理/ 促销活动PC管理后台、手机APP、iPadAPP、微信小程序......
  • 美业系统源码美业SaaS系统-门店卡项已线下退款,需要作废怎么处理?
    美业SaaS系统源码连锁门店美业收银系统源码收银管理/会员管理/预约管理/排班管理/商品管理/活动促销PC管理后台、手机APP、iPadAPP、微信小程序1、加盟店卡项线下退款处理方法:询问具体退款会员手机号和卡项,找到需要退款的订单号。操作路径:PC运营后端-订单管......
  • 来自工业界的知识库 RAG 服务(二),RagFlow 源码全流程深度解析
    背景介绍前面介绍过有道QAnything源码解析,通过深入了解工业界的知识库RAG服务,得到了不少调优RAG服务的新想法。因此本次趁热打铁,额外花费一点时间,深入研究了另一个火热的开源RAG服务RagFlow的完整实现流程,希望同样有所收获。项目概述框架设计首先依旧可以先......
  • MATLAB基础知识,帮你快速入门【文末送2024最新MATLAB学习教程资料视频+源码】
    1.MATLAB的基本知识1-1基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >>(5*2+1.3-0.8)*10/25 ans=4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。小......
  • Java基于saas模式云MES制造执行系统源码Spring Boot + Hibernate Validation什么是MES
    Java基于saas模式云MES制造执行系统源码SpringBoot+HibernateValidation什么是MES系统?MES制造执行系统,通过互联网技术实现从订单下达到产品完成的整个生产过程进行优化管理。能有效地对生产现场的流程进行智能控制,防错防呆防漏,自动化集成各种制造信息,使管理者准确掌控工......
  • 社区医院|基于SprinBoot+vue的社区医院管理服务系统(源码+数据库+文档)
    社区医院管理服务系统目录基于SprinBoot+vue的社区医院管理服务系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块4医生功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......
  • 家乡特色|基于SprinBoot+vue的家乡特色推荐系统(源码+数据库+文档)
    家乡特色推荐系统目录基于SprinBoot+vue的家乡特色推荐系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设......