Пример #1
0
        public void Clear()
        {
            UpdateBuffer  = new SimplexWrap <VERTEX> [Dimension];
            UpdateIndices = new int[Dimension];

            InputVertices  = null;
            CurrentVertex  = null;
            FurthestVertex = null;
            MaxDistance    = float.NegativeInfinity;

            ConvexSimplexs.Clear();
            AffectedFaceBuffer.Clear();
            TraverseStack.Clear();
            SingularVertices.Clear();
            ConeFaceBuffer.Clear();
            ObjectManager.Clear();
            UnprocessedFaces.Clear();
            EmptyBuffer.Clear();
            BeyondBuffer.Clear();

            for (int i = 0; i < CONNECTOR_TABLE_SIZE; i++)
            {
                ConnectorTable[i].Clear();
            }
        }
Пример #2
0
        /// <summary>
        /// Recursively traverse all the relevant faces.
        /// </summary>
        void TraverseAffectedFaces(int currentFace)
        {
            TraverseStack.Clear();
            TraverseStack.Push(currentFace);
            AffectedFaceFlags[currentFace] = true;

            while (TraverseStack.Count > 0)
            {
                var top = FacePool[TraverseStack.Pop()];
                for (int i = 0; i < Dimension; i++)
                {
                    var adjFace = top.AdjacentFaces[i];

                    if (!AffectedFaceFlags[adjFace] && MathHelper.GetVertexDistance(CurrentVertex, FacePool[adjFace]) >= PlaneDistanceTolerance)
                    {
                        AffectedFaceBuffer.Add(adjFace);
                        AffectedFaceFlags[adjFace] = true;
                        TraverseStack.Push(adjFace);
                    }
                }
            }
        }