private void cizimPaneli_MouseMove(object sender, MouseEventArgs e) { // Mouseun bulunduğu konumun bilgisi Point mouseTakipP değişkeninde tutulur. Point mouseTakipP = new Point(); mouseTakipP = e.Location; //float x = Math.Min(baslangicNoktasi.X, p.X); //float y = Math.Min(baslangicNoktasi.Y, p.Y); // x ve y değeri panele ilk tıklandığındaki konumun x ve y değeridir. float x = baslangicNoktasi.X; float y = baslangicNoktasi.Y; // yukseklik ve genislik değeri panele ilk tıklandığındaki konumudan mouse ın bulunduğu // konumun fark değerinin mutlak değeridir. float yukseklik = Math.Abs(baslangicNoktasi.Y - mouseTakipP.Y); float genislik = Math.Abs(baslangicNoktasi.X - mouseTakipP.X); // Panelin sınırlarında sorun olduğu için biraz eksiltme işlemi yaptım. int sagSinir = cizimPaneli.Right - 15; int solSinir = cizimPaneli.Left - 10; int ustSinir = cizimPaneli.Top - 15; int altSinir = cizimPaneli.Bottom - 15; // genişlik ve yükseklik değerini eşitleyerek sadece düzgün çokkenar çizimini sağlıyorum. if (genislik < yukseklik) { genislik = yukseklik; } else { yukseklik = genislik; } g = cizimPaneli.CreateGraphics(); // Eğer şekil seçimi ve clickAktifi true ysa if (clickAktif && sekilAktif) { switch (_sekilSecim) { case sekilSecim.ucgen: float hipotenus = (float)Math.Sqrt((genislik * genislik) + (yukseklik * yukseklik)); // Şekil çizerken panel dışına taşmasını engelleyen koşul if (baslangicNoktasi.X - genislik > solSinir && baslangicNoktasi.X + genislik < sagSinir && baslangicNoktasi.Y - hipotenus + 30 > ustSinir && baslangicNoktasi.Y + yukseklik < altSinir) { cizimPaneli.Refresh(); ucgen = new Ucgen(istenenRenk, x, y, genislik, yukseklik); ucgen.Ciz(g); } break; case sekilSecim.dortgen: // Şekil çizerken panel dışına taşmasını engelleyen koşul if (baslangicNoktasi.X + genislik < sagSinir && baslangicNoktasi.Y + yukseklik < altSinir) { cizimPaneli.Refresh(); dortgen = new Dortgen(istenenRenk, x, y, genislik, yukseklik); dortgen.Ciz(g); } break; case sekilSecim.altigen: // Şekil çizerken panel dışına taşmasını engelleyen koşul if (baslangicNoktasi.X - (2 * genislik) > solSinir && baslangicNoktasi.X + (2 * genislik) < sagSinir && baslangicNoktasi.Y - (2 * yukseklik) > ustSinir && baslangicNoktasi.Y + (2 * yukseklik) < altSinir) { cizimPaneli.Refresh(); altigen = new Altigen(istenenRenk, x, y, genislik * 4, yukseklik * 4); altigen.Ciz(g); } break; case sekilSecim.cember: // Şekil çizerken panel dışına taşmasını engelleyen koşul if (baslangicNoktasi.X + genislik < sagSinir && baslangicNoktasi.Y + yukseklik < altSinir) { cizimPaneli.Refresh(); cember = new Cember(istenenRenk, x, y, genislik, yukseklik); cember.Ciz(g); } break; } } }
private void dosyadanOku_Click(object sender, EventArgs e) { dosyaIslemAktif = true; sekilAktif = false; secimIslemAktif = false; trashIslemAktif = false; sekilPaneli.Refresh(); renkPaneli.Refresh(); islemPaneli.Refresh(); seciliKayitDegistir(openFile.Location.X, openFile.Location.Y); OpenFileDialog open = new OpenFileDialog(); open.Filter = "Metin Dosyası|*.txt"; if (open.ShowDialog() == DialogResult.OK) { string satir; string[] bilgiler; g = cizimPaneli.CreateGraphics(); StreamReader Oku = new StreamReader(open.FileName); while ((satir = Oku.ReadLine()) != null) { bilgiler = satir.Split('/'); Color color = Color.FromArgb(Convert.ToInt32(bilgiler[5])); //Alınan şekil bilgisine göre nesneyi oluşturur ve sekiller listesine ekler. switch (bilgiler[0]) { case "Kare": dortgen = new Dortgen(color, (float)(Convert.ToDouble(bilgiler[1])), (float)(Convert.ToDouble(bilgiler[2])), (float)(Convert.ToDouble(bilgiler[3])), (float)(Convert.ToDouble(bilgiler[4]))); sekiller.Add(dortgen); break; case "Cember": cember = new Cember(color, (float)(Convert.ToDouble(bilgiler[1])), (float)(Convert.ToDouble(bilgiler[2])), (float)(Convert.ToDouble(bilgiler[3])), (float)(Convert.ToDouble(bilgiler[4]))); sekiller.Add(cember); break; case "Ucgen": ucgen = new Ucgen(color, (float)(Convert.ToDouble(bilgiler[1])), (float)(Convert.ToDouble(bilgiler[2])), (float)(Convert.ToDouble(bilgiler[3])), (float)(Convert.ToDouble(bilgiler[4]))); sekiller.Add(ucgen); break; case "Altigen": altigen = new Altigen(color, (float)(Convert.ToDouble(bilgiler[1])), (float)(Convert.ToDouble(bilgiler[2])), (float)(Convert.ToDouble(bilgiler[3])), (float)(Convert.ToDouble(bilgiler[4]))); sekiller.Add(altigen); break; default: break; } } Oku.Close(); dosyaIslemAktif = false; cizimPaneli.Invalidate(); } else { dosyaIslemAktif = false; } kayitPaneli.Refresh(); }