C#'da polar point yapımı

Başlatan Mucit23, 05 Şubat 2019, 23:13:56

Mucit23

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.


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ı?


tunayk

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.

Mucit23

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.


tunayk

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

Mucit23

@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.

tunayk

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.

Mucit23

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

muhittin_kaplan

hocam pythona geliniz.(uzun süre c# yazan biri diyor bunu)

Mucit23

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.

muhittin_kaplan

usb seri tcp Udp gayet kolay başka çalışmam olmadı


Mucit23

Ara ara bakayım abi Phytona. C# iyi güzel fakat karmaşık.

muhittin_kaplan

Bilgiyi hangi yöntemle alıyorsun ?

Mucit23

USB veya Seri Port Ama ağırlıklı olarak USB HID

kimlenbu

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