TriangleFormat.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // -----------------------------------------------------------------------
  2. // <copyright file="TriangleFormat.cs" company="">
  3. // Triangle.NET code by Christian Woltering, http://triangle.codeplex.com/
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. namespace UnityEngine.U2D.Animation.TriangleNet
  7. .IO
  8. {
  9. using System;
  10. using System.Collections.Generic;
  11. using System.IO;
  12. using Animation.TriangleNet.Geometry;
  13. using Animation.TriangleNet.Meshing;
  14. /// <summary>
  15. /// Implements geometry and mesh file formats of the the original Triangle code.
  16. /// </summary>
  17. internal class TriangleFormat : IPolygonFormat, IMeshFormat
  18. {
  19. public bool IsSupported(string file)
  20. {
  21. string ext = Path.GetExtension(file).ToLower();
  22. if (ext == ".node" || ext == ".poly" || ext == ".ele")
  23. {
  24. return true;
  25. }
  26. return false;
  27. }
  28. public IMesh Import(string filename)
  29. {
  30. string ext = Path.GetExtension(filename);
  31. if (ext == ".node" || ext == ".poly" || ext == ".ele")
  32. {
  33. List<ITriangle> triangles;
  34. Polygon geometry;
  35. (new TriangleReader()).Read(filename, out geometry, out triangles);
  36. if (geometry != null && triangles != null)
  37. {
  38. return Converter.ToMesh(geometry, triangles.ToArray());
  39. }
  40. }
  41. throw new NotSupportedException("Could not load '" + filename + "' file.");
  42. }
  43. public void Write(IMesh mesh, string filename)
  44. {
  45. var writer = new TriangleWriter();
  46. writer.WritePoly((Mesh)mesh, Path.ChangeExtension(filename, ".poly"));
  47. writer.WriteElements((Mesh)mesh, Path.ChangeExtension(filename, ".ele"));
  48. }
  49. public void Write(IMesh mesh, Stream stream)
  50. {
  51. throw new NotImplementedException();
  52. }
  53. public IPolygon Read(string filename)
  54. {
  55. string ext = Path.GetExtension(filename);
  56. if (ext == ".node")
  57. {
  58. return (new TriangleReader()).ReadNodeFile(filename);
  59. }
  60. else if (ext == ".poly")
  61. {
  62. return (new TriangleReader()).ReadPolyFile(filename);
  63. }
  64. throw new NotSupportedException("File format '" + ext + "' not supported.");
  65. }
  66. public void Write(IPolygon polygon, string filename)
  67. {
  68. (new TriangleWriter()).WritePoly(polygon, filename);
  69. }
  70. public void Write(IPolygon polygon, Stream stream)
  71. {
  72. throw new NotImplementedException();
  73. }
  74. }
  75. }