Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        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 }
            });
        }