Esempio n. 1
0
        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;
            }
        }