MacOS 的QT开发初学(四): Opencascade-激活网状格栅

#2022生机大会#

我们实现了Opencascade三维模型的创建之后,下一步可以在其建模绘图的窗口中增加一个底部的显示布局-网状格栅,可以让三维模型的显示更加立体。

MacOS 的QT开发初学(四): Opencascade-激活网状格栅

图中红框内灰白色的线条方格,为网状格栅

如上图,这些灰白色的线条方格就是CAD编辑窗口内的网状格栅,超级像一个中国围棋棋盘。之所以要在opencascade中激活这个功能,主要是为了让三维模型在使用2D平面进行绘制时可以进行更准确的定位、提供坐标值系数,以及凸显三维模型的立体感。

一.在Qt项目中实现opencascade激活网状格栅的详细代码和结构。

(1).代码目录结构

MacOS 的QT开发初学(四): Opencascade-激活网状格栅

Qt项目结构

项目中,我们第一要在occview.h中创建一个V3d_Viewer的视图对象,通过这个对象可以在occview.cpp文件中提供激活网状格栅的实现方法。

(2).激活网状格栅的具体代码内容

.代码文件occview.h

// 文件occview.h

#ifndef OCCVIEW_H
#define OCCVIEW_H

#include <V3d_Viewer.hxx>

class OccView : public QWidget
{
  ...
  
	private:
  		// 定义查看器(viewer)类型对象上的服务
       Handle(V3d_Viewer) m_viewer;
  
  ...
};

.代码文件occview.cpp

// 文件occview.cpp

#include "occview.h"
#include "ui_occview.h"

OccView::OccView(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::OccView)
{
    ui->setupUi(this);

    if(m_context.IsNull()){
        Handle(Aspect_DisplayConnection) m_display_connection = new Aspect_DisplayConnection();
        if(m_graphic_driver.IsNull()){
            m_graphic_driver = new OpenGl_GraphicDriver(m_display_connection);
        }


            NSView* aViewHandle = (NSView*)winId();
            window = new Cocoa_Window(aViewHandle);

            // 创建图形系统驱动
            m_viewer = new V3d_Viewer(m_graphic_driver);
            m_view = m_viewer->CreateView();
            m_view->SetWindow(window);

            if(!window->IsMapped()){
                window->Map();
            }

            m_context = new AIS_InteractiveContext(m_viewer);
            m_viewer->SetDefaultLights();
            m_viewer->SetLightOn();

            m_view->SetBackgroundColor(Quantity_NOC_GRAY60);
            m_view->MustBeResized();

            // 激活格栅
            m_viewer->ActivateGrid (Aspect_GT_Rectangular, Aspect_GDM_Lines);

            // 显示三维坐标系
            m_view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_GOLD,0.08,V3d_ZBUFFER);
            m_context->SetDisplayMode(AIS_Shaded,Standard_True);
        }

        setAttribute(Qt::WA_PaintOnScreen);
        setAttribute(Qt::WA_NoSystemBackground);
        setBackgroundRole(QPalette::NoRole);
        setFocusPolicy(Qt::StrongFocus);

        setMouseTracking(true);
}

此代码中,只需要在occview.cpp文件中对m_viewer对象调用ActivateGrid ()方法,即可实现网状格栅的显示以及旋转等功能。

二.调试代码内容,展示网状格栅的功能。

(1).未创建三维模型之前的网状格栅状态

MacOS 的QT开发初学(四): Opencascade-激活网状格栅

网状格栅

(2).创建三维模型之后的网状格栅状态

MacOS 的QT开发初学(四): Opencascade-激活网状格栅

正方体在网状格栅上面的展现形态

从上面的图片展示效果来看,我们可以很明确的看到三维模型“正方体”,其显示效果会在网状格栅上面更有方向感和立体感,而且还能让这个三维模型的尺寸大小于网状格栅之间形成形成相应的比例。

结语:

关于opencascade的网状格栅功能实现,我们需要使用V3d_Viewer视图对象,只有它提供激活或开启的方法。

在实现这个功能之后,我希望对opencascade图形引擎超级感兴趣的开发者可以继续进行优化,列如网状格栅的无限增加、格栅纹理线条背景色的设置等等,希望你们能有更多收获。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容