public HighLevelEdge processSingleDirectionEdge(Edge.EdgeLabel eLabel, Vector3 direction, Corner source) {
			bool changed = true;
			Vertex sourceVertex = source.getVertex ();
			Vertex current = sourceVertex;
			List<Edge> usedEdges = new List<Edge> ();
			while (changed) {
				changed = false;
				foreach (Edge e in current.getEdges()) {
					if (e.hasParent()) {
						continue;
					}
					if (e.getLabel() != eLabel) {
						// If this isn't a correct type of edge, go to the next
						continue;
					}
					// Get our target
					Vertex target = e.getTo () == sourceVertex ? e.getFrom () : e.getTo ();
					// Calculate direction
					Vector3 newDirection = (target.getPoint () - current.getPoint ()).normalized;

					// If the direction isn't the same, we're done
					if (direction != newDirection) {
						continue;
					}

					usedEdges.Add (e);
					// Get the target label
					Vertex.VertexLabel targetLabel = target.getLabel ();
					if (targetLabel == Vertex.VertexLabel.cornerConcave ||
						targetLabel == Vertex.VertexLabel.cornerConvex ||
						targetLabel == Vertex.VertexLabel.cornerSaddle) {
						// Create HLE, this is the end of our HLE
						HighLevelEdge hle = new HighLevelEdge();
						hle.addEdgeRange (usedEdges);
						// Get target corner
						Corner c = target.getParent();
						// Set from and to of hle
						hle.setFrom (source);
						hle.setTo (c);

						// Add edges to the corners
						c.addEdge (hle);
						source.addEdge (hle);

						// Set all edges to processed
						foreach (Edge en in usedEdges) {
							en.setParent (hle);
						}
						return hle;
					} else {
						Debug.Log ("next edge in sequence!");
						current = target;
						changed = true;
					}
				}
			}
			// No valid HLE :(
			return null;
		}