Exemple #1
0
        /// <summary>
        /// Read the mesh from the provided mesh file
        /// </summary>
        public static MeshFile ReadMesh(string filename)
        {
            if (!File.Exists(filename))
            {
                throw new FileNotFoundException("File not found", filename);
            }
            var file = new MeshFile();

            file.Read(filename);
            return(file);
        }
Exemple #2
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()));
 }
Exemple #3
0
        /// <summary>
        /// Convert a <see cref="MeshData"/> class into a <see cref="MeshFile"/> class.
        /// </summary>
        public static MeshFile ToMeshFile(this MeshData meshData)
        {
            int numberOfNodes = meshData.Nodes.Count;

            int[]    nodeId = new int[numberOfNodes];
            double[] x      = new double[numberOfNodes];
            double[] y      = new double[numberOfNodes];
            double[] z      = new double[numberOfNodes];
            int[]    code   = new int[numberOfNodes];

            for (int i = 0; i < numberOfNodes; i++)
            {
                MeshNode node = meshData.Nodes[i];
                nodeId[i] = node.Id;
                x[i]      = node.X;
                y[i]      = node.Y;
                z[i]      = node.Z;
                code[i]   = node.Code;
            }

            int numberOfElements = meshData.Elements.Count;

            int[]   elmtId    = new int[numberOfElements];
            int[][] elmtTable = new int[numberOfElements][];
            for (int i = 0; i < numberOfElements; i++)
            {
                MeshElement elmt = meshData.Elements[i];
                elmtId[i] = elmt.Id;
                int[] elmtNodes = new int[elmt.Nodes.Count];
                elmtTable[i] = elmtNodes;
                for (int j = 0; j < elmt.Nodes.Count; j++)
                {
                    elmtNodes[j] = elmt.Nodes[j].Index + 1;
                }
            }

            MeshFileBuilder builder = new MeshFileBuilder();

            builder.SetProjection(meshData.Projection);
            builder.SetZUnit(meshData.ZUnit);
            builder.SetNodeIds(nodeId);
            builder.SetNodes(x, y, z, code);
            builder.SetElementIds(elmtId);
            builder.SetElements(elmtTable);

            MeshFile meshFile = builder.CreateMesh();

            return(meshFile);
        }
Exemple #4
0
        internal static MeshFile Create(MeshUnit zUnit, string wktString, int[] nodeIds, double[] x, double[] y, double[] z, int[] nodeCode, int[] elmtIds, int[] elmtTypes, int[][] connectivity)
        {
            MeshFile res = new MeshFile();

            res._zUnit        = zUnit;
            res._wktString    = wktString;
            res._nodeIds      = nodeIds;
            res._x            = x;
            res._y            = y;
            res._z            = z;
            res._code         = nodeCode;
            res._elementIds   = elmtIds;
            res._elementType  = elmtTypes;
            res._connectivity = connectivity;
            for (int i = 0; i < connectivity.Length; i++)
            {
                if (connectivity[i].Length == 4)
                {
                    res._hasQuads = true;
                    break;
                }
            }
            return(res);
        }
Exemple #5
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);
        }
Exemple #6
0
 /// <summary>
 /// Convert a <see cref="MeshFile"/> class into a <see cref="SMeshData"/> class.
 /// </summary>
 public static SMeshData ToSMeshData(this MeshFile file)
 {
     return(new SMeshData(file.Projection, file.NodeIds, file.X, file.Y, file.Z, file.Code, file.ElementIds, file.ElementType, file.ElementTable.ToZeroBased(), file.ZUnit));
 }
 /// <summary>
 /// Convert a <see cref="MeshFile"/> class into a <see cref="MeshData"/> class.
 /// </summary>
 public static MeshData ToMeshData(this MeshFile file)
 {
     return(MeshData.CreateMesh(file.Projection, file.NodeIds, file.X, file.Y, file.Z, file.Code, file.ElementIds, file.ElementType, file.ElementTable, file.ZUnit));
 }