基於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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章