【问题标题】:Drag & Drop modyfiing polygon shape by moving vertices in C#通过在 C# 中移动顶点拖放修改多边形形状
【发布时间】:2012-03-22 09:46:10
【问题描述】:


我必须在 C# 中申请耕作。瓷砖会有一些形状,我的应用程序应该能够修改形状。我会有一些形状——多边形,由顶点组成。例如,我将有 16 个顶点的字段,然后我绘制多边形。 我需要知道如何使用拖放操作随顶点移动。我还必须重新计算其他顶点以便将一个图块与下一个图块相匹配,但这只是一些数学运算。

总结: 我在顶点字段中定义了 16 个顶点的多边形,我用一个顶点移动(用鼠标),重新计算其他顶点的坐标并绘制新的多边形。我的问题是移动(可能使用拖放)与顶点字段中的一个顶点。

这是我之前没有拖放的代码的一部分 - 只是为了了解我使用哪些工具来绘制一个图块:

 private Bitmap canvasBitmap; //canvas for drawing
 private Graphics g; // enter to graphics tool  

            Bitmap b = (Bitmap)Bitmap.FromFile("obr.bmp");
            TextureBrush brush = new TextureBrush(b);
            Pen pen = new Pen(Color.Black, 1);

            hexaVertices[0] = new PointF(-40 + 40, 0 + 30);
            hexaVertices[1] = new PointF(-20 + 40, 30 + 30);
            hexaVertices[2] = new PointF(20 + 40, 30 + 30);
            hexaVertices[3] = new PointF(40 + 40, 0 + 30);
            hexaVertices[4] = new PointF(20 + 40, -30 + 30);
            hexaVertices[5] = new PointF(-20 + 40, -30 + 30);

 g.FillPolygon(brush, hexaVertices);
 g.DrawPolygon(pen, hexaVertices);

谢谢你的建议。

【问题讨论】:

  • 我认为您需要确定鼠标单击的是哪个顶点(Mouse Down 事件)。然后你应该听 Mouse Up 事件并记录坐标。现在您知道单击了哪个顶点以及最终位置。

标签: c# graphics drag-and-drop 2d


【解决方案1】:

我只能在这里给你一个粗略的 Windows 窗体大纲。在 WPF 中,您可以使用Adorners,并且有一些教程可以说明如何做到这一点。在这里,我们在 Windows 窗体中进行手动处理:

首先,顶点数组应该是类的成员变量,并且应该只在程序开始时初始化一次。

然后,使用当前的顶点集绘制多边形,就像您现在所做的那样。此外,如果您愿意,还可以绘制一些“手柄”,这样您就知道可以抓取顶点(这可能是实际 PointF 周围的矩形)。

现在是魔术:-) 将MouseDownMouseMoveMouseUp 事件分配给您用于显示图像的控件。另外,创建一个新的成员变量bool m_draggingVertex 和另一个包含指向您当前拖动的顶点的顶点数组的索引。

MouseDown:
检查当前鼠标位置是否在顶点范围内(我假设顶点周围有一个 5x5 的矩形,这样更容易用光标击中)。如果您按下顶点上的按钮,请将m_draggingVertex 设置为true 并将顶点的索引存储在另一个变量中。

MouseMove:
如果m_draggingVertextrue,则将上面存储的索引处的顶点更改为新坐标,重新计算位置并重新绘制,以便显示顶点的当前位置。

MouseUp:
如果m_draggingVertextrue,则将其设置为false 并做最后的工作。

这就是我的做法......

【讨论】:

  • 是的,这是有用的提示。非常感谢 ;-)
猜你喜欢
  • 2017-05-31
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2020-09-22
  • 2015-07-08
  • 2022-12-01
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多