编写一款2D CAD/CAM软件(十)视图拖拽

本文介绍了如何在2D CAD/CAM软件中实现视图拖拽功能,通过鼠标滚轮按压拖动进行视图平移。数学模型涉及平移的仿射变换,将几何图形坐标系原点的视图坐标与鼠标拖动的像素数相结合。视图实现部分阐述了利用鼠标位置更新视图状态,并通过事件传递来跟踪拖拽开始和结束,实现平滑的视图跟随效果。
摘要由CSDN通过智能技术生成

一般视图操作是通过按压鼠标滚轮拖动实现视图的平移操作。

数学模型

平移的仿射变换是最简单的变换操作。

  1. 假设几何图形坐标系原点在视图坐标系下坐标为Pgeo(Xgeo, Ygeo);
  2. 鼠标拖拽产生的移动向量在视图坐标系下表示为(Xview_delta, Yview_delta),可简单理解为鼠标移动的像素数目;
  3. 求:拖拽后几何图形坐标系原点在视图坐标系坐标Pgeo_new(Xgeo_new, Ygeo_new).
Xgeo_new = Xgeo + Xview_delta

Ygeo_new = Ygeo + Yview_delta

更新

Xgeo= Xgeo + Xview_delta

Ygeo = Ygeo + Yview_delta

视图实现

  /// j-view.h

    QPoint mouse_pos_;
    bool is_dragging_ = false;

  /// j-view.cpp

    void JView::mousePressEvent(QMouseEvent *e) {
        if (e->button() == Qt::MidButton) {
            is_dragging_ = true;
        }
    }

    void JView::mouseReleaseEvent(QMouseEvent *e) {
        if (e->button() == Qt::MidButton) {
            is_dragging_ = false;
        }
    }

    void JView::mouseMoveEvent(QMouseEvent *e) {
        auto pos = e->pos();
        auto delta
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arthur...J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值