static void Main(string[] args)
      {
          try
          {
              // Setup typedefs
              itkPixelType pixel = itkPixelType.D;
              itkDimension dim = new itkDimension(3);
              itkMeshTraits traits = itkMeshTraits.Static();

              // Create a native mesh (ie. a mesh residing "outside" of ITK)
              List<double> points = new List<double>();
              points.Add(0.0); points.Add(0.0); points.Add(0.0);  // Point 0
              points.Add(10.0); points.Add(0.0); points.Add(0.0); // Point 1
              points.Add(5.0); points.Add(10.0); points.Add(0.0); // Point 2
              points.Add(5.0); points.Add(5.0); points.Add(10.0); // Point 3
              List<int> cells = new List<int>();
              cells.Add(0); cells.Add(1); cells.Add(2); // Triangle 0
              cells.Add(0); cells.Add(1); cells.Add(3); // Triangle 1
              cells.Add(1); cells.Add(2); cells.Add(3); // Triangle 2
              cells.Add(2); cells.Add(3); cells.Add(0); // Triangle 3
              
              // Pin managed array to mimic unmanaged memory
              GCHandle handlePoints = GCHandle.Alloc(points.ToArray(), GCHandleType.Pinned);
              GCHandle handleCells = GCHandle.Alloc(cells.ToArray(), GCHandleType.Pinned);

              // Import into ITK mesh
              // NOTE: This will duplicate the points and cells in unmanaged memory
              itkMesh mesh = itkMesh.New(pixel, dim, traits);
              mesh.SetPointsAsArray(
                  (uint)(points.Count / dim.Dimension),
                  handlePoints.AddrOfPinnedObject()
              );
              mesh.SetCellIndicesAsArray(
                  (uint)(cells.Count / 3),
                  itkCellTypeEnum.TriangleCellType,
                  handleCells.AddrOfPinnedObject()
              );

              // Export from ITK mesh to managed values
              itkPoint[] points2 = mesh.GetPointsAsArray();
              itkCell[] cells2 = mesh.GetCellsAsArray();
          }
          catch (Exception ex)
          {
              Console.WriteLine(ex.ToString());
          }
      }
    static void Main(string[] args)
    {
        try
        {
            // Setup typedefs
            itkPixelType pixel = itkPixelType.D;
            itkDimension dim = new itkDimension(3);
            itkMeshTraits traits = itkMeshTraits.Static();

            // Create a mesh
            itkMesh mesh1 = itkMesh.New(pixel, dim, traits);
            itkRegularSphereMeshSource source = itkRegularSphereMeshSource.New(mesh1);
            source.Center = new itkPoint(32.0, 32.0, 32.0);
            source.Scale = new itkVector(32.0, 32.0, 32.0);
            source.Resolution = 5;
            source.Update();
            source.GetOutput(mesh1);

            // Write mesh
            String path = args[0];
            Console.WriteLine("Writing mesh: " + path);
            itkVTKPolyDataWriter writer = itkVTKPolyDataWriter.New(mesh1);
            writer.SetInput(mesh1);
            writer.FileName = path;
            writer.Write();

            // Read mesh
            itkMesh mesh2 = itkMesh.New(pixel, dim, traits);
            Console.WriteLine("Reading mesh: " + path);
            itkVTKPolyDataReader reader = itkVTKPolyDataReader.New(mesh1);
            reader.FileName = path;
            reader.Update();
            reader.GetOutput(mesh2);
            Console.WriteLine(mesh2);

            // Cleanup
            mesh1.Dispose();
            mesh2.Dispose();
            source.Dispose();
            writer.Dispose();
            reader.Dispose();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    } // end main
Esempio n. 3
0
    static void Main(string[] args)
    {
        try
        {
            // Setup typedefs
            itkPixelType pixel = itkPixelType.D;
            itkDimension dim = new itkDimension(3);
            itkMeshTraits traits = itkMeshTraits.Static();

            // Create mesh
            itkMesh mesh = itkMesh.New(pixel, dim, traits);
            itkRegularSphereMeshSource source = 
                itkRegularSphereMeshSource.New(mesh);
            source.Center = new itkPoint(32.0, 32.0, 32.0);
            source.Scale = new itkVector(32.0, 32.0, 32.0);
            source.Resolution = 4;
            source.Update();
            source.GetOutput(mesh);

            // Convert mesh to image
            itkImageBase output = itkImage.New(itkPixelType.UC, dim.Dimension);
            itkTriangleMeshToBinaryImageFilter filter = 
                itkTriangleMeshToBinaryImageFilter.New(mesh, output);
            filter.SetInput(mesh);
            filter.Tolerance = 0.001;
            filter.Size = new itkSize(100, 100, 100);
            filter.Update();
            filter.GetOutput(output);
            output.Write(args[0]);

            // Cleanup
            filter.Dispose();
            output.Dispose();
            mesh.Dispose();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    } // end main
      static void Main(string[] args)
      {
          try
          {
              // Setup typedefs
              itkPixelType pixel = itkPixelType.D;
              itkDimension dim = new itkDimension(3);
              itkMeshTraits traits = itkMeshTraits.Static();

              // Compute gradient
              Console.WriteLine("Reading gradient: " + args[0]);
              itkImageBase gradient = itkImage_CVD33.New();
              gradient.Read(args[0]);

              // Create initial mesh
              Console.WriteLine("Creating initial mesh");
              itkMesh meshIn = itkMesh.New(pixel, dim, traits);
              itkRegularSphereMeshSource source = itkRegularSphereMeshSource.New(meshIn);
              source.Center = new itkPoint(20.0, 20.0, 20.0);
              source.Scale = new itkVector(5.0, 5.0, 5.0);
              source.Resolution = 4;
              source.Update();
              source.GetOutput(meshIn);
              meshIn.DisconnectPipeline();

              // Convert triangle mesh to simplex mesh
              Console.WriteLine("Converting triangle mesh to simplex mesh");
              itkSimplexMesh simplexIn = itkSimplexMesh.New(pixel, dim, traits);
              itkTriangleMeshToSimplexMeshFilter convertToSimplex =
                  itkTriangleMeshToSimplexMeshFilter.New(meshIn, simplexIn);
              convertToSimplex.SetInput(meshIn);
              convertToSimplex.Update();
              convertToSimplex.GetOutput(simplexIn);
              simplexIn.DisconnectPipeline();

              // Deform the simplex mesh
              Console.WriteLine("Deforming simplex mesh");
              itkSimplexMesh simplexOut = itkSimplexMesh.New(pixel, dim, traits);
              itkDeformableSimplexMesh3DBalloonForceFilter deform =
                  itkDeformableSimplexMesh3DBalloonForceFilter.New(simplexIn, simplexOut);
              deform.Alpha = 0.8;   // Internal force scaling
              deform.Beta = 0.8;    // External force scaling
              deform.Gamma = 0.1;   // Reference metric scaling
              deform.Rigidity = 3;  // Mesh smoothness (0=high curvature, 9=smooth)
              deform.Kappa = 0.1;   // Internal balloon force scaling
              deform.Iterations = 200;
              deform.SetGradient(gradient);
              deform.SetInput(simplexIn);
              deform.Progress += new itkProgressHandler(FilterProgress);
              deform.Update();
              deform.GetOutput(simplexOut);
              simplexOut.DisconnectPipeline();
              Console.WriteLine();

              // Convert simplex mesh to triangle mesh
              Console.WriteLine("Converting simplex mesh to triangle mesh");
              itkMesh meshOut = itkMesh.New(pixel, dim, traits);
              itkSimplexMeshToTriangleMeshFilter convertToTriangle =
                  itkSimplexMeshToTriangleMeshFilter.New(simplexOut, meshOut);
              convertToTriangle.SetInput(simplexOut);
              convertToTriangle.Update();
              convertToTriangle.GetOutput(meshOut);
              meshOut.DisconnectPipeline();

              // Convert mesh to image
              Console.WriteLine("Converting mesh to image: " + Path.GetFileName(args[1]));
              itkImageBase output = itkImage_UC3.New();
              itkTriangleMeshToBinaryImageFilter filter =
                  itkTriangleMeshToBinaryImageFilter.New(meshOut, output);
              filter.SetInput(meshOut);
              filter.Tolerance = 0.001;
              filter.Size = gradient.Size;
              filter.Spacing = gradient.Spacing;
              filter.Origin = gradient.Origin;
              filter.GetOutput(output);
              filter.Update();
              output.Write(args[1]);
          }
          catch (Exception ex)
          {
              Console.WriteLine(ex.ToString());
          }
      }