private List <double> readUnknownTuplesizeNameSpecificCellDataArray(vtkUnstructuredGrid unstructuredGrid, string arrayName)
        {
            VTKgetNameSpecificVTKDataArray vtkSpecificDataArray = new VTKgetNameSpecificVTKDataArray();
            var cellDataArray = vtkSpecificDataArray.getNameSpecificDataArrayCellData(unstructuredGrid, arrayName);
            var dataArray     = new List <double>();
            var numbComp      = cellDataArray.GetNumberOfComponents();

            for (int j = 0; j < cellDataArray.GetNumberOfTuples(); j++)
            {
                double[] managedArray = new double[numbComp];
                IntPtr   pointerArray = Marshal.AllocCoTaskMem(sizeof(double) * managedArray.Length);
                cellDataArray.GetTuple(j, pointerArray);
                Marshal.Copy(pointerArray, managedArray, 0, numbComp);
                //Did not work to use vktFloatArray, instead can use this:
                //for (int k = 0; k<numbComp; k++)
                //		cellDataArray.GetComponent(j, k);

                dataArray.AddRange(managedArray);

                if (arrayName == "AllForcesBeam")                 //Modelo 6 iterates from 0-5 in all cell_vertexes to find the max and min forces (X,Y,Z,Mx,My,Mz)
                {
                    calculateExtremeForces(managedArray, 6, CalculateMinForcesBeam, CalculateMaxForcesBeam);
                }

                if (arrayName == "AllForcesShell")                 //Modelo 8 iterates from 0-7 in all cell_vertexes to find the max and min value (Nx,Ny,Nz,Mx,My,Mz,Vzx,Vzy)
                {
                    calculateExtremeForces(managedArray, 8, CalculateMinForcesShell, CalculateMaxForcesShell);
                }
            }
            return(dataArray);
        }
示例#2
0
        public bool hasCorrectIDMapping(string idType, int[] idList)
        {
            VTKgetNameSpecificVTKDataArray vtkSpecificDataArray = new VTKgetNameSpecificVTKDataArray();
            vtkDataArray idData = null;

            if (idType == "BeamIDs" || idType == "ShellIDs")
            {
                idData = vtkSpecificDataArray.getNameSpecificDataArrayFieldData(m_UnstructuredGrid, idType);
            }
            else if (idType == "NodeIDs")
            {
                idData = vtkSpecificDataArray.getNameSpecificDataArrayPointData(m_UnstructuredGrid, idType);
            }

            if (idData == null || idList == null)
            {
                return(false);
            }

            var hasCorrectIDMapping = true;

            int[] dataArray = new int[idData.GetNumberOfTuples()];
            if (idData.GetNumberOfTuples() != idList.Length)
            {
                return(false);
            }

            for (int i = 0; i < idData.GetNumberOfTuples(); i++)
            {
                if (idList[i] != (idData.GetTuple1(i) - 1))
                {
                    hasCorrectIDMapping = false;
                }

                dataArray[i] = (int)(idData.GetTuple1(i) - 1);
            }
            if (!hasCorrectIDMapping && idType == "BeamIDs")
            {
                BeamIDsNonContiniusAcending = dataArray;
            }
            else if (!hasCorrectIDMapping && idType == "ShellIDs")
            {
                ShellIDsNonContiniusAcending = dataArray;
            }
            else if (!hasCorrectIDMapping && idType == "NodeIDs")
            {
                NodeIDsNonContiniusAcending = dataArray;
            }

            return(hasCorrectIDMapping);
        }
        private double[,] readUnknownTuplesizeNameSpecificFieldDataArray(vtkUnstructuredGrid unstructuredGrid, string arrayName, bool hasCorrectIDMapping, int[] correctedElID)
        {
            VTKgetNameSpecificVTKDataArray vtkSpecificDataArray = new VTKgetNameSpecificVTKDataArray();
            var fieldDataArray = vtkSpecificDataArray.getNameSpecificDataArrayFieldData(unstructuredGrid, arrayName);

            if (fieldDataArray == null)
            {
                return(new double[0, 0]);
            }

            var numbComp  = fieldDataArray.GetNumberOfComponents();
            var dataArray = new double[fieldDataArray.GetNumberOfTuples(), numbComp];

            for (int j = 0; j < fieldDataArray.GetNumberOfTuples(); j++)
            {
                double[] managedArray = new double[numbComp];
                IntPtr   pointerArray = Marshal.AllocCoTaskMem(sizeof(double) * managedArray.Length);

                if (!hasCorrectIDMapping)
                {
                    fieldDataArray.GetTuple(correctedElID[j], pointerArray);
                }
                else
                {
                    fieldDataArray.GetTuple(j, pointerArray);
                }

                Marshal.Copy(pointerArray, managedArray, 0, numbComp);
                //Did not work to use vktFloatArray, instead can use this, gives same decimalError:
                //for (int k = 0; k<numbComp; k++)
                //		cellData.GetArray(i).GetComponent(j, k);

                for (int k = 0; k < 12; k++)
                {
                    dataArray[j, k] = managedArray[k];
                }

                if (arrayName == "BeamStressRes") //Modelo 6 iterates from 0-5 in all cell_vertexes to find the max and min forces (X,Y,Z,Mx,My,Mz)
                {
                    calculateExtremeForces(managedArray, 6, CalculateMinForcesBeam, CalculateMaxForcesBeam);
                }

                if (arrayName == "AllForcesShell") //Modelo 8 iterates from 0-7 in all cell_vertexes to find the max and min value (Nx,Ny,Nz,Mx,My,Mz,Vzx,Vzy)
                {
                    calculateExtremeForces(managedArray, 8, CalculateMinForcesShell, CalculateMaxForcesShell);
                }
            }
            return(dataArray);
        }
        public double[][] readTransformation(vtkUnstructuredGrid unstructuredGrid, string arrayName)
        {
            VTKgetNameSpecificVTKDataArray vtkSpecificDataArray = new VTKgetNameSpecificVTKDataArray();

            double[][] TransformationLists = null;
            var        cellDataArray       = vtkSpecificDataArray.getNameSpecificDataArrayCellData(unstructuredGrid, arrayName);
            var        numbComp            = cellDataArray.GetNumberOfComponents();
            var        numbTuples          = cellDataArray.GetNumberOfTuples();

            TransformationLists = new double[numbTuples][];
            for (int j = 0; j < numbTuples; j++)
            {
                double[] managedArray = new double[numbComp];
                IntPtr   pointerArray = Marshal.AllocCoTaskMem(sizeof(double) * managedArray.Length);
                cellDataArray.GetTuple(j, pointerArray);
                Marshal.Copy(pointerArray, managedArray, 0, numbComp);

                TransformationLists[j] = managedArray;
            }
            return(TransformationLists);
        }
        private double[,] readTuple3NameSpecificPointDataArray(vtkUnstructuredGrid unstructuredGrid, string dataArrayName, bool readExtremeForces, bool hasCorrectIDMapping, int[] correctedNodeID)
        {
            VTKgetNameSpecificVTKDataArray vtkSpecificDataArray = new VTKgetNameSpecificVTKDataArray();
            var pointDataArray = vtkSpecificDataArray.getNameSpecificDataArrayPointData(unstructuredGrid, dataArrayName);

            double[,] dataArray = new double[, ] {
            };
            ExtremeDisplacement = new double[3];

            dataArray = new double[pointDataArray.GetNumberOfTuples(), 3];
            for (int j = 0; j < pointDataArray.GetNumberOfTuples(); j++)
            {
                double[] tuple;
                if (!hasCorrectIDMapping)
                {
                    tuple = pointDataArray.GetTuple3(correctedNodeID[j]);
                }
                else
                {
                    tuple = pointDataArray.GetTuple3(j);
                }

                dataArray[j, 0] = tuple[0]; dataArray[j, 1] = tuple[1]; dataArray[j, 2] = tuple[2];
                if (!readExtremeForces)
                {
                    continue;
                }

                for (int k = 0; k < 3; k++)
                {
                    if (Math.Abs(tuple[k]) > Math.Abs(ExtremeDisplacement[k]))
                    {
                        ExtremeDisplacement[k] = tuple[k];
                    }
                }
            }
            return(dataArray);
        }