public void Tessellate_WithAsset_ReturnsExpectedTriangulation(TestCaseData data) { var pset = _loader.GetAsset(data.AssetName).Polygons; var tess = new Tess(); PolyConvert.ToTess(pset, tess); tess.Tessellate(data.Winding, ElementType.Polygons, data.ElementSize); var resourceName = Assembly.GetExecutingAssembly().GetName().Name + ".TestData." + data.AssetName + ".testdat"; var testData = ParseTestData(data.Winding, data.ElementSize, Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)); Assert.IsNotNull(testData); Assert.AreEqual(testData.ElementSize, data.ElementSize); var indices = new List <int>(); for (int i = 0; i < tess.ElementCount; i++) { for (int j = 0; j < data.ElementSize; j++) { int index = tess.Elements[i * data.ElementSize + j]; indices.Add(index); } } Assert.AreEqual(testData.Indices, indices.ToArray()); }
private void RefreshAsset(int index) { if (index >= 0) { var asset = _data.GetAsset(_assets[index]); RefreshAsset(asset.Polygons); } }
private void RefreshAsset(string name) { var asset = _data.GetAsset(name); _sw.Reset(); foreach (var poly in asset.Polygons) { var v = new ContourVertex[poly.Count]; for (int i = 0; i < poly.Count; i++) { v[i].Position = new Vec3 { X = poly[i].X, Y = poly[i].Y }; v[i].Data = poly[i].Color; } _sw.Start(); _tess.AddContour(v, poly.Orientation); _sw.Stop(); } _sw.Start(); _tess.Tessellate(_windingRule, ElementType.Polygons, _polySize, VertexCombine); _sw.Stop(); var output = new PolygonSet(); for (int i = 0; i < _tess.ElementCount; i++) { var poly = new Polygon(); for (int j = 0; j < _polySize; j++) { int index = _tess.Elements[i * _polySize + j]; if (index == -1) { continue; } var v = new PolygonPoint { X = _tess.Vertices[index].Position.X, Y = _tess.Vertices[index].Position.Y, Color = (Color)_tess.Vertices[index].Data }; poly.Add(v); } output.Add(poly); } statusMain.Text = string.Format("{0:F3} ms - {1} polygons (of {2} vertices) {3}", _sw.Elapsed.TotalMilliseconds, _tess.ElementCount, _polySize, _polySize == 3 ? "... triangles" : ""); _canvas.Input = asset.Polygons; _canvas.Output = output; _canvas.Invalidate(); }
static void Main(string[] args) { if (args.Length >= 1) { if (string.Equals(args[0], "gentestdat", StringComparison.OrdinalIgnoreCase)) { UnitTests.GenerateTestData(); } if (args.Length == 2 && string.Equals(args[0], "profile", StringComparison.OrdinalIgnoreCase)) { int count = 0; if (!int.TryParse(args[1], out count)) { return; } var stopwatch = new Stopwatch(); var loader = new DataLoader(); stopwatch.Start(); for (int i = 0; i < count; i++) { foreach (var name in loader.AssetNames) { var pset = loader.GetAsset(name).Polygons; var lines = new List <string>(); var indices = new List <int>(); foreach (WindingRule winding in Enum.GetValues(typeof(WindingRule))) { var tess = new Tess(); PolyConvert.ToTess(pset, tess); tess.Tessellate(winding, ElementType.Polygons, 3); } } } stopwatch.Stop(); Console.WriteLine("{0:F3}ms", stopwatch.Elapsed.TotalMilliseconds); } return; } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); }
private void Worker(object sender, DoWorkEventArgs e) { Invoke(new Action(() => { toolStripButtonStart.Enabled = false; })); var results = new List <TestResult>(); var names = _data.AssetNames; for (int i = 0; i < names.Length; i++) { var asset = _data.GetAsset(names[i]); var testResult = new TestResult(); testResult.Name = names[i]; foreach (var lib in _libs) { var libResult = lib.Triangulate(asset.Polygons, _loops); testResult.Libs.Add(libResult); } results.Add(testResult); _bgWorker.ReportProgress(i * 100 / names.Length); } _bgWorker.ReportProgress(100); e.Result = results; }