Something like this should work for 2018
def outer_edges
sel = Sketchup.active_model.selection
edges = sel.grep(Sketchup::Edge)
edges.find_all { |edge| edge.faces.one? { |face| sel.include?(face) } }
end
def sort_points(edges)
last_edge = edges.pop
sorted = [last_edge]
for i in (0..(edges.count - 1)) do
last_edge = edges.find do |edge|
edge.start.position == last_edge.start.position ||
edge.start.position == last_edge.end.position ||
edge.end.position == last_edge.start.position ||
edge.end.position == last_edge.end.position
end
sorted.push(last_edge)
edges.delete(last_edge)
end
sorted.map { |e| [e.start.position, e.end.position] }.flatten.uniq(&:to_s)
end
sort_points(outer_edges)