2017-09-05 14:35:28 +00:00
|
|
|
import pickle
|
2017-08-28 09:29:26 +00:00
|
|
|
import vtk
|
2017-09-05 14:35:28 +00:00
|
|
|
import os
|
|
|
|
from stack3d.study.components import StudyData, MouseData, TimepointData
|
2017-08-28 09:29:26 +00:00
|
|
|
import stack3d.formats.unet
|
|
|
|
|
|
|
|
|
2017-09-05 14:35:28 +00:00
|
|
|
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)
|