Пример #1
0
        public void SetPosition(double[] position)
        {
            if (position == null)
            {
                return;
            }
            this.Position = position;

            vtkTransform transform = vtkTransform.New();

            transform.Translate(position[0], position[1], position[2]);

            SetUserTransform(transform: transform);

            transform.Dispose();
        }
Пример #2
0
 ///<summary>Deletes all static objects created</summary>
 public static void deleteAllVTKObjects()
 {
     //clean up vtk objects
     if (ren1 != null)
     {
         ren1.Dispose();
     }
     if (renWin != null)
     {
         renWin.Dispose();
     }
     if (iren != null)
     {
         iren.Dispose();
     }
     if (pl3d != null)
     {
         pl3d.Dispose();
     }
     if (plane != null)
     {
         plane.Dispose();
     }
     if (transP1 != null)
     {
         transP1.Dispose();
     }
     if (tpd1 != null)
     {
         tpd1.Dispose();
     }
     if (outTpd1 != null)
     {
         outTpd1.Dispose();
     }
     if (mapTpd1 != null)
     {
         mapTpd1.Dispose();
     }
     if (tpd1Actor != null)
     {
         tpd1Actor.Dispose();
     }
     if (transP2 != null)
     {
         transP2.Dispose();
     }
     if (tpd2 != null)
     {
         tpd2.Dispose();
     }
     if (outTpd2 != null)
     {
         outTpd2.Dispose();
     }
     if (mapTpd2 != null)
     {
         mapTpd2.Dispose();
     }
     if (tpd2Actor != null)
     {
         tpd2Actor.Dispose();
     }
     if (transP3 != null)
     {
         transP3.Dispose();
     }
     if (tpd3 != null)
     {
         tpd3.Dispose();
     }
     if (outTpd3 != null)
     {
         outTpd3.Dispose();
     }
     if (mapTpd3 != null)
     {
         mapTpd3.Dispose();
     }
     if (tpd3Actor != null)
     {
         tpd3Actor.Dispose();
     }
     if (appendF != null)
     {
         appendF.Dispose();
     }
     if (probe != null)
     {
         probe.Dispose();
     }
     if (contour != null)
     {
         contour.Dispose();
     }
     if (contourMapper != null)
     {
         contourMapper.Dispose();
     }
     if (planeActor != null)
     {
         planeActor.Dispose();
     }
     if (outline != null)
     {
         outline.Dispose();
     }
     if (outlineMapper != null)
     {
         outlineMapper.Dispose();
     }
     if (outlineActor != null)
     {
         outlineActor.Dispose();
     }
     if (cam1 != null)
     {
         cam1.Dispose();
     }
 }
Пример #3
0
        /// <summary>
        /// Rotates 3D vtk volume around x and y axes.
        /// </summary>
        /// <param name="input"></param>
        /// <param name="angle"></param>
        /// <param name="axis"></param>
        /// <param name="out_extent"></param>
        /// <returns></returns>
        public static vtkImageData rotate_sample(vtkImageData input, double angle, int axis, int out_extent = 0)
        {
            //get input data dimensions
            int[] dims = input.GetExtent();
            //Compute centers
            int[] centers = new int[] { (dims[1] + dims[0]) / 2, (dims[3] + dims[2]) / 2, (dims[5] + dims[4]) / 2 };

            //Set rotation axis
            int[] axes = new int[3];
            axes[axis] = 1;

            int[] new_dims    = new int[] { dims[0], dims[1], dims[2], dims[3], dims[4], dims[5] };
            int[] new_centers = new int[] { centers[0], centers[1], centers[2] };

            //Compute new sample dimensions
            if (axis == 0)
            {
                new_dims[3] = (int)(Math.Cos(Math.Abs(angle / 180) * Math.PI) * new_dims[3] + Math.Sin(Math.Abs(angle / 180) * Math.PI) * new_dims[5]);
                new_dims[5] = (int)(Math.Sin(Math.Abs(angle / 180) * Math.PI) * new_dims[3] + Math.Cos(Math.Abs(angle / 180) * Math.PI) * new_dims[5]);

                new_centers[1] = (Math.Abs(new_dims[3]) + Math.Abs(new_dims[2])) / 2;
                new_centers[2] = (Math.Abs(new_dims[5]) + Math.Abs(new_dims[4])) / 2;
            }
            if (axis == 1)
            {
                new_dims[1] = (int)(Math.Cos(Math.Abs(angle / 180) * Math.PI) * new_dims[1] + Math.Sin(Math.Abs(angle / 180) * Math.PI) * new_dims[5]);
                new_dims[5] = (int)(Math.Sin(Math.Abs(angle / 180) * Math.PI) * new_dims[1] + Math.Cos(Math.Abs(angle / 180) * Math.PI) * new_dims[5]);

                new_centers[0] = (Math.Abs(new_dims[0]) + Math.Abs(new_dims[1])) / 2;
                new_centers[2] = (Math.Abs(new_dims[5]) + Math.Abs(new_dims[4])) / 2;
            }


            //Image transformation
            vtkTransform transform = vtkTransform.New();

            transform.Translate(centers[0], centers[1], centers[2]);
            transform.RotateWXYZ(angle, axes[0], axes[1], axes[2]);
            if (out_extent == 0)
            {
                transform.Translate(-centers[0], -centers[1], -centers[2]);
            }
            else
            {
                transform.Translate(-new_centers[0], -new_centers[1], -new_centers[2]);
            }

            //Console.ReadKey();

            transform.Update();

            //Compute new data extent
            int[] diff = new int[] { new_dims[1] - dims[1], new_dims[3] - dims[3], new_dims[5] - dims[5] };
            new_dims[0] += diff[0] / 2; new_dims[1] -= diff[0] / 2;
            new_dims[2] += diff[1] / 2; new_dims[3] -= diff[1] / 2;
            new_dims[4] += diff[2] / 2; new_dims[5] -= diff[2] / 2;



            //Image reslicing
            vtkImageReslice rotater = vtkImageReslice.New();

            rotater.SetInput(input);
            rotater.SetInformationInput(input);
            rotater.SetResliceTransform(transform);
            rotater.SetInterpolationModeToCubic();
            //rotater.SetInterpolationModeToLinear();
            if (out_extent == 1)
            {
                rotater.SetOutputSpacing(input.GetSpacing()[0], input.GetSpacing()[1], input.GetSpacing()[2]);
                rotater.SetOutputOrigin(input.GetOrigin()[0], input.GetOrigin()[1], input.GetOrigin()[2]);
                rotater.SetOutputExtent(new_dims[0], new_dims[1], new_dims[2], new_dims[3], new_dims[4], new_dims[5]);
            }
            rotater.Update();

            vtkImageData output = vtkImageData.New();

            output.DeepCopy(rotater.GetOutput());

            rotater.Dispose();
            transform.Dispose();

            return(output);
        }
Пример #4
0
 ///<summary>Deletes all static objects created</summary>
 public static void deleteAllVTKObjects()
 {
     //clean up vtk objects
     if (renWin != null)
     {
         renWin.Dispose();
     }
     if (p1 != null)
     {
         p1.Dispose();
     }
     if (p2 != null)
     {
         p2.Dispose();
     }
     if (p3 != null)
     {
         p3.Dispose();
     }
     if (p4 != null)
     {
         p4.Dispose();
     }
     if (p5 != null)
     {
         p5.Dispose();
     }
     if (p6 != null)
     {
         p6.Dispose();
     }
     if (ap != null)
     {
         ap.Dispose();
     }
     if (t1 != null)
     {
         t1.Dispose();
     }
     if (m1 != null)
     {
         m1.Dispose();
     }
     if (f11 != null)
     {
         f11.Dispose();
     }
     if (m11 != null)
     {
         m11.Dispose();
     }
     if (a11 != null)
     {
         a11.Dispose();
     }
     if (ren11 != null)
     {
         ren11.Dispose();
     }
     if (f12 != null)
     {
         f12.Dispose();
     }
     if (m12 != null)
     {
         m12.Dispose();
     }
     if (a12 != null)
     {
         a12.Dispose();
     }
     if (ren12 != null)
     {
         ren12.Dispose();
     }
     if (m2 != null)
     {
         m2.Dispose();
     }
     if (t2 != null)
     {
         t2.Dispose();
     }
     if (f21 != null)
     {
         f21.Dispose();
     }
     if (m21 != null)
     {
         m21.Dispose();
     }
     if (a21 != null)
     {
         a21.Dispose();
     }
     if (ren21 != null)
     {
         ren21.Dispose();
     }
     if (f22 != null)
     {
         f22.Dispose();
     }
     if (m22 != null)
     {
         m22.Dispose();
     }
     if (a22 != null)
     {
         a22.Dispose();
     }
     if (ren22 != null)
     {
         ren22.Dispose();
     }
     if (t3 != null)
     {
         t3.Dispose();
     }
     if (f31 != null)
     {
         f31.Dispose();
     }
     if (m31 != null)
     {
         m31.Dispose();
     }
     if (a31 != null)
     {
         a31.Dispose();
     }
     if (ren31 != null)
     {
         ren31.Dispose();
     }
     if (f32 != null)
     {
         f32.Dispose();
     }
     if (m32 != null)
     {
         m32.Dispose();
     }
     if (a32 != null)
     {
         a32.Dispose();
     }
     if (ren32 != null)
     {
         ren32.Dispose();
     }
     if (t4 != null)
     {
         t4.Dispose();
     }
     if (f41 != null)
     {
         f41.Dispose();
     }
     if (m41 != null)
     {
         m41.Dispose();
     }
     if (a41 != null)
     {
         a41.Dispose();
     }
     if (ren41 != null)
     {
         ren41.Dispose();
     }
     if (f42 != null)
     {
         f42.Dispose();
     }
     if (m42 != null)
     {
         m42.Dispose();
     }
     if (a42 != null)
     {
         a42.Dispose();
     }
     if (ren42 != null)
     {
         ren42.Dispose();
     }
 }