コード例 #1
0
ファイル: ReadVTP.cs プロジェクト: Elke94/IndividualProject
        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);
            }
        }
コード例 #2
0
        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);
        }