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(); }
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(); }
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(); }
private void CmbDashStyle_SelectedIndexChanged(object sender, EventArgs e) { DrawObj.ForEach(shape => { if (shape.IsSelected) { shape.Pen.DashStyle = (DashStyle)cmbDashStyle.SelectedIndex; } }); RePaint(); }
/// <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); }
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(); }
/// <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(); }
/// <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(); } }
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(); } } }
/// <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); }