//--------------------------------------------------------------
//	入力正弦波の周波数の目盛と目盛値の描画
//		描画対象は pictureBox3 のみ
//		縦方向の軸の長さは trackBar1.Height で決まる
//
//		作成者：三上直樹，2022/11/24 作成，ⓒ三上直樹 2022
//--------------------------------------------------------------

using System;
using System.Windows.Forms;
using System.Drawing;

using static System.Math;

namespace Mikami
{
	public static class DrawTickValue
	{
		//	fRatio	最大の周波数／最小の周波数
		public static void Execute(Graphics gr, Form myForm, float fRatio)
		{
			PictureBox pb = (PictureBox)myForm.Controls["pictureBox3"];
			if (pb == null) ErrMessage("pictureBox3");
			float w0 = pb.Width;	// 描画対象の PictureBox の幅
			float h0 = pb.Height;	// 描画対象の PictureBox の高さ
			float x0 = w0*0.84f;
			float y0 = h0*0.94f;
			gr.TranslateTransform(x0, y0);
			TrackBar tb = (TrackBar)myForm.Controls["trackBar1"];
			if (tb == null) ErrMessage("trackBar1");

			float decade = tb.Height*0.54f;		// 周波数 10 倍に対応するピクセル数
												// 定数 0.54 は実行してみて決める

			gr.DrawLine(Pens.Black, 0, 0, 0, -decade*(float)Log10(fRatio));

			Font myFont = myForm.Font;	// フォントの設定
			float x1 = w0*0.71f;
			float x2 = w0*0.66f;;
			int j = 1;
			while (j <= 40)
			{
				float y1 = -decade*(float)Log10(j);
				float y2 = y1 - h0*0.035f;
				gr.DrawLine(Pens.Black, 0, y1, w0*0.14f, y1);
				if (j==1)  gr.DrawString("100", myFont, Brushes.Black, -x1, y2);
				if (j==2)  gr.DrawString("200", myFont, Brushes.Black, -x1, y2);
				if (j==5)  gr.DrawString("500", myFont, Brushes.Black, -x1, y2);
				if (j==10) gr.DrawString("1 k", myFont, Brushes.Black, -x2, y2);
				if (j==20) gr.DrawString("2 k", myFont, Brushes.Black, -x2, y2);
				if (j==40) gr.DrawString("4 k", myFont, Brushes.Black, -x2, y2);
				j += (j < 10) ? 1 : 10;
			}

			void ErrMessage(string str)
			{
				MessageBox.Show(str + " が見つからないので強制終了します．");
				Environment.Exit(1);
			}
		}
	}
}