Пример #1
0
        public int[] GetVertexAdjacentVerticesSorted(int vertexKey)
        {
            int[] nKeys = iM.Topology.GetVertexAdjacentVertices(vertexKey);

            if (nKeys.Length > 1)
            {
                IPoint3D[] refPt = new IPoint3D[2];
                refPt[0] = iM.GetVertexWithKey(nKeys[0]).Position;
                refPt[1] = iM.GetVertexWithKey(nKeys[1]).Position;

                IVector3D refVec = refPt[1] - refPt[0];

                List <int> results = nKeys.Skip(1).OrderBy(nK =>
                                                           IVector3D.AngleBetween(refVec, iM.GetVertexWithKey(nK).Position - refPt[0])
                                                           ).ToList();

                results.Insert(0, nKeys[0]);
                nKeys = results.ToArray();
            }
            return(nKeys);
        }
Пример #2
0
        public int[] GetVertexIncidentElementsSorted(int vertexKey)
        {
            int[] nKeys = iM.Topology.GetVertexIncidentElements(vertexKey);

            if (nKeys.Length > 1)
            {
                IPoint3D[] refPt = new IPoint3D[2];
                refPt[0] = ComputeAveragePosition(iM.GetElementWithKey(nKeys[0]).Vertices);
                refPt[1] = ComputeAveragePosition(iM.GetElementWithKey(nKeys[1]).Vertices);

                IVector3D refVec = refPt[1] - refPt[0];

                List <int> results = nKeys.Skip(1).OrderBy(nK =>
                                                           IVector3D.AngleBetween(refVec, ComputeAveragePosition(iM.GetElementWithKey(nK).Vertices) - refPt[0])
                                                           ).ToList();

                results.Insert(0, nKeys[0]);
                nKeys = results.ToArray();
            }
            return(nKeys);
        }