【问题标题】:Create boundingBox for shapes in java - use to select, drag and drop, rotate, translate在java中为形状创建boundingBox - 用于选择、拖放、旋转、翻译
【发布时间】:2014-10-24 22:40:39
【问题描述】:

我想创建一个边界框来选择一个形状。我有一个形状向量和一个所有点的向量。目标是在边界框内放置一些形状,然后我可以应用一些变换,例如在画布周围移动一些形状、旋转、调整大小等。

现在我专注于选择和移动某些形状的边界框。其他转换留待以后使用。

这是类,我知道至少我需要这个变量

public class BoundingBox {

int xmax;
int xmin;
int ymax;
int ymin;

public BoundingBox(Vector<Point> points) {

}

我还实现了其他类,例如,我有一个带有此功能的编辑器面板

Vector<Shape> shapes;
// Current shape that is in construction (if any)
Shape currentShape;
// shape that is selected, if any
Shape selectedShape;

实现形状的类

protected Vector<Point> points;
protected boolean isAShapeBeingBuilt;   //is any shape being built?
protected boolean selected;             //is any shape selected?
protected ShapesEditorPanel parent;     // reference to the panel

显然,我不能将所有代码都放在这里,但我希望通过这些信息可以帮助我。主要问题是如何选择和移动框内的一些形状!

【问题讨论】:

  • 不确定我是否理解这个问题。 Shape 类已经支持getBounds() 方法来获取Shape 的边界Rectangle
  • 我的形状课?还是你指的是java的shape类?
  • Java 的Shape 类。我回答的重点是您应该使用 Java 的 Shape 类。它已经提供了您需要的功能。
  • 是的,但我不能使用那个类。在这项工作中应该“手工”完成所有这些工作:D 无论如何,谢谢!

标签: java swing awt


【解决方案1】:

首先,不要使用 Vector,因为您的代码在单线程上运行。请改用 ArrayList。

然后,如果要找到边界框,则需要创建一个矩形,其对角线由点(smallestX,smallestY)和点(biggestX,最大Y)定义。遍历形状的点以找到 x 和 y 坐标的最小值和最大值。

【讨论】:

  • 我使用vector是因为老师给出了一些代码... 不能修改,但感谢您的建议。你说的对角线是什么意思?我在想一个矩形,边缘通过你所说的点。你是这个意思吗?
  • 一个矩形只能由它的大对角线来定义,即从左下角到右上角的线,或者从右下角到左上角的线。或者,您可以定义四个点并从中创建矩形。但是,您需要验证这四个点确实构成了一个矩形。
  • 但这是创建矩形的java方法吗?
  • 我查过了,没有。 Java 的矩形需要左上角的点、高度和宽度。
  • 好的,感谢您的帮助。对于 de select、move 和 transform 问题,您有什么建议?
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2020-12-07
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多