/src/aerys/minko/render/geometry/stream/iterator/TriangleIterator.as

https://bitbucket.org/HopeSky/mars_nd2d · ActionScript · 97 lines · 70 code · 21 blank · 6 comment · 3 complexity · c1ccef716cc48b27fa68451ed9e25644 MD5 · raw file

  1. package aerys.minko.render.geometry.stream.iterator
  2. {
  3. import aerys.minko.ns.minko_stream;
  4. import aerys.minko.render.geometry.stream.IVertexStream;
  5. import aerys.minko.render.geometry.stream.IndexStream;
  6. import flash.utils.Proxy;
  7. import flash.utils.flash_proxy;
  8. /**
  9. * TriangleIterator allow per-triangle access on VertexStream objects.
  10. *
  11. * @author Jean-Marc Le Roux
  12. *
  13. */
  14. public final class TriangleIterator extends Proxy
  15. {
  16. use namespace minko_stream;
  17. private var _singleReference : Boolean = true;
  18. private var _offset : int = 0;
  19. private var _index : int = 0;
  20. private var _vb : IVertexStream = null;
  21. private var _ib : IndexStream = null;
  22. private var _triangle : TriangleReference = null;
  23. public function get length() : int
  24. {
  25. return _ib ? _ib.length / 3 : _vb.numVertices / 3;
  26. }
  27. public function TriangleIterator(vertexStream : IVertexStream,
  28. indexStream : IndexStream,
  29. singleReference : Boolean = true)
  30. {
  31. super();
  32. _vb = vertexStream;
  33. _ib = indexStream;
  34. _singleReference = singleReference;
  35. }
  36. override flash_proxy function hasProperty(name : *) : Boolean
  37. {
  38. return int(name) < _ib.length / 3;
  39. }
  40. override flash_proxy function nextNameIndex(index : int) : int
  41. {
  42. index -= _offset;
  43. _offset = 0;
  44. return index < _ib.length / 3 ? index + 1 : 0;
  45. }
  46. override flash_proxy function nextName(index : int) : String
  47. {
  48. return String(index - 1);
  49. }
  50. override flash_proxy function nextValue(index : int) : *
  51. {
  52. _index = index - 1;
  53. if (!_singleReference || !_triangle)
  54. _triangle = new TriangleReference(_vb, _ib, _index);
  55. if (_singleReference)
  56. {
  57. _triangle._index = _index;
  58. _triangle.v0._index = _ib._data[int(_index * 3)];
  59. _triangle.v1._index = _ib._data[int(_index * 3 + 1)];
  60. _triangle.v2._index = _ib._data[int(_index * 3 + 2)];
  61. _triangle._update = TriangleReference.UPDATE_ALL;
  62. }
  63. return _triangle;
  64. }
  65. override flash_proxy function getProperty(name : *) : *
  66. {
  67. return new TriangleReference(_vb, _ib, int(name));
  68. }
  69. override flash_proxy function deleteProperty(name : *) : Boolean
  70. {
  71. var index : uint = uint(name);
  72. _ib.deleteTriangle(index);
  73. return true;
  74. }
  75. }
  76. }