public MainForm(GraphicsBackend backend, string exeDir, string shaderSubdir) { InitializeComponent(); Shown += (sender, e) => FormReady = true; GraphicsDeviceOptions options = new( false, Veldrid.PixelFormat.R32_Float, false, ResourceBindingModel.Improved); Surface = new VeldridSurface(backend, options); Surface.VeldridInitialized += (sender, e) => VeldridReady = true; Content = Surface; ovpSettings = new OVPSettings(); ovpSettings.drawFilled(true); ovpSettings.drawDrawn(true); ovpSettings.drawPoints(true); addPolys(); Driver = new VeldridDriver(ref ovpSettings, ref Surface) { Surface = Surface, ExecutableDirectory = exeDir, ShaderSubdirectory = shaderSubdir }; // TODO: Make this binding actually work both ways. CmdAnimate.Bind <bool>("Checked", Driver, "Animate"); CmdClockwise.Bind <bool>("Checked", Driver, "Clockwise"); }
private static void saveViewportSVG(ref OVPSettings vpSettings, string svgFileName) { SVGBuilder svg = new(); // The polygons in the viewport are stored flipped due to drawing convention. We need to flip them here for SVG to match drawn viewport. // polys foreach (ovp_Poly t in vpSettings.polyList) { svg.style.brushClr = UIHelper.colorToMyColor(t.color); svg.style.penClr = UIHelper.colorToMyColor(t.color); GeoLibPointF[] temp = UIHelper.pointFArrayTomyPointFArray(t.poly); int count = temp.Length; #if !SVGSINGLETHREADED Parallel.For(0, count, pt => #else for (int pt = 0; pt < count; pt++) #endif { temp[pt].Y = -temp[pt].Y; }
public MainForm() { myList = new List <ObservableCollection <string> > { new() { "First", "Second" } }; DataContext = new myStuff { entries = myList }; refPoly = new PointF[5]; refPoly[0] = new PointF(-50, 50); refPoly[1] = new PointF(50, 50); refPoly[2] = new PointF(50, -50); refPoly[3] = new PointF(-50, -50); refPoly[4] = refPoly[0]; drawingLock = new object(); MinimumSize = new Size(200, 200); updateSimUIMTFunc = updateSimUIMT_; configureProgressBarFunc = configureProgressBar_; numberOfCases = 25000; timer_interval = 10; ovpSettings = new OVPSettings(); ovp2Settings = new OVPSettings { zoomFactor = 3 }; Title = "My Eto Form"; /* * Test flags. * 0 : stamdard viewports in splitter test. * 1 : viewports in tabs (WPF has issues here due to the deferred evaluation; still need a better fix) * 3 : single viewport in panel, dropdown switches out the view settings. */ int mode = 0; switch (mode) { case 0: { viewport = new TestViewport(ref ovpSettings); viewport.Size = new Size(250, 250); viewport2 = new TestViewport(ref ovp2Settings); viewport2.Size = new Size(200, 200); Panel testing = new(); testing.Size = new Size(viewport.Width + viewport2.Width, viewport.Height); testing.Content = new Splitter { Orientation = Orientation.Horizontal, FixedPanel = SplitterFixedPanel.None, Panel1 = viewport, Panel2 = viewport2 }; Panel testing2 = new(); testing2.Content = new Splitter { Orientation = Orientation.Horizontal, FixedPanel = SplitterFixedPanel.None, Panel1 = statusLine, Panel2 = progressBar }; testComboBox_SelEntry = new Button(); testComboBox_SelEntry.Text = "Change"; testComboBox_SelEntry.Click += changeSelEntry; testComboBox = new DropDown(); testComboBox.DataContext = DataContext; testComboBox.BindDataContext(c => c.DataStore, (myStuff m) => m.entries[0]); testComboBox.SelectedIndex = 0; //testComboBox.SelectedIndexBinding.BindDataContext((myStuff m) => m.index); Panel testing3 = new(); testing3.Content = new Splitter { Orientation = Orientation.Horizontal, FixedPanel = SplitterFixedPanel.None, Panel1 = testComboBox_SelEntry, Panel2 = testComboBox }; Panel testing4 = new(); testing4.Content = new Splitter { Orientation = Orientation.Vertical, FixedPanel = SplitterFixedPanel.None, Panel1 = testing3, Panel2 = testing }; Splitter mySplitter = new() { Orientation = Orientation.Vertical, FixedPanel = SplitterFixedPanel.None, Panel1 = testing4, Panel2 = testing2 }; Content = mySplitter; break; } case 1: { TabControl tabControl_main = new(); tabControl_main.Size = new Size(300, 300); Content = tabControl_main; TabPage tab_0 = new(); tab_0.Text = "0"; tabControl_main.Pages.Add(tab_0); PixelLayout tabPage_0_content = new(); tabPage_0_content.Size = new Size(280, 280); TabPage tab_1 = new(); tab_1.Text = "1"; tabControl_main.Pages.Add(tab_1); PixelLayout tabPage_1_content = new(); tabPage_1_content.Size = new Size(280, 280); tab_1.Content = tabPage_1_content; TabPage tab_2 = new(); tab_2.Text = "2"; tabControl_main.Pages.Add(tab_2); viewport = new TestViewport(ref ovpSettings); viewport.Size = new Size(200, 200); tabPage_1_content.Add(viewport, 5, 5); viewport2 = new TestViewport(ref ovp2Settings); viewport2.Size = new Size(200, 200); tab_2.Content = viewport2; break; } case 2: { ovpSettings.addPolygon(refPoly, Color.FromArgb(0, 255, 0), 0.7f, false, 0); ovp2Settings.addPolygon(refPoly, Color.FromArgb(255, 0, 0), 0.7f, false, 0); vSettings = new OVPSettings(); viewport = new TestViewport(ref vSettings); viewport.Size = new Size(250, 250); Panel testing = new(); testing.Size = new Size(viewport.Width, viewport.Height); PixelLayout p = new(); p.Add(viewport, 0, 0); testing.Content = p; testComboBox_SelEntry = new Button(); testComboBox_SelEntry.Text = "Change"; testComboBox_SelEntry.Click += changeSelEntry; testComboBox = new DropDown(); testComboBox.DataContext = DataContext; testComboBox.BindDataContext(c => c.DataStore, (myStuff m) => m.entries[0]); testComboBox.SelectedIndex = 0; testComboBox.SelectedIndexChanged += adjustView_; //testComboBox.SelectedIndexBinding.BindDataContext((myStuff m) => m.index); Splitter testing3 = new() { Orientation = Orientation.Horizontal, FixedPanel = SplitterFixedPanel.None, Panel1 = testComboBox_SelEntry, Panel2 = testComboBox }; Splitter testing4 = new() { Orientation = Orientation.Vertical, FixedPanel = SplitterFixedPanel.None, Panel1 = testing3, Panel2 = testing }; Splitter mySplitter = new() { Orientation = Orientation.Vertical, FixedPanel = SplitterFixedPanel.None, Panel1 = testing4, Panel2 = new Panel() }; Content = mySplitter; break; } } statusLine = new Label(); statusLine.Size = new Size(150, 11); statusLine.Text = "Hello world"; progressBar = new ProgressBar(); progressBar.Height = 15; progressBar.MaxValue = numberOfCases; // create a few commands that can be used for the menu and toolbar Command clickMe = new() { MenuText = "Run", ToolBarText = "Run" }; clickMe.Executed += runCases; Command abort = new() { MenuText = "Abort", ToolBarText = "Abort" }; abort.Executed += abortTheRun; Command adjustList = new() { MenuText = "Add to list", ToolBarText = "Add" }; if (mode != 3) { adjustList.Executed += adjustList_; } Command quitCommand = new() { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q }; quitCommand.Executed += (sender, e) => Application.Instance.Quit(); Command aboutCommand = new() { MenuText = "About..." }; aboutCommand.Executed += (sender, e) => MessageBox.Show(this, "About my app..."); // create menu Menu = new MenuBar { Items = { // File submenu new ButtonMenuItem { Text = "&File", Items ={ clickMe } }, // new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } }, // new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } }, }, ApplicationItems = { // application (OS X) or file menu (others) new ButtonMenuItem { Text = "&Preferences..." }, }, QuitItem = quitCommand, AboutItem = aboutCommand }; // create toolbar ToolBar = new ToolBar { Items = { clickMe, abort, adjustList } }; //mySplitter.Panel1.SizeChanged += splitterSize; //mySplitter.Panel2.SizeChanged += splitterSize; } private void adjustView_(object sender, EventArgs e) { switch (testComboBox.SelectedIndex) { case 0: viewport.changeSettingsRef(ref ovpSettings); break; default: viewport.changeSettingsRef(ref ovp2Settings); break; } } private void adjustList_(object sender, EventArgs e) { myList[0].Add("Entry " + myList[0].Count.ToString(CultureInfo.InvariantCulture)); testComboBox.SelectedIndex = testComboBox.SelectedIndex switch { -1 => 0, _ => testComboBox.SelectedIndex }; if (testComboBox.SelectedIndex >= myList[0].Count) { testComboBox.SelectedIndex = myList[0].Count - 1; } // testComboBox.SelectedIndex = 1; } /* These shouldn't be necessary * protected override void OnWindowStateChanged(EventArgs e) * { * base.OnWindowStateChanged(e); * viewport.updateViewport(); * viewport.updateViewport(); * if (viewport2 != null) * { * viewport2.updateViewport(); * } * } * * void splitterSize(object sender, EventArgs e) * { * viewport.updateViewport(); * viewport.updateViewport(); * if (viewport2 != null) * { * viewport2.updateViewport(); * } * } * * protected override void OnSizeChanged(EventArgs e) * { * base.OnSizeChanged(e); * viewport.updateViewport(); * if (viewport2 != null) * { * viewport2.updateViewport(); * } * } * * protected override void OnShown(EventArgs e) * { * base.OnShown(e); * viewport.updateViewport(); * viewport.updateViewport(); * if (viewport2 != null) * { * viewport2.updateViewport(); * } * } */ } public static class RNG {