static void Main(string[] args) { Console.WriteLine("Start"); var file = new FileInfo( "Resources/i-robot obj.obj" ); var sw = new Stopwatch(); var tests = 10; long total = 0; sw.Restart(); using (var reader = new FileFormats.MemoryMappedFileReader(file)) { var span = reader.ReadSpan(); sw.Stop(); var readTime = sw.ElapsedMilliseconds; Console.WriteLine($"Read span: {readTime} ms"); while (tests-- > 0) { if (span.Length != 113569792) { Console.WriteLine($"ERROR: Not all data was readed"); break; } var parser = new Utf8ByteOBJParser(); sw.Restart(); parser.Read(span); sw.Stop(); var builder = new UnitedGroupsBulder(parser.GeometryCache); var mesh = builder.Build().Single(); if (mesh.Indices.Count != 4692648 || mesh.Positions.Count != 786586) { Console.WriteLine($"ERROR: Not all data was readed"); break; } var milsec = sw.ElapsedMilliseconds; total += milsec; } } Console.WriteLine($"Total: {total / 10} ms"); // DEBUG //1558 ms = 100 MB file //1487 ms //1542 ms + Normals //1281 - refactor face //1920 - add OBJVertex //1530 - refactor OBJVertex Console.WriteLine($"Finished"); Console.ReadKey(); }
static void Import(string file, out IEnumerable <IFileGeometry3D> meshes, out FileInfo material, out AxisAlignedBox box) { box = AxisAlignedBox.Zero; material = null; var f = new FileInfo(file); switch (f.Extension.ToLower()) { case ".stl": meshes = G3Readers.ReadStl(f); box = AxisAlignedBox.CreateFrom(meshes.First().Positions); break; case ".obj": var parser = new Utf8ByteOBJParser(); using (var reader = new FileFormats.MemoryMappedFileReader(f)) { parser.Read(reader.ReadSpan()); } try { material = parser.HasMTL ? new FileInfo(parser.GetMaterialFilePath(f.Directory, f.Directory)) : null; } catch { } //var builder = new UnitedGroupsBulder(parser.GeometryCache); var builder = new GroupGeoBuilder(parser.GeometryCache); meshes = builder.Build(); box = AxisAlignedBox.CreateFrom(parser.GeometryCache.PositionsCache.AsReadOnly()); break; default: throw new NotSupportedException($"'{f.Extension}' is not suppported format."); } }