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