连接两个矩形的线条绘制

3
我正在使用Swing/AWT制作自己的类图应用程序,但我在以下功能处停滞不前:
  • 我想在已选择的类矩形和目标类矩形之间绘制一条线,但该线具有一个特点,即无论我移动哪个矩形,连接它们的线都会以直线方式弯曲,希望下面的图片演示了我想要实现的内容: alt text

非常感谢提供一般指导或示例代码。


1
父类是否总是严格位于子类之上?还是它们也可以并列存在? - unwind
4个回答

5
我不懂Java,但你可以按照以下步骤进行操作:
- 找出矩形每条线段的中点(很容易,只需计算x1+x2和y1+y2的平均值)。 - 使用勾股定理算出上一步得到的点之间最接近的边缘。 - 从xa,ya开始画线(xa,ya是上一步得到的第一个点),方向指向远离矩形的方向。由于这个点所在的线段是已知的,所以你应该可以知道这个方向。 - 对xb,yb(第二个矩形上的点),做同样的操作。如果两条线相反,你应该画一半的长度,即xa-xb或ya-yb(取决于你是水平还是垂直方向画线)。如果它们是垂直的,你应该将它们画到交叉点,因此你可以从xa,ya画到xa,yb或者从xa,ya画到xb,ya(根据你是画水平还是竖直线来决定)。 - 还需要进行一些检查,以确定矩形是否重叠。例如,你不应该沿着同一方向画线。在那些无法确定如何画这些直线的情况下,可能只需要在两个点之间画一条对角线。 为了实现这个功能,你可以建立一个线类,使用观察者模式来监听它所跟随的两个矩形,这样它就可以在其中一个矩形移动或调整大小时自动更新。

4

对我来说也非常有帮助..:):) - Richa
我也发现这很有用。我正在利用它来创建用于计算D3力导向图中边缘的JavaScript函数。https://github.com/d3/d3/blob/master/API.md#forces-d3-force - Loren Cahlander

1

尝试使用观察者模式。所有与移动对象连接的线条都应该被通知到对象的新位置,并且适当地‘弯曲’起来。当然,首先要实现一些逻辑来连接两个对象。


-1
尝试创建一个名为“ConnectingLine”或类似的类。这个类将有几个部分(这是Dia中这些线条部分的名称,它是我目前最喜欢的UML建模工具),这些部分将逐个计算。当然,你会有一个单独的类来处理这个问题;) 可能叫做“LineSegment”。我认为这应该让您更容易执行所需的数学计算。
这也可以使段落“自动路由或不自动路由”变得容易d(^_^)b

此外,Klark 对于在这里使用观察者模式的建议非常好!(没有双关语) - davogotland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接