Hi,
I have a list of edges defined as such:
var finaledgeList = [[Vector2(-12, -12), Vector2(-14, -12)], [Vector2(-12, -10), Vector2(-12, -12)], [Vector2(-14, -12), Vector2(-14, -10)], [Vector2(-14, -10), Vector2(-16, -10)], [Vector2(-16, -8), Vector2(-14, -8)], [Vector2(-16, -10), Vector2(-16, -8)], [Vector2(-10, -10), Vector2(-12, -10)], [Vector2(-10, -8), Vector2(-10, -10)], [Vector2(-12, -8), Vector2(-10, -8)], [Vector2(-12, -6), Vector2(-12, -8)], [Vector2(-14, -6), Vector2(-12, -6)], [Vector2(-14, -8), Vector2(-14, -6)]]
Each edge is define as an array of 2 Vector2. Normally where one edge finishes another starts. But some of them can be inverted.
I would like to sort all point such that it forms a continuous line.
I have tried by using loops and checking each element as such:
var flattenededgeList = [finaledgeList[0][0], finaledgeList.pop_front()[1]]
while finaledgeList.size() > 0:
for edge in finaledgeList:
if edge[0] == flattenededgeList[-1]:
flattenededgeList.append(edge[1])
finaledgeList.erase(edge)
elif edge[1] == flattenededgeList[-1]:
flattenededgeList.append(edge[0])
finaledgeList.erase(edge)
elif edge[1] == flattenededgeList[0]:
flattenededgeList.push_front(edge[0])
finaledgeList.erase(edge)
elif edge[0] == flattenededgeList[0]:
flattenededgeList.push_front(edge[1])
finaledgeList.erase(edge)
When a point is found that can match the end of the current line then that edge is added and removed from : finaledgeList
.
But this doesn't seem to work well on larger list of arrays and is probably quite slow. I was wondering if anybody new of a better solution ?
Thanks a lot,