二维图形编辑中点选取策略研究

本文探讨了二维图形编辑中实现合理鼠标点选取的方法。文章详细介绍了如何通过设定阈值来判断鼠标是否位于可选中图形对象的范围内,并通过伪代码展示了整个选中过程的逻辑实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:朱金灿
来源:http://blog.youkuaiyun.com/clever101/


在二维图形编辑中,鼠标操作估计是最常用的操作。在一般的图形操作中,一般的常用操作包括鼠标点选取。这里的点选取是指移动鼠标点到指定的图形对象上,指定的图形对象进行高亮显示(下图中的红色显示),意在提示用户该图形对象出于选中的范围,类似于下图:


point snap



下面谈谈怎样的是合理的点选取策略?首先涉及到鼠标点和图形对象之间距离,需要确定一个阈值,只有在鼠标点和某一图形对象的距离小于等于这一阈值时,这一图形对象才出于选中状态。其次在鼠标点离开某一图形对象的选中区域(即阈值范围内),也需要重设该对象为不选中状态。我们假设所有的图形对象都放在一个数组里。现在我们用伪代码模拟这一鼠标移动的选中事件:


int m_nSelIndex; // 上一次的选中的图形对象的序号


void MouseMoveFunction() // 鼠标移动消息处理函数
{
计算当前鼠标点到所有图形对象的距离,取得距离最小的那一个图形对象的序号。
假如上面求出的距离小于阈值
{
如果刚才的获取的图形对象序号上一次选中的图形对象序号(即等于m_nSelIndex)
{
退出;
}
否则
{
将上一次选中的图形对象区域设为不选中状态;
对该次选中的图形对象区域进行高亮显示;
m_nSelIndex赋值为该次选中图形对象的序号。
}
}
否则
{
将上一次选中的图形对象区域设为不选中状态;
m_nSelIndex赋值为-1,意为当前没有选中的图形对象。
}
}


其次这一过程中涉及的计算量比较多的应该是计算当前鼠标点到所有图形对象的距离,取得距离最小的那一个图形对象的序号。一个优化策略是在这一计算过程中先将明显大于阈值的图形对象先剔除掉,比如在计算两点距离时两点的x方向的差或y方向的差大于阈值,就可以判断出这两点的距离一定大于阈值,从而避免再进行平方和开方的运算。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值