2012-03-22 45 views
0


我必須做在C#中耕作的應用程序。瓷磚將有一些形狀,我的應用程序應該能夠修改形狀。我將會有一些形狀 - 由頂點構成的多邊形。例如,我將有16個頂點的域,然後繪製多邊形。 我需要知道的是什麼如何使用拖放來移動頂點。我還必須重新計算其他頂點,以便將一個拼貼貼到下一個拼貼,但這只是一些數學。通過在C中移動頂點拖放Modyfiing多邊形形狀#

總結: 我有多邊形在頂點域中定義了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); 

THX的建議。

+0

我認爲你需要確定哪個頂點點擊鼠標時(鼠標按下事件)。然後,您應該聽取Mouse Up事件並記錄座標。現在你知道哪個頂點被點擊了,最後的位置。 – daryal 2012-03-22 09:58:45

回答

3

我只能在這裏給你一個粗略的Windows窗體大綱。在WPF中,您可以使用Adorner,並在那裏有教程來介紹如何執行此操作。這裏我們將在Windows窗體中進行手動處理:

首先,頂點數組應該是該類的成員變量,並且應該在程序開始時僅初始化一次。

然後,像現在一樣繪製具有當前頂點集合的多邊形。此外,如果你想要畫一些「手柄」,所以你知道頂點可以被抓住(這可能是實際的PointF周圍的矩形)。

現在的魔力:-)將MouseDownMouseMoveMouseUp事件分配給您用於顯示圖像的控件。另外,創建一個新的成員變量bool m_draggingVertex,另一個包含您當前拖動的頂點頂點數組的索引。

MouseDown
檢查當前鼠標位置是否是vertext的範圍內(我假設圍繞頂點的5×5的矩形,所以這是更容易擊中光標)。如果按下頂點上的按鈕,則將m_draggingVertex設置爲true,並將頂點的索引存儲在另一個變量中。

MouseMove
如果m_draggingVertextrue,改變存儲上面的新座標指數在vertext,重計算你的位置,並重新繪製,使頂點的當前位置被顯示。

MouseUp
如果m_draggingVertextrue,將其設置爲false,做最後的工作。

這是我會做...

+0

是的,這是有用的提示。非常感謝 ;-) – user1097772 2012-03-22 10:05:39