P2T.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /* Poly2Tri
  2. * Copyright (c) 2009-2010, Poly2Tri Contributors
  3. * http://code.google.com/p/poly2tri/
  4. *
  5. * All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without modification,
  8. * are permitted provided that the following conditions are met:
  9. *
  10. * * Redistributions of source code must retain the above copyright notice,
  11. * this list of conditions and the following disclaimer.
  12. * * Redistributions in binary form must reproduce the above copyright notice,
  13. * this list of conditions and the following disclaimer in the documentation
  14. * and/or other materials provided with the distribution.
  15. * * Neither the name of Poly2Tri nor the names of its contributors may be
  16. * used to endorse or promote products derived from this software without specific
  17. * prior written permission.
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  23. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. */
  31. using Veldrid.Common.Poly2Tri.Polygons;
  32. using Veldrid.Common.Poly2Tri.Triangulation;
  33. using Veldrid.Common.Poly2Tri.Triangulation.Delaunay.Sweep;
  34. using Veldrid.Common.Poly2Tri.Triangulation.Sets;
  35. namespace Veldrid.Common.Poly2Tri
  36. {
  37. public static class P2T {
  38. private static TriangulationAlgorithm _defaultAlgorithm = TriangulationAlgorithm.DTSweep;
  39. public static void Triangulate(PolygonSet ps) {
  40. TriangulationContext tcx = CreateContext(_defaultAlgorithm);
  41. foreach (Polygon p in ps.Polygons) {
  42. tcx.PrepareTriangulation(p);
  43. Triangulate(tcx);
  44. tcx.Clear();
  45. }
  46. }
  47. public static void Triangulate(Polygon p) {
  48. Triangulate(_defaultAlgorithm, p);
  49. }
  50. public static void Triangulate(ConstrainedPointSet cps) {
  51. Triangulate(_defaultAlgorithm, cps);
  52. }
  53. public static void Triangulate(PointSet ps) {
  54. Triangulate(_defaultAlgorithm, ps);
  55. }
  56. public static TriangulationContext CreateContext(TriangulationAlgorithm algorithm) {
  57. switch (algorithm) {
  58. case TriangulationAlgorithm.DTSweep:
  59. default:
  60. return new DTSweepContext();
  61. }
  62. }
  63. public static void Triangulate(TriangulationAlgorithm algorithm, Triangulatable t) {
  64. TriangulationContext tcx;
  65. // long time = System.nanoTime();
  66. tcx = CreateContext(algorithm);
  67. tcx.PrepareTriangulation(t);
  68. Triangulate(tcx);
  69. // logger.info( "Triangulation of {} points [{}ms]", tcx.getPoints().size(), ( System.nanoTime() - time ) / 1e6 );
  70. }
  71. public static void Triangulate(TriangulationContext tcx) {
  72. switch (tcx.Algorithm) {
  73. case TriangulationAlgorithm.DTSweep:
  74. default:
  75. DTSweep.Triangulate((DTSweepContext)tcx);
  76. break;
  77. }
  78. }
  79. /// <summary>
  80. /// Will do a warmup run to let the JVM optimize the triangulation code -- or would if this were Java --MM
  81. /// </summary>
  82. public static void Warmup() {
  83. #if false
  84. /*
  85. * After a method is run 10000 times, the Hotspot compiler will compile
  86. * it into native code. Periodically, the Hotspot compiler may recompile
  87. * the method. After an unspecified amount of time, then the compilation
  88. * system should become quiet.
  89. */
  90. Polygon poly = PolygonGenerator.RandomCircleSweep2(50, 50000);
  91. TriangulationProcess process = new TriangulationProcess();
  92. process.triangulate(poly);
  93. #endif
  94. }
  95. }
  96. }