Exemplo n.º 1
0
        protected override void OnLoad(object sender, EventArgs e)
        {
            WaveProgram = MainWindow.CreateProgram(WaveVertexShader, MainWindow.ColoredFragmentShaderPath);

            _wave = new RenderObject(
                ObjectFactory.Curve(
                    FunctionToCurve((x) => 0f, -_length * 1f, _length * 1f, 1600),
                    Color4.White),
                WaveProgram)
            {
                Scale = new Vector3(Window.Width / _length, 1, 1)
            };

            ///// BUTTONS /////
            _startButton = new RectangularButton(
                new RectangleF(Window.Width / 2f - 75f, -Window.Height / 2f + 15f, 60f, 60f),
                ARectangularInteraction.DefaultLineWidth,
                Color4.Gray,
                Color4.White,
                Window.ColoredProgram);
            _startButton.ButtonPressEvent += (o, a) =>
            {
                _working ^= true;
                _startButton.FillColor = _working ? Color4.Red : Color4.Gray;
            };
            ///////////////////

            ///// CHECKBOX /////
            _timeSlipCheck = new RectangularCheckBox(60f, 60f, 5f, Color4.Black, Color4.White, Color4.Red, Window.ColoredProgram);
            ////////////////////

            ///// CIRCLES /////
            Color4 colorC = new Color4(0xCA, 0xC0, 0x3E, 128);

            _circleL = new RenderObject(ObjectFactory.FilledCircle(20f, colorC), Window.ColoredProgram);
            _circleR = new RenderObject(ObjectFactory.FilledCircle(20f, colorC), Window.ColoredProgram);
            ///////////////////

            Color4 colorL = new Color4(0.5f, 0.5f, 0.2f, 1.0f);

            _ampLines = new ROCollection(new RenderObject[]
            {
                new RenderObject(
                    ObjectFactory.Curve(
                        colorL,
                        new System.Numerics.Vector2(-0.5f * _length, +_amplitude / 0.1f),
                        new System.Numerics.Vector2(+0.5f * _length, +_amplitude / 0.1f)),
                    Window.ColoredProgram),
                new RenderObject(
                    ObjectFactory.Curve(
                        colorL,
                        new System.Numerics.Vector2(-0.5f * _length, -_amplitude / 0.1f),
                        new System.Numerics.Vector2(+0.5f * _length, -_amplitude / 0.1f)),
                    Window.ColoredProgram),
                new RenderObject(
                    ObjectFactory.Curve(
                        new Color4(1f, 1f, 1f, 0.3f),
                        new System.Numerics.Vector2(-0.5f * _length, 0f),
                        new System.Numerics.Vector2(+0.5f * _length, 0f)),
                    Window.ColoredProgram)
            })
            {
                Scale = new Vector3(Window.Width / _length, 1, 1)
            };

            ///// SLIDERS /////
            _freqSlider = new StandardSlider(400, 50, 20, 0, 5f, Color4.LightBlue, Color4.White, Window.ColoredProgram);
            _freqSlider.ValueChangedEvent += (o, ev) =>
            {
                _frequency     = ev.NewValue;
                _freqText.Text = $"f={ev.NewValue:0.000} Hz";
                UniformComponents();
            };
            _speedSlider = new StandardSlider(400, 50, 20, 0, 200, Color4.LightBlue, Color.White, Window.ColoredProgram)
            {
                Value = 100f
            };
            _speedSlider.ValueChangedEvent += (o, ev) =>
            {
                _speed          = ev.NewValue;
                _speedText.Text = $"v={ev.NewValue:000.00} m/s";
                UniformComponents();
            };
            ///////////////////

            ////// TEXTS //////
            string fontName = "Time New Roman";

            _freqText      = new RenderText(25, fontName, "f=0.000 Hz", Color.Transparent, Color.White, Window.TexturedProgram);
            _speedText     = new RenderText(25, fontName, "v=100.00 m/s", Color.Transparent, Color.White, Window.TexturedProgram);
            _lengthText    = new RenderText(25, fontName, "L=100.00 m", Color.Transparent, Color.White, Window.TexturedProgram);
            _timeSlipLabel = new RenderText(10, fontName, "timeslip", Color.Transparent, Color.White, Window.TexturedProgram);
            _startLabel    = new RenderText(10, fontName, "start", Color.Transparent, Color.White, Window.TexturedProgram);
            //////////////////

            UniformComponents();
        }
