EdgeConnectedTriangleTraversal.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import hasInterface from '../../../../../hasInterface'
  2. import Collection from '../../../../../java/util/Collection'
  3. import QuadEdgeTriangle from './QuadEdgeTriangle'
  4. import LinkedList from '../../../../../java/util/LinkedList'
  5. export default class EdgeConnectedTriangleTraversal {
  6. constructor() {
  7. EdgeConnectedTriangleTraversal.constructor_.apply(this, arguments)
  8. }
  9. static constructor_() {
  10. this._triQueue = new LinkedList()
  11. }
  12. init() {
  13. if (arguments[0] instanceof QuadEdgeTriangle) {
  14. const tri = arguments[0]
  15. this._triQueue.addLast(tri)
  16. } else if (hasInterface(arguments[0], Collection)) {
  17. const tris = arguments[0]
  18. this._triQueue.addAll(tris)
  19. }
  20. }
  21. process(currTri, visitor) {
  22. currTri.getNeighbours()
  23. for (let i = 0; i < 3; i++) {
  24. const neighTri = currTri.getEdge(i).sym().getData()
  25. if (neighTri === null) continue
  26. if (visitor.visit(currTri, i, neighTri)) this._triQueue.addLast(neighTri)
  27. }
  28. }
  29. visitAll(visitor) {
  30. while (!this._triQueue.isEmpty()) {
  31. const tri = this._triQueue.removeFirst()
  32. this.process(tri, visitor)
  33. }
  34. }
  35. }