wvogel日記

自分用の技術備忘録が多めです.

macでmono C#, グラフ描画

先日MacBookAirを買いました。
動機は、手持ちのFedora機のハードウェア面での問題が増えてきたこと。

いやあ、快適ですね

で、学会も控えているのでデモ用に、シリアル通信で得たセンサーの波形をGUIで表示する簡単なアプリケーションを組もうと考えました。
Haskellは今この記事を書きながら頑張ってインストール中なのでmono C#

ところがGtk#触るの初めてだったこともあり少しはまってしまったのでメモ。
単純に、目的関数を見つけるのに苦労したよというだけなんですが

コードは以下の通り。デモ機が今手元にないので適当にSin波を生成して実験しました。
はまったというのは、OnExpose関数にあるDrawPointへのアクセス...WPFの時と同じ感覚で探していたので無駄に時間を費やしてしまいました。

以上、軽いメモでした


using System;
using Gtk;

public partial class MainWindow: Gtk.Window
{
        const int WIDTH = 640;
        const int HEIGHT = 480;

	public MainWindow () : base (Gtk.WindowType.Toplevel)
	{
		Build ();
		GraphArea.ExposeEvent += OnExpose;
	}

	private double getXAccel(int i)
	{
		return 1.5 * Math.Sin(i*2*Math.PI/640.0);
	}

	private int ConvertScale(double y)
	{
		return (int)(100.0 / 1.5 * y + 200);
	}
	void OnExpose(object sender, ExposeEventArgs args)
	{
		for(int x = 0; x < WIDTH; x++)
			GraphArea.GdkWindow.DrawPoint(
                            GraphArea.Style.BlackGC,
                            x, 
                            ConvertScale(getXAccel(x)));
	}

	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
	{
		Application.Quit ();
		a.RetVal = true;
	}
}