Flex:在形状之间绘制连接线
我正在使用 Adobe Flex 3 构建一个图表工具。我即将实现连接线,但我有一个问题。
想象一下,我在画布上的随机位置有 2 个正方形。我需要在它们之间画一条带箭头的连接线。我需要它趋向于目标方块的中心,但结束于其边界。
如何找出要画线的确切点?
谢谢
I am building a diagramming tool using Adobe Flex 3. I am about to implement connector lines and I have a question.
Imagine I have 2 squares at random positions on the canvas. I need to draw an arrowed connector line between them. I need it to tend to the target square's center but end on its border.
How do I find out the exact points between which to draw the line?
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个做你想做的事的例子。
这段代码没有完全优化。这个想法更多的是解释它是如何工作的。基本上,我们定义两个(随机)正方形,并在它们之间画一条线。为了追踪这条线,我们计算从第一个正方形中心到第二个正方形中心的角度,然后使用特殊方法 (
getSquareBorderPointAtAngle
) 在正方形边框上提取一个点正确的方向。这个方法是这个片段的第一个关键点。我们使用简单的圆形几何形状进行计算,并对如何使点与边界匹配而不是与正方形周围或内部的圆匹配进行了一些复杂化。
然后,我们画一个箭头。为此,我们使用 Flash
Matrix
类,因为这种方式比从头开始计算要容易得多。到这里我们就完成了。
Here is an example doing what you want.
This code isn't totally optimized. The idea is more to explain how it works. Basically, we are defining two (random) squares, and tracing a line between them. To trace the line, we calculate an angle from the center of the first square to the center of the second one, and we use a special method (
getSquareBorderPointAtAngle
) to extract a point on the square border in the right direction.This method is the first key point of this snippet. We calculate that using simple circle geometry, with a little complexification on how we make the point match the border instead of matching a circle around or inside the square.
Then, we draw an arrow head. For that, we're making use of the Flash
Matrix
class, because it's much easier this way than to calculate it from the scratch.And here we're done.
一个月前我在这里阅读了答案,因为我需要同样的东西。同时发现了这个连接器绘图示例,并认为我会分享该链接。
该示例在 uicomponents 之间绘制连接线,并在拖动连接器时更新这些线。好一个!
(来源:sammyjoeosborne.com)
http://sammyjoeosborne.com/Examples/Connector/ConnectorExample.html
I was reading the answers here a month ago as I need the same thing. Found this connector drawing example in the meantime, and thought i'd share the link.
The example draws connector lines between uicomponents, and updates the lines as the connectors are dragged. Nice one!
(source: sammyjoeosborne.com)
http://sammyjoeosborne.com/Examples/Connector/ConnectorExample.html
最简单的事情可能是使用
flash.geom.Point
。取中心c1
和c2
。取向量d
,这就是它们的差异。根据其角度(315 至 45、45 至 135、135 至 225、225 至 315),您将知道涉及哪些边(分别为:右和左、上和下、左和右、下和上)。然后计算每条边与连接中心的线之间的交点。
连接中心的线可以表示为 p=t*v+c1 (用向量表示)。将边表示为一条线,然后计算
t
,使两个方程产生相同的点p
,这就是您要查找的交点。the most simple thing is probably using
flash.geom.Point
. take both centersc1
andc2
. take the vectord
that is their difference. depending on its angle (315 to 45, 45 to 135, 135 to 225, 225 to 315) you will know which sides are involved (respectively: right and left, top and bottom, left and right, bottom and top).then calculate intersections between each side and the line connecting the centers.
the line connecting the centers can be represented as
p=t*v+c1
(speaking in vectors). represent the side as a line and then calculatet
such that both equations yield the same pointp
, which is the intersection you are looking for.