private void getBigLoops() { List<Node> _nodes = nodes.GetRange(0, nodes.Count); _nodes.Sort(sortY); while (_nodes.Count > 0) { Node currentNode = _nodes[0]; _nodes.RemoveAt(0); if (currentNode.nodes.Count < 2) continue; BigLoop bigLoop = new BigLoop(); bigLoop.triangulator = this; Node nextNode = currentNode.getMinimalAgleNode(Vector2.up); _nodes.Remove(nextNode); Node before = currentNode; bigLoop.edgeNodes.Add(nextNode); bigLoop.allNodes.Add(nextNode); nextNode.isBigLoop = true; bool right = false; int k = 0; while (k < 100000) { k++; Node newNext = nextNode.getMinimalAgleNode(before); before = nextNode; nextNode = newNext; if (newNext != null) { _nodes.Remove(newNext); bigLoop.edgeNodes.Add(nextNode); bigLoop.allNodes.Add(nextNode); nextNode.isBigLoop = true; } else { break; } if (nextNode == currentNode) { //Debug.Log("loop"); //bigLoop.debug(); right = true; break; } } if (right) { List<Node> removeList = new List<Node>(); foreach (Node n in _nodes) { if (bigLoop.isBelong(n)) { removeList.Add(n); bigLoop.insideNodes.Add(n); bigLoop.allNodes.Add(n); } } foreach (Node n in removeList) { _nodes.Remove(n); } // Debug.Log("Count edgs " + bigLoop.edgeNodes.Count); // Debug.Log("Count ins " + bigLoop.insideNodes.Count); // Debug.Log("Count all " + bigLoop.allNodes.Count); bigLoops.Add(bigLoop); } } }
private void getBigLoops() { List <Node> _nodes = nodes.GetRange(0, nodes.Count); _nodes.Sort(sortY); while (_nodes.Count > 0) { Node currentNode = _nodes[0]; _nodes.RemoveAt(0); if (currentNode.nodes.Count < 2) { continue; } BigLoop bigLoop = new BigLoop(); bigLoop.triangulator = this; Node nextNode = currentNode.getMinimalAgleNode(Vector2.up); _nodes.Remove(nextNode); Node before = currentNode; bigLoop.edgeNodes.Add(nextNode); bigLoop.allNodes.Add(nextNode); nextNode.isBigLoop = true; bool right = false; int k = 0; while (k < 100000) { k++; Node newNext = nextNode.getMinimalAgleNode(before); before = nextNode; nextNode = newNext; if (newNext != null) { _nodes.Remove(newNext); bigLoop.edgeNodes.Add(nextNode); bigLoop.allNodes.Add(nextNode); nextNode.isBigLoop = true; } else { break; } if (nextNode == currentNode) { //Debug.Log("loop"); //bigLoop.debug(); right = true; break; } } if (right) { List <Node> removeList = new List <Node>(); foreach (Node n in _nodes) { if (bigLoop.isBelong(n)) { removeList.Add(n); bigLoop.insideNodes.Add(n); bigLoop.allNodes.Add(n); } } foreach (Node n in removeList) { _nodes.Remove(n); } // Debug.Log("Count edgs " + bigLoop.edgeNodes.Count); // Debug.Log("Count ins " + bigLoop.insideNodes.Count); // Debug.Log("Count all " + bigLoop.allNodes.Count); bigLoops.Add(bigLoop); } } }