0

我已经搜索了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();                        
                }
            }
        }            
    }

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

1 回答 1

3

大多数 2d 和 3d 应用程序都使用场景图来维护对象/向量/事物之间的关系。该图是一个树结构,其中每个对象(根除外)都有一个父对象。每个子节点都定义了相对于其父节点的位置。这样一来,如果您移动一个孩子,它的所有孩子都会自动移动。如果需要,您还可以选择存储相对缩放或旋转。

于 2013-03-20T20:01:47.297 回答