Exemplo n.º 1
0
        public Element(IElementSet set, int nElement)
        {
            Identity = new Identity(set.GetElementId(nElement));

            int nV = set.GetVertexCount(nElement);
            int nF = set.GetFaceCount(nElement);

            X = new double[nV];
            Y = new double[nV];

            if (set.HasZ)
                Z = new double[nV];
            if (set.HasM)
                M = new double[nV];

            for (int n = 0; n < nV; ++n)
            {
                X[n] = set.GetVertexXCoordinate(nElement, n);
                Y[n] = set.GetVertexYCoordinate(nElement, n);

                if (set.HasZ)
                    Z[n] = set.GetVertexZCoordinate(nElement, n);
                if (set.HasM)
                    M[n] = set.GetVertexMCoordinate(nElement, n);
            }

            if (nF > 0)
            {
                Faces = new int[nF][];

                for (int n = 0; n < nF; ++n)
                    Faces[n] = set.GetFaceVertexIndices(nElement, n);
            }
        }
        public override void UpdateGeometry(IElementSet elementSetEdits)
        {
            Contract.Requires(UpdateGeometryAvailable(elementSetEdits), "updateGeometryAvailable(elementSetEdits)");

            base.UpdateGeometry(elementSetEdits);

            X = new double[elementSetEdits.ElementCount];
            Y = new double[elementSetEdits.ElementCount];

            Z = elementSetEdits.HasZ ? new double[elementSetEdits.ElementCount] : null;
            M = elementSetEdits.HasM ? new double[elementSetEdits.ElementCount] : null;

            int nVertex = 0;

            for (int nElement = 0; nElement < elementSetEdits.ElementCount; ++nElement)
            {
                X[nElement] = elementSetEdits.GetVertexXCoordinate(nElement, nVertex);
                Y[nElement] = elementSetEdits.GetVertexYCoordinate(nElement, nVertex);

                if (HasZ)
                    Z[nElement] = elementSetEdits.GetVertexZCoordinate(nElement, nVertex);
                if (HasM)
                    M[nElement] = elementSetEdits.GetVertexMCoordinate(nElement, nVertex);
            }
        }
        public override void UpdateGeometry(IElementSet elementSet)
        {
            Contract.Requires(UpdateGeometryAvailable(elementSet), "updateGeometryAvailable(elementSet)");

            base.UpdateGeometry(elementSet);

            var es = elementSet as ElementSetVerticesNonUnique;

            if (es != null)
            {
                X = es.X.Select(a => a.ToArray()).ToArray();
                Y = es.Y.Select(a => a.ToArray()).ToArray();
                Z = es.Z == null ? null : es.Z.Select(a => a.ToArray()).ToArray();
                M = es.M == null ? null : es.M.Select(a => a.ToArray()).ToArray();

                return;
            }

            X = new double[elementSet.ElementCount][];
            Y = new double[elementSet.ElementCount][];
            Z = HasZ ? new double[elementSet.ElementCount][] : null;
            M = HasM ? new double[elementSet.ElementCount][] : null;

            for (int nElement = 0; nElement < elementSet.ElementCount; ++nElement)
            {
                var nVertexLength = elementSet.GetVertexCount(nElement);

                X[nElement] = new double[nVertexLength];
                Y[nElement] = new double[nVertexLength];

                if (HasZ)
                    Z[nElement] = new double[nVertexLength];

                if (HasM)
                    M[nElement] = new double[nVertexLength];

                var vertexIndexs = Enumerable.Range(0, nVertexLength).ToArray();

                foreach (var nVertex in vertexIndexs)
                {
                    X[nElement][nVertex] = elementSet.GetVertexXCoordinate(nElement, nVertex);
                    Y[nElement][nVertex] = elementSet.GetVertexYCoordinate(nElement, nVertex);

                    if (HasZ)
                        Z[nElement][nVertex] = elementSet.GetVertexZCoordinate(nElement, nVertex);
                    if (HasM)
                        M[nElement][nVertex] = elementSet.GetVertexMCoordinate(nElement, nVertex);
                }
            }
        }