我已经搜索了2D、绘图、算法等关键字,但没有找到或至少注意到这是否可能是 SOF 上的重复,所以请告诉我,然后我很乐意删除它以遵循 StackOverFlow 政策!
长话短说,我需要知道是否有人使用过或知道用于在画布上移动二维矩形的优化算法。(目前我们正在使用 WPF)
这是我们的代码,我们的问题是在节点/点中连接的移动对象与使用鼠标移动的矩形。考虑一个场景,用户抓取一个节点,比如说右下角并将其拖到画布上。
矩形移动正常,但是当它有其他形状连接时,例如另一个矩形、直线或圆形。目前它出错了,设计/草图变形了。
我想,为了澄清我的问题,也许我应该问这个问题:哪种算法或哪种数据结构可以帮助我跟踪和维护其他链接形状与该矩形的连接?
笔记: 好的,我需要在这里补充的一件事是,我们的代码在所有情况下都可以正常工作,但是,我们注意到当我们的形状或绘图变得复杂时,移动整个设计或对象会花费太多时间。我们在以前的版本中所做的(就矩形而言)是连接两条线,其中一个列表将存储所有连接信息,因此对于一个矩形,我们将信息存储在一条线的每个起点和终点。然而,在新版本(正在开发)中,我们使用了 Point 类中的一个对象来存储这些信息。因此,我们不是将信息存储在 8 个点中,而是将连接信息存储在 4 个点中,希望这样可以优化系统。现在,我们遇到了这种连接问题,即无法正确移动矩形,并且矩形可能会变成断开的矩形甚至是一条线。
public void RefreshDirectConnections()
{
if (!this.IsTraversed)
{
this.IsTraversed = true;
TestDrawingCanvas canvas = this.Parent as TestDrawingCanvas;
foreach (TestConnection con in this.Connections)
{
TestShapeBase shape = canvas.GetByID(con.ConnectedShapeID);
if (!shape.IsValidMove(this.GetHandle(con.ThisHandle), con.ConnectedHandle))
{
InValid = true;
canvas.DrawInvalidRect(this.GetHandle(con.ThisHandle));
}
else
{
shape.MoveHandleTo(this.GetHandle(con.ThisHandle), con.ConnectedHandle);
shape.RefreshDrawing();
}
}
}
}