hi,
i was experimenting with medical demo volume rendering example with my own nii file,
i want to use the convention 1 unit = 1 meter so i scaled the volume by using vtk transform scale property and after the volume is scaled the vtk trackball camera interactor is not working anymore, when i try to move the volume the window just stops responding and crashes and also the box widget re scales but the sphere on the outside used for clipping interaction are still very big. can some one please help?
Thanks
my code for re scaling the volume is below
reader = vtk.vtkNIFTIImageReader()
reader.SetFileName(PathDicom)
reader.Update()
volumeMapper = vtk.vtkSmartVolumeMapper()
volumeMapper.SetInputConnection(reader.GetOutputPort())
volumeMapper.SetSampleDistance(-0.001)
window_width = 90
window_level = 150
volumeColor = vtk.vtkColorTransferFunction()
volumeColor.AddRGBSegment(window_level - 0.5 * window_width, 0.0, 0.0, 0.0,
window_level + 0.5 * window_width, 1.0, 1.0, 1.0)
volumeScalarOpacity = vtk.vtkPiecewiseFunction()
volumeScalarOpacity.AddSegment(window_level - 0.5 * window_width, 0.0,
window_level + 0.5 * window_width, 1.0)
volumeGradientOpacity = vtk.vtkPiecewiseFunction()
volumeGradientOpacity.AddPoint(0, 0.0)
# volumeGradientOpacity.AddPoint(90, opacity_control / 2)
volumeGradientOpacity.AddPoint(100, opacity_control)
volumeProperty = vtk.vtkVolumeProperty()
volumeProperty.SetColor(volumeColor)
volumeProperty.SetScalarOpacity(volumeScalarOpacity)
volumeProperty.SetGradientOpacity(volumeGradientOpacity)
volumeProperty.SetInterpolationTypeToLinear()
volumeProperty.ShadeOn()
volumeProperty.SetAmbient(0.4)
volumeProperty.SetDiffuse(0.6)
volumeProperty.SetSpecular(0.2)
volumeProperty.SetScalarOpacityUnitDistance(1)
volume = vtk.vtkVolume()
volume.SetMapper(volumeMapper)
volume.SetProperty(volumeProperty)
pick_volume_points()
scene_renderer.AddViewProp(volume)
render_window.Render()
render_window_interactor = vtk.vtkRenderWindowInteractor()
interaction_style = vtk.vtkInteractorStyleImage()
render_window_interactor.SetInteractorStyle(interaction_style)
render_window_interactor.SetRenderWindow(render_window)
render_window_interactor.AddObserver('MouseWheelForwardEvent', onMouseWheelForwardEvent)
render_window_interactor.AddObserver('MouseWheelBackwardEvent', onMouseWheelBackwardEvent)
planes = vtk.vtkPlanes()
def ClipVolumeRender(obj, event):
print("inside here")
obj.GetPlanes(planes)
volumeMapper.SetClippingPlanes(planes)
boxWidget = vtk.vtkBoxWidget()
boxWidget.SetInteractor(render_window_interactor)
boxWidget.SetPlaceFactor(1.0)
boxWidget.SetInputData(reader.GetOutput())
boxWidget.PlaceWidget(reader.GetOutput().GetBounds())
boxWidget.InsideOutOn()
boxWidget.AddObserver("InteractionEvent", ClipVolumeRender)
boxWidget.AddObserver("MiddleButtonPressEvent", ClipVolumeRender)
boxWidget.AddObserver("MiddleButtonReleaseEvent", ClipVolumeRender)
boxWidget.EnabledOn()
boxWidget.TranslationEnabledOn()
render_window.Render()
transform = vtkTransform()
transform.SetMatrix(sometransform.GetMatrix())
transform.Scale(0.001, 0.001, 0.001)
transform.Update()
volume.SetUserMatrix(transform.GetMatrix())
boxWidget.SetTransform(transform)