<div dir="ltr">I use the following code to select a part and translate it , but as u can see in the image the selected red part nt like the green one (which is the result of transformation)<div><br></div><div>My question is how to make the translated part be as the selected part </div>
<div><br></div><div>My code is :</div><div><br></div><div><div>static vtkLODActor SourceActor;</div><div> //static vtkLODActor SourceActor_2;</div><div> static vtkLODActor SelectActor;</div><div> static vtkTransform t = new vtkTransform();</div>
<div> static vtkClipPolyData clipper;</div><div> static vtkPlanes planes;</div><div> static bool transfer = false ;</div><div><br></div><div> public Form1()</div><div> {</div><div> InitializeComponent();</div>
<div><br></div><div> this.AddInputToWindow(this.vtkFormsWindowControl1.GetRenderWindow() );</div><div><br></div><div><br></div><div> }</div><div> void AddInputToWindow(vtk.vtkRenderWindow renWin )</div>
<div> {</div><div> vtk.vtkDICOMImageReader VDR = new vtk.vtkDICOMImageReader();</div><div> VDR.SetDirectoryName(@"G:\Master Degree\DataSet\case2\DICOM\PA1\ST1\SE2");</div><div> VDR.SetDataOrigin(0, 0, 0);</div>
<div> VDR.Update();</div><div><br></div><div> // decrease the dataset data for large data preprocessing </div><div><br></div><div> vtkImageShrink3D VIS = new vtkImageShrink3D();</div><div>
VIS.SetShrinkFactors(2, 2, 2);</div><div> VIS.SetInputConnection(VDR.GetOutputPort());</div><div> VIS.Update();</div><div><br></div><div> vtkImageThreshold VIT = new vtkImageThreshold();</div>
<div> VIT.ThresholdBetween(200, 2000);</div><div> VIT.SetInputConnection(VIS.GetOutputPort());</div><div> VIT.Update();</div><div><br></div><div> ///// Start the creation of volume rendering </div>
<div><br></div><div> //1. Gget the range of data </div><div> vtk.vtkImageChangeInformation VIC = new vtk.vtkImageChangeInformation();</div><div> VIC.SetInput(VDR.GetOutput());</div><div> VIC.CenterImageOn();</div>
<div> VIC.Update();</div><div><br></div><div> vtk.vtkImageData VoxelData = new vtk.vtkImageData();</div><div> VoxelData = VIC.GetOutput();</div><div><br></div><div> double[] metaScalarRange = VoxelData.GetScalarRange();</div>
<div><br></div><div><br></div><div> // Render the skin - Soft tissue </div><div> double isovalue = 500;</div><div><br></div><div><br></div><div> vtkContourFilter skinExtractor = new vtkContourFilter();</div>
<div> skinExtractor.SetInputConnection(VIT.GetOutputPort());</div><div> skinExtractor.SetValue(0, isovalue);</div><div> skinExtractor.ComputeGradientsOn();</div><div> skinExtractor.Update();</div>
<div><br></div><div><br></div><div> planes = new vtkPlanes();</div><div> </div><div> clipper = new vtkClipPolyData();</div><div> clipper.SetInput(skinExtractor.GetOutput());</div>
<div> //clipper.SetClipFunction(planes);</div><div> clipper.InsideOutOn();</div><div> // clipper.Update();</div><div><br></div><div> // Select only the region of interest </div><div>
vtk.vtkPolyDataMapper SourceMapper = new vtk.vtkPolyDataMapper();</div><div> SourceMapper.SetInput(skinExtractor.GetOutput());</div><div> SourceMapper.ScalarVisibilityOff();</div><div> </div>
<div> vtk.vtkPolyDataMapper SelectionMapper = new vtk.vtkPolyDataMapper();</div><div> SelectionMapper.SetInput(clipper.GetOutput());</div><div> SelectionMapper.ScalarVisibilityOff();</div>
<div> SourceActor = new vtk.vtkLODActor();</div><div> SelectActor = new vtkLODActor();</div><div><br></div><div><br></div><div> //SourceActor.GetProperty().SetRepresentationToWireframe();</div>
<div><br></div><div> SourceActor.GetProperty().SetColor(1, 0, 0);</div><div> SourceActor.SetMapper(SourceMapper);</div><div> </div><div> SelectActor.GetProperty().SetColor(0, 1, 0);</div>
<div> SelectActor.SetMapper(SelectionMapper);</div><div> SelectActor.VisibilityOff();</div><div><br></div><div> vtk.vtkRenderer ren1 = new vtk.vtkRenderer();</div><div> renWin.AddRenderer(ren1);</div>
<div> </div><div> vtkRenderWindowInteractor iren = new vtk.vtkRenderWindowInteractor();</div><div> iren.SetRenderWindow(renWin);</div><div><br></div><div> // The box widget observes the events invoked by the render window</div>
<div> // interactor. These events come from user interaction in the render</div><div> //window.</div><div> vtkBoxWidget boxWidget = new vtk.vtkBoxWidget();</div><div> boxWidget.SetInteractor(iren);</div>
<div> boxWidget.SetPlaceFactor(1.25);</div><div> // boxWidget.ScalingEnabledOff();</div><div> ren1.AddActor(SourceActor);</div><div> ren1.AddActor(SelectActor);</div><div><br></div>
<div> ren1.SetBackground(0.0f, 0.0f, 0.0f);</div><div> renWin.AddRenderer(ren1);</div><div> boxWidget.SetProp3D(SourceActor);</div><div> boxWidget.PlaceWidget();</div><div> boxWidget.AddObserver((uint)vtk.EventIds.InteractionEvent, new vtk.vtkDotNetCallback(Cut_Object));</div>
<div> boxWidget.AddObserver((uint)vtk.EventIds.EndInteractionEvent, new vtk.vtkDotNetCallback(transfer_Object));</div><div> boxWidget.On();</div><div> GC.Collect();</div><div><br></div><div>
}</div><div> static void Cut_Object(vtk.vtkObject obj, uint eventId, Object data, IntPtr clientdata)</div><div> {</div><div> vtkBoxWidget widget = vtkBoxWidget.SafeDownCast(obj);</div><div>
if(! transfer)</div><div> {</div><div> widget.GetPlanes(planes);</div><div> clipper.SetClipFunction(planes);</div><div> clipper.Update();</div>
<div> SelectActor.SetUserTransform(t); SelectActor.VisibilityOn();</div><div> </div><div> </div><div> }</div><div><br></div><div> }</div><div> static void transfer_Object(vtk.vtkObject obj, uint eventId, Object data, IntPtr clientdata)</div>
<div> {</div><div> vtkBoxWidget widget = vtkBoxWidget.SafeDownCast(obj);</div><div><br></div><div> if (transfer)</div><div> {</div><div> widget.ScalingEnabledOff();</div>
<div> widget.GetTransform(t);</div><div> SelectActor.SetUserTransform(t); SelectActor.VisibilityOn();</div><div> widget.ScalingEnabledOn(); </div><div> </div><div>
}</div><div> </div><div><br></div><div> }</div></div><div><br></div><div>Any suggestion please </div><div><br></div><div>thanks in advance </div></div>