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(); }
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); }