ConstrainedPointSet.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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 System.Collections.Generic;
  32. namespace Poly2Tri.Triangulation.Sets
  33. {
  34. /*
  35. * Extends the PointSet by adding some Constraints on how it will be triangulated<br>
  36. * A constraint defines an edge between two points in the set, these edges can not
  37. * be crossed. They will be enforced triangle edges after a triangulation.
  38. * <p>
  39. *
  40. *
  41. * @author Thomas Åhlén, [email protected]
  42. */
  43. public class ConstrainedPointSet : PointSet
  44. {
  45. private List<TriangulationPoint> _constrainedPointList = null;
  46. public ConstrainedPointSet(List<TriangulationPoint> points, int[] index)
  47. : base(points)
  48. {
  49. EdgeIndex = index;
  50. }
  51. /**
  52. *
  53. * @param points - A list of all points in PointSet
  54. * @param constraints - Pairs of two points defining a constraint, all points <b>must</b> be part of given PointSet!
  55. */
  56. public ConstrainedPointSet(List<TriangulationPoint> points, IEnumerable<TriangulationPoint> constraints)
  57. : base(points)
  58. {
  59. _constrainedPointList = new List<TriangulationPoint>();
  60. _constrainedPointList.AddRange(constraints);
  61. }
  62. public int[] EdgeIndex { get; private set; }
  63. public override TriangulationMode TriangulationMode
  64. {
  65. get { return TriangulationMode.Constrained; }
  66. }
  67. public override void PrepareTriangulation(TriangulationContext tcx)
  68. {
  69. base.PrepareTriangulation(tcx);
  70. if (_constrainedPointList != null)
  71. {
  72. TriangulationPoint p1, p2;
  73. List<TriangulationPoint>.Enumerator iterator = _constrainedPointList.GetEnumerator();
  74. while (iterator.MoveNext())
  75. {
  76. p1 = iterator.Current;
  77. iterator.MoveNext();
  78. p2 = iterator.Current;
  79. tcx.NewConstraint(p1, p2);
  80. }
  81. }
  82. else
  83. {
  84. for (int i = 0; i < EdgeIndex.Length; i += 2)
  85. {
  86. // XXX: must change!!
  87. tcx.NewConstraint(Points[EdgeIndex[i]], Points[EdgeIndex[i + 1]]);
  88. }
  89. }
  90. }
  91. /**
  92. * TODO: TO BE IMPLEMENTED!
  93. * Peforms a validation on given input<br>
  94. * 1. Check's if there any constraint edges are crossing or collinear<br>
  95. * 2.
  96. * @return
  97. */
  98. public bool isValid()
  99. {
  100. return true;
  101. }
  102. }
  103. }