Selamlar
Açı ve genlikten oluşan vektörel bir bilgiyi donanımdan çekip C#'da hazırlamış olduğum görsel arayüzde göstermek istiyorum.
Amacım aşağıdaki gibi bir polar point yapmak.
(https://i.postimg.cc/zXmSdn9y/images.jpg)
Verdiğim açı ve genlik değerine göre resimdeki gibi bir grafik üzerinde gezdirmek istiyorum o noktayı. C#'ın chart kontrol toolu içinde polar chart serisi var. Bunu biraz inceledim fakat bu iki nokta arası çizgi çekiyor. Yani tek bir noktayı resimdeki gibi gezdirme yapamadım. Ama birkaç nokta verip noktalar arası çizgi çektiriyorum. Fakat istediğim gibi değil
Bu dediğimi nasıl yaparım? Basitçe fikir verebilecek olan var mı?
En kolay yöntem, forma bir PictureBox nesnesi koyarsınız. Göstermiş olduğunuz resmin noktasız halini tam kare ölçülerde resim olarak kaydedip, picturebox'ın image özelliğine bu gesmi tanımlarsınız. Daha sonra;
isteğinize göre picturebox'ın Paint eventine veya bir butonun Click event'ine aşağıdaki kodları yazarsınız.
PointF p = new PointF(100, 50); //Nokta konulacak konum
Graphics g = pictureBox1.CreateGraphics(); // Çizim yapacağımız canvas
float OffsetX=200f, OffsetY = 200f; // grafiğin 0,0 noktası. Picturebox'ın 400x400pixel olduğu varsayılmıştır
Brush b = new SolidBrush(Color.Red); //Noktayı boyayacak fırça
g.FillEllipse(b, p.X + OffsetX, p.Y + OffsetY, 10, 10); // Noktayı koyalım. 10,10 nokta genişlik ve yüksekliği,
g.Dispose(); // canvası kapatalım.
BU şekilde istediğin yere nokta koyarsın. Dikkat edeceğin husus formdaki koordinat ekseni 0,0 sol üst köşe, nx,ny ise sağ alt köşedir.
Deneme için dediğinizi yaptım Form1 Load ve picturebox_paint eventlerinde deneme yaptım ama picturebox'da resim çıkmadı. Hata yok ama çalışmıyor. Sanırım eksik birşey yapıyorum.
Bu arada bilgisayarımda Devexpress kuruluydu. Devexpress chartlarına baktım. O baya gelişkin istediğim özellik var. Polar point oluşturup istediğim yere nokta koyabilecek gibiyim. Fakat kullanımını çözemedim.
Şöyle bir kulanımı olması gerekiyor okuduğum kadarıyla
chartControl1.Series["Series1"].Points.Add(new SeriesPoint(1,10));
Fakat burda "Nesne Başvurusu bir nenenin örneğine ayarlanmadı" hatası alıyorum.
Muhtemelen picturebox nesnesinin boyutu 400x400 den küçüktür. O yüzden de verdiğim koordinata çizilen nokta görünen alndan dışarıda kaldığı için göremiyorsun.
Picturebox ebeatlarını değiştir veya nokta pozisyonu ve offsetx ve y değerlerini görünür alanda kalacak şekilde değişti. Örneğin p için 50,50 verebilirsin. OffsetX ve Y'yi de 0 olarak verirsen görünür mutlaka
@tunayk Hocam siz denedinizmi? Ben şuan deneme yapıyorum ama yok resim çıkmıyor. Ben biraz bakayım bu konuda oldukça fazla yazı var.
Bu arada Devexpress de bahsettiğim sorunu çözdüm. Series1 yerine doğrudan numara yazmak gerekiyormuş. Fakat şöyle garip bir sorun var. Diyelim Herhangi bir yere bir tane nokta koydum. Daha sonra açı sabit kalmak şartıyla bu noktayı silip başka bir genliğe nokta koyduğumda nokta chart üzerinde sabit duruyor ama alttaki giridler değişiyor. Yani Scale değişiyor. Muhtemelen ayarla ilgili. Henüz doğru ayarı bulamadım.
Evet denedim. VS2017 de herhangi bir sorun görünmüyor. Adresini verirsen mail atabilirim projeyi. DevEpress ile yürüyeceksen de sen bilirsin.
DevExpress konusunda pek bilgim yok. Genelde bu tür işleri harici komponent kullanmadan yapmaya çalışırım. İyi dökümante edilmemiş bir komponenti anlayana kadar zaten yazmış oluyorsun.
yazmayı bende isterim hocam. Devexpress çok esnek ama taşınabilirliği ve sadeliği pek yok. Bende VS2010 var. Acaba ondan olabilirmi diye düşünüyorum ama pek sanmıyorum. Hatasız derleniyor çünkü. Eğer VS2010 da açılacak şekilde kaydedip gönderirseniz bi inceleyip ordan yürümek isterim.
ferhatyol at gmail.com
hocam pythona geliniz.(uzun süre c# yazan biri diyor bunu)
Muhittin Abi
Donanımla bu şekilde kolay haberleşebilecek miyim? Benim Tek derdim Donanım PC haberleşmesi. Yoksa PC uygulamaları ile pek işim olmuyor.
usb seri tcp Udp gayet kolay başka çalışmam olmadı
https://matplotlib.org/examples/pylab_examples/polar_demo.html
Ara ara bakayım abi Phytona. C# iyi güzel fakat karmaşık.
Bilgiyi hangi yöntemle alıyorsun ?
USB veya Seri Port Ama ağırlıklı olarak USB HID
c#'da polar grafiğe eklemek istediğin her nokta için bir seri oluştur :
PolarPointSeries series0 = new PolarPointSeries();
series0.SeriesName = "Series 0";
series0.XValues.Add(0.0);
şu siteyi referans alabilirsin :
http://helpcentral.componentone.com/NetHelp/SpreadNet7/WF/spwin-make-polar.html
Teşekkür ederim. C# da istediğimi yaptım.