#!/usr/bin/env python3 #vim: set ff=unix" """ (C) Marek Kocinski Techincal University of Lodz, Poland Institute of Electronics Image Processing and Computer Graphics 2019 """ import vtk import numpy as np from vtk.util.numpy_support import numpy_to_vtk print(vtk.vtkVersion.GetVTKSourceVersion()) def marching(name, value=50): nparray = np.load(name) origin=[0.0,0.0,0.0] spacing=[1.0,1.0,1.0] vtkimage = numpy_to_vtk(nparray.flatten(2), deep=True, array_type=vtk.VTK_UNSIGNED_SHORT) image1 = vtk.vtkImageData() image1.GetPointData().SetScalars(vtkimage) image1.SetDimensions(nparray.shape) image1.SetOrigin(origin) image1.SetSpacing(spacing) gaussian = vtk.vtkImageGaussianSmooth() gaussian.SetDimensionality(3) gaussian.SetStandardDeviations(1.0, 1.0, 1.0) gaussian.SetRadiusFactor(1.0) gaussian.SetInputData(image1) isovalue = float(value) marching = vtk.vtkMarchingCubes() marching.SetInputConnection(gaussian.GetOutputPort()) marching.SetValue(1,isovalue) marching.ComputeScalarsOff() marching.ComputeGradientsOff() marching.ComputeNormalsOff() decimator = vtk.vtkDecimatePro() decimator.SetInputConnection(marching.GetOutputPort()) decimator.SetTargetReduction(0.1) decimator.SetFeatureAngle(60) smoother = vtk.vtkSmoothPolyDataFilter() smoother.SetInputConnection(decimator.GetOutputPort()) smoother.BoundarySmoothingOn() smoother.FeatureEdgeSmoothingOn() normals = vtk.vtkPolyDataNormals() normals.SetInputConnection(smoother.GetOutputPort()) normals.SetFeatureAngle(60) stripper = vtk.vtkStripper() stripper.SetInputConnection(normals.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(stripper.GetOutputPort()) mapper.ScalarVisibilityOff() surf = vtk.vtkProperty() surf.SetColor(0.8,0.1,0.1) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetProperty(surf) ren1 = vtk.vtkRenderer() ren1.AddActor(actor) renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren1) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) renWin.Render() iren.Start() return iren def close_window(iren): render_window = iren.GetRenderWindow() render_window.Finalize() iren.TerminateApp() # w razie problemow z dzialaniem programu # odkomentuj/zakomentuj ponizsze linie # w zaleznosci od systemu operacyjnego # lub wersji zainstalowanych bibliotek # moga pojawic sie problemu w prawidlowym # zakonczeniu dzialania programu #close_window(iren) #del renWin, ir if __name__ == '__main__': import sys iren = marching(sys.argv[1],sys.argv[2]) #if iren: # close_window(iren)