/// <summary> /// 将Mesh转化为PolySurface /// </summary> /// <param name="mesh">网格</param> /// <returns>转化后的PolySurface</returns> public static PolySurface ConvertToPolySurface(Mesh mesh) { List <Surface> surfaces = new List <Surface>(); Point[] vertexs = mesh.VertexPositions; IndexGroup[] indexGroup = mesh.FaceIndices; foreach (var item in indexGroup) { if (item.Count == 3) { Point pt1 = vertexs[item.A]; Point pt2 = vertexs[item.B]; Point pt3 = vertexs[item.C]; Surface surface = Surface.ByPerimeterPoints(new Point[] { pt1, pt2, pt3 }); surfaces.Add(surface); pt1.Dispose(); pt2.Dispose(); pt3.Dispose(); surface.Dispose(); } else { Point pt1 = vertexs[item.A]; Point pt2 = vertexs[item.B]; Point pt3 = vertexs[item.C]; Point pt4 = vertexs[item.D]; Surface surface = Surface.ByPerimeterPoints(new Point[] { pt1, pt2, pt3, pt4 }); surfaces.Add(surface); pt1.Dispose(); pt2.Dispose(); pt3.Dispose(); surface.Dispose(); } } return(PolySurface.ByJoinedSurfaces(surfaces)); }
public static Dictionary <string, object> SortAlongCurve(List <Point> points, Curve curve, bool reverse = false) { List <Point> closePoints = new List <Point>(); List <double> closeParam = new List <double>(); List <double> otherParam = new List <double>(); List <int> indices = new List <int>(); int n = 0; foreach (var pt in points) { Point point = curve.ClosestPointTo(pt); double param = curve.ParameterAtPoint(point); closePoints.Add(point); closeParam.Add(param); otherParam.Add(param); indices.Add(n); n++; point.Dispose(); } Point[] outPoints = points.ToArray(); double[] keys = closeParam.ToArray(); double[] keys2 = otherParam.ToArray(); int[] outIndices = indices.ToArray(); Array.Sort <double, Point>(keys, outPoints); Array.Sort <double, int>(keys2, outIndices); if (reverse) { Array.Reverse(outPoints); Array.Reverse(outIndices); } return(new Dictionary <string, object> { { "Points", outPoints }, { "Indices", outIndices } }); }