예제 #1
0
파일: Form1.cs 프로젝트: quandangv/Homework
        private void mouse_Move(object sender, MouseEventArgs e)
        {
            ShapeConstruction construct = new ShapeConstruction();

            if (selectedType != Shape.shapeType.NONE)
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    // Liên tục cập nhật điểm cuối chuột
                    pEnd = e.Location;
                    switch (selectedType)
                    {
                    // Chọn không gì cả
                    case Shape.shapeType.NONE:
                    {
                        break;
                    }

                    // Chon vẽ đường thẳng
                    case Shape.shapeType.LINE:
                    {
                        // Liên tục xóa để vẽ lại
                        shapes.Last().rasterPoints.Clear();
                        construct.ConstructLine(shapes.Last(), pStart, pEnd);
                        break;
                    }

                    // Chọn vẽ đường tròn
                    case Shape.shapeType.CIRCLE:
                    {
                        shapes.Last().rasterPoints.Clear();
                        construct.ConstructCircle(shapes.Last(), pStart, pEnd);
                        break;
                    }

                    // Chọn vẽ hình chữ nhật
                    case Shape.shapeType.RECTANGLE:
                    {
                        shapes.Last().rasterPoints.Clear();
                        construct.ConstructRectangle(shapes.Last(), pStart, pEnd);
                        break;
                    }

                    // Chọn vẽ elip
                    case Shape.shapeType.ELLIPSE:
                    {
                        shapes.Last().rasterPoints.Clear();
                        construct.ConstructEllipse(shapes.Last(), pStart, pEnd);
                        break;
                    }

                    // Chọn vẽ tam giác
                    case Shape.shapeType.TRIANGLE:
                    {
                        shapes.Last().rasterPoints.Clear();
                        construct.ConstructTriangle(shapes.Last(), pStart, pEnd);
                        break;
                    }

                    // Chọn vẽ ngũ giác
                    case Shape.shapeType.PENTAGON:
                    {
                        shapes.Last().rasterPoints.Clear();
                        construct.ConstructPentagon(shapes.Last(), pStart, pEnd);
                        break;
                    }

                    // Chọn vẽ lục giác
                    case Shape.shapeType.HEXAGON:
                    {
                        shapes.Last().rasterPoints.Clear();
                        construct.ConstructHexagon(shapes.Last(), pStart, pEnd);
                        break;
                    }

                    // Chọn vẽ đa giác
                    case Shape.shapeType.POLYGON:
                    {
                        // Vẽ các đt nối tiếp lẫn nhau.
                        // click chuột và di chuyển chuột 1 ít để tạo điểm.
                        if (e.Button == System.Windows.Forms.MouseButtons.Left)
                        {
                            NewPolygon.Add(pStart);
                            if (NewPolygon.Count > 1)
                            {
                                construct.ConstructLine(shapes.Last(), NewPolygon[NewPolygon.Count - 2], NewPolygon.Last());
                            }
                        }
                        break;
                    }
                    }
                }
                shapesChanged = true;
            }
            else
            {
                // Nếu chọn nút None để tiến vào trạng thái không vẽ
                if (selectedShape != -1)
                {
                    // Nếu chọn biến đổi tịnh tiến
                    if (selectedAffine == 1)
                    {
                        if (e.Button == System.Windows.Forms.MouseButtons.Left)
                        {
                            pEnd = e.Location;
                            Point translate_vector = new Point();
                            translate_vector.X = pEnd.X - pLast.X;
                            translate_vector.Y = pEnd.Y - pLast.Y;
                            shapes[selectedShape].Translate(translate_vector);
                            pLast         = pEnd;
                            shapesChanged = true;
                        }
                    }

                    // Nếu chọn co giãn hình
                    if (selectedAffine == 2)
                    {
                        if (e.Button == System.Windows.Forms.MouseButtons.Left)
                        {
                            pEnd   = e.Location;
                            pStart = shapes[selectedShape].inputPoint[0];
                            shapes[selectedShape].rasterPoints.Clear();
                            shapes[selectedShape].inputPoint.Clear();
                            shapes[selectedShape].ControlPoint.Clear();

                            switch (shapes[selectedShape].type)
                            {
                            case Shape.shapeType.LINE:
                                construct.ConstructLine(shapes[selectedShape], pStart, pEnd);
                                break;

                            case Shape.shapeType.CIRCLE:
                                construct.ConstructCircle(shapes[selectedShape], pStart, pEnd);
                                break;

                            case Shape.shapeType.RECTANGLE:
                                construct.ConstructRectangle(shapes[selectedShape], pStart, pEnd);
                                break;

                            case Shape.shapeType.ELLIPSE:
                                construct.ConstructEllipse(shapes[selectedShape], pStart, pEnd);
                                break;

                            case Shape.shapeType.TRIANGLE:
                                construct.ConstructTriangle(shapes[selectedShape], pStart, pEnd);
                                break;

                            case Shape.shapeType.PENTAGON:
                                construct.ConstructPentagon(shapes[selectedShape], pStart, pEnd);
                                break;

                            case Shape.shapeType.HEXAGON:
                                construct.ConstructHexagon(shapes[selectedShape], pStart, pEnd);
                                break;
                            }
                            shapesChanged = true;
                        }
                    }
                }
            }
        }
예제 #2
0
파일: Form1.cs 프로젝트: quandangv/Homework
        // Lúc nhấn chuột
        private void mouse_Down(object sender, MouseEventArgs e)
        {
            if (selectedType != Shape.shapeType.NONE)
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    pStart = pEnd = e.Location;
                    // Vẽ hình theo nút đã lựa chọn
                    shapes.Add(new Shape(selectedType, selectedWidth, selectedColor));
                    shapes.Last().rasterPoints.Add(pStart);
                }

                // Chuột phải cho việc kết thúc vẽ đa giác
                if (e.Button == System.Windows.Forms.MouseButtons.Right)
                {
                    // Nếu chọn vẽ polygon - vẽ đa giác.
                    if (selectedType == Shape.shapeType.POLYGON)
                    {
                        // Tập điểm lớn hơn 2 thì vẽ
                        if (NewPolygon.Count > 2)
                        {
                            ShapeConstruction construct = new ShapeConstruction();
                            // vẽ đt từ điểm đầu đến cuối để hoàn thiện hình.
                            construct.ConstructLine(shapes.Last(), NewPolygon[0], NewPolygon.Last());
                            // cập nhật vẽ.
                            shapesChanged = true;
                            // tạo lại tập điểm mới.
                            NewPolygon = new List <Point>();
                        }
                    }
                }
            }
            else
            {
                // Hiển thị control point nếu không trong trạng thái vẽ. - Nút None là thiết lập trái thái không vẽ.
                // Nhấn chuột trái
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    pStart = pEnd = e.Location;
                    pLast  = pStart;
                    // Tính khoảng cách min từ chuột đến hình

                    double minDistance = 1000.0;
                    // Hằng số epsilon
                    double epsilon = 10.0;

                    for (int i = 0; i < shapes.Count; i++)
                    {
                        for (int j = 0; j < shapes[i].rasterPoints.Count; j++)
                        {
                            int    dx       = shapes[i].rasterPoints[j].X - e.Location.X;
                            int    dy       = shapes[i].rasterPoints[j].Y - e.Location.Y;
                            double distance = Math.Sqrt(dx * dx + dy * dy);

                            if (distance < minDistance)
                            {
                                // Chọn hình hiển thị control point.
                                selectedShape = i;
                                // Thiết lập minDistance để chọn ra hình nào gần hơn.
                                minDistance = distance;
                            }
                        }
                    }

                    // Khoảng cách nhỏ hơn epsilon thì chọn hình
                    if (minDistance <= epsilon)
                    {
                        shapesChanged = true;
                        return;
                    }

                    // nếu không gần bất cứ hình nào thì tắt hết control point.
                    selectedShape = -1;
                    shapesChanged = true;
                    return;
                }
            }
        }