Exemplo n.º 2
0
        protected override void OnLoad(object sender, EventArgs e)
        {
            ///// BUTTONS /////
            _buttons.Add(
                "start1",
                new RectangularButton(
                    new RectangleF(_window.Width / 2f - 75f, -_window.Height / 2f + 15f, 60f, 60f),
                    ARectangularInteraction.DefaultLineWidth,
                    Color4.Gray,
                    Color4.White,
                    _window.ColoredProgram));
            _buttons["start1"].ButtonPressEvent += (o, a) =>
            {
                if (timelist1.Count() == 0)
                {
                    timelist1.Add(time);
                    timelist1.Add(time + screentime);
                }
                if (time > timelist1.Last())
                {
                    timelist1.Add(time);
                    timelist1.Add(time + screentime);
                }
                _buttons["start1"].FillColor = _working1 ? Color4.Red : Color4.Gray;
            };

            _buttons.Add(
                "start2",
                new RectangularButton(
                    new RectangleF(_window.Width / 2f - 145f, -_window.Height / 2f + 15f, 60f, 60f),
                    ARectangularInteraction.DefaultLineWidth,
                    Color4.Gray,
                    Color4.White,
                    _window.ColoredProgram));
            _buttons["start2"].ButtonPressEvent += (o, a) =>
            {
                if (timelist2.Count() == 0)
                {
                    timelist2.Add(time);
                    timelist2.Add(time + screentime);
                }
                if (time > timelist2.Last())
                {
                    timelist2.Add(time);
                    timelist2.Add(time + screentime);
                }

                _buttons["start2"].FillColor = _working2 ? Color4.Red : Color4.Gray;
            };

            _buttons.Add(
                "startboth",
                new RectangularButton(
                    new RectangleF(_window.Width / 2f - 215f, -_window.Height / 2f + 15f, 60f, 60f),
                    ARectangularInteraction.DefaultLineWidth,
                    Color4.BlueViolet,
                    Color4.White,
                    _window.ColoredProgram));
            _buttons["startboth"].ButtonPressEvent += (o, a) =>
            {
                if (timelist1.Count() == 0 || timelist2.Count() == 0)
                {
                    _buttons["start1"].Press();
                    _buttons["start2"].Press();
                }
                if (time > timelist1.Last() && time > timelist2.Last())
                {
                    _buttons["start1"].Press();
                    _buttons["start2"].Press();
                }
            };
            ///////////////////
            ///
            _freq1Slider = new StandardSlider(400, 50, 20, 0, 15f, Color4.LightBlue, Color4.White, _window.ColoredProgram);
            _freq1Slider.ValueChangedEvent += (o, ev) =>
            {
                freq1          = ev.NewValue;
                freq1Text.Text = $"f1={ev.NewValue:0.00} Hz";
            };

            _freq2Slider = new StandardSlider(400, 50, 20, 0, 15f, Color4.LightBlue, Color.White, _window.ColoredProgram);
            _freq2Slider.ValueChangedEvent += (o, ev) =>
            {
                freq2          = ev.NewValue;
                freq2Text.Text = $"f2={ev.NewValue:0.00} Hz";
            };

            _timeSlider = new StandardSlider(400, 50, 20, 0, 20f, Color4.LightBlue, Color.White, _window.ColoredProgram);
            _timeSlider.ValueChangedEvent += (o, ev) =>
            {
                screentime          = ev.NewValue;
                ScreenTimeText.Text = $"ScreenTime={ev.NewValue:0} ";
            };

            freq1Text      = new RenderText(25, fontName, "f1=0.00 Hz", Color.Transparent, Color.White, _window.TexturedProgram);
            freq2Text      = new RenderText(25, fontName, "f2=0.00 Hz", Color.Transparent, Color.White, _window.TexturedProgram);
            ScreenTimeText = new RenderText(25, fontName, "ScreenTime=0 ", Color.Transparent, Color.White, _window.TexturedProgram);
        }