OCCT 实战(5)交互

一、交互

1、Aspect_Window 类

1.1、简介

Aspect_Window 在 OpenCASCADE 可视化模块中扮演着一个桥梁适配器的角色,其最核心的作用是:将不同操作系统和UI框架下的原生窗口,抽象成一个可供OCC 3D视图器统一使用的渲染目标。

1.2、核心作用

  • 封装平台差异性
    • OpenCASCADE 需要知道在哪里渲染3D图形。但Windows有HWND,Linux有X11 Window,macOS有NSView,UI框架还有Qt、MFC等。
    • Aspect_Window 通过其子类(如Aspect_NeutralWindow)或具体实现,封装了这些底层原生窗口的细节。OCC的V3d_View只需与Aspect_Window这个统一的接口交互,无需关心背后的具体平台。
  • 提供渲染上下文
    • 它通过 NativeHandle() 等方法,向OCC图形驱动提供原生窗口的标识符。
    • 图形驱动利用这个句柄来创建OpenGL或其他图形API的上下文,并将其与窗口关联,从而建立起一条通向屏幕的渲染通道
  • 管理视图生命周期与状态
    • Map() / Unmap():控制窗口的显示与隐藏,从而激活或暂停3D渲染。
    • IsMapped():查询窗口是否可见,避免向隐藏的窗口进行无效渲染。
    • DoResize():响应窗口大小变化,通知视图器更新视口和投影矩阵。
  • 提供关键几何信息
    • Size():返回窗口的像素尺寸。
    • Ratio():返回窗口的宽高比,这是防止3D模型在非正方形窗口中变形(如圆形变椭圆)的关键参数。

1.3、总结

没有 Aspect_Window,OCC就需要为每个平台和UI框架编写完全不同的集成代码。有了它,OCC实现了一次开发,多处嵌入,让开发者能轻松地将强大的3D可视化功能集成到任何桌面应用程序中。它是OCC可视化模块能够跨平台、跨框架的基石。

07-19
Open CASCADE Technology (OCCT) 是一个功能强大的开源 C++ 库,由数千个类组成,提供在多个领域的解决方案,包括表面和实体建模、3D 和 2D 可视化、数据交换,以及快速应用程序开发。OCCT 主要采用 C++ 编写,适用于 CAD、CAM、CAE、AEC、GIS 和 PDM 等工业领域的 3D 建模和可视化应用程序开发。OCCT 库在 GNU 宽通用公共许可证 (LGPL) 版本 2.1 下以开源方式分发[^1]。 OCCT 的核心功能包括对 3D 几何数据的处理,以及丰富的功能和工具支持。开发者可以使用 OCCT 构建涉及 3D 表面和实体建模、CAD 数据交换及可视化应用的项目。此外,OCCT 可以结合 Qt 框架进行图形界面展示,便于开发具有交互式用户界面的应用程序[^3]。 ### 获取 OCCT 1. **官方网站**: OCCT 的官方主页为 [Open CASCADE 官网](https://www.opencascade.com/),在这里可以找到完整的源代码、文档和示例。源代码可以通过 Git 仓库获取: ```bash git clone https://git.dev.opencascade.org/gitweb/?p=occt.git ``` 2. **开源许可**: OCCT 在 GNU 宽通用公共许可证 (LGPL) 版本 2.1 下发布,这意味着开发者可以在商业项目中使用 OCCT,但需要确保对 OCCT 的修改保持开源,同时保持动态链接或提供 OCCT 的可替换版本。 3. **安装与构建**: OCCT 支持多平台(包括 Windows、Linux 和 macOS),并且可以使用 CMake 构建系统进行编译。构建步骤如下: ```bash mkdir build cd build cmake .. make ``` 如果需要集成 Qt,可以在 CMake 配置中启用 Qt 支持。 4. **文档与社区**: OCCT 提供了详细的开发者文档,包括 API 参考、教程和示例。此外,OCCT 社区提供论坛和邮件列表,便于开发者交流和解决问题。 ### 示例代码:OCCT 基础几何建模 以下是一个简单的 OCCT 示例,展示如何创建一个立方体实体: ```cpp #include <BRepPrimAPI_MakeBox.hxx> #include <TopoDS_Shape.hxx> int main() { // 创建一个立方体,尺寸为 10x10x10 BRepPrimAPI_MakeBox box(10.0, 10.0, 10.0); TopoDS_Shape shape = box.Shape(); // 此处可以添加可视化或导出代码 return 0; } ``` 该代码使用了 OCCT 的 `BRepPrimAPI_MakeBox` 类来创建一个立方体,并将结果存储在 `TopoDS_Shape` 对象中。这可以作为进一步开发的基础,例如将其可视化或导出为标准 CAD 格式(如 STEP 或 IGES)。 ### 结合 Qt 的示例 OCCT 可以与 Qt 框架集成,用于构建图形界面应用。以下是一个简单的 Qt 与 OCCT 集成的示例,展示如何在 Qt 窗口中显示 OCCT 的 3D 视图: ```cpp #include <QApplication> #include <QMainWindow> #include <AIS_InteractiveContext.hxx> #include <V3d_View.hxx> #include <WNT_Window.hxx> // Windows 平台 #include <Graphic3d_GraphicDriver.hxx> #include <OpenGl_GraphicDriver.hxx> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建主窗口 QMainWindow window; window.resize(800, 600); window.setWindowTitle("OCCT with Qt Example"); window.show(); // 初始化 OCCT 的图形驱动 Handle(Graphic3d_GraphicDriver) graphicDriver = new OpenGl_GraphicDriver(); Handle(V3d_Viewer) viewer = new V3d_Viewer(graphicDriver); Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext(viewer); // 创建视图并关联到窗口 Handle(V3d_View) view = viewer->CreateView(); Handle(WNT_Window) wntWindow = new WNT_Window((HWND)window.winId()); view->SetWindow(wntWindow); // 创建一个立方体并显示 BRepPrimAPI_MakeBox box(10.0, 10.0, 10.0); TopoDS_Shape shape = box.Shape(); Handle(AIS_Shape) aisShape = new AIS_Shape(shape); context->Display(aisShape, Standard_True); return app.exec(); } ``` 此代码展示了如何在 Qt 中创建一个窗口,并通过 OCCT 的 `V3d_View` 显示一个立方体模型。这为构建交互式 3D 应用提供了基础。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值