Search code examples
vtkitk

How to convert .stl file to 3D .mha or .nii


Can someone please guide me through how to convert .stl file to .nii or .mha file? I use the below code to load the .stl file and render it. But I am still unable to find a code to save that render file into .nii or .mha, I am very new to this VTK and ITK library. Thank you in advance for your help.

import vtkmodules.vtkInteractionStyle
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkIOGeometry import vtkSTLReader
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)

filename = 'filename.stl'

colors = vtkNamedColors()


reader = vtkSTLReader()
reader.SetFileName(filename)

mapper = vtkPolyDataMapper()

if vtk.VTK_MAJOR_VERSION <= 5:
        mapper.SetInput(reader.GetOutput())
else:
    mapper.SetInputConnection(reader.GetOutputPort())

actor = vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetDiffuse(0.8)
#actor.GetProperty().SetDiffuseColor(colors.GetColor3d('LightSteelBlue'))
actor.GetProperty().SetSpecular(0.3)
actor.GetProperty().SetSpecularPower(60.0)

# Create a rendering window and renderer
ren = vtkRenderer()
renWin = vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetWindowName('ReadSTL')

# Create a renderwindowinteractor
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

# Assign actor to the renderer
ren.AddActor(actor)
#ren.SetBackground(colors.GetColor3d('DarkOliveGreen'))

# Enable user interface interactor
iren.Initialize()
renWin.Render()
iren.Start()

Solution

  • There is a VTK C++ example which does what you want. There is also a Python example that does a bit more. You can combine them to get what you want.