I’ve create a class that import/export .obj files to/from VTK object.
import vtk
DATA_DIR = r"C:\Users\MyUser"
class MyRenderer:
def __init__(self):
pass
def import_object(self, obj_name):
importer = vtk.vtkOBJImporter()
importer.SetFileName(DATA_DIR + r"\{}.obj".format(obj_name))
importer.SetFileNameMTL(DATA_DIR + r"\{}.mtl".format(obj_name))
importer.Read()
self.show(importer.GetRenderWindow())
def export_object(self, obj_name, render_window):
exporter = vtk.vtkOBJExporter()
exporter.SetRenderWindow(render_window)
exporter.SetFilePrefix(DATA_DIR + r"\{}".format(obj_name))
exporter.Write()
def show(self, render_window, actors: list = None):
renderer = vtk.vtkRenderer()
if actors:
for actor in actors:
renderer.AddActor(actor)
renderer.SetBackground(0, 0, 0)
render_window.AddRenderer(renderer)
render_window_interactor = vtk.vtkRenderWindowInteractor()
render_window_interactor.SetRenderWindow(render_window)
renderer.ResetCamera()
render_window.Render()
render_window_interactor.Start()
In order to test the class I’ve created a simple sphere object, showed it, export it to an .obj file, and after that I imported the created .obj file and showed it.
def create_sphere_object():
sphere = vtk.vtkSphereSource()
sphere.SetCenter(0, 0, 0)
sphere.SetRadius(20)
# Create a mapper
selection_sphere_mapper = vtk.vtkPolyDataMapper()
selection_sphere_mapper.SetInputConnection(sphere.GetOutputPort())
# Create an actor
selection_sphere_actor = vtk.vtkActor()
selection_sphere_actor.SetMapper(selection_sphere_mapper)
selection_sphere_actor.GetProperty().SetColor(50, 20, 80) # (R,G,B)
selection_sphere_actor.GetProperty().SetOpacity(80)
return selection_sphere_actor
obj_name = "testObj"
render = MyRenderer()
actor = create_sphere_object()
render_window = vtk.vtkRenderWindow()
render.show(render_window, [actor])
render.export_object(obj_name, render_window)
render.import_object(obj_name)
The above test passed, and a .obj file was created and loaded successfully.
My end-goal is to export imageSlice created by vtk.vtkImageSlice() insted of vtk.vtkActor(), but I can’t do it using the current API, even though I can show such imageSlice object using this API.
What do I need to change in the API in order to be able to save imageSlice as .obj file? Is it even possible?