Open CASCADE+Qt:实现以鼠标为锚点缩放、平移、旋转

简介

本文实现在三维窗口中添加一个立方体,并实现以鼠标为锚点视图缩放、平移、旋转操作,效果见如下动图:

添加立方体

基于前面建立的三维窗口:

Open CASCADE+Qt:实现简单的显示窗口(下)

OCCWidget构造函数末尾,添加立方体,并将其添加到上下文中显示该立方体(绘制立方体不是本文重点):

OCCWidget::OCCWidget(QWidget *parent)
    : QWidget{
   parent}
    , m_dpiScale{
   this->devicePixelRatioF()}
{
   
    ...
    // 绘制立方体
    TopoDS_Shape box = 	BRepPrimAPI_MakeBox(100, 100, 100);
    Handle(AIS_Shape) box_AIS = new AIS_Shape(box);
    m_context->Display(box_AIS, Standard_True);
}

显示效果如下:
Open CASCADE+Qt:实现以鼠标为锚点缩放、平移、旋转_第1张图片
可以看到在画面中央,出现了我们绘制的立方体,默认立方体以边显示,没有显示面,并且默认视角为等轴测视角。

视图缩放、平移、旋转实现

这里鼠标实现视图的缩放、平移以及旋转操作详细描述为:当鼠标滚轮向前滚动时,视图放大,反之视图缩小;按下鼠标右键不放并移动鼠标,视图跟随鼠标移动而平移;按下鼠标中键不放并移动鼠标,视图跟随鼠标移动而旋转。上述事件包含:鼠标滚动事件、鼠标右键按下事件、鼠标中键按下事件以及鼠标移动事件,因此,要实现视图缩放、平移、以及旋转操作,需要重写以下鼠标事件:

    void mousePressEvent(QMouseEvent* event) override;
    void mouseReleaseEvent(QMouseEvent* event) override;
    void

你可能感兴趣的:(Open,CASCADE+Qt,那些事,qt,c++)