示例#1
0
        private void CmbPenType_SelectedIndexChanged(object sender, EventArgs e)
        {
            pnlHatchFill.Visible   = false;
            pnlTextFill.Visible    = false;
            pnlLinearAngle.Visible = false;
            switch ((PenType)cmbPenType.SelectedIndex)
            {
            case PenType.HatchFill:
                pnlHatchFill.Visible = true;
                break;

            case PenType.PathGradient:
            case PenType.LinearGradient:
                pnlLinearAngle.Visible = true;
                break;

            case PenType.TextureFill:
                pnlTextFill.Visible = true;
                pnlPaint.Refresh();
                break;
            }
            DrawObj.ForEach(shape =>
            {
                if (shape.IsSelected)
                {
                    shape.Brush = CreateBrush();
                }
            });
            UpdateSelectedShape();
            pnlPaint.Focus();
        }
示例#2
0
 private void MouseDown_Select(Point eLocation)
 {
     //Nếu nhấn phím CTRL, sẽ chọn đồng thời nhiều shape. Nếu hình đã chọn mà chọn lần 2, sẽ thành bỏ chọn
     if (IsCTRL_pressed)
     {
         DrawObj.ForEach((Action <MyShapes>)(shape =>
         {
             if (shape.Select(eLocation))
             {
                 shape.IsSelected = !shape.IsSelected;
             }
         }));
     }
     //Nếu không nhấn CTRL, chỉ có thể chọn duy nhất 1 hình rồi return
     else
     {
         SelectedShape = SelectShape(eLocation);
         FirstPoint    = eLocation;
         if (SelectedShape != null)
         {
             UpdateInfo();
             if (IsZooming)
             {
                 SelectedShape.SelectPoint(eLocation);
             }
             IsDrawRegion = false;
         }
         else    //Draw a rectangle region
         {
             IsDrawRegion   = true;
             SelectedRegion = new Rectangle(eLocation, new Size(0, 0));
         }
     }
     RePaint();
 }
示例#3
0
        private void FrmMain_KeyDown(object sender, KeyEventArgs e)
        {
            IsCTRL_pressed = e.Control;
            lblGroup.Tag   = false;
            GetFocus(lblGroup, false);
            pnlPaint.Focus();
            switch (e.KeyCode)
            {
            case Keys.Delete:
            case Keys.Back:
                for (int i = 0; i < DrawObj.Count; i++)
                {
                    if (DrawObj[i].IsSelected)
                    {
                        DrawObj.RemoveAt(i--);
                    }
                }
                break;

            case Keys.A:
                if (IsCTRL_pressed)
                {
                    GetFocus(lblSelect, true);
                    CurrentACTION = ACTION.SELECT;
                    DrawObj.ForEach(shape => shape.IsSelected = true);
                }
                break;
            }
            RePaint();
        }
示例#4
0
 private void CmbDashStyle_SelectedIndexChanged(object sender, EventArgs e)
 {
     DrawObj.ForEach(shape =>
     {
         if (shape.IsSelected)
         {
             shape.Pen.DashStyle = (DashStyle)cmbDashStyle.SelectedIndex;
         }
     });
     RePaint();
 }
示例#5
0
        /// <summary>
        /// Dùng để tạo ra 1 bitmap từ graphics
        /// </summary>
        /// <returns>1 bitmap </returns>
        private Bitmap CreateImage()
        {
            DrawObj.ForEach(shape => shape.IsSelected = false);
            RePaint();
            Bitmap    bitmap = new Bitmap(pnlPaint.Width, pnlPaint.Height);
            Graphics  graph  = Graphics.FromImage(bitmap);
            Rectangle rect   = pnlPaint.RectangleToScreen(pnlPaint.ClientRectangle);

            graph.CopyFromScreen(rect.Location, Point.Empty, pnlPaint.Size);
            return(bitmap);
        }
示例#6
0
 private void CmbHatchFill_SelectedIndexChanged(object sender, EventArgs e)
 {
     DrawObj.ForEach(shape =>
     {
         if (shape.IsSelected)
         {
             shape.Brush = new HatchBrush((HatchStyle)cmbHatchFill.SelectedIndex, Color.Blue);
         }
     });
     UpdateSelectedShape();
     RePaint();
 }
示例#7
0
 /// <summary>
 /// Dùng để cập nhật lại các hình ảnh được chọn
 /// </summary>
 private void UpdateSelectedShape()
 {
     DrawObj.ForEach(shape =>
     {
         if (shape.IsSelected)
         {
             shape.Update(
                 Fill: Fill,
                 isDrawBorder: ckbBorder.Checked,
                 brush: CreateBrush(),
                 penWidth: trbPenWidth.Value,
                 dashStyle: (DashStyle)cmbDashStyle.SelectedIndex,
                 penColor: lblBorderColor.BackColor,
                 startAngle: trbStartAngle.Value,
                 sweepAngle: trbSweepAngle.Value);
         }
     });
     RePaint();
 }
示例#8
0
 /// <summary>
 /// Dùng để vẽ lại screen bằng cách vẽ chồng từng lớp graphics lên nhau
 /// </summary>
 private void RePaint()
 {
     using (Brush brush = new SolidBrush(Color.White))
     {
         Gp.Graphics.FillRectangle(brush, 0, 0, pnlPaint.Width, pnlPaint.Height);
         DrawObj.ForEach(shape => shape.Draw(Gp.Graphics));
         if (IsDrawRegion)
         {
             using (Pen pen = new Pen(Color.Black)
             {
                 DashStyle = DashStyle.Dash
             })
             {
                 Gp.Graphics.DrawRectangle(pen, SelectedRegion);
             }
         }
         pnlPaint.Focus();
         Gp.Render();
     }
 }
示例#9
0
 private void PnlPaint_MouseUp(object sender, MouseEventArgs e)
 {
     if (CurrentACTION == ACTION.DRAWING)
     {
         if (MyShape == SHAPES.CURVE || MyShape == SHAPES.POLYGON || MyShape == SHAPES.CLOSEDCURVE)
         {
             return;
         }
         else
         {
             CurrentACTION = ACTION.DRAW;
         }
     }
     //Select
     else if (CurrentACTION == ACTION.SELECT)
     {
         SelectedShape = null;
         //Cập nhật các hình được chọn vào list DrawObj
         if (IsDrawRegion)
         {
             IsDrawRegion = false;                    //Dung de xoa vung rectangle region
             DrawObj.ForEach(shape => shape.IsSelected = false);
             DrawObj.ForEach((Action <MyShapes>)(shape =>
             {
                 if (shape.P1.X >= SelectedRegion.X &&
                     shape.P2.X <= SelectedRegion.X + SelectedRegion.Width &&
                     shape.P1.Y >= SelectedRegion.Y &&
                     shape.P2.Y <= SelectedRegion.Y + SelectedRegion.Height)
                 {
                     shape.IsSelected = true;
                 }
             }));
             SelectedRegion = new Rectangle();       //Dat lai gia tri rectangle region
             RePaint();
         }
     }
 }
示例#10
0
        /// <summary>
        /// Dùng để thiết lập các giá trị trên menu khi có một hình được chọn
        /// </summary>
        private void Shape_Click(object sender, EventArgs e)
        {
            CurrentACTION = ACTION.DRAW;
            IsZooming     = false;
            GetFocus(lblGroup, false);
            GetFocus(lblZoom, false);
            GetFocus(lblSelect, false);
            Label _sender = sender as Label;

            for (int i = 0; i < ShapeMenu.Count; i++)
            {
                if (ShapeMenu[i] == sender)
                {
                    ShapeMenu[i].BackColor   = SystemColors.MenuHighlight;
                    ShapeMenu[i].BorderStyle = BorderStyle.Fixed3D;
                    //Gán giá trị cho MyShape là loại hình được vẽ
                    MyShape = (SHAPES)i;
                }
                else
                {
                    ShapeMenu[i].BackColor   = Color.Transparent;
                    ShapeMenu[i].BorderStyle = BorderStyle.None;
                }
            }
            //Nếu vẽ cung tròn, thì cần hiển thị thêm các thuộc tính về StartAngle và SweepAngle (nằm trong TableLayoutPanel tbArcAngle)
            if (MyShape == SHAPES.ARC)
            {
                tbArcAngle.Visible = true;
            }
            else
            {
                tbArcAngle.Visible = false;
            }
            //Unselected all shapes
            DrawObj.ForEach(shape => shape.IsSelected = false);
        }