OCCT 实战(4)基础类 | 4.3、StdPrs_WFShape 类


前言:

StdPrs_WFShape 是 OpenCASCADE Technology(OCCT)中用于以线框模式(Wireframe Mode)可视化拓扑形状(TopoDS_Shape) 的标准呈现器(Presentation Builder)类。它属于 StdPrs(Standard Presentations)模块,专门负责将几何/拓扑结构转换为适用于线框显示的图形图元(如点、线、曲线等),常用于 CAD 系统中的轮廓显示、调试或轻量化渲染。

一、StdPrs_WFShape

  • 核心功能:将 TopoDS_Shape(包括顶点、边、线、面边界等)转换为线框表示(wireframe representation),即仅绘制其几何边界(edges 和 vertices),不填充面。
  • 适用对象:支持所有类型的拓扑实体:
    • TopoDS_Vertex 绘制为点
    • TopoDS_Edge 绘制为 3D 曲线(经离散化)
    • TopoDS_Wire / Face / Shell / Solid 递归提取所有边和顶点进行绘制
  • 依赖机制
    • 自动对曲线边(如圆弧、样条)进行离散化(deflection-based tessellation),生成折线段。
    • 使用 Prs3d_Drawer 控制线宽、颜色、是否显示顶点等属性。
    • 不涉及三角剖分(与着色模式不同),因此计算开销通常较小。

✅ 简言之:StdPrs_WFShape 是 OCCT 中实现“线框显示”的标准工具类,对应显示模式通常为 0

2、Add 接口

2.1、功能

将任意类型的 TopoDS_Shape(如顶点、边、面、体等)转换为适用于 3D 视图渲染的线框图形图元(如折线段和点),并添加到指定的图形呈现对象中。

2.2、函数签名

static void Add(
    const Handle(Prs3d_Presentation)& thePresentation,
    const TopoDS_Shape&                theShape,
    const Handle(Prs3d_Drawer)&        theDrawer
);

2.3、 参数说明

参数类型作用
thePresentationHandle(Prs3d_Presentation)输出容器:用于接收生成的线框图元(如折线、点)。这些图元将被 OCCT 渲染引擎绘制到 3D 视图中。
theShapeconst TopoDS_Shape&输入拓扑形状:可以是任意类型的 TopoDS_Shape(Vertex, Edge, Wire, Face, Solid 等)。函数会自动遍历其子结构,提取所有可显示的边和顶点。
theDrawerHandle(Prs3d_Drawer)绘制属性配置器:控制线框外观,包括:
• 线颜色、线宽(LineAspect()
• 点颜色、大小(PointAspect()
• 离散精度(MaximalChordialDeviation()Discretization
• 是否显示顶点(VertexDrawMode())等

2.4、实现原理

  • 遍历拓扑结构:递归访问 theShape 中的所有子形状,收集 TopoDS_EdgeTopoDS_Vertex
  • 离散化边(Edge):对每条边(尤其是非直线边,如圆、样条曲线):
    • 使用 GCPnts_TangentialDeflectionBRepAdaptor_Curve + 离散算法,
    • 根据 theDrawer 中的弦高偏差(deflection) 参数生成一系列点,
    • 构成折线段(polyline)。
  • 生成图元
    • 边 → 添加为 Graphic3d_ArrayOfPolylinesGraphic3d_ArrayOfSegments
    • 顶点 → 若启用,添加为 Graphic3d_ArrayOfPoints
  • 应用样式
    • theDrawer->LineAspect() 获取线颜色/宽度
    • theDrawer->PointAspect() 获取点样式
  • 加入 Presentation:所有图元被添加到 thePresentation,供后续渲染使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值