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); }
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); }