基于OpenCASCADE自制三维建模软件(四)实现三维显示界面

一、配置系统变量及QMake文件

  • 在系统环境变量中添加CASROOT变量,将OpenCASCADE库的目录路径填入变量值中
    在这里插入图片描述
  • 打开Qt Creator新建一个Qt QWidgets Application项目,选择QMainWindow界面
  • 编辑 *.pro 文件,将OCC的包含路径、库路径以及具体的库加载到qmake项目中
#Windows系统下编译
win32 {
    #包含路径
    INCLUDEPATH += $$(CASROOT)/inc
    #确定编译器
    win32-msvc2010 {
        compiler=vc10
    }
    win32-msvc2012 {
        compiler=vc11
    }
    win32-msvc2013 {
        compiler=vc12
    }
    win32-msvc2015 {
        compiler=vc14
    }
    #确定64位或32位系统,增加库的路径
    !contains(QMAKE_TARGET.arch, x86_64) {
        CONFIG(debug, debug|release) {  #x86_64 debug
            LIBS += -L$$(CASROOT)/win32/$$compiler/libd
        }
        else {  #x86_64 release
            LIBS += -L$$(CASROOT)/win32/$$compiler/lib
        }
    }
    else {
        CONFIG(debug, debug|release) {  #x86 debug
            LIBS += -L$$(CASROOT)/win64/$$compiler/libd
        }
        else {  #x86 release
            LIBS += -L$$(CASROOT)/win64/$$compiler/lib
        }
    }
}
#添加OCC库
LIBS += -lTKernel -lTKMath -lTKService -lTKV3d -lTKOpenGl \
        -lTKBRep -lTKIGES -lTKSTL -lTKVRML -lTKSTEP -lTKSTEPAttr -lTKSTEP209 \
        -lTKSTEPBase -lTKGeomBase -lTKGeomAlgo -lTKG3d -lTKG2d \
        -lTKXSBase -lTKShHealing -lTKHLR -lTKTopAlgo -lTKMesh -lTKPrim \
        -lTKCDF -lTKBool -lTKBO -lTKFillet -lTKOffset \

二、创建界面

  • 新建一个QWidget界面类
  • 编辑头文件
    添加OCC相关变量
    private:
    //!交互式上下文能够管理一个或多个查看器(viewer)中的图形行为和交互式对象的选择
    Handle(AIS_InteractiveContext) m_context;
    //!定义查看器(viewer)类型对象上的服务
    Handle(V3d_Viewer) m_viewer;
    //!创建一个视图
    Handle(V3d_View) m_view;
    //!创建3d接口定义图形驱动程序
    Handle(Graphic3d_GraphicDriver) m_graphic_driver;
添加覆写QWidget的事件
    protected:
    //!覆写绘图事件
    void paintEvent(QPaintEvent *);
    //!覆写窗口尺寸变化事件
    void resizeEvent(QResizeEvent *);
    //!返回窗口的绘制引擎
    QPaintEngine *paintEngine() const;
  • 编写构造函数
C3DWidget::C3DWidget(QWidget *parent) : QWidget(parent)
{
    //若交互式上下文为空,则创建对象
    if (m_context.IsNull())
    {
        //此对象提供与X server的连接,在Windows和Mac OS中不起作用
        Handle(Aspect_DisplayConnection) m_display_donnection = new Aspect_DisplayConnection();
        //创建OpenGl图形驱动
        if (m_graphic_driver.IsNull())
        {
            m_graphic_driver = new OpenGl_GraphicDriver(m_display_donnection);
        }
        //获取QWidget的窗口系统标识符
        WId window_handle = (WId) winId();
        //创建Windows NT 窗口
        Handle(WNT_Window) wind = new WNT_Window((Aspect_Handle) window_handle);
        //创建3D查看器
        m_viewer = new V3d_Viewer(m_graphic_driver, Standard_ExtString("viewer3d"));
        //创建视图
        m_view = m_viewer->CreateView();
        m_view->SetWindow(wind);
        //打开窗口
        if (!wind->IsMapped())
        {
            wind->Map();
        }
        m_context = new AIS_InteractiveContext(m_viewer);  //创建交互式上下文
        //配置查看器的光照
        m_viewer->SetDefaultLights();
        m_viewer->SetLightOn();
        //设置视图的背景颜色为灰色
        m_view->SetBackgroundColor(Quantity_NOC_GRAY60);
        m_view->MustBeResized();
        //显示直角坐标系,可以配置在窗口显示位置、文字颜色、大小、样式
        m_view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_GOLD, 0.08, V3d_ZBUFFER);
        //设置显示模式
        m_context->SetDisplayMode(AIS_Shaded, Standard_True);
    }
    //配置QWidget
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_NoSystemBackground);
    setBackgroundRole( QPalette::NoRole );  //无背景
    setFocusPolicy( Qt::StrongFocus );
    setAttribute( Qt::WA_PaintOnScreen );
    setAttribute( Qt::WA_NoSystemBackground );
    setMouseTracking( true );   //开启鼠标位置追踪
}
  • 编写覆写函数
void C3DWidget::paintEvent(QPaintEvent *)
{
    m_view->Redraw();
}

void C3DWidget::resizeEvent(QResizeEvent *)
{
    if( !m_view.IsNull() )
    {
        m_view->MustBeResized();
    }
}

QPaintEngine *C3DWidget::paintEngine() const
{
    return 0;
}

三、编译并运行项目

程序运行效果如下:
在这里插入图片描述

四、问题处理

在Qt编译成功后,执行运行的时候可能会显示不到界面,且显示: 程 序 异 常 结 束 。 \color{red}{程序异常结束。}
原因是运行环境路径中找不到OCC及其第三方库的动态库文件(*.bin),解决的方法有:

  1. 修改系统环境变量 PATH ,添加动态库的路径
  2. 在Qt Creator中切换到项目模式(Ctrl+5),在构建环境中找到 PATH 变量并添加动态库路径到其中

项目仓库

https://github.com/Jelatine/JellyCAD

  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
对于 OpenCASCADE三维显示开发,您可以使用 OpenCASCADE 提供的 Visualization 层进行操作。OpenCASCADE 是一个用于 CAD/CAE 应用开发的开源几何建模核心库,它提供了一套丰富的工具和功能,包括三维模型创建、编辑、分析和可视化等。 要进行三维显示开发,您可以按照以下步骤进行操作: 1. 导入 OpenCASCADE 库:首先,您需要将 OpenCASCADE 库导入到您的开发环境中。您可以从 OpenCASCADE 的官方网站或 GitHub 上获取最新的库文件。 2. 创建场景和视窗:使用 OpenCASCADE 的 Visualization 层,您可以创建一个场景和一个视窗来显示您的三维模型。场景是一个容器,用于存储模型和其他对象,而视窗是显示模型的图形界面。 3. 加载和显示模型:使用 OpenCASCADE 提供的功能,您可以加载和显示各种不同格式的三维模型文件,如 STEP、IGES、BREP 等。您可以使用适当的函数将模型加载到场景中,并在视窗中显示出来。 4. 进行交互操作:通过结合 OpenCASCADE 的几何操作和可视化功能,您可以实现各种交互式操作,如旋转、缩放、平移等。这样用户就可以在视窗中对模型进行实时操作和浏览。 5. 添加附加功能:根据您的需求,您还可以添加其他功能,如选择、标注、剖切等。OpenCASCADE 提供了一系列的工具和函数,使您能够根据自己的需求定制和扩展应用程序的功能。 请注意,这只是简要介绍了 OpenCASCADE三维显示开发的基本步骤。具体的实现细节和代码示例可以参考 OpenCASCADE 的官方文档和示例代码。希望这对您有所帮助!如果您有更多问题,我会很乐意为您解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值