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

本文介绍了2D CAD/CAM软件中点选图元的原理,通过设定鼠标敏感范围来判断点击是否选中图元。内容涵盖了数学方法,如点到点、直线、折线、圆和曲线的最短距离计算,以及点选图元的接口实现,包括直线、折线、正圆图元。同时,文章还讨论了点选图元的操作和实际效果。
摘要由CSDN通过智能技术生成

点选图元原理

  1. 设定鼠标敏感范围,比如选中鼠标点击位置5个像素内距离最近的图元;
  2. 当鼠标点击时,求解点击位置在几何坐标系下坐标点与附近几何图元的距离;
  3. 如果到图元距离小于设定的鼠标敏感范围,则视为图形可选中;
  4. 进一步,如果多个图元满足被选中的条件,则只选中距离最近的图元(根据需求也可设定满足条件图元全部选中,如本文实例)。

数学方法

  1. 点到点的距离:笛卡尔坐标系下点到点距离求解方法。
  2. 点到直线最短距离:注意CAD/CAM软件中直线都是直线段,故最短距离可能有两种情况,一是垂线段距离最短,二是到断点距离最短(此时不存在垂线段情形)。
  3. 点到折线最短距离:折线其实是直线段的组合,所以点到折线的最短距离转换为点到直线段最短距离。
  4. 点到正圆最短距离:点到圆心距离,减去半径长度,求绝对值。
  5. 点到曲线最短距离:曲线经特定精度的离散成折线,转换为点到折线的最短距离问题等。

实现

点图元的接口

/// j-geometry-point.h        
    bool IsEqualTo(const JGeoPoint &other, double eps = GEO_EPS) const;
    bool operator==(const JGeoPoint &other) const;
    bool operator!=(const JGeoPoint &other) const;
    JGeoPoint operator+(const JGeoPoin
  • 0
    点赞
  • 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、付费专栏及课程。

余额充值