/// <summary>
/// 线排序,根据参数二进行排序
/// </summary>
/// <param name="lines">线集合</param>
/// <param name="dir">排序方向</param>
/// <returns></returns>
public static List<Line> LineOrderby(List<Line> lines, XYZ dir)
{
if (lines == null || lines.Count == 0)
return lines;
var source = lines.ToDictionary(k => k, v => ((v.GetEndPoint(0) - v.GetEndPoint(1)).DotProduct(dir) > 0 ? v.GetEndPoint(0) : v.GetEndPoint(1)).DotProduct(dir));
var result = source.OrderBy(r => r.Value).Select(r => r.Key).ToList();
return result;
}