23 Aralık 2011 Cuma

C# ile grafik (Graphics with C#)

Bu seferki uygulamalarımız kodlamanın en ince noktalarından biri olan grafik işlemleri ile alakalı.Grafik işlemlerimiz şu şekilde olacak;
Kendi nokta sınıfımız
Kendi daire sınıfımız
vs gibi işlemlerin yanında 3 boyutlu bir küp çizimi ve bunun mouse ile ekranda taşınması olayı.Bir süre grafik işlemlerine devam edeceğiz.2 tane farklı desenli daire,ekrana rast gele çember,bir silindir,bir de spiral var.
Bunlardan en güzeli kendi sınıfını uretmiş olmak.Mesela çember için g.drawellipse() fonksiyonunu kullanmak yerine kendi çember sınıfımız yazdık.Bunu yapmak için biraz mat-1 bilgisi gerekiyor.x=5*Math.Cos(i); y=5*Math.Sin(i); kısmında 5 yarı çap
i değeri açımız(Double) oluyor.i değişkenini belli bir miktar döngüye sokunca çemberimizi elde etmiş oluruz.Kendi dikdortgen sınıfımız ise paralel kenar için üretildi.Bunu halletmek çok kolay,1 er arayla çizgi çizeriz.Bu şekilde boyalı paralelkenarımız hazırdır.İşin en zevkli kısmı ise çizdiğimiz ve boyadığımız küpün mouse ile ekranda taşınması.Bunu yaparken küpün koordinatlarını global tanımlayıp mouse_move event'inde mouse(FARE) ninYer değiştirmesi kadar onlarında koordinatları artar.Bu bir önceki koordinatını baz alarak yapacak.Bunun içinde eldeki koordinat bilgilerini değişkende saklamak ve sonra da bir sonraki koordinat ile değişmesi olacaktır.Mouse down olayı ile taşımaya onay veriyoruz mouse up ile taşımayı durduruyoruz.Çok zor değil ben kodları dökeyim sofraya siz inceleyin kolay olduğunu göreceksiniz.Kodlar
namespace sinx
{
public partial class Form1 : Form
{
double x, y;
bool taşı = false,taşı2=false;
Random r;
Graphics g;
int x1=400, y1=400,ilkx,ilky;
Point a = new Point(100, 100);
Point b=new Point(200,200);
Point a1=new Point(150, 150);
Point b1=new Point(250,250);
Pen p = new Pen(Brushes.Black,5);
public Form1()
{
InitializeComponent();
}
public void kup()
{
cizgi(a.X, a.Y, a.X, b.Y);
cizgi(a.X, a.Y, b.X, a.Y);
cizgi(a.X, b.Y, b.X, b.Y);
cizgi(b.X, a.Y, b.X, b.Y);
cizgi(a1.X, a1.Y, a1.X, b1.Y);
cizgi(a1.X, a1.Y, b1.X, a1.Y);
cizgi(a1.X, b1.Y, b1.X, b1.Y);
cizgi(b1.X, a1.Y, b1.X, b1.Y);
cizgi(a.X, a.Y, a1.X, a1.Y);
cizgi(a.X, b.Y, a1.X, b1.Y);
cizgi(b.X, a.Y, b1.X, a1.Y);
cizgi(b.X, b.Y, b1.X, b1.Y);
}
public void cizgi(float x,float y,float x2,float y2)
{
g = this.CreateGraphics();
Font f=new Font("Comic Sans MS",12, FontStyle.Bold);

g.DrawLine(p, x, y, x2, y2);



g.Dispose();
}
public void noktabas()
{


Font f=new Font("Comic Sans MS",12, FontStyle.Bold);

Pen p = new Pen(Brushes.Black,5);
g = this.CreateGraphics();
g.DrawString(".",f , Brushes.ForestGreen, (float)x+x1,(float) y+y1);
g.Dispose();
}
public void kup_boya()
{
int tut = b.Y - a.Y;
int tutax, tuta1y, tutay, tutbx;
g = this.CreateGraphics();
SolidBrush s = new SolidBrush(Color.Yellow);
g.FillRectangle(s, a.X, a.Y, b.X - a.X, b.Y - a.Y);
s = new SolidBrush(Color.Blue);
g.FillRectangle(s, a1.X, a1.Y, b1.X - a1.X, b1.Y - a1.Y);
p = new Pen(Brushes.Orange, 5);
tutax = a.X;
tutay = a.Y;
tutbx = b.X;
tuta1y = a1.Y;
for (int i = 0; i < tut; i++)
{
cizgi(a.X, tutay, a1.X, tuta1y);

tutay+=1;
tuta1y+=1;
}
p = new Pen(Brushes.Green, 5);
tutax = a.X;
tutay = a.Y;
tutbx = b.X;
tuta1y = a1.Y;
for (int i = 0; i < 50; i++)
{
cizgi(tutax, tutay, tutbx, tutay);
tutax++;
tutay++;
tutbx++;
}


}
private void button1_Click(object sender, EventArgs e)
{
kup_boya();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button2_Click(object sender, EventArgs e)
{
x1 = 400; y1 = 400;
g = this.CreateGraphics();
g.Clear(Color.White);
g.Dispose();
for (int j = 0; j < 360; j++)
{

for (int i = 0; i <= j; i++)
{
y = j * Math.Cos(i);
x = j * Math.Sin(i);


noktabas();

}

}

}

private void button3_Click(object sender, EventArgs e)
{
x1 = 400; y1 = 400;
g = this.CreateGraphics();
g.Clear(Color.White);
g.Dispose();
for (int j = 0; j < 360; j++)
{

for (int i = 0; i <= 360; i++)
{
y = i * Math.Cos(j);
x = i * Math.Sin(j);


noktabas();

}

}
}

private void button4_Click(object sender, EventArgs e)
{
x1 = 400; y1 = 400;
r = new Random();
g = this.CreateGraphics();
g.Clear(Color.White);
g.Dispose();
for (int j = 0; j < 10; j++)
{
x1 = (r.Next() % 1100);
y1 = (r.Next() % 700);


for (int i = 0; i <= 369; i++)
{
y = 125 * Math.Cos(i);
x = 125 * Math.Sin(i);


noktabas();

}

}
}

private void button5_Click(object sender, EventArgs e)
{
x1 = 400; y1 = 400;
r = new Random();
g = this.CreateGraphics();
g.Clear(Color.White);
g.Dispose();
for (int j = 0; j < 100; j++)
{




for (int i = 0; i <= 369; i++)
{
y = i * Math.Cos(i);
x = i * Math.Sin(i);


noktabas();

}

}
}

private void button6_Click(object sender, EventArgs e)
{
x1 = 400; y1 = 400;
r = new Random();
g = this.CreateGraphics();
g.Clear(Color.White);
g.Dispose();
for (int j = 0; j < 100; j++)
{
x1 += 1;


for (int i = 0; i <= 412; i++)
{
y = 125 * Math.Cos(i);
x = 125 * Math.Sin(i);


noktabas();

}

}
}

private void button7_Click(object sender, EventArgs e)
{
kup();
}

private void button8_Click(object sender, EventArgs e)
{
taşı = true;

}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if(taşı==true)
{

if (e.X >= a.X && e.X <= b1.X && e.Y >= a.Y && e.Y <= b1.Y)
{
button1.Text = "ok";
taşı2 = true;
ilkx = e.X;
ilky = e.Y;
}

}

}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
int farkx=0, farky=0;

if (taşı2 == true)
{
g = this.CreateGraphics();
g.Clear(Color.White);
g.Dispose();

farkx = e.X - ilkx;
farky = e.Y - ilky;

ilkx = e.X;
ilky = e.Y;
a.X+=farkx;
a.Y+=farky;
a1.X+=farkx;
a1.Y+=farky;
b1.Y+=farky;
b.Y+=farky;
b1.X+=farkx;
b.X+=farkx;
kup();
kup_boya();
}

}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
taşı2 = false;
}
}
}

0 yorum:

Yorum Gönder