def initializeMetadata( self ): try: self.fieldData = vtk.vtkDataSetAttributes() mdarray = getStringDataArray( 'metadata' ) self.fieldData.AddArray( mdarray ) # diagnosticWriter.log( self, ' initialize field data in ispec[%x] ' % id(self) ) except Exception, err: print>>sys.stderr, "Error initializing metadata"
def initializeMetadata(self): try: self.fieldData = vtk.vtkDataSetAttributes() mdarray = getStringDataArray('metadata') self.fieldData.AddArray(mdarray) # diagnosticWriter.log( self, ' initialize field data in ispec[%x] ' % id(self) ) except Exception, err: print >> sys.stderr, "Error initializing metadata"
def sliceDown(self): # Warp using the normals warp = vtk.vtkWarpVector() warp.SetInputData(fixMesh(downsample(self.currentPeel))) # fixMesh here updates normals needed for warping warp.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject().FIELD_ASSOCIATION_POINTS, vtk.vtkDataSetAttributes().NORMALS) warp.SetScaleFactor(-1) warp.Update() out = vtk.vtkPolyData() out = upsample(warp.GetPolyDataOutput()) out = smooth(out) out = fixMesh(out) out = cleanMesh(out) self.currentPeel = out
#!/usr/bin/env python import vtk dsa = vtk.vtkDataSetAttributes() for array in "Bit Char Double Float Int Long Short UnsignedChar UnsignedInt UnsignedLong UnsignedShort".split( ): var = eval('vtk.vtk' + array + 'Array')() var.Allocate(1, 1) var.SetNumberOfComponents(3) var.SetNumberOfTuples(4) var.SetName("a" + array + "Array") # SetComponent k = 0 i = 0 while i < var.GetNumberOfTuples(): j = 0 while j < var.GetNumberOfComponents(): var.SetComponent(i, j, 1) k = k + 1 j = j + 1 i = i + 1 dsa.AddArray(var) del var pass anotherFloatArray = vtk.vtkFloatArray() anotherFloatArray.Allocate(1, 1)
def main(): colors = vtk.vtkNamedColors() file_name, start_label, end_label = get_program_parameters() if start_label > end_label: end_label, start_label = start_label, end_label # Generate cubes from labels # 1) Read the meta file # 2) Convert point data to cell data # 3) Convert to geometry and display reader = vtk.vtkMetaImageReader() reader.SetFileName(file_name) reader.Update() # Pad the volume so that we can change the point data into cell # data. extent = reader.GetOutput().GetExtent() pad = vtk.vtkImageWrapPad() pad.SetInputConnection(reader.GetOutputPort()) pad.SetOutputWholeExtent(extent[0], extent[1] + 1, extent[2], extent[3] + 1, extent[4], extent[5] + 1) pad.Update() # Copy the scalar point data of the volume into the scalar cell data pad.GetOutput().GetCellData().SetScalars(reader.GetOutput().GetPointData().GetScalars()) selector = vtk.vtkThreshold() selector.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject().FIELD_ASSOCIATION_CELLS, vtk.vtkDataSetAttributes().SCALARS) selector.SetInputConnection(pad.GetOutputPort()) selector.ThresholdBetween(start_label, end_label) selector.Update() # Shift the geometry by 1/2 transform = vtk.vtkTransform() transform.Translate(-0.5, -0.5, -0.5) transform_model = vtk.vtkTransformFilter() transform_model.SetTransform(transform) transform_model.SetInputConnection(selector.GetOutputPort()) geometry = vtk.vtkGeometryFilter() geometry.SetInputConnection(transform_model.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(geometry.GetOutputPort()) mapper.SetScalarRange(start_label, end_label) mapper.SetScalarModeToUseCellData() mapper.SetColorModeToMapScalars() actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) render_window.SetSize(640, 480) render_window.SetWindowName('GenerateCubesFromLabels') render_window_interactor = vtk.vtkRenderWindowInteractor() render_window_interactor.SetRenderWindow(render_window) renderer.AddActor(actor) renderer.SetBackground(colors.GetColor3d('DarkSlateBlue')) render_window.Render() camera = renderer.GetActiveCamera() camera.SetPosition(42.301174, 939.893457, -124.005030) camera.SetFocalPoint(224.697134, 221.301653, 146.823706) camera.SetViewUp(0.262286, -0.281321, -0.923073) camera.SetDistance(789.297581) camera.SetClippingRange(168.744328, 1509.660206) render_window_interactor.Start()
#!/usr/bin/env python import vtk dsa = vtk.vtkDataSetAttributes() for array in "Bit Char Double Float Int Long Short UnsignedChar UnsignedInt UnsignedLong UnsignedShort".split(): var = eval('vtk.vtk'+ array +'Array')() var.Allocate(1,1) var.SetNumberOfComponents(3) var.SetNumberOfTuples(4) var.SetName("a"+array+"Array") # SetComponent k = 0 i = 0 while i < var.GetNumberOfTuples(): j = 0 while j < var.GetNumberOfComponents(): var.SetComponent(i,j,1) k = k + 1 j = j + 1 i = i + 1 dsa.AddArray(var) del var pass anotherFloatArray = vtk.vtkFloatArray() anotherFloatArray.Allocate(1,1) anotherFloatArray.SetNumberOfComponents(3)
def main(): # vtkDiscreteFlyingEdges3D was introduced in VTK >= 8.2 use_flying_edges = vtk_version_ok(8, 2, 0) file_name, start_label, end_label = get_program_parameters() if start_label > end_label: end_label, start_label = start_label, end_label # Create all of the classes we will need reader = vtk.vtkMetaImageReader() histogram = vtk.vtkImageAccumulate() if use_flying_edges: try: using_marching_cubes = False discrete_cubes = vtk.vtkDiscreteFlyingEdges3D() except AttributeError: using_marching_cubes = True discrete_cubes = vtk.vtkDiscreteMarchingCubes() else: using_marching_cubes = True discrete_cubes = vtk.vtkDiscreteMarchingCubes() smoother = vtk.vtkWindowedSincPolyDataFilter() selector = vtk.vtkThreshold() scalars_off = vtk.vtkMaskFields() geometry = vtk.vtkGeometryFilter() writer = vtk.vtkXMLPolyDataWriter() # Define all of the variables file_prefix = 'Label' smoothing_iterations = 15 pass_band = 0.001 feature_angle = 120.0 # Generate models from labels # 1) Read the meta file # 2) Generate a histogram of the labels # 3) Generate models from the labeled volume # 4) Smooth the models # 5) Output each model into a separate file reader.SetFileName(file_name) histogram.SetInputConnection(reader.GetOutputPort()) histogram.SetComponentExtent(0, end_label, 0, 0, 0, 0) histogram.SetComponentOrigin(0, 0, 0) histogram.SetComponentSpacing(1, 1, 1) histogram.Update() discrete_cubes.SetInputConnection(reader.GetOutputPort()) discrete_cubes.GenerateValues(end_label - start_label + 1, start_label, end_label) smoother.SetInputConnection(discrete_cubes.GetOutputPort()) smoother.SetNumberOfIterations(smoothing_iterations) smoother.BoundarySmoothingOff() smoother.FeatureEdgeSmoothingOff() smoother.SetFeatureAngle(feature_angle) smoother.SetPassBand(pass_band) smoother.NonManifoldSmoothingOn() smoother.NormalizeCoordinatesOn() smoother.Update() selector.SetInputConnection(smoother.GetOutputPort()) if use_flying_edges: if using_marching_cubes: selector.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject().FIELD_ASSOCIATION_CELLS, vtk.vtkDataSetAttributes().SCALARS) else: selector.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject().FIELD_ASSOCIATION_POINTS, vtk.vtkDataSetAttributes().SCALARS) else: selector.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject().FIELD_ASSOCIATION_CELLS, vtk.vtkDataSetAttributes().SCALARS) # Strip the scalars from the output scalars_off.SetInputConnection(selector.GetOutputPort()) scalars_off.CopyAttributeOff(vtk.vtkMaskFields().POINT_DATA, vtk.vtkDataSetAttributes().SCALARS) scalars_off.CopyAttributeOff(vtk.vtkMaskFields().CELL_DATA, vtk.vtkDataSetAttributes().SCALARS) geometry.SetInputConnection(scalars_off.GetOutputPort()) writer.SetInputConnection(geometry.GetOutputPort()) for i in range(start_label, end_label + 1): # see if the label exists, if not skip it frequency = histogram.GetOutput().GetPointData().GetScalars().GetTuple1(i) if frequency == 0.0: continue # select the cells for a given label selector.ThresholdBetween(i, i) # output the polydata output_fn = '{:s}{:d}.vtp'.format(file_prefix, i) print('{:s} writing {:s}'.format(os.path.basename(sys.argv[0]), output_fn)) writer.SetFileName(output_fn) writer.Write()