编写一款2D CAD/CAM软件(十八)框选图形

本文介绍了在2D CAD/CAM软件中实现框选图形的方法,重点关注完全在选择框内的图形。针对每种几何图形,需要实现计算边框Frame的接口。对于折线和圆形等,有不同的计算策略。接着,文章讨论了边框相关的API,包括判断边框是否包含的功能。最后,阐述了在正常操作中如何根据鼠标操作计算选中图形,并在绘制时以不同线型显示选中状态。
摘要由CSDN通过智能技术生成

上一批文章提到框选图形有两种方式:

  1. 图像完全在选择框内;
  2. 图像一部分在选择框内。

实现第一种操作相对比较简单:为每个图像计算一个边框Frame,然后计算这个Frame是否完全在选择框内。

实现第二种操作则相对麻烦。如果你认为只要计算出Frame与选择框是否相交就可以,那么你想得过于简单了。比如一个圆,它的Frame和选择框相交并不等同于圆本身与选择框相交。因此第二种方法需要补充更多关于不同几何图形是否相交的API,这一部分我们将会在后续的文章中陆续补充上。

本文先关注如何实现第一种操作。

图形边框Frame

为每个几何图形子类实现求取边框的接口函数。

举例说明:

  1. 对于折线而言,遍历每个点的坐标,求出坐标最大值和最小值;
  2. 对于圆形而言,其边框的基点是左上角点,宽和高都等于直径。
    JGeoRect *JGeoCircle::GetRect() {
        rect_->SetPosition(JGeoPoint(center_.GetX() - radius_, center_.GetY() - radius_));
        rect_->SetWidth(2*radius_);
        rect_->SetHeight(2*radius_);
        return JGeometry::GetRect();
    }


    JGeoRect *JGeoLine::GetRect() {
        auto x_min = std::fmin(start_.GetX(), end_.GetX());
        auto y_min = std::fmin(start_.GetY(), end_.GetY());
        au
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Arthur...J

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

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

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

打赏作者

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

抵扣说明:

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

余额充值