示例#1
0
 /// <summary>
 /// Convert a <see cref="SMeshData"/> class into a <see cref="MeshFile"/> class.
 /// </summary>
 public static MeshFile ToMeshFile(this SMeshData meshData)
 {
     return(MeshFile.Create(
                meshData.ZUnit,
                meshData.Projection,
                meshData.NodeIds,
                meshData.X,
                meshData.Y, meshData.Z,
                meshData.Code,
                meshData.ElementIds,
                meshData.ElementType,
                meshData.ElementTable.ToOneBased()));
 }
示例#2
0
        /// <summary>
        /// Create and return a new <see cref="MeshFile"/> object
        /// </summary>
        public MeshFile CreateMesh()
        {
            Validate(true);

            // Creating default eumQuantity in meters
            _zUnit = MeshUnit.Meter;

            // Creating default node id's, if empty
            if (_nodeIds == null)
            {
                // Setting node ids 1,2,3,...
                _nodeIds = new int[_x.Length];
                for (int i = 0; i < _x.Length; i++)
                {
                    _nodeIds[i] = i + 1;
                }
            }
            // Creating default element id's, if empty
            if (_elementIds == null)
            {
                // Setting element ids 1,2,3,...
                _elementIds = new int[_connectivity.Length];
                for (int i = 0; i < _connectivity.Length; i++)
                {
                    _elementIds[i] = i + 1;
                }
            }

            // Creating additional element information
            int[] elementType   = new int[_connectivity.Length];
            int[] nodesPerElmt  = new int[_connectivity.Length];
            int   nodeElmtCount = 0; // total number of nodes listed in the connectivity table

            for (int i = 0; i < elementType.Length; i++)
            {
                int   elmtTypeNumber;
                int[] elmt = _connectivity[i];
                switch (elmt.Length)
                {
                case 3:
                    elmtTypeNumber = 21;
                    break;

                case 4:
                    elmtTypeNumber = 25;
                    break;

                case 6:
                    elmtTypeNumber = 32;
                    break;

                case 8:
                    elmtTypeNumber = 33;
                    break;

                default:
                    // this should have been caught in the validate phase, but just in case:
                    throw new Exception("Element with invalid number of nodes encountered");
                }
                elementType[i]  = elmtTypeNumber;
                nodesPerElmt[i] = elmt.Length;
                nodeElmtCount  += elmt.Length;
            }

            int[] connectivityArray = new int[nodeElmtCount];
            int   k = 0;

            for (int i = 0; i < elementType.Length; i++)
            {
                int[] elmt = _connectivity[i];
                for (int j = 0; j < elmt.Length; j++)
                {
                    connectivityArray[k++] = elmt[j];
                }
            }

            MeshFile res = MeshFile.Create(_zUnit, _projection, _nodeIds, _x, _y, _z, _code, _elementIds, elementType, _connectivity);

            return(res);
        }