Hey,
In my desktop application ,I've done making rectangles on bitmap images as per the user input ,row and column wise.it is working very well,but i also want to move and resizing the rectangle shape.Whenever i click move button main rectangle and it's sub rectangle also move together. How can i resolve it?
What I have tried:
int arg1;
int arg2;
public List<rectangle> listRec = new List<rectangle>();
Graphics g;
Point startPos;
Point currentPos;
bool drawing;
Rectangle r1;
private Rectangle getRectangle()
{
r1 = new Rectangle(
Math.Min(startPos.X, currentPos.X),
Math.Min(startPos.Y, currentPos.Y),
Math.Abs(startPos.X - currentPos.X),
Math.Abs(startPos.Y - currentPos.Y));
return r1;
}
private void Form7_Load(object sender, EventArgs e)
{
if(File.Exists("E:\\B1Pockets.txt"))
{
File.Delete("E:\\B1Pockets.txt");
}
if (File.Exists("E:\\B2Pockets.txt"))
{
File.Delete("E:\\B2Pockets.txt");
}
if (File.Exists("E:\\Blisters.txt"))
{
File.Delete("E:\\Blisters.txt");
}
if (File.Exists("E:\\AOI.txt"))
{
File.Delete("E:\\AOI.txt");
}
}
private void button1_Click(object sender, EventArgs e)
{
String data;
Font font = new Font("Arial", 14);
arg1 = Convert.ToInt32(textBox1.Text);
arg2 = Convert.ToInt32(textBox2.Text);
Rectangle rect = new Rectangle();
rect.Size = new Size(40, 65);
for (int x = 0; x < arg1; x++)
{
rect.X = x * (rect.Width +30) + 73;
for (int y = 0; y <arg2 ; y++)
{
rect.Y = y * (rect.Height +35)+38;
listRec.Add(rect);
data = rect.ToString();
TextWriter txt = new StreamWriter("E:\\B1Pockets.txt",true );
txt.WriteLine(data);
txt.Close();
}
}
foreach (Rectangle rec in listRec)
{
g = pictureBox1.CreateGraphics();
Pen p = new Pen(Color.Red,3);
g.DrawRectangle(p, rec);
g.DrawString("p1", font, new SolidBrush(Color.Yellow), (rect.Width + 30) ,35 );
g.DrawString("p2", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 60, 35);
g.DrawString("p3", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 130, 35);
g.DrawString("p4", font, new SolidBrush(Color.Yellow), (rect.Width + 30), (rect.Height + 30) + 40);
g.DrawString("p5", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 60, (rect.Height + 30) + 40);
g.DrawString("p6", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 130, (rect.Height + 30) + 40);
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (drawing)
{
drawing = false;
var rc = getRectangle();
if (rc.Width > 0 && rc.Height > 0) listRec.Add(rc);
pictureBox1.Invalidate();
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
currentPos = startPos = e.Location;
drawing = true;
}
public void ChangeColor(Rectangle target, Color targetColor)
{
Pen p = new Pen(targetColor,3);
g.DrawRectangle(p, target.X, target.Y, target.Width, target.Height);
}
private void Form7_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.D0:
ChangeColor(listRec[0], Color.Red);
break;
case Keys.D1:
ChangeColor(listRec[1], Color.Red);
break;
}
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Font font = new Font("Arial", 14);
Pen p1 = new Pen(Color.Red, 3);
Pen p2 = new Pen(Color.Red, 3);
if (listRec.Count > 0)
{
e.Graphics.DrawRectangles(p1, listRec.ToArray());
}
if (drawing)
{
e.Graphics.DrawRectangle(p2, getRectangle());
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
currentPos = e.Location;
if (drawing) pictureBox1.Invalidate();
}
private void button2_Click(object sender, EventArgs e)
{
String data = "";
Font font = new Font("Arial", 14);
arg1 = Convert.ToInt32(textBox4.Text);
arg2 = Convert.ToInt32(textBox3.Text);
Rectangle rect = new Rectangle();
rect.Size = new Size(280,190);
for (int x = 0; x < arg1; x++)
{
rect.X = x * (rect.Width + 45) + 55;
for (int y = 0; y < arg2; y++)
{
rect.Y = y * (rect.Height + 35) + 25;
listRec.Add(rect);
data = rect.ToString();
TextWriter txt = new StreamWriter("E:\\Blisters.txt", true);
txt.WriteLine(data);
txt.Close();
}
}
foreach (Rectangle rec in listRec)
{
g = pictureBox1.CreateGraphics();
Pen p = new Pen(Color.Red, 3);
g.DrawRectangle(p, rec);
g.DrawString("B1", font, new SolidBrush(Color.Yellow), 55, 25);
g.DrawString("B2", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 60, 25);
}
}
private void button3_Click(object sender, EventArgs e)
{
String data;
Font font = new Font("Arial", 14);
Rectangle rect = new Rectangle();
rect.Size = new Size(40, 65);
for (int x = 0; x < 3; x++)
{
rect.X = x * (rect.Width + 30) +463 ;
for (int y = 0; y < 2; y++)
{
rect.Y = y * (rect.Height + 35) + 38;
listRec.Add(rect);
data = rect.ToString();
TextWriter txt = new StreamWriter("E:\\B2Pockets.txt", true);
txt.WriteLine(data);
txt.Close();
}
}
foreach (Rectangle rec in listRec)
{
g = pictureBox1.CreateGraphics();
Pen p = new Pen(Color.Red, 3);
g.DrawRectangle(p, rec);
g.DrawString("p1", font, new SolidBrush(Color.Yellow), (rect.Width + 420), 35);
g.DrawString("p2", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 450, 35);
g.DrawString("p3", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 520, 35);
g.DrawString("p4", font, new SolidBrush(Color.Yellow), (rect.Width + 420), (rect.Height + 30) + 40);
g.DrawString("p5", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 450, (rect.Height + 30) + 40);
g.DrawString("p6", font, new SolidBrush(Color.Yellow), (rect.Width + 40) + 520, (rect.Height + 30) + 40);
}
}
}
I've tried the above code.My rectangles and it's sub rectangles are drawn successfully,but i want to copy whole the rectangle with sub rectangle and move it into different place.Can anyone help me out from this??