public void Read_MultiblockData_File(string filename) { vtkXMLMultiBlockDataReader reader = new vtkXMLMultiBlockDataReader(); reader.SetFileName(filename); reader.Update(); vtkMultiBlockDataSet data = (vtkMultiBlockDataSet)reader.GetOutput(); vtkInformation vtkInformation = data.GetMetaData(0); uint numBlocks = data.GetNumberOfBlocks(); if (numBlocks == 1) { vtkStructuredGrid structuredGrid = (vtkStructuredGrid)data.GetBlock(0); dimensions = structuredGrid.GetDimensions(); vtkPoints points = structuredGrid.GetPoints(); int numPoints = (int)structuredGrid.GetNumberOfPoints(); List <Vector3d> point_dat = new List <Vector3d>(); if (numPoints != 0) { // Read Point Data double[] pt; for (int i = 0; i < numPoints; i++) { pt = points.GetPoint(i); point_dat.Add(new Vector3d((float)pt[0], (float)pt[1], (float)pt[2])); } if (this.vertex_data.ContainsKey("vertices")) { this.vertex_data["vertices"] = point_dat; } else { this.vertex_data.Add("vertices", point_dat); } Console.WriteLine("All points read in correctly!"); } vtkPointData scalarValues = (vtkPointData)data.GetBlock(0).GetAttributes(0); // Load point attributes this.Load_Point_Attributes(scalarValues); } }
public void WriteVTM(string filePath, List <Vector3d> point_data, List <Vector4> tetrapoints, Dictionary <String, vtkDataArray> scalar_dataArray, List <String> arrayNames, int numberOfPoints, int numberOfTetraPoints) { vtkPoints points = vtkPoints.New(); for (int i = 0; i < numberOfPoints; i++) { points.InsertNextPoint(point_data[i].X, point_data[i].Y, point_data[i].Z); } vtkMultiBlockDataSet multiBlockDataSet = vtkMultiBlockDataSet.New(); double countBlocks = Math.Ceiling((double)((1.0 * numberOfTetraPoints) / 1000000)); multiBlockDataSet.SetNumberOfBlocks((uint)1); for (int j = 0; j < 1; j++) { vtkUnstructuredGrid unstructuredGrid = vtkUnstructuredGrid.New(); vtkCellArray cellArrayOne = vtkCellArray.New(); int countTetras = 0; int startTetras = j * 1000000; if (numberOfTetraPoints < (j * 1000000) + 1000000) { countTetras = numberOfTetraPoints; } else { countTetras = (j * 1000000) + 1000000; } for (int i = startTetras; i < tetrapoints.Count(); i++) { vtkTetra tetra = vtkTetra.New(); tetra.GetPointIds().SetId(0, (long)tetrapoints[i][0]); tetra.GetPointIds().SetId(1, (long)tetrapoints[i][1]); tetra.GetPointIds().SetId(2, (long)tetrapoints[i][2]); tetra.GetPointIds().SetId(3, (long)tetrapoints[i][3]); cellArrayOne.InsertNextCell(tetra); } //for (int i = 0; i < tetrapoints2.Count(); i++) //{ // vtkTetra tetra = vtkTetra.New(); // tetra.GetPointIds().SetId(0, (long)tetrapoints2[i][0]); // tetra.GetPointIds().SetId(1, (long)tetrapoints2[i][1]); // tetra.GetPointIds().SetId(2, (long)tetrapoints2[i][2]); // tetra.GetPointIds().SetId(3, (long)tetrapoints2[i][3]); // cellArrayOne.InsertNextCell(tetra); //} unstructuredGrid.SetPoints(points); const int VTK_TETRA = 10; unstructuredGrid.SetCells(VTK_TETRA, cellArrayOne); int numberOfScalarData = scalar_dataArray.Count(); for (int i = 0; i < numberOfScalarData; i++) { scalar_dataArray.TryGetValue(arrayNames[i], out vtkDataArray scalars); unstructuredGrid.GetPointData().AddArray(scalars); } multiBlockDataSet.SetBlock((uint)j, unstructuredGrid); } // add file ending if it is not existent string suffix = (".vtm"); if (!(filePath.EndsWith(suffix))) { filePath += suffix; } // Write file vtkXMLMultiBlockDataWriter writer = vtkXMLMultiBlockDataWriter.New(); writer.SetFileName(filePath); writer.SetInput(multiBlockDataSet); writer.Write(); // Read and display file for verification that it was written correctly vtkXMLMultiBlockDataReader reader = vtkXMLMultiBlockDataReader.New(); if (reader.CanReadFile(filePath) == 0) { //MessageBox.Show("Cannot read file \"" + filePath + "\"", "Error", MessageBoxButtons.OK); return; } Console.WriteLine("VTU file was writen and is saved at {0}", filePath); }