上一批文章提到框选图形有两种方式:
- 图像完全在选择框内;
- 图像一部分在选择框内。
实现第一种操作相对比较简单:为每个图像计算一个边框Frame,然后计算这个Frame是否完全在选择框内。
实现第二种操作则相对麻烦。如果你认为只要计算出Frame与选择框是否相交就可以,那么你想得过于简单了。比如一个圆,它的Frame和选择框相交并不等同于圆本身与选择框相交。因此第二种方法需要补充更多关于不同几何图形是否相交的API,这一部分我们将会在后续的文章中陆续补充上。
本文先关注如何实现第一种操作。
图形边框Frame
为每个几何图形子类实现求取边框的接口函数。
举例说明:
- 对于折线而言,遍历每个点的坐标,求出坐标最大值和最小值;
- 对于圆形而言,其边框的基点是左上角点,宽和高都等于直径。
JGeoRect *JGeoCircle::GetRect() {
rect_->SetPosition(JGeoPoint(center_.GetX() - radius_, center_.GetY() - radius_));
rect_->SetWidth(2*radius_);
rect_->SetHeight(2*radius_);
return JGeo