opencascade AIS_Triangulation源码学习 每个三角形顶点关联颜色

opencascade AIS_Triangulation 每个三角形顶点关联颜色

前言

交互对象,从 Poly_Triangulation 绘制数据,可选择性地带有与每个三角形顶点关联的颜色。

为了最大效率,颜色以32位整数表示,而不是传统的 Quantity_Color 值。

目前尚未实现三角形和顶点的交互选择功能。

方法

1

构造三角化显示对象

Standard_EXPORT AIS_Triangulation(const Handle(Poly_Triangulation)& aTriangulation);

2

//! 设置每个节点的颜色。

//! 每个32位颜色值为 Alpha << 24 + Blue << 16 + Green << 8 + Red

//! 颜色组件的顺序对OpenGL的后续使用至关重要。

Standard_EXPORT void SetColors (const Handle(TColStd_HArray1OfInteger)& aColor);

3

//! 获取每个节点的颜色。

//! 每个32位颜色值为 Alpha << 24 + Blue << 16 + Green << 8 + Red

Standard_EXPORT Handle(TColStd_HArray1OfInteger) GetColors() const;

4

//! 如果三角化具有顶点颜色,则返回 true。

Standard_Boolean HasVertexColors() const;

5

void SetTriangulation (const Handle(Poly_Triangulation)& aTriangulation);

7

//! 返回 Poly_Triangulation。

Standard_EXPORT Handle(Poly_Triangulation) GetTriangulation() const;

8

//! 设置重建复合形状中透明度的值 aValue。

Standard_EXPORT virtual void SetTransparency (const Standard_Real aValue = 0.6) Standard_OVERRIDE;

9

//! 移除重建复合形状中的透明度设置。

Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;

用法示例

OpenCascade中的AIS_Triangulation类用于显示Poly_Triangulation对象,以下是一个简单的用法示例:

cpp 复制代码
#include <AIS_Triangulation.hxx>
#include <Poly_Triangulation.hxx>
#include <TopoDS_Shape.hxx>
#include <BRep_Builder.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <AIS_InteractiveContext.hxx>
#include <Quantity_Color.hxx>

void createTriangulation(const Handle(AIS_InteractiveContext)& context) {
    // 创建一个简单的三角化对象作为示例
    Poly_Triangulation triangulation;
    
    // 在这里设置三角化数据,例如顶点、三角形索引和颜色
    // ...

    // 创建AIS_Triangulation对象
    Handle(AIS_Triangulation) aisTriangulation = new AIS_Triangulation(new Poly_Triangulation(triangulation));

    // 设置每个节点的颜色(示例中使用白色)
    Quantity_Color color(Quantity_NOC_WHITE);
    int numNodes = triangulation.NbNodes();
    Handle(TColStd_HArray1OfInteger) colors = new TColStd_HArray1OfInteger(1, numNodes);
    for (int i = 1; i <= numNodes; ++i) {
        colors->SetValue(i, color.RGB());
    }
    aisTriangulation->SetColors(colors);

    // 将AIS_Triangulation对象添加到交互上下文中显示
    context->Display(aisTriangulation, Standard_True);
}

int main() {
    // 创建OpenCascade交互上下文
    Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext();

    // 创建并显示三角化对象
    createTriangulation(context);

    // 进入主事件循环或其他逻辑...

    return 0;
}

在上述示例中,我们首先创建了一个Poly_Triangulation对象(实际中需要设置三角化的顶点和三角形索引等数据),然后将其作为参数创建了AIS_Triangulation对象。接着,我们为每个节点设置了颜色,并将AIS_Triangulation对象添加到交互上下文中显示。这个示例展示了如何使用AIS_Triangulation类在OpenCascade中创建和显示三角化对象。

参考

AIS_Trihedron 支持的选择模式。
cpp 复制代码
enum AIS_TrihedronSelectionMode
{
  AIS_TrihedronSelectionMode_EntireObject = 0, //!< 选择整个三面体
  AIS_TrihedronSelectionMode_Origin       = 1, //!< 原点
  AIS_TrihedronSelectionMode_Axes         = 2, //!< 坐标轴
  AIS_TrihedronSelectionMode_MainPlanes   = 3  //!< 主平面
};
AIS_TypeOfPlane 声明平面的类型。
cpp 复制代码
enum AIS_TypeOfPlane
{
  AIS_TOPL_Unknown, //!< 未知类型
  AIS_TOPL_XYPlane, //!< XY平面
  AIS_TOPL_XZPlane, //!< XZ平面
  AIS_TOPL_YZPlane  //!< YZ平面
};
AIS_TypeOfIso 声明显示的等参数线类型。
cpp 复制代码
enum AIS_TypeOfIso
{
  AIS_TOI_IsoU,   //!< U等参数线
  AIS_TOI_IsoV,   //!< V等参数线
  AIS_TOI_Both    //!< 同时显示U和V等参数线
};
AIS_TypeOfAxis声明轴的类型。
cpp 复制代码
enum AIS_TypeOfAxis
{
  AIS_TOAX_Unknown, //!< 未知类型
  AIS_TOAX_XAxis,   //!< X轴
  AIS_TOAX_YAxis,   //!< Y轴
  AIS_TOAX_ZAxis    //!< Z轴
};
AIS_TypeOfAttribute

enum AIS_TypeOfAttribute

{

AIS_TOA_Line,

AIS_TOA_Dimension,

AIS_TOA_Wire,

AIS_TOA_Plane,

AIS_TOA_Vector,

AIS_TOA_UIso,

AIS_TOA_VIso,

AIS_TOA_Free,

AIS_TOA_UnFree,

AIS_TOA_Section,

AIS_TOA_Hidden,

AIS_TOA_Seen,

AIS_TOA_FaceBoundary,

AIS_TOA_FirstAxis,

AIS_TOA_SecondAxis,

AIS_TOA_ThirdAxis

};
参考

相关推荐
协同生态34 分钟前
天锐绿盾新版注册机【仅用于个人学习,禁止其他用途】
学习
Cuby!42 分钟前
【AFDM与信号处理:论文阅读】仿射频分复用:扩展OFDM以实现场景灵活性和弹性
论文阅读·笔记·学习·信息与通信·信号处理
AAA阿giao1 小时前
从零开始学 React:用搭积木的方式构建你的第一个网页!
前端·javascript·学习·react.js·前端框架·vite·jsx
Arciab1 小时前
C++ 学习_流程控制
c++·学习
HyperAI超神经1 小时前
【vLLM 学习】vLLM TPU 分析
开发语言·人工智能·python·学习·大语言模型·vllm·gpu编程
xiaoxiaoxiaolll2 小时前
前沿速递 | Adv. Eng. Mater.:基于LPBF与压力渗透的FeSi2.9-Bakelite多功能复合材料设计与性能调控
学习
Freshman小白2 小时前
《人工智能与创新》网课答案2025
人工智能·学习·答案·网课答案
Y_fulture2 小时前
datawhale组队学习:第一章习题
学习·机器学习·概率论
阿蒙Amon2 小时前
JavaScript学习笔记:15.迭代器与生成器
javascript·笔记·学习
来两个炸鸡腿2 小时前
DW动手学大模型应用全栈开发 - (1)大模型应用开发应知必会
python·深度学习·学习·nlp