Exemple #1
0
 public override void AddLetter(Tao.Sdl.Sdl.SDL_keysym key)
 {
     char letter = m_keyboard.KeyToChar(key);
     if (m_keyboard.KeyIsNumber(key) ||
         letter == ','|| key.sym == Sdl.SDLK_BACKSPACE) {
         base.AddLetter (key);
     }
 }
        public void BootstrapTaoDb()
        {
            lock (locker)
            {
                if (!bootstrapped)
                {
                    Tao tao = TaoParser.GrabTao();

                    Taos.Add(tao);

                    SaveChanges();

                    bootstrapped = true;
                }
            }
        }
    Tao tao(Input input)
    {
        var tao = new Tao();

        while (true)
        {
            if (input.atBound())
            {
                return(tao);
            }
            var part = tree(input);
            if (part.tag == "other")
            {
                part = op(input);
                if (part.tag == "other")
                {
                    part = note(input);
                }
            }
            tao.push(part);
        }
    }
Exemple #4
0
        public static void InitTextRenderer(Tao.Platform.Windows.SimpleOpenGlControl openGlCtrl)
        {
            openGlControl = openGlCtrl;

            int Errors = 0;
            // CREATE FONT
            sysfont = new FTFont("FreeSans.ttf", out Errors);
            // INITIALISE FONT AS A PER_CHARACTER TEXTURE MAPPED FONT
            sysfont.ftRenderToTexture(12, 196);
            // SET the sample font to align CENTERED
            sysfont.FT_ALIGN = FTFontAlign.FT_ALIGN_LEFT;
            sIsTextRendererInitialized = true;
        }
Exemple #5
0
		public static void InitTextRenderer(Tao.Platform.Windows.SimpleOpenGlControl openGlCtrl)
		{
			openGlControl = openGlCtrl;
		}
Exemple #6
0
        /// <summary>
        /// Maps the SDL keyboard codes into InputManager tokens.
        /// </summary>
        public static string MapInput(Tao.Sdl.Sdl.SDL_keysym key)
        {
            switch (key.sym)
            {
                // Basic Keys
                case SK.SDLK_a: return InputTokens.A;
                case SK.SDLK_b: return InputTokens.B;
                case SK.SDLK_c: return InputTokens.C;
                case SK.SDLK_d: return InputTokens.D;
                case SK.SDLK_e: return InputTokens.E;
                case SK.SDLK_f: return InputTokens.F;
                case SK.SDLK_g: return InputTokens.G;
                case SK.SDLK_h: return InputTokens.H;
                case SK.SDLK_i: return InputTokens.I;
                case SK.SDLK_j: return InputTokens.J;
                case SK.SDLK_k: return InputTokens.K;
                case SK.SDLK_l: return InputTokens.L;
                case SK.SDLK_m: return InputTokens.M;
                case SK.SDLK_n: return InputTokens.N;
                case SK.SDLK_o: return InputTokens.O;
                case SK.SDLK_p: return InputTokens.P;
                case SK.SDLK_q: return InputTokens.Q;
                case SK.SDLK_r: return InputTokens.R;
                case SK.SDLK_s: return InputTokens.S;
                case SK.SDLK_t: return InputTokens.T;
                case SK.SDLK_u: return InputTokens.U;
                case SK.SDLK_v: return InputTokens.V;
                case SK.SDLK_w: return InputTokens.W;
                case SK.SDLK_x: return InputTokens.X;
                case SK.SDLK_y: return InputTokens.Y;
                case SK.SDLK_z: return InputTokens.Z;

                case SK.SDLK_1: return InputTokens.D1;
                case SK.SDLK_2: return InputTokens.D2;
                case SK.SDLK_3: return InputTokens.D3;
                case SK.SDLK_4: return InputTokens.D4;
                case SK.SDLK_5: return InputTokens.D5;
                case SK.SDLK_6: return InputTokens.D6;
                case SK.SDLK_7: return InputTokens.D7;
                case SK.SDLK_8: return InputTokens.D8;
                case SK.SDLK_9: return InputTokens.D9;
                case SK.SDLK_0: return InputTokens.D0;

                case SK.SDLK_LEFT: return InputTokens.Left;
                case SK.SDLK_RIGHT: return InputTokens.Right;
                case SK.SDLK_UP: return InputTokens.Up;
                case SK.SDLK_DOWN: return InputTokens.Down;

                case SK.SDLK_RCTRL: return InputTokens.RightControl;
                case SK.SDLK_LCTRL: return InputTokens.LeftControl;
                case SK.SDLK_RSHIFT: return InputTokens.RightShift;
                case SK.SDLK_LSHIFT: return InputTokens.LeftShift;
                case SK.SDLK_RALT: return InputTokens.RightAlt;
                case SK.SDLK_LALT: return InputTokens.LeftAlt;

                case SK.SDLK_F1: return InputTokens.F1;
                case SK.SDLK_F2: return InputTokens.F2;
                case SK.SDLK_F3: return InputTokens.F3;
                case SK.SDLK_F4: return InputTokens.F4;
                case SK.SDLK_F5: return InputTokens.F5;
                case SK.SDLK_F6: return InputTokens.F6;
                case SK.SDLK_F7: return InputTokens.F7;
                case SK.SDLK_F8: return InputTokens.F8;
                case SK.SDLK_F9: return InputTokens.F9;
                case SK.SDLK_F10: return InputTokens.F10;
                case SK.SDLK_F11: return InputTokens.F11;
                case SK.SDLK_F12: return InputTokens.F12;

                case SK.SDLK_LEFTBRACKET: return InputTokens.OpenBracket;
                case SK.SDLK_RIGHTBRACKET: return InputTokens.CloseBracket;

                case SK.SDLK_ESCAPE: return InputTokens.Escape;
                case SK.SDLK_RETURN: return InputTokens.Enter;
                case SK.SDLK_NUMLOCK: return InputTokens.NumLock;
                case SK.SDLK_SPACE: return InputTokens.Space;

                case SK.SDLK_PERIOD: return InputTokens.Period;
                case SK.SDLK_COMMA: return InputTokens.Comma;

                case SK.SDLK_KP_ENTER: return InputTokens.NumPadEnter;
                case SK.SDLK_KP_PLUS: return InputTokens.NumPadAdd;
                case SK.SDLK_KP_MINUS: return InputTokens.NumPadSubtract;
                case SK.SDLK_KP_MULTIPLY: return InputTokens.NumPadMultiply;
                case SK.SDLK_KP_DIVIDE: return InputTokens.NumPadDivide;
                case SK.SDLK_KP0: return InputTokens.NumPad0;
                case SK.SDLK_KP1: return InputTokens.NumPad1;
                case SK.SDLK_KP2: return InputTokens.NumPad2;
                case SK.SDLK_KP3: return InputTokens.NumPad3;
                case SK.SDLK_KP4: return InputTokens.NumPad4;
                case SK.SDLK_KP5: return InputTokens.NumPad5;
                case SK.SDLK_KP6: return InputTokens.NumPad6;
                case SK.SDLK_KP7: return InputTokens.NumPad7;
                case SK.SDLK_KP8: return InputTokens.NumPad8;
                case SK.SDLK_KP9: return InputTokens.NumPad9;

                default:
                    return null;
            }
        }
        /// <summary>
        /// 入出力データの初期化
        /// </summary>
        public void InitData(
            FemSolver solver,
            Tao.Platform.Windows.SimpleOpenGlControl CadPanel,
            Panel FValuePanel,
            Panel FValueLegendPanel, Label labelFreqValue,
            Chart SMatChart,
            Chart BetaChart,
            Chart EigenVecChart
            )
        {
            initInput();
            initOutput();

            // 一度だけの初期化処理
            initDataOnce(FValueLegendPanel, labelFreqValue);

            // ポストプロセッサに入力データをコピー
            // 入力データの取得
            solver.GetFemInputInfo(out Nodes, out Elements, out Medias, out Ports, out ForceNodes, out IncidentPortNo, out WaveguideWidth);
            // チャートの設定用に開始終了波長を取得
            FirstWaveLength = solver.FirstWaveLength;
            LastWaveLength = solver.LastWaveLength;
            CalcFreqCnt = solver.CalcFreqCnt;
            // 波のモード区分を取得
            WaveModeDv = solver.WaveModeDv;
            // 導波路構造区分を取得
            WGStructureDv = solver.WGStructureDv;
            // 導波路幅(E面解析用)
            WaveguideWidthForEPlane = solver.WaveguideWidthForEPlane;

            // 光導波路の最小、最大比誘電率を取得する
            setupOpticalWgEps();

            //if (isInputDataReady())
            // ポートが指定されていなくてもメッシュを表示できるように条件を変更
            if (Elements != null && Elements.Length > 0 && Nodes != null && Nodes.Length > 0 && Medias != null && Medias.Length > 0)
            {
                // 各要素に節点情報を補完する
                foreach (FemElement element in Elements)
                {
                    element.SetNodesFromAllNodes(Nodes);
                    element.LineColor = Color.Black;
                    element.BackColor = Medias[element.MediaIndex].BackColor;
                }
            }

            // メッシュ描画
            //using (Graphics g = CadPanel.CreateGraphics())
            //{
            //    DrawMesh(g, CadPanel);
            //}
            //CadPanel.Invalidate();

            if (!IsAutoCalc)
            {
                // チャート初期化
                ResetSMatChart(SMatChart);
                // 等高線図の凡例
                UpdateFValueLegend(FValueLegendPanel, labelFreqValue);
                // 等高線図
                //FValuePanel.Invalidate();
                FValuePanel.Refresh();
                // 固有値チャート初期化
                // この段階ではMaxModeの値が0なので、後に計算値ロード後一回だけ初期化する
                ResetEigenValueChart(BetaChart);
                // 固有ベクトル表示(空のデータで初期化)
                SetEigenVecToChart(EigenVecChart);
            }
        }
        /// <summary>
        /// 出力をGUIへセットする
        /// </summary>
        /// <param name="addFlg">周波数特性グラフに読み込んだ周波数のデータを追加する?</param>
        /// <param name="isUpdateFValuePanel">等高線図を更新する?(データ読み込み時のアニメーションが遅いので更新しないようにするため導入)</param>
        public void SetOutputToGui(
            string FemOutputDatFilePath,
            Tao.Platform.Windows.SimpleOpenGlControl CadPanel,
            Panel FValuePanel,
            Panel FValueLegendPanel, Label labelFreqValue,
            Chart SMatChart,
            Chart BetaChart,
            Chart EigenVecChart,
            bool addFlg = true,
            bool isUpdateFValuePanel = true)
        {
            if (!isInputDataReady())
            {
                return;
            }
            if (!isOutputDataReady())
            {
                return;
            }
            if (IsAutoCalc)
            {
                ResetSMatChart(SMatChart);
                ResetEigenValueChart(BetaChart);
                /*
                // チャートのデータをクリア
                foreach (Series series in SMatChart.Series)
                {
                    series.Points.Clear();
                }
                foreach (Series series in BetaChart.Series)
                {
                    series.Points.Clear();
                }
                 */
                //foreach (Series series in EigenVecChart.Series)
                //{
                //    series.Points.Clear();
                //}
            }

            if (addFlg)
            {
                // Sマトリックス周波数特性グラフに計算した点を追加
                AddScatterMatrixToChart(SMatChart);

                // 固有値(伝搬定数)周波数特性グラフに計算した点を追加
                AddEigenValueToChart(BetaChart);
            }

            if (isUpdateFValuePanel)
            {
                // 等高線図の凡例
                UpdateFValueLegend(FValueLegendPanel, labelFreqValue);
                // 等高線図
                FValuePanel.Refresh();
            }
            // 固有ベクトル表示
            SetEigenVecToChart(EigenVecChart);

            if (IsAutoCalc)
            {
                // チャートの表示をポイント表示にする
                ShowChartDataLabel(SMatChart);
                ShowChartDataLabel(BetaChart);
            }
        }
        /// <summary>
        /// 出力データだけ初期化する(自動計算モード用)
        /// </summary>
        /// <param name="CadPanel"></param>
        /// <param name="FValuePanel"></param>
        /// <param name="FValueLegendPanel"></param>
        /// <param name="labelFreqValue"></param>
        /// <param name="SMatChart"></param>
        /// <param name="BetaChart"></param>
        /// <param name="EigenVecChart"></param>
        public void InitOutputData(
            Tao.Platform.Windows.SimpleOpenGlControl CadPanel,
            Panel FValuePanel,
            Panel FValueLegendPanel, Label labelFreqValue,
            Chart SMatChart,
            Chart BetaChart,
            Chart EigenVecChart
            )
        {
            initOutput();

            // メッシュ描画
            //using (Graphics g = CadPanel.CreateGraphics())
            //{
            //    DrawMesh(g, CadPanel);
            //}
            //CadPanel.Invalidate();

            if (!IsAutoCalc)
            {
                // チャート初期化
                ResetSMatChart(SMatChart);
                // 等高線図の凡例
                UpdateFValueLegend(FValueLegendPanel, labelFreqValue);
                //FValuePanel.Invalidate();
                // 等高線図
                FValuePanel.Refresh();
                // 固有値チャート初期化
                // この段階ではMaxModeの値が0なので、後に計算値ロード後一回だけ初期化する
                ResetEigenValueChart(BetaChart);
                // 固有ベクトル表示(空のデータで初期化)
                SetEigenVecToChart(EigenVecChart);
            }
        }
        /// <summary>
        /// 出力をGUIへセットする
        /// </summary>
        /// <param name="addFlg">周波数特性グラフに読み込んだ周波数のデータを追加する?</param>
        public void SetOutputToGui(
            string FemOutputDatFilePath,
            Tao.Platform.Windows.SimpleOpenGlControl CadPanel,
            Panel FValuePanel,
            Panel FValueLegendPanel, Label labelFreqValue,
            Chart SMatChart,
            Chart BetaChart,
            Chart EigenVecChart,
            bool addFlg = true)
        {
            if (!isInputDataReady())
            {
                return;
            }
            if (!isOutputDataReady())
            {
                return;
            }

            if (addFlg)
            {
                // Sマトリックス周波数特性グラフに計算した点を追加
                AddScatterMatrixToChart(SMatChart);
                int firstFreqNo;
                int lastFreqNo;
                if (GetCalculatedFreqCnt(FemOutputDatFilePath, out firstFreqNo, out lastFreqNo) == 1)
                {
                    // 固有値チャート初期化(モード数が変わっているので再度初期化する)
                    ResetEigenValueChart(BetaChart);
                }
                // 固有値(伝搬定数)周波数特性グラフに計算した点を追加
                AddEigenValueToChart(BetaChart);
            }

            // 等高線図の凡例
            UpdateFValueLegend(FValueLegendPanel, labelFreqValue);
            // 等高線図
            //FValuePanel.Invalidate();
            FValuePanel.Refresh();
            // 固有ベクトル表示
            SetEigenVecToChart(EigenVecChart);
        }
 public Tree(Tao tao) : base("tree")
 {
     this.tao = tao;
 }