private void openGLControl_MouseClick(object sender, MouseEventArgs e) { if (renderMode == false) // mode select hanlde event { double minDist = double.MaxValue; double esp = 10; int index = -1; for (int i = 0; i < listShapes.Count; i++) { for (int j = 0; j < listShapes[i].controlPoints.Count; j++) { int x = listShapes[i].controlPoints[j].X; int y = listShapes[i].controlPoints[j].Y; double dist = Math.Sqrt((e.Location.X - x) * (e.Location.X - x) + (openGLControl.OpenGL.RenderContextProvider.Height - e.Location.Y - y) * (openGLControl.OpenGL.RenderContextProvider.Height - e.Location.Y - y)); if (dist <= esp) { if (dist < minDist) { minDist = dist; index = i; } } } } if (index != -1) { openGLControl.OpenGL.RenderMode(OpenGL.GL_RENDER); reDraw(-1); listShapes[index].DrawControlPoints(openGLControl.OpenGL); selectedShape = index; changeToSelectMode(); } return; } if (labelMode.Text == strMode + "Polygon") { // xử lý event mouse click trong chế độ polygon if (e.Button == MouseButtons.Right) { // chuột phải thì kết thúc quá trình vẽ if ((int)openGLControl.Tag == OPENGL_DRAWING) { ShapeType tmp = new Polygon(); tmp = listShapes.Last(); tmp.Done = true; tmp.p1 = tmp.controlPoints.Last(); tmp.p2 = tmp.controlPoints[0]; pEnd = tmp.controlPoints.Last(); tmp.AddEdge(openGLControl.OpenGL); } } if (e.Button == MouseButtons.Left) { // xử lý click chuột trái pStart = e.Location; openGLControl.Tag = OPENGL_DRAWING; ShapeType tmp; if (listShapes.Count == 0 || listShapes.Last().id != SHAPE_POLYGON || listShapes.Last().Done) { // nếu trong danh sách các hình đã vẽ, nếu hình cuối vẽ chưa xong, hoạc chưa có hình nào //* hoặc ko phải là 1 polygon thì tạo 1 polygon mới thêm vào listshape tmp = new Polygon() { id = SHAPE_POLYGON, Done = false, p1 = new Point(pStart.X, pStart.Y), p2 = new Point(pStart.X, pStart.Y), Vertex = new List <Point>() }; listShapes.Add(tmp); pEnd = e.Location; } Point t = new Point(e.Location.X, openGLControl.OpenGL.RenderContextProvider.Height - e.Location.Y); listShapes.Last().controlPoints.Add(t); listShapes.Last().Vertex.Add(t); listShapes.Last().p1 = pStart; listShapes.Last().p2 = pEnd; pEnd = pStart; } return; } if (labelMode.Text == strMode + "Translate") { return; } }