我必须在C#中申请耕种。瓷砖将有一些形状,我的应用程序应该能够修改形状。我会有一些形状 - 多边形,由顶点构成。我将有例如16个顶点的字段,然后我绘制多边形。
我需要知道的是什么如何使用拖放移动顶点。我还需要重新计算其他顶点,以便将一个平铺贴合到下一个平铺,但这只是一些数学。
总结: 我有多边形在顶点的字段中定义了16个顶点,我用一个顶点移动(用鼠标),重新计算欧氏顶点的坐标并绘制新的多边形。我的问题是移动(可能使用拖放)与顶点字段的一个顶点。
这是我以前的代码中没有拖拽的部分。 drop - 只是想知道我用来绘制一块瓷砖的工具:
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);
表示建议。
答案 0 :(得分:3)
我只能在这里为您提供Windows窗体的大致轮廓。在WPF中,您可以使用Adorner
,并且有关于如何执行此操作的教程。在这里,我们在Windows窗体中进行手动过程:
首先,顶点数组应该是类的成员变量,并且应该只在程序开始时初始化一次。
然后,就像你现在正在做的那样用当前的顶点集绘制多边形。此外,如果需要,绘制一些“手柄”,因此您知道可以抓取顶点(这可能是实际PointF
周围的矩形)。
现在为魔术:-)将MouseDown
,MouseMove
和MouseUp
事件分配给您用于显示图像的控件。此外,创建一个新的成员变量bool m_draggingVertex
和另一个包含您当前正在拖动的顶点的顶点数组的索引。
MouseDown
:
检查当前鼠标位置是否在椎骨的范围内(我假设一个顶点周围有一个5x5的矩形,这样就更容易用光标击中)。如果按下顶点上的按钮,请将m_draggingVertex
设置为true
,并将顶点的索引存储在另一个变量中。
MouseMove
:
如果m_draggingVertex
为true
,请将上面存储的索引处的椎骨更改为新坐标,重新计算您的位置并重新绘制,以便显示顶点的当前位置。
MouseUp
:
如果m_draggingVertex
为true
,请将其设置为false
并进行最终工作。
我就是这样做的......