stack-3d/test/render_networks.py
2017-09-05 15:35:28 +01:00

107 lines
No EOL
5 KiB
Python

import pickle
import vtk
import os
from stack3d.study.components import StudyData, MouseData, TimepointData
import stack3d.formats.unet
def render_skeleton(work_dir, study_collection):
for eachStudy in study_collection:
print "Rendering Study: ", eachStudy.raw_data_path
study_dir = work_dir + "/" + eachStudy.raw_data_path
for eachMouse in eachStudy.mice:
print "Rendering Mouse: ", eachMouse.raw_data_path
mouse_dir = study_dir + "/" + eachMouse.raw_data_path
for eachTimePoint in eachMouse.timepoints:
print "Rendering Time: ", eachTimePoint.raw_data_path
time_dir = mouse_dir + "/" + eachTimePoint.raw_data_path
base_path = "/analysis_analysis/skeleton.vtp"
if os.path.isfile(time_dir + base_path):
reader = vtk.vtkXMLPolyDataReader()
reader.SetFileName(time_dir + base_path)
reader.Update()
polydata = reader.GetOutput()
cell_to_point = vtk.vtkCellDataToPointData()
cell_to_point.SetInputData(polydata)
cell_to_point.Update()
tubes = vtk.vtkTubeFilter()
tubes.SetInputData(cell_to_point.GetOutput())
tubes.SetNumberOfSides(6)
tubes.SetRadius(1.0)
tubes.SetRadiusFactor(50.0)
tubes.SetVaryRadiusToVaryRadiusByScalar()
tubes.Update()
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(tubes.GetOutput())
mapper.ScalarVisibilityOff()
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(1, 0, 0)
textActor = vtk.vtkTextActor()
textActor.SetTextScaleModeToProp()
textActor.SetDisplayPosition(400, 50)
inp_string = "Study: " + eachStudy.raw_data_path
inp_string += " | Mouse: " + eachMouse.raw_data_path
inp_string += " | Time: " + eachTimePoint.raw_data_path
textActor.SetInput(inp_string)
tprop = textActor.GetTextProperty()
tprop.SetFontSize(24)
tprop.SetFontFamilyToArial()
tprop.SetJustificationToCentered()
tprop.BoldOn()
tprop.ItalicOn()
tprop.ShadowOn()
tprop.SetColor(0, 0, 1)
cubesource = vtk.vtkCubeSource()
cubesource.SetBounds(0, 4000, 0, 4000, 0, 70)
cubesource.Update()
cube_mapper = vtk.vtkPolyDataMapper()
cube_mapper.SetInputConnection(cubesource.GetOutputPort())
cube_mapper.ScalarVisibilityOff()
cube_actor = vtk.vtkActor()
cube_actor.SetMapper(cube_mapper)
cube_actor.GetProperty().SetColor(0, 0, 0)
cube_actor.GetProperty().SetOpacity(0.1)
# Create a renderer, render window, and interactor
renderer = vtk.vtkRenderer()
renderer.SetBackground(1, 1, 1)
renderer.AddActor2D(textActor)
#renderer.GetActiveCamera().Zoom(1.0)
renderWindow = vtk.vtkRenderWindow()
renderWindow.SetSize(1200, 800)
renderWindow.SetAlphaBitPlanes(1)
renderWindow.AddRenderer(renderer)
# renderWindowInteractor = vtk.vtkRenderWindowInteractor()
# renderWindowInteractor.SetRenderWindow(renderWindow)
# Add the actors to the scene
renderer.AddActor(actor)
renderer.AddActor(cube_actor)
renderer.ResetCameraClippingRange()
# Render and interact
renderWindow.Render()
#renderWindowInteractor.Start()
window_to_image_filter = vtk.vtkWindowToImageFilter()
window_to_image_filter.SetInput(renderWindow)
window_to_image_filter.SetMagnification(1);
window_to_image_filter.SetInputBufferTypeToRGBA()
window_to_image_filter.ReadFrontBufferOff()
writer = vtk.vtkTIFFWriter()
writer.SetInputConnection(window_to_image_filter.GetOutputPort())
writer.SetFileName(time_dir + "/analysis_analysis/rendering.tiff")
writer.Write()
work_dir = "/scratch/jgrogan/stack-working/study/"
f = open(work_dir + "/study_collection.p", 'r')
study_collection = pickle.load(f)
render_skeleton(work_dir, study_collection)