1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace WinVersalitePath
{
public enum Figure
{
none, rect,ellipse
}
public partial class Form1 : Form
{
GraphicsPath pthRect =new GraphicsPath ();
GraphicsPath pthEllip = new GraphicsPath();
public Form1()
{
InitializeComponent();
UpDownRect.Maximum = 180;
UpDownRect.Minimum = -180;
UpDownRect.Value=45;
UpDownEllipse.Maximum = 180;
UpDownEllipse.Minimum = -180;
UpDownEllipse.Value = 15;
}
Point ancrage;
SolidBrush fillNormal = new SolidBrush(Color.Blue);
SolidBrush fillSelection = new SolidBrush(Color.Magenta );
Pen penRect = new Pen(Color.Black , 2.0f);
float angleRect;
float angleEllip;
private void button1_Click(object sender, EventArgs e)
{
int w = 100;
int h = 70;
Rectangle rect = new Rectangle(50, 80, w, h);
ancrage = new Point(rect.Left+w/2, rect.Top+h/2);
Matrix myMatrixRect = new Matrix();
myMatrixRect.RotateAt(angleRect, ancrage, MatrixOrder.Append);
pthRect.Reset();
pthRect.AddRectangle(rect);
pthRect.Transform(myMatrixRect);
rect = new Rectangle(100, 120, w, h);
ancrage = new Point(rect.Left + w / 2, rect.Top + h / 2);
Matrix myMatrixEllip = new Matrix();
myMatrixEllip.RotateAt(angleEllip, ancrage, MatrixOrder.Append);
pthEllip.Reset();
pthEllip.AddEllipse(rect);
pthEllip.Transform(myMatrixEllip);
this.Invalidate();
}
Figure cliquedFigure;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
Point pointClicked = e.Location;
if ( pthRect.IsVisible(e.Location) )
{
cliquedFigure =Figure.rect ;
}
else if (pthEllip.IsVisible(e.Location))
{
cliquedFigure = Figure.ellipse;
}
else
{
cliquedFigure=Figure.none ;
}
this.Invalidate();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
switch (cliquedFigure)
{
case Figure.rect :
g.FillPath(fillSelection, pthRect);
g.FillPath(fillNormal, pthEllip);
break;
case Figure.ellipse:
g.FillPath(fillSelection, pthEllip );
g.FillPath(fillNormal, pthRect);
break;
default:
g.FillPath(fillNormal, pthRect);
g.FillPath(fillNormal, pthEllip);
break;
}
g.DrawPath(penRect, pthRect );
g.DrawPath(penRect, pthEllip);
}
private void UpDownRect_ValueChanged_1(object sender, EventArgs e)
{
angleRect = (float)UpDownRect.Value;
}
private void UpDownEllipse_ValueChanged(object sender, EventArgs e)
{
angleEllip = (float)UpDownEllipse.Value;
}
}
} |
Partager