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 146 147 148 149
| 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;
namespace final_graphic
{
public partial class Form1 : Form
{
uint mouse_X ;
uint mouse_Y ;
int SegSelected = -1;
public Segment[] SegmentArray;
public Form1()
{
InitializeComponent();
SegmentArray = new Segment[5];
for (int i = 0; i < SegmentArray.Length; i++)
{
SegmentArray[i] = new Segment(1, 1);
}
SegmentArray[0].H = 20;
SegmentArray[0].L = 50;
SegmentArray[1].H = 50;
SegmentArray[1].L = 50;
SegmentArray[2].H = 90;
SegmentArray[2].L = 50;
SegmentArray[3].H = 70;
SegmentArray[3].L = 50;
SegmentArray[4].H = 30;
SegmentArray[4].L = 50;
}
//********************* creation of the rectangle ********************//
private void draw_background(Graphics g)
{
Pen BorderPen = new Pen(Color.Black, 2);
Pen MiddlePen = new Pen(Color.Gray, 1);
MiddlePen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
g.DrawRectangle(BorderPen, 10, 10, 400, 300);
g.DrawLine(MiddlePen, 10, 160, 410, 160);
}
//********************************************************************//
//***************** creation of graph with segment ********************//
private void draw_segment(Graphics g, Segment[] list)
{
uint start_X = 10;
uint start_Y = 10;
uint prev_Y = list[0].H + start_Y;
uint prev_X = list[0].L + start_X;
Pen SegPen = new Pen(Color.Black, 1);
Pen SegSelectedPen = new Pen(Color.Pink, 1);
for (int i = 0; i < list.Length; i++)
{
g.DrawLine(SegPen, start_X, prev_Y, start_X, start_Y + list[i].H); // vertical connection lines
if (i == SegSelected)
{
g.DrawLine(SegSelectedPen, start_X, start_Y + list[i].H, start_X + list[i].L, start_Y + list[i].H);
}
else
{
g.DrawLine(SegPen, start_X, start_Y + list[i].H, start_X + list[i].L, start_Y + list[i].H);
}
start_X += list[i].L;
prev_Y = start_Y + list[i].H;
prev_X = start_X + list[i].L;
}
}
//*********************************************************************//
//*********************** find the nearest segment ********************//
private void find_nearest_segment(int X, int Y)
{
uint start_X = 10;
if ((X < 10) || (X > 390) || (Y < 20) || (Y > 300))
{
SegSelected = -1;
return;
}
int i = 0;
while (i < SegmentArray.Length)
{
if (X < start_X + SegmentArray[i].L)
{
SegSelected = i;
return;
}
start_X += SegmentArray[i].L;
i++;
}
}
//*********************************************************************//
//*************** call all function for drawing grpah *****************//
protected override void OnPaint(PaintEventArgs e)
{
draw_background(e.Graphics);
draw_segment(e.Graphics, SegmentArray);
}
//*********************************************************************//
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
mouse_X = (uint)e.X;
mouse_Y = (uint)e.Y;
find_nearest_segment(e.X, e.Y);
if (e.Button == MouseButtons.Left)
{
if (SegSelected != -1)
{
SegmentArray[SegSelected].H = mouse_Y-10;
}
}
Invalidate();
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (SegSelected != -1)
{
SegmentArray[SegSelected].H = mouse_Y - 10;
}
}
Invalidate();
}
}
} |
Partager