def Execute(self): if self.Image == None: self.PrintError('Error: no Image.') if self.Interactive == 1: if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) self.PlaneWidgetX = vtk.vtkImagePlaneWidget() self.PlaneWidgetX.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidgetY = vtk.vtkImagePlaneWidget() self.PlaneWidgetY.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidgetZ = vtk.vtkImagePlaneWidget() self.PlaneWidgetZ.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.BoxWidget = vtk.vtkBoxWidget() self.BoxWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.vmtkRenderer.AddKeyBinding('i','Interact.', self.InteractCallback) self.Display() while (self.BoxActive == 1): self.PaintVOI() self.Display() else: self.PaintVOI() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Image == None: self.PrintError('Error: no Image.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Type == 'freehand': self.ImageTracerWidget = vtk.vtkImageTracerWidget() elif self.Type == 'contour': self.ImageTracerWidget = vtk.vtkContourWidget() self.ImageTracerWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.SliderWidget = vtk.vtkSliderWidget() self.SliderWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.ImageActor = vtk.vtkImageActor() self.vmtkRenderer.AddKeyBinding('n','Next.',self.NextCallback) self.vmtkRenderer.AddKeyBinding('p','Previous.',self.PreviousCallback) self.vmtkRenderer.AddKeyBinding('i','Interact.', self.InteractCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Image == None: self.PrintError("Error: no Image.") if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Type == "freehand": self.ImageTracerWidget = vtk.vtkImageTracerWidget() elif self.Type == "contour": self.ImageTracerWidget = vtk.vtkContourWidget() self.ImageTracerWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.SliderWidget = vtk.vtkSliderWidget() self.SliderWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.ImageActor = vtk.vtkImageActor() self.vmtkRenderer.AddKeyBinding("n", "Next.", self.NextCallback) self.vmtkRenderer.AddKeyBinding("p", "Previous.", self.PreviousCallback) self.vmtkRenderer.AddKeyBinding("i", "Interact.", self.InteractCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Image == None: self.PrintError('Error: no Image.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 if self.Type == 'freehand': self.ImageTracerWidget = vtk.vtkImageTracerWidget() elif self.Type == 'contour': self.ImageTracerWidget = vtk.vtkContourWidget() self.ImageTracerWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.SliderWidget = vtk.vtkSliderWidget() self.SliderWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.ImageActor = vtk.vtkImageActor() self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.Keypress) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Image == None: self.PrintError('Error: no Image.') self.CroppedImage.DeepCopy(self.Image) if self.Interactive == 1: if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.PlaneWidgetX = vtk.vtkImagePlaneWidget() self.PlaneWidgetX.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidgetY = vtk.vtkImagePlaneWidget() self.PlaneWidgetY.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidgetZ = vtk.vtkImagePlaneWidget() self.PlaneWidgetZ.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.BoxWidget = vtk.vtkBoxWidget() self.BoxWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.Display() while (self.BoxActive == 1): self.ExtractVOI() self.Image = self.CroppedImage self.Display() else: self.ExtractVOI() if self.OwnRenderer: self.vmtkRenderer.Deallocate() self.Image = self.CroppedImage
def Execute(self): if (self._Surface == None): self.PrintError('vmtkPickPointSeedSelector Error: Surface not set.') return self._SourceSeedIds.Initialize() self._TargetSeedIds.Initialize() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphs.SetInput(self.PickedSeeds) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToDataScalingOff() glyphs.SetScaleFactor(self._Surface.GetLength()*0.01) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInput(glyphs.GetOutput()) self.SeedActor = vtk.vtkActor() self.SeedActor.SetMapper(glyphMapper) self.SeedActor.GetProperty().SetColor(1.0,0.0,0.0) self.SeedActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SeedActor) self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) surfaceMapper = vtk.vtkPolyDataMapper() surfaceMapper.SetInput(self._Surface) surfaceMapper.ScalarVisibilityOff() surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(surfaceMapper) surfaceActor.GetProperty().SetOpacity(1.0) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.OutputText('Please position the mouse and press space to add source points, \'u\' to undo\n') any = 0 while any == 0: self.InitializeSeeds() self.vmtkRenderer.Render() any = self.PickedSeedIds.GetNumberOfIds() self._SourceSeedIds.DeepCopy(self.PickedSeedIds) self.OutputText('Please position the mouse and press space to add target points, \'u\' to undo\n') any = 0 while any == 0: self.InitializeSeeds() self.vmtkRenderer.Render() any = self.PickedSeedIds.GetNumberOfIds() self._TargetSeedIds.DeepCopy(self.PickedSeedIds) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: no Surface.') if self.WidgetType == "box": self.ClipFunction = vtk.vtkPlanes() elif self.WidgetType == "sphere": self.ClipFunction = vtk.vtkSphere() self.Clipper = vtk.vtkClipPolyData() self.Clipper.SetInput(self.Surface) self.Clipper.SetClipFunction(self.ClipFunction) self.Clipper.GenerateClippedOutputOn() self.Clipper.InsideOutOn() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 mapper = vtk.vtkPolyDataMapper() mapper.SetInput(self.Surface) mapper.ScalarVisibilityOff() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.vmtkRenderer.Renderer.AddActor(self.Actor) if self.WidgetType == "box": self.ClipWidget = vtk.vtkBoxWidget() self.ClipWidget.GetFaceProperty().SetColor(0.6,0.6,0.2) self.ClipWidget.GetFaceProperty().SetOpacity(0.25) elif self.WidgetType == "sphere": self.ClipWidget = vtk.vtkSphereWidget() self.ClipWidget.GetSphereProperty().SetColor(0.6,0.6,0.2) self.ClipWidget.GetSphereProperty().SetOpacity(0.25) self.ClipWidget.GetSelectedSphereProperty().SetColor(0.6,0.0,0.0) self.ClipWidget.GetSelectedSphereProperty().SetOpacity(0.75) self.ClipWidget.SetRepresentationToSurface() self.ClipWidget.SetPhiResolution(20) self.ClipWidget.SetThetaResolution(20) self.ClipWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.Display() self.Transform = vtk.vtkTransform() self.ClipWidget.GetTransform(self.Transform) if self.OwnRenderer: self.vmtkRenderer.Deallocate() if self.CleanOutput == 1: cleaner = vtk.vtkCleanPolyData() cleaner.SetInput(self.Surface) cleaner.Update() self.Surface = cleaner.GetOutput() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs()
def Execute(self): if not self.Centerlines: self.PrintError('Error: No input centerlines.') return if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.CellDataArrayName: cellCenters = vtk.vtkCellCenters() cellCenters.SetInput(self.Centerlines) cellCenters.Update() cellCenters.GetOutput().GetPointData().SetActiveScalars(self.CellDataArrayName) labelsMapper = vtk.vtkLabeledDataMapper(); labelsMapper.SetInput(cellCenters.GetOutput()) labelsMapper.SetLabelModeToLabelScalars() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) centerlineMapper = vtk.vtkPolyDataMapper() centerlineMapper.SetInput(self.Centerlines) if self.CellDataArrayName and not self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUseCellData() self.Centerlines.GetCellData().SetActiveScalars(self.CellDataArrayName) centerlineMapper.SetScalarRange(self.Centerlines.GetCellData().GetScalars().GetRange(0)) elif self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUsePointData() self.Centerlines.GetPointData().SetActiveScalars(self.PointDataArrayName) centerlineMapper.SetScalarRange(self.Centerlines.GetPointData().GetScalars().GetRange(0)) else: centerlineMapper.ScalarVisibilityOff() centerlineActor = vtk.vtkActor() centerlineActor.SetMapper(centerlineMapper) self.vmtkRenderer.Renderer.AddActor(centerlineActor) scalarBarActor = None if self.Legend and centerlineActor and self.PointDataArrayName: scalarBarActor = vtk.vtkScalarBarActor() scalarBarActor.SetLookupTable(centerlineActor.GetMapper().GetLookupTable()) scalarBarActor.GetLabelTextProperty().ItalicOff() scalarBarActor.GetLabelTextProperty().BoldOff() scalarBarActor.GetLabelTextProperty().ShadowOff() scalarBarActor.SetLabelFormat('%.2f') scalarBarActor.SetTitle(self.PointDataArrayName) self.vmtkRenderer.Renderer.AddActor(scalarBarActor) if self.Display: self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Centerlines == None: self.PrintError('Error: No input centerlines.') if self.ReferenceSystems == None: self.PrintError('Error: No input reference systems.') if self.Interactive and not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 if self.Interactive: self.vmtkRenderer.RegisterScript(self) viewer = vmtkcenterlineviewer.vmtkCenterlineViewer() viewer.Centerlines = self.Centerlines viewer.CellDataArrayName = self.GroupIdsArrayName viewer.vmtkRenderer = self.vmtkRenderer viewer.InputText = self.InputText viewer.OutputText = self.OutputText viewer.PrintError = self.PrintError viewer.PringLog = self.PrintLog viewer.Display = 0 viewer.Execute() groupIdString = self.InputText("Please input the reference groupId:\n",self.GroupIdValidator) self.ReferenceGroupId = int(groupIdString) offsetFilter = vtkvmtk.vtkvmtkCenterlineReferenceSystemAttributesOffset() offsetFilter.SetInput(self.Centerlines) offsetFilter.SetReferenceSystems(self.ReferenceSystems) offsetFilter.SetAbscissasArrayName(self.AbscissasArrayName) offsetFilter.SetNormalsArrayName(self.NormalsArrayName) if not self.ReplaceAttributes: offsetFilter.SetOffsetAbscissasArrayName(self.OffsetAbscissasArrayName) offsetFilter.SetOffsetNormalsArrayName(self.OffsetNormalsArrayName) else: offsetFilter.SetOffsetAbscissasArrayName(self.AbscissasArrayName) offsetFilter.SetOffsetNormalsArrayName(self.NormalsArrayName) offsetFilter.SetGroupIdsArrayName(self.GroupIdsArrayName) offsetFilter.SetCenterlineIdsArrayName(self.CenterlineIdsArrayName) offsetFilter.SetReferenceSystemsNormalArrayName(self.ReferenceSystemsNormalArrayName) offsetFilter.SetReferenceSystemsGroupIdsArrayName(self.GroupIdsArrayName) offsetFilter.SetReferenceGroupId(self.ReferenceGroupId) offsetFilter.Update() self.Centerlines = offsetFilter.GetOutput() if self.ReferenceGroupId == -1: self.ReferenceGroupId = offsetFilter.GetReferenceGroupId() if self.Centerlines.GetSource(): self.Centerlines.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: no Surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) triangleFilter = vtk.vtkTriangleFilter() triangleFilter.SetInput(self.Surface) triangleFilter.Update() self.Surface = triangleFilter.GetOutput() contourScalars = vtk.vtkDoubleArray() contourScalars.SetNumberOfComponents(1) contourScalars.SetNumberOfTuples(self.Surface.GetNumberOfPoints()) contourScalars.SetName(self.ContourScalarsArrayName) contourScalars.FillComponent(0,self.OutsideValue) self.Surface.GetPointData().AddArray(contourScalars) self.Surface.GetPointData().SetActiveScalars(self.ContourScalarsArrayName) mapper = vtk.vtkPolyDataMapper() mapper.SetInput(self.Surface) mapper.ScalarVisibilityOn() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.Actor.GetMapper().SetScalarRange(-1.0,0.0) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.ContourWidget = vtk.vtkContourWidget() self.ContourWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) rep = vtk.vtkOrientedGlyphContourRepresentation.SafeDownCast(self.ContourWidget.GetRepresentation()) rep.GetLinesProperty().SetColor(1, 0.2, 0) rep.GetLinesProperty().SetLineWidth(3.0) pointPlacer = vtk.vtkPolygonalSurfacePointPlacer() pointPlacer.AddProp(self.Actor) pointPlacer.GetPolys().AddItem(self.Surface) rep.SetPointPlacer(pointPlacer) self.Interpolator = vtk.vtkPolygonalSurfaceContourLineInterpolator() self.Interpolator.GetPolys().AddItem(self.Surface) rep.SetLineInterpolator(self.Interpolator) self.vmtkRenderer.AddKeyBinding('space','Generate scalars',self.ScalarsCallback) self.vmtkRenderer.AddKeyBinding('d','Delete contour',self.DeleteContourCallback) self.vmtkRenderer.AddKeyBinding('i','Start interaction',self.InteractCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Actor != None: self.vmtkRenderer.Renderer.RemoveActor(self.Actor) if self.ScalarBarActor != None: self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.Mesh != None: mapper = vtk.vtkDataSetMapper() mapper.SetInput(self.Mesh) if (self.ArrayName != ''): self.Mesh.GetPointData().SetActiveScalars(self.ArrayName) if (self.Mesh.GetPointData().GetScalars() != None): array = self.Mesh.GetPointData().GetScalars() if (self.ScalarRange[1] > self.ScalarRange[0]): mapper.SetScalarRange(self.ScalarRange) else: mapper.SetScalarRange(array.GetRange(0)) if (self.Grayscale == 1): lut = vtk.vtkLookupTable() lut.SetValueRange(0.0,1.0) lut.SetSaturationRange(0.0,0.0) mapper.SetLookupTable(lut) self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) if (self.FlatInterpolation == 1): self.Actor.GetProperty().SetInterpolationToFlat() self.Actor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(self.Actor) if (self.Legend == 1) & (self.Actor != None): self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.Actor.GetMapper().GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() ## self.ScalarBarActor.GetLabelTextProperty().SetColor(0.0,0.0,0.0) self.ScalarBarActor.SetLabelFormat('%.2f') self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) if (self.Display == 1): self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: no Surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) triangleFilter = vtk.vtkTriangleFilter() triangleFilter.SetInputData(self.Surface) triangleFilter.Update() self.Surface = triangleFilter.GetOutput() self.tagviewer = vmtkscripts.vmtkSurfaceViewer() self.tagviewer.Surface = self.Surface self.tagviewer.vmtkRenderer = self.vmtkRenderer self.tagviewer.Representation = 'edges' self.tagviewer.Opacity = self.Opacity self.tagviewer.Execute() self.ContourWidget = vtk.vtkContourWidget() self.ContourWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) rep = vtk.vtkOrientedGlyphContourRepresentation.SafeDownCast(self.ContourWidget.GetRepresentation()) rep.GetLinesProperty().SetColor(1, 0, 0) rep.GetLinesProperty().SetLineWidth(4.0) pointPlacer = vtk.vtkPolygonalSurfacePointPlacer() pointPlacer.AddProp(self.tagviewer.Actor) pointPlacer.GetPolys().AddItem(self.Surface) rep.SetPointPlacer(pointPlacer) self.Interpolator = vtk.vtkPolygonalSurfaceContourLineInterpolator() self.Interpolator.GetPolys().AddItem(self.Surface) rep.SetLineInterpolator(self.Interpolator) self.InputInfo("Building loop ...\n") self.vmtkRenderer.AddKeyBinding('space','Generate loop',self.LoopCallback) self.vmtkRenderer.AddKeyBinding('d','Delete contour',self.DeleteContourCallback) self.vmtkRenderer.AddKeyBinding('i','Start/stop contour drawing',self.InteractCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Volume: self.vmtkRenderer.Renderer.RemoveVolume(self.Volume) if (self.ArrayName != ''): self.Image.GetPointData().SetActiveScalars(self.ArrayName) scalarRange = [0.0, 0.0] if self.WindowLevel[0] > 0.0: scalarRange = [self.WindowLevel[1] - self.WindowLevel[0]/2.0, self.WindowLevel[1] + self.WindowLevel[0]/2.0] else: scalarRange = self.Image.GetScalarRange() colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.AddRGBPoint(scalarRange[0], 0.0, 0.0, 0.0) colorTransferFunction.AddRGBPoint(scalarRange[1], 1.0, 1.0, 1.0) volumeMapper = vtk.vtkFixedPointVolumeRayCastMapper() volumeMapper.SetInput(self.Image) volumeMapper.SetBlendModeToMaximumIntensity() if self.AutoSampleDistance: volumeMapper.AutoAdjustSampleDistancesOn() else: volumeMapper.SetSampleDistance(self.SampleDistance) volumeProperty = vtk.vtkVolumeProperty() volumeProperty.ShadeOn() volumeProperty.SetInterpolationTypeToLinear() volumeProperty.SetColor(colorTransferFunction) self.Volume = vtk.vtkVolume() self.Volume.SetMapper(volumeMapper) self.Volume.SetProperty(volumeProperty) self.vmtkRenderer.Renderer.AddVolume(self.Volume) if (self.Display == 1): self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) self.PlaneWidget = vtk.vtkImplicitPlaneWidget() if self.Actor != None: self.vmtkRenderer.Renderer.RemoveActor(self.Actor) if self.Mesh != None: self.MeshCutFilter = vtk.vtkCutter() self.MeshCutFilter.SetInputData(self.Mesh) cutPlane = vtk.vtkPlane() self.PlaneWidget.GetPlane(cutPlane) self.MeshCutFilter.SetCutFunction(cutPlane) self.MeshCutFilter.Update() self.Surface = self.MeshCutFilter.GetOutput() self.PlaneWidget.AddObserver("StartInteractionEvent",self.StartPlaneCallback) self.PlaneWidget.AddObserver("EndInteractionEvent",self.EndPlaneCallback) mapper = vtk.vtkDataSetMapper() mapper.SetInputData(self.Mesh) self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.Actor.GetProperty().SetOpacity(self.Opacity) self.PlaneWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidget.SetPlaceFactor(1.25) self.PlaneWidget.DrawPlaneOn() self.PlaneWidget.GetPlaneProperty().SetOpacity(0.1) self.PlaneWidget.SetProp3D(self.Actor) self.PlaneWidget.PlaceWidget() self.PlaneWidget.SetOrigin(self.Actor.GetCenter()) self.PlaneWidget.On() if (self.Display == 1): self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self.Image == None) & (self.Display == 1): self.PrintError('Error: no Image.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.PaintedImage = vtk.vtkImageData() self.PaintedImage.DeepCopy(self.Image) self.vmtkRenderer.RegisterScript(self) ##self.PrintLog('Ctrl + left click to add seed.') self.Picker = vtk.vtkCellPicker() self.Picker.SetTolerance(0.005) self.PlaneWidgetX = vtk.vtkImagePlaneWidget() self.PlaneWidgetX.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidgetX.AddObserver("StartInteractionEvent", self.StartInteraction) self.PlaneWidgetX.AddObserver("InteractionEvent", self.Interaction) self.PlaneWidgetX.AddObserver("EndInteractionEvent", self.EndInteraction) self.PlaneWidgetX.SetPicker(self.Picker) self.PlaneWidgetY = vtk.vtkImagePlaneWidget() self.PlaneWidgetY.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidgetY.AddObserver("StartInteractionEvent", self.StartInteraction) self.PlaneWidgetY.AddObserver("InteractionEvent", self.Interaction) self.PlaneWidgetY.AddObserver("EndInteractionEvent", self.EndInteraction) self.PlaneWidgetY.SetPicker(self.Picker) self.PlaneWidgetZ = vtk.vtkImagePlaneWidget() self.PlaneWidgetZ.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidgetZ.AddObserver("StartInteractionEvent", self.StartInteraction) self.PlaneWidgetZ.AddObserver("InteractionEvent", self.Interaction) self.PlaneWidgetZ.AddObserver("EndInteractionEvent", self.EndInteraction) self.PlaneWidgetZ.SetPicker(self.Picker) self.BuildView() self.WidgetsOff() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self.Mesh == None): self.PrintError('Error: no Mesh.') self.Planes = vtk.vtkPlanes() self.Clipper = vtk.vtkClipDataSet() self.Clipper.SetInput(self.Mesh) self.Clipper.SetClipFunction(self.Planes) self.Clipper.GenerateClippedOutputOn() self.Clipper.InsideOutOn() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) mapper = vtk.vtkDataSetMapper() mapper.SetInput(self.Mesh) mapper.ScalarVisibilityOff() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.BoxWidget = vtk.vtkBoxWidget() self.BoxWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.BoxWidget.GetFaceProperty().SetColor(0.6,0.6,0.2) self.BoxWidget.GetFaceProperty().SetOpacity(0.25) self.vmtkRenderer.AddKeyBinding('i','Interact.', self.InteractCallback) self.vmtkRenderer.AddKeyBinding('space','Clip.', self.ClipCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate() if self.Mesh.GetSource(): self.Mesh.GetSource().UnRegisterAllOutputs()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInput(self.SeedPoints) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToDataScalingOff() glyphs.SetScaleFactor(self.Surface.GetLength()*0.01) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInput(glyphs.GetOutput()) glyphMapper.ScalarVisibilityOff() self.PointActor = vtk.vtkActor() self.PointActor.SetMapper(glyphMapper) self.PointActor.GetProperty().SetColor(1.0,0.0,0.0) self.PointActor.GetProperty().SetOpacity(self.Opacity) self.PointActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.PointActor) examineGlyphs = vtk.vtkGlyph3D() examineGlyphSource = vtk.vtkSphereSource() examineGlyphSource.SetRadius(1) examineGlyphs.SetInput(self.ExamineSpheres) examineGlyphs.SetSource(examineGlyphSource.GetOutput()) examineGlyphs.SetScaleModeToScaleByScalar() examineGlyphs.SetScaleFactor(1.) examineGlyphMapper = vtk.vtkPolyDataMapper() examineGlyphMapper.SetInput(examineGlyphs.GetOutput()) examineGlyphMapper.ScalarVisibilityOff() self.ExamineSpheresActor = vtk.vtkActor() self.ExamineSpheresActor.SetMapper(examineGlyphMapper) self.ExamineSpheresActor.GetProperty().SetColor(0.0,1.0,0.0) self.ExamineSpheresActor.GetProperty().SetOpacity(self.Opacity) self.ExamineSpheresActor.PickableOff() self.ExamineSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ExamineSpheresActor) #self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.vmtkRenderer.AddKeyBinding('u','Undo.',self.UndoCallback) self.vmtkRenderer.AddKeyBinding('space','Pick points.',self.SpaceCallback) self.vmtkRenderer.AddKeyBinding('w','Examine mode.',self.ExamineCallback) self.vmtkRenderer.AddKeyBinding('d','Display Distance.',self.DisplayDistanceCallback) self.vmtkRenderer.AddKeyBinding('a','Add.',self.AddCallback) self.SurfaceMapper = vtk.vtkPolyDataMapper() self.SurfaceMapper.SetInput(self.Surface) self.SurfaceMapper.SetScalarVisibility(self.DisplayArray) surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(self.SurfaceMapper) surfaceActor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.SurfaceMapper.GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle('distances') self.ScalarBarActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) self.ExamineText = vtk.vtkTextActor() self.ExamineText.SetInput("Examine Mode") self.ExamineText.GetPositionCoordinate().SetCoordinateSystemToNormalizedViewport() self.ExamineText.SetPosition(0.05,0.95) self.ExamineText.VisibilityOff() self.vmtkRenderer.Renderer.AddActor2D(self.ExamineText) self.InputInfo('Please position the mouse and press space to add points, \'u\' to undo\n') any = 0 while any == 0: self.InitializeSeeds() self.vmtkRenderer.Render() any = self.SeedIds.GetNumberOfIds() self.Surface = self.ComputeDistances() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Actor: self.vmtkRenderer.Renderer.RemoveActor(self.Actor) if self.ScalarBarActor: self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.Surface: mapper = vtk.vtkPolyDataMapper() mapper.SetInput(self.Surface) if self.ArrayName: if self.DisplayCellData == 0: self.Surface.GetPointData().SetActiveScalars(self.ArrayName) array = self.Surface.GetPointData().GetScalars() else: self.Surface.GetCellData().SetActiveScalars(self.ArrayName) array = self.Surface.GetCellData().GetScalars() mapper.SetScalarModeToUseCellData() if (self.ScalarRange[1] > self.ScalarRange[0]): mapper.SetScalarRange(self.ScalarRange) elif array: mapper.SetScalarRange(array.GetRange(0)) if self.Grayscale: lut = vtk.vtkLookupTable() lut.SetValueRange(0.0,1.0) lut.SetSaturationRange(0.0,0.0) mapper.SetLookupTable(lut) else: mapper.ScalarVisibilityOff() if self.ColorMap == 'grayscale': lut = mapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) lut.SetValueRange(0.0,1.0) lut.SetSaturationRange(0.0,0.0) lut.Build() mapper.SetLookupTable(lut) if self.ColorMap == 'rainbow': lut = mapper.GetLookupTable() lut.SetHueRange(0.666667,0.0) lut.SetSaturationRange(0.75,0.75) lut.SetValueRange(1.0,1.0) lut.SetAlphaRange(1.0,1.0) lut.SetNumberOfColors(self.NumberOfColors) lut.Build() mapper.SetLookupTable(lut) if self.ColorMap == 'blackbody': lut = mapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToRGB() colorTransferFunction.AddRGBPoint(0,0.0,0.0,0.0) colorTransferFunction.AddRGBPoint(0.4,0.901961,0.0,0.0) colorTransferFunction.AddRGBPoint(0.8,0.901961,0.901961,0.0) colorTransferFunction.AddRGBPoint(1.0,1.0,1.0,1.0) for ii,ss in enumerate([float(xx)/float(self.NumberOfColors) for xx in range(self.NumberOfColors)]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii,cc[0],cc[1],cc[2],1.0) lut.Build() mapper.SetLookupTable(lut) if self.ColorMap == 'cooltowarm': lut = mapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToDiverging() colorTransferFunction.AddRGBPoint(0,0.231373,0.298039,0.752941) colorTransferFunction.AddRGBPoint(0.5,0.865003,0.865003,0.865003) colorTransferFunction.AddRGBPoint(1.0,0.705882,0.0156863,0.14902) for ii,ss in enumerate([float(xx)/float(self.NumberOfColors) for xx in range(self.NumberOfColors)]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii,cc[0],cc[1],cc[2],1.0) lut.Build() mapper.SetLookupTable(lut) self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) if (self.Color[0] >= 0.0): self.Actor.GetProperty().SetColor(self.Color) self.Actor.GetProperty().SetOpacity(self.Opacity) self.Actor.GetProperty().SetLineWidth(self.LineWidth) if self.FlatInterpolation: self.Actor.GetProperty().SetInterpolationToFlat() self.SetSurfaceRepresentation(self.Representation) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.vmtkRenderer.AddKeyBinding('w','Change surface representation.',self.RepresentationCallback) if self.Legend and self.Actor: self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.Actor.GetMapper().GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() ## self.ScalarBarActor.GetLabelTextProperty().SetColor(0.0,0.0,0.0) self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle(self.LegendTitle) self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) if self.Display: self.vmtkRenderer.Render() ## self.vmtkRenderer.Renderer.RemoveActor(self.Actor) ## self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildViewWithTag(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Actor: self.vmtkRenderer.Renderer.RemoveActor(self.Actor) if self.ScalarBarActor: self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.Surface.GetPointData().GetArray( self.RegionTagArrayName) == None and self.Surface.GetCellData( ).GetArray(self.RegionTagArrayName) == None: self.PrintError('Error: no regiontagarray with name specified') elif self.Surface.GetPointData().GetArray( self.RegionTagArrayName) != None: regionTagArray = self.Surface.GetPointData().GetArray( self.RegionTagArrayName) for j in range(self.Surface.GetNumberOfPoints()): if regionTagArray.GetTuple1(j) not in self.TagSet: self.TagSet.append(regionTagArray.GetTuple1(j)) self.TagSet.sort() self.NumberOfRegions = len(self.TagSet) tagSetCopy = list(self.TagSet) labelPoints = vtk.vtkPoints() labelPoints.SetNumberOfPoints(len(self.TagSet)) point = [0.0, 0.0, 0.0] for j in range(self.Surface.GetNumberOfPoints()): item = regionTagArray.GetTuple1(j) if item in tagSetCopy: self.Surface.GetPoint(j, point) labelPoints.SetPoint(self.TagSet.index(item), point) tagSetCopy.remove(item) self.Surface.GetPointData().SetActiveScalars( self.RegionTagArrayName) elif self.Surface.GetCellData().GetArray( self.RegionTagArrayName) != None: regionTagArray = self.Surface.GetCellData().GetArray( self.RegionTagArrayName) for j in range(self.Surface.GetNumberOfCells()): if regionTagArray.GetTuple1(j) not in self.TagSet: self.TagSet.append(regionTagArray.GetTuple1(j)) self.TagSet.sort() self.NumberOfRegions = len(self.TagSet) tagSetCopy = list(self.TagSet) labelPoints = vtk.vtkPoints() labelPoints.SetNumberOfPoints(len(self.TagSet)) point = [0.0, 0.0, 0.0] cellCenters = vtk.vtkCellCenters() cellCenters.SetInputData(self.Surface) cellCenters.Update() regionTagArrayCenters = cellCenters.GetOutput().GetPointData( ).GetArray(self.RegionTagArrayName) for j in range(cellCenters.GetOutput().GetNumberOfPoints()): item = regionTagArrayCenters.GetTuple1(j) if item in tagSetCopy: cellCenters.GetOutput().GetPoint(j, point) labelPoints.SetPoint(self.TagSet.index(item), point) tagSetCopy.remove(item) self.Surface.GetCellData().SetActiveScalars( self.RegionTagArrayName) labelPolyData = vtk.vtkPolyData() labelPolyData.SetPoints(labelPoints) labelArray = vtk.vtkIntArray() labelArray.SetNumberOfComponents(1) labelArray.SetNumberOfTuples(self.NumberOfRegions) labelArray.SetName('label') labelArray.FillComponent(0, 0) labelPolyData.GetPointData().AddArray(labelArray) for item in self.TagSet: labelArray.SetTuple1(self.TagSet.index(item), item) labelPolyData.GetPointData().SetActiveScalars('label') labelsMapper = vtk.vtkLabeledDataMapper() labelsMapper.SetInputData(labelPolyData) labelsMapper.SetLabelModeToLabelScalars() labelsMapper.GetLabelTextProperty().SetColor(1, 1, 1) labelsMapper.GetLabelTextProperty().SetFontSize(14) self.labelsActor = vtk.vtkActor2D() self.labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(self.labelsActor) surfaceMapper = vtk.vtkPolyDataMapper() surfaceMapper.SetInputData(self.Surface) surfaceMapper.ScalarVisibilityOn() surfaceMapper.SetScalarRange(self.TagSet[0], self.TagSet[self.NumberOfRegions - 1]) self.Actor = vtk.vtkActor() self.Actor.SetMapper(surfaceMapper) self.Actor.GetProperty().SetOpacity(self.Opacity) self.Actor.GetProperty().SetLineWidth(self.LineWidth) if self.FlatInterpolation: self.Actor.GetProperty().SetInterpolationToFlat() self.SetSurfaceRepresentation(self.Representation) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.vmtkRenderer.AddKeyBinding('w', 'Change surface representation.', self.RepresentationCallback) if self.Legend and self.Actor: self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable( self.Actor.GetMapper().GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() ## self.ScalarBarActor.GetLabelTextProperty().SetColor(0.0,0.0,0.0) self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle(self.LegendTitle) self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) if self.Display: self.vmtkRenderer.Render() ## self.vmtkRenderer.Renderer.RemoveActor(self.Actor) ## self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if not self.Centerlines: self.PrintError("Error: No input centerlines.") return if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.CellDataArrayName: cellCenters = vtk.vtkCellCenters() cellCenters.SetInputData(self.Centerlines) cellCenters.Update() cellCenters.GetOutput().GetPointData().SetActiveScalars(self.CellDataArrayName) labelsMapper = vtk.vtkLabeledDataMapper() labelsMapper.SetInputConnection(cellCenters.GetOutputPort()) labelsMapper.SetLabelModeToLabelScalars() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) centerlineMapper = vtk.vtkPolyDataMapper() centerlineMapper.SetInputData(self.Centerlines) if self.CellDataArrayName and not self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUseCellData() self.Centerlines.GetCellData().SetActiveScalars(self.CellDataArrayName) centerlineMapper.SetScalarRange(self.Centerlines.GetCellData().GetScalars().GetRange(0)) elif self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUsePointData() self.Centerlines.GetPointData().SetActiveScalars(self.PointDataArrayName) centerlineMapper.SetScalarRange(self.Centerlines.GetPointData().GetScalars().GetRange(0)) else: centerlineMapper.ScalarVisibilityOff() if self.ColorMap == "grayscale": lut = centerlineMapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) lut.SetValueRange(0.0, 1.0) lut.SetSaturationRange(0.0, 0.0) lut.Build() centerlineMapper.SetLookupTable(lut) if self.ColorMap == "rainbow": lut = centerlineMapper.GetLookupTable() lut.SetHueRange(0.666667, 0.0) lut.SetSaturationRange(0.75, 0.75) lut.SetValueRange(1.0, 1.0) lut.SetAlphaRange(1.0, 1.0) lut.SetNumberOfColors(self.NumberOfColors) lut.Build() centerlineMapper.SetLookupTable(lut) if self.ColorMap == "blackbody": lut = centerlineMapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToRGB() colorTransferFunction.AddRGBPoint(0, 0.0, 0.0, 0.0) colorTransferFunction.AddRGBPoint(0.4, 0.901961, 0.0, 0.0) colorTransferFunction.AddRGBPoint(0.8, 0.901961, 0.901961, 0.0) colorTransferFunction.AddRGBPoint(1.0, 1.0, 1.0, 1.0) for ii, ss in enumerate([float(xx) / float(self.NumberOfColors) for xx in range(self.NumberOfColors)]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii, cc[0], cc[1], cc[2], 1.0) lut.Build() centerlineMapper.SetLookupTable(lut) if self.ColorMap == "cooltowarm": lut = centerlineMapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToDiverging() colorTransferFunction.AddRGBPoint(0, 0.231373, 0.298039, 0.752941) colorTransferFunction.AddRGBPoint(0.5, 0.865003, 0.865003, 0.865003) colorTransferFunction.AddRGBPoint(1.0, 0.705882, 0.0156863, 0.14902) for ii, ss in enumerate([float(xx) / float(self.NumberOfColors) for xx in range(self.NumberOfColors)]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii, cc[0], cc[1], cc[2], 1.0) lut.Build() centerlineMapper.SetLookupTable(lut) centerlineActor = vtk.vtkActor() centerlineActor.SetMapper(centerlineMapper) self.vmtkRenderer.Renderer.AddActor(centerlineActor) scalarBarActor = None if self.Legend and centerlineActor and self.PointDataArrayName: scalarBarActor = vtk.vtkScalarBarActor() scalarBarActor.SetLookupTable(centerlineActor.GetMapper().GetLookupTable()) scalarBarActor.GetLabelTextProperty().ItalicOff() scalarBarActor.GetLabelTextProperty().BoldOff() scalarBarActor.GetLabelTextProperty().ShadowOff() scalarBarActor.SetLabelFormat("%.2f") scalarBarActor.SetTitle(self.PointDataArrayName) self.vmtkRenderer.Renderer.AddActor(scalarBarActor) if self.Display: self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if self.ExtensionMode == "centerlinedirection" and self.Centerlines == None: self.PrintError('Error: No input centerlines.') boundaryIds = vtk.vtkIdList() if self.Interactive: if not self.vmtkRenderer: import vmtkrenderer self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 boundaryExtractor = vtkvmtk.vtkvmtkPolyDataBoundaryExtractor() boundaryExtractor.SetInput(self.Surface) boundaryExtractor.Update() boundaries = boundaryExtractor.GetOutput() numberOfBoundaries = boundaries.GetNumberOfCells() seedPoints = vtk.vtkPoints() for i in range(numberOfBoundaries): barycenter = [0.0, 0.0, 0.0] vtkvmtk.vtkvmtkBoundaryReferenceSystems.ComputeBoundaryBarycenter(boundaries.GetCell(i).GetPoints(),barycenter) seedPoints.InsertNextPoint(barycenter) seedPolyData = vtk.vtkPolyData() seedPolyData.SetPoints(seedPoints) seedPolyData.Update() labelsMapper = vtk.vtkLabeledDataMapper(); labelsMapper.SetInput(seedPolyData) labelsMapper.SetLabelModeToLabelIds() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) surfaceMapper = vtk.vtkPolyDataMapper() surfaceMapper.SetInput(self.Surface) surfaceMapper.ScalarVisibilityOff() surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(surfaceMapper) surfaceActor.GetProperty().SetOpacity(0.25) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.vmtkRenderer.Render() self.vmtkRenderer.Renderer.RemoveActor(labelsActor) self.vmtkRenderer.Renderer.RemoveActor(surfaceActor) ok = False while not ok: labelString = self.InputText("Please input boundary ids: ",self.LabelValidator) labels = [int(label) for label in labelString.split()] ok = True for label in labels: if label not in range(numberOfBoundaries): ok = False for label in labels: boundaryIds.InsertNextId(label) flowExtensionsFilter = vtkvmtk.vtkvmtkPolyDataFlowExtensionsFilter() flowExtensionsFilter.SetInput(self.Surface) flowExtensionsFilter.SetCenterlines(self.Centerlines) flowExtensionsFilter.SetSigma(self.Sigma) flowExtensionsFilter.SetAdaptiveExtensionLength(self.AdaptiveExtensionLength) flowExtensionsFilter.SetAdaptiveExtensionRadius(self.AdaptiveExtensionRadius) flowExtensionsFilter.SetAdaptiveNumberOfBoundaryPoints(self.AdaptiveNumberOfBoundaryPoints) flowExtensionsFilter.SetExtensionLength(self.ExtensionLength) flowExtensionsFilter.SetExtensionRatio(self.ExtensionRatio) flowExtensionsFilter.SetExtensionRadius(self.ExtensionRadius) flowExtensionsFilter.SetTransitionRatio(self.TransitionRatio) flowExtensionsFilter.SetCenterlineNormalEstimationDistanceRatio(self.CenterlineNormalEstimationDistanceRatio) flowExtensionsFilter.SetNumberOfBoundaryPoints(self.TargetNumberOfBoundaryPoints) if self.ExtensionMode == "centerlinedirection": flowExtensionsFilter.SetExtensionModeToUseCenterlineDirection() elif self.ExtensionMode == "boundarynormal": flowExtensionsFilter.SetExtensionModeToUseNormalToBoundary() if self.InterpolationMode == "linear": flowExtensionsFilter.SetInterpolationModeToLinear() elif self.InterpolationMode == "thinplatespline": flowExtensionsFilter.SetInterpolationModeToThinPlateSpline() if self.Interactive: flowExtensionsFilter.SetBoundaryIds(boundaryIds) flowExtensionsFilter.Update() self.Surface = flowExtensionsFilter.GetOutput() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if self.CheckNonManifold: self.PrintLog('NonManifold check.') nonManifoldChecker = vmtkNonManifoldSurfaceChecker() nonManifoldChecker.Surface = self.Surface nonManifoldChecker.PrintError = self.PrintError nonManifoldChecker.Execute() if (nonManifoldChecker.NumberOfNonManifoldEdges > 0): self.PrintLog(nonManifoldChecker.Report) return if not self.vmtkRenderer and self.SeedSelectorName in [ 'pickpoint', 'openprofiles' ]: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.PrintLog('Cleaning surface.') surfaceCleaner = vtk.vtkCleanPolyData() surfaceCleaner.SetInput(self.Surface) surfaceCleaner.Update() self.PrintLog('Triangulating surface.') surfaceTriangulator = vtk.vtkTriangleFilter() surfaceTriangulator.SetInput(surfaceCleaner.GetOutput()) surfaceTriangulator.PassLinesOff() surfaceTriangulator.PassVertsOff() surfaceTriangulator.Update() centerlineInputSurface = surfaceTriangulator.GetOutput() capCenterIds = None if self.SeedSelectorName in [ 'openprofiles', 'carotidprofiles', 'pickpoint', 'profileidlist' ]: self.PrintLog('Capping surface.') surfaceCapper = vtkvmtk.vtkvmtkCapPolyData() surfaceCapper.SetInput(surfaceTriangulator.GetOutput()) surfaceCapper.SetDisplacement(self.CapDisplacement) surfaceCapper.SetInPlaneDisplacement(self.CapDisplacement) surfaceCapper.Update() centerlineInputSurface = surfaceCapper.GetOutput() capCenterIds = surfaceCapper.GetCapCenterIds() if self.SeedSelector: pass elif self.SeedSelectorName: if self.SeedSelectorName == 'pickpoint': self.SeedSelector = vmtkPickPointSeedSelector() self.SeedSelector.vmtkRenderer = self.vmtkRenderer self.SeedSelector.Script = self elif self.SeedSelectorName == 'openprofiles': self.SeedSelector = vmtkOpenProfilesSeedSelector() self.SeedSelector.vmtkRenderer = self.vmtkRenderer self.SeedSelector.Script = self self.SeedSelector.SetSeedIds(surfaceCapper.GetCapCenterIds()) elif self.SeedSelectorName == 'carotidprofiles': self.SeedSelector = vmtkCarotidProfilesSeedSelector() self.SeedSelector.SetSeedIds(surfaceCapper.GetCapCenterIds()) elif self.SeedSelectorName == 'idlist': self.SeedSelector = vmtkIdListSeedSelector() self.SeedSelector.SourceIds = self.SourceIds self.SeedSelector.TargetIds = self.TargetIds elif self.SeedSelectorName == 'pointlist': self.SeedSelector = vmtkPointListSeedSelector() self.SeedSelector.SourcePoints = self.SourcePoints self.SeedSelector.TargetPoints = self.TargetPoints elif self.SeedSelectorName != 'profileidlist': self.PrintError( "SeedSelectorName unknown (available: pickpoint, openprofiles, carotidprofiles, profileidlist, idlist, pointlist)" ) return else: self.PrintError( 'vmtkCenterlines error: either SeedSelector or SeedSelectorName must be specified' ) return if self.SeedSelector: self.SeedSelector.SetSurface(centerlineInputSurface) self.SeedSelector.InputInfo = self.InputInfo self.SeedSelector.InputText = self.InputText self.SeedSelector.OutputText = self.OutputText self.SeedSelector.PrintError = self.PrintError self.SeedSelector.PrintLog = self.PrintLog self.SeedSelector.Execute() inletSeedIds = self.SeedSelector.GetSourceSeedIds() outletSeedIds = self.SeedSelector.GetTargetSeedIds() else: inletSeedIds = vtk.vtkIdList() outletSeedIds = vtk.vtkIdList() for id in self.SourceIds: inletSeedIds.InsertNextId(id) if self.TargetIds: for id in self.TargetIds: outletSeedIds.InsertNextId(id) else: for i in range(capCenterIds.GetNumberOfIds()): if i not in self.SourceIds: outletSeedIds.InsertNextId(i) self.PrintLog('Computing centerlines.') self.InputInfo('Computing centerlines...') centerlineFilter = vtkvmtk.vtkvmtkPolyDataCenterlines() centerlineFilter.SetInput(centerlineInputSurface) if self.SeedSelectorName in [ 'openprofiles', 'carotidprofiles', 'profileidlist' ]: centerlineFilter.SetCapCenterIds(capCenterIds) centerlineFilter.SetSourceSeedIds(inletSeedIds) centerlineFilter.SetTargetSeedIds(outletSeedIds) centerlineFilter.SetRadiusArrayName(self.RadiusArrayName) centerlineFilter.SetCostFunction(self.CostFunction) centerlineFilter.SetFlipNormals(self.FlipNormals) centerlineFilter.SetAppendEndPointsToCenterlines(self.AppendEndPoints) centerlineFilter.SetSimplifyVoronoi(self.SimplifyVoronoi) if self.DelaunayTessellation != None: centerlineFilter.GenerateDelaunayTessellationOff() centerlineFilter.SetDelaunayTessellation(self.DelaunayTessellation) centerlineFilter.SetDelaunayTolerance(self.DelaunayTolerance) if self.UseTetGen == 1: self.PrintLog('Running TetGen.') import vmtkscripts surfaceToMesh = vmtkscripts.vmtkSurfaceToMesh() surfaceToMesh.Surface = centerlineInputSurface surfaceToMesh.Execute() tetgen = vmtkscripts.vmtkTetGen() tetgen.Mesh = surfaceToMesh.Mesh tetgen.PLC = 1 tetgen.NoMerge = 1 tetgen.Quality = 0 if self.TetGenDetectInter == 1: tetgen.DetectInter = 1 tetgen.NoMerge = 0 tetgen.OutputSurfaceElements = 0 tetgen.Execute() centerlineFilter.GenerateDelaunayTessellationOff() centerlineFilter.SetDelaunayTessellation(tetgen.Mesh) centerlineFilter.SetCenterlineResampling(self.Resampling) centerlineFilter.SetResamplingStepLength(self.ResamplingStepLength) centerlineFilter.Update() self.Centerlines = centerlineFilter.GetOutput() self.VoronoiDiagram = centerlineFilter.GetVoronoiDiagram() self.DelaunayTessellation = centerlineFilter.GetDelaunayTessellation() self.PoleIds = centerlineFilter.GetPoleIds() self.EikonalSolutionArrayName = centerlineFilter.GetEikonalSolutionArrayName( ) self.EdgeArrayName = centerlineFilter.GetEdgeArrayName() self.EdgePCoordArrayName = centerlineFilter.GetEdgePCoordArrayName() self.CostFunctionArrayName = centerlineFilter.GetCostFunctionArrayName( ) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if not self.Centerlines: self.PrintError('Error: No input centerlines.') return if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.CellDataArrayName: cellCenters = vtk.vtkCellCenters() cellCenters.SetInput(self.Centerlines) cellCenters.Update() cellCenters.GetOutput().GetPointData().SetActiveScalars( self.CellDataArrayName) labelsMapper = vtk.vtkLabeledDataMapper() labelsMapper.SetInput(cellCenters.GetOutput()) labelsMapper.SetLabelModeToLabelScalars() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) centerlineMapper = vtk.vtkPolyDataMapper() centerlineMapper.SetInput(self.Centerlines) if self.CellDataArrayName and not self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUseCellData() self.Centerlines.GetCellData().SetActiveScalars( self.CellDataArrayName) centerlineMapper.SetScalarRange( self.Centerlines.GetCellData().GetScalars().GetRange(0)) elif self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUsePointData() self.Centerlines.GetPointData().SetActiveScalars( self.PointDataArrayName) centerlineMapper.SetScalarRange( self.Centerlines.GetPointData().GetScalars().GetRange(0)) else: centerlineMapper.ScalarVisibilityOff() centerlineActor = vtk.vtkActor() centerlineActor.SetMapper(centerlineMapper) self.vmtkRenderer.Renderer.AddActor(centerlineActor) scalarBarActor = None if self.Legend and centerlineActor and self.PointDataArrayName: scalarBarActor = vtk.vtkScalarBarActor() scalarBarActor.SetLookupTable( centerlineActor.GetMapper().GetLookupTable()) scalarBarActor.GetLabelTextProperty().ItalicOff() scalarBarActor.GetLabelTextProperty().BoldOff() scalarBarActor.GetLabelTextProperty().ShadowOff() scalarBarActor.SetLabelFormat('%.2f') scalarBarActor.SetTitle(self.PointDataArrayName) self.vmtkRenderer.Renderer.AddActor(scalarBarActor) if self.Display: self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self._Surface == None): self.PrintError( 'vmtkPickPointSeedSelector Error: Surface not set.') return self._SourceSeedIds.Initialize() self._TargetSeedIds.Initialize() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self.Script) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphs.SetInput(self.PickedSeeds) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToDataScalingOff() glyphs.SetScaleFactor(self._Surface.GetLength() * 0.01) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInput(glyphs.GetOutput()) self.SeedActor = vtk.vtkActor() self.SeedActor.SetMapper(glyphMapper) self.SeedActor.GetProperty().SetColor(1.0, 0.0, 0.0) self.SeedActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SeedActor) ##self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.vmtkRenderer.AddKeyBinding('u', 'Undo.', self.UndoCallback) self.vmtkRenderer.AddKeyBinding('space', 'Add points.', self.PickCallback) surfaceMapper = vtk.vtkPolyDataMapper() surfaceMapper.SetInput(self._Surface) surfaceMapper.ScalarVisibilityOff() surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(surfaceMapper) surfaceActor.GetProperty().SetOpacity(1.0) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.InputInfo( 'Please position the mouse and press space to add source points, \'u\' to undo\n' ) any = 0 while any == 0: self.InitializeSeeds() self.vmtkRenderer.Render() any = self.PickedSeedIds.GetNumberOfIds() self._SourceSeedIds.DeepCopy(self.PickedSeedIds) self.InputInfo( 'Please position the mouse and press space to add target points, \'u\' to undo\n' ) any = 0 while any == 0: self.InitializeSeeds() self.vmtkRenderer.Render() any = self.PickedSeedIds.GetNumberOfIds() self._TargetSeedIds.DeepCopy(self.PickedSeedIds) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self.Surface == None): self.PrintError('Error: no Surface.') #if (self.ReferenceSurface == None): # self.PrintError('Error: no Reference Surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Transform == None: self.Transform = vtk.vtkTransform() if self.TransformFilter == None: self.TransformFilter = vtk.vtkTransformPolyDataFilter() self.TransformFilter.SetInput(self.Surface) self.TransformFilter.SetTransform(self.Transform) self.TransformFilter.Update() self.TransformFilter.GetOutput().Update() self.TransformedSurface.ShallowCopy(self.TransformFilter.GetOutput()) self.TransformedSurface.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInput(self.TransformedSurface) mapper.ScalarVisibilityOff() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.Actor.GetProperty().SetColor(1.0, 0.1, 0.1) #self.Actor.GetProperty().SetOpacity(0.5) self.vmtkRenderer.Renderer.AddActor(self.Actor) if self.ReferenceSurface: mapper2 = vtk.vtkPolyDataMapper() mapper2.SetInput(self.ReferenceSurface) mapper2.ScalarVisibilityOff() self.Actor2 = vtk.vtkActor() self.Actor2.SetMapper(mapper2) self.Actor2.GetProperty().SetColor(1.0, 1.0, 1.0) self.Actor2.GetProperty().SetOpacity(0.5) self.vmtkRenderer.Renderer.AddActor(self.Actor2) self.BoxWidget = vtk.vtkBoxWidget() self.BoxWidget.SetPlaceFactor(1.0) self.BoxWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.BoxWidget.GetFaceProperty().SetColor(0.6, 0.6, 0.2) self.BoxWidget.GetFaceProperty().SetOpacity(0.25) self.BoxWidget.ScalingEnabledOff() self.BoxWidget.HandlesOff() if self.Scaling: self.BoxWidget.ScalingEnabledOn() self.BoxWidget.HandlesOn() self.vmtkRenderer.RegisterScript(self) self.InputInfo( 'Use the left-mousebutton to rotate the box \nUse the middle-mouse-button to move the box \nPress space to move the surface to its new postion' ) #self.OutputText('Press \'i\' to activate the box widget interactor \n') #self.OutputText('Use the left-mousebutton to rotate the box \n') #self.OutputText('Use the middle-mouse-button to move the box \n') #self.OutputText('Press space to move the surface to its new postion \n') #self.OutputText('Press \'q\' to quit and apply the transform \n') self.vmtkRenderer.AddKeyBinding('space', 'Move the surface.', self.MoveCallback) self.vmtkRenderer.AddKeyBinding('i', 'Interact.', self.InteractCallback) self.Display() self.Surface = self.TransformedSurface self.Matrix4x4 = self.Transform.GetMatrix() matrix = self.Matrix4x4 self.MatrixCoefficients = [ matrix.GetElement(0, 0), matrix.GetElement(0, 1), matrix.GetElement(0, 2), matrix.GetElement(0, 3), matrix.GetElement(1, 0), matrix.GetElement(1, 1), matrix.GetElement(1, 2), matrix.GetElement(1, 3), matrix.GetElement(2, 0), matrix.GetElement(2, 1), matrix.GetElement(2, 2), matrix.GetElement(2, 3), matrix.GetElement(3, 0), matrix.GetElement(3, 1), matrix.GetElement(3, 2), matrix.GetElement(3, 3) ] if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInputData(self.Spheres) glyphs.SetSourceConnection(glyphSource.GetOutputPort()) glyphs.SetScaleModeToScaleByScalar() glyphs.SetScaleFactor(1.) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInputConnection(glyphs.GetOutputPort()) glyphMapper.ScalarVisibilityOff() self.SpheresActor = vtk.vtkActor() self.SpheresActor.SetMapper(glyphMapper) self.SpheresActor.GetProperty().SetColor(1.0, 0.0, 0.0) self.SpheresActor.GetProperty().SetOpacity(self.Opacity) self.SpheresActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SpheresActor) examineGlyphs = vtk.vtkGlyph3D() examineGlyphSource = vtk.vtkSphereSource() examineGlyphSource.SetRadius(1) examineGlyphs.SetInputData(self.ExamineSpheres) examineGlyphs.SetSourceConnection(examineGlyphSource.GetOutputPort()) examineGlyphs.SetScaleModeToScaleByScalar() examineGlyphs.SetScaleFactor(1.) examineGlyphMapper = vtk.vtkPolyDataMapper() examineGlyphMapper.SetInputConnection(examineGlyphs.GetOutputPort()) examineGlyphMapper.ScalarVisibilityOff() self.ExamineSpheresActor = vtk.vtkActor() self.ExamineSpheresActor.SetMapper(examineGlyphMapper) self.ExamineSpheresActor.GetProperty().SetColor(0.0, 1.0, 0.0) self.ExamineSpheresActor.GetProperty().SetOpacity(self.Opacity) self.ExamineSpheresActor.PickableOff() self.ExamineSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ExamineSpheresActor) #self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.vmtkRenderer.AddKeyBinding('u', 'undo', self.UndoCallback) self.vmtkRenderer.AddKeyBinding('plus', 'Increase sphere radius', self.PlusCallback) self.vmtkRenderer.AddKeyBinding('minus', 'Decrease sphere radius', self.MinusCallback) self.vmtkRenderer.AddKeyBinding('n', 'Show next sphere', self.NextSphereCallback) self.vmtkRenderer.AddKeyBinding('v', 'Show previous sphere', self.PreviousSphereCallback) self.vmtkRenderer.AddKeyBinding('d', 'Display ', self.DisplayCallback) self.vmtkRenderer.AddKeyBinding( 'w', 'Switch beetween examien and interact mode ', self.ExmienModeCallback) self.vmtkRenderer.AddKeyBinding('space', 'Pick sphere', self.PickCallback) self.SurfaceMapper = vtk.vtkPolyDataMapper() self.SurfaceMapper.SetInputData(self.Surface) self.SurfaceMapper.SetScalarVisibility(self.DisplayArray) surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(self.SurfaceMapper) surfaceActor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.SurfaceMapper.GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle('distances') self.ScalarBarActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) self.SphereWidget = vtk.vtkSphereWidget() self.SphereWidget.TranslationOff() self.SphereWidget.SetInteractor( self.vmtkRenderer.RenderWindowInteractor) self.SphereWidget.AddObserver("InteractionEvent", self.SphereCallback) self.ExamineText = vtk.vtkTextActor() self.ExamineText.SetInput("Examine Mode") self.ExamineText.GetPositionCoordinate( ).SetCoordinateSystemToNormalizedViewport() self.ExamineText.SetPosition(0.05, 0.95) self.ExamineText.VisibilityOff() self.vmtkRenderer.Renderer.AddActor2D(self.ExamineText) self.InputInfo( 'Please position the mouse and press space to add spheres, \'u\' to undo\n' ) any = 0 while any == 0: self.InitializeSpheres() self.vmtkRenderer.Render() any = (self.Spheres.GetNumberOfPoints() > 1) self.Surface = self.ComputeArray() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Actor: self.vmtkRenderer.Renderer.RemoveActor(self.Actor) if self.ScalarBarActor: self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.Surface: mapper = vtk.vtkPolyDataMapper() mapper.SetInput(self.Surface) if self.ArrayName: if self.DisplayCellData == 0: self.Surface.GetPointData().SetActiveScalars( self.ArrayName) array = self.Surface.GetPointData().GetScalars() else: self.Surface.GetCellData().SetActiveScalars(self.ArrayName) array = self.Surface.GetCellData().GetScalars() mapper.SetScalarModeToUseCellData() if (self.ScalarRange[1] > self.ScalarRange[0]): mapper.SetScalarRange(self.ScalarRange) elif array: mapper.SetScalarRange(array.GetRange(0)) if self.Grayscale: lut = vtk.vtkLookupTable() lut.SetValueRange(0.0, 1.0) lut.SetSaturationRange(0.0, 0.0) mapper.SetLookupTable(lut) else: mapper.ScalarVisibilityOff() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) if (self.Color[0] >= 0.0): self.Actor.GetProperty().SetColor(self.Color) self.Actor.GetProperty().SetOpacity(self.Opacity) self.Actor.GetProperty().SetLineWidth(self.LineWidth) if self.FlatInterpolation: self.Actor.GetProperty().SetInterpolationToFlat() self.vmtkRenderer.Renderer.AddActor(self.Actor) self.vmtkRenderer.AddKeyBinding('w', 'Change surface representation.', self.RepresentationCallback) if self.Legend and self.Actor: self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable( self.Actor.GetMapper().GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() ## self.ScalarBarActor.GetLabelTextProperty().SetColor(0.0,0.0,0.0) self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle(self.LegendTitle) self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) if self.Display: self.vmtkRenderer.Render() ## self.vmtkRenderer.Renderer.RemoveActor(self.Actor) ## self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self.Mesh == None): self.PrintError('Error: no Mesh.') self.Clipper = vtk.vtkClipDataSet() self.Clipper.SetInput(self.Mesh) self.Clipper.GenerateClippedOutputOn() self.Clipper.SetInsideOut(self.InsideOut) if self.Interactive: self.Planes = vtk.vtkPlanes() self.Clipper.SetClipFunction(self.Planes) self.Cutter = vtk.vtkCutter() self.Cutter.SetInput(self.Mesh) self.Cutter.SetCutFunction(self.Planes) self.ClippedMesh = vtk.vtkUnstructuredGrid() self.Surface = vtk.vtkPolyData() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) mapper = vtk.vtkDataSetMapper() mapper.SetInput(self.Mesh) mapper.ScalarVisibilityOff() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.BoxWidget = vtk.vtkBoxWidget() self.BoxWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.BoxWidget.GetFaceProperty().SetColor(0.6,0.6,0.2) self.BoxWidget.GetFaceProperty().SetOpacity(0.25) self.vmtkRenderer.AddKeyBinding('i','Interact.', self.InteractCallback) self.vmtkRenderer.AddKeyBinding('space','Clip.', self.ClipCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate() else: self.Mesh.GetPointData().SetActiveScalars(self.ClipArrayName) self.Clipper.GenerateClipScalarsOff() self.Clipper.SetValue(self.ClipValue) self.Clipper.Update() self.Cutter = vtk.vtkContourFilter() self.Cutter.SetInput(self.Mesh) self.Cutter.SetValue(0,self.ClipValue) self.Cutter.Update() self.Mesh = self.Clipper.GetOutput() self.Surface = self.Cutter.GetOutput() self.ClippedMesh = self.Clipper.GetClippedOutput() if self.Mesh.GetSource(): self.Mesh.GetSource().UnRegisterAllOutputs()
def Execute(self): if self.Mesh == None: self.PrintError("Error: no Mesh.") self.Clipper = vtk.vtkClipDataSet() self.Clipper.SetInput(self.Mesh) self.Clipper.GenerateClippedOutputOn() self.Clipper.SetInsideOut(self.InsideOut) if self.Interactive: self.Planes = vtk.vtkPlanes() self.Clipper.SetClipFunction(self.Planes) self.Cutter = vtk.vtkCutter() self.Cutter.SetInput(self.Mesh) self.Cutter.SetCutFunction(self.Planes) self.ClippedMesh = vtk.vtkUnstructuredGrid() self.Surface = vtk.vtkPolyData() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) mapper = vtk.vtkDataSetMapper() mapper.SetInput(self.Mesh) mapper.ScalarVisibilityOff() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.BoxWidget = vtk.vtkBoxWidget() self.BoxWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.BoxWidget.GetFaceProperty().SetColor(0.6, 0.6, 0.2) self.BoxWidget.GetFaceProperty().SetOpacity(0.25) self.vmtkRenderer.AddKeyBinding("i", "Interact.", self.InteractCallback) self.vmtkRenderer.AddKeyBinding("space", "Clip.", self.ClipCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate() else: self.Mesh.GetPointData().SetActiveScalars(self.ClipArrayName) self.Clipper.GenerateClipScalarsOff() self.Clipper.SetValue(self.ClipValue) self.Clipper.Update() self.Cutter = vtk.vtkContourFilter() self.Cutter.SetInput(self.Mesh) self.Cutter.SetValue(0, self.ClipValue) self.Cutter.Update() self.Mesh = self.Clipper.GetOutput() self.Surface = self.Cutter.GetOutput() self.ClippedMesh = self.Clipper.GetClippedOutput() if self.Mesh.GetSource(): self.Mesh.GetSource().UnRegisterAllOutputs()
def Execute(self): if self.Surface == None: self.PrintError("Error: No input surface.") if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInput(self.Spheres) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToScaleByScalar() glyphs.SetScaleFactor(1.0) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInput(glyphs.GetOutput()) glyphMapper.ScalarVisibilityOff() self.SpheresActor = vtk.vtkActor() self.SpheresActor.SetMapper(glyphMapper) self.SpheresActor.GetProperty().SetColor(1.0, 0.0, 0.0) self.SpheresActor.GetProperty().SetOpacity(self.Opacity) self.SpheresActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SpheresActor) examineGlyphs = vtk.vtkGlyph3D() examineGlyphSource = vtk.vtkSphereSource() examineGlyphSource.SetRadius(1) examineGlyphs.SetInput(self.ExamineSpheres) examineGlyphs.SetSource(examineGlyphSource.GetOutput()) examineGlyphs.SetScaleModeToScaleByScalar() examineGlyphs.SetScaleFactor(1.0) examineGlyphMapper = vtk.vtkPolyDataMapper() examineGlyphMapper.SetInput(examineGlyphs.GetOutput()) examineGlyphMapper.ScalarVisibilityOff() self.ExamineSpheresActor = vtk.vtkActor() self.ExamineSpheresActor.SetMapper(examineGlyphMapper) self.ExamineSpheresActor.GetProperty().SetColor(0.0, 1.0, 0.0) self.ExamineSpheresActor.GetProperty().SetOpacity(self.Opacity) self.ExamineSpheresActor.PickableOff() self.ExamineSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ExamineSpheresActor) self.vmtkRenderer.AddKeyBinding("u", "Undo.", self.UndoCallback) self.vmtkRenderer.AddKeyBinding("space", "Place picks.", self.PickCallback) self.vmtkRenderer.AddKeyBinding("+", "Increase sphere radius.", self.IncreaseSphereRadiusCallback) self.vmtkRenderer.AddKeyBinding("-", "Decrease sphere radius.", self.DecreaseSphereRadiusCallback) self.vmtkRenderer.AddKeyBinding("n", "Skip to next sphere.", self.NextCallback) self.vmtkRenderer.AddKeyBinding("v", "Skip to previous sphere.", self.PreviousCallback) self.vmtkRenderer.AddKeyBinding("d", "Show distances graph.", self.DistancesCallback) self.vmtkRenderer.AddKeyBinding("x", "Examine mode.", self.ExamineCallback) # self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.SurfaceMapper = vtk.vtkPolyDataMapper() self.SurfaceMapper.SetInput(self.Surface) self.SurfaceMapper.SetScalarVisibility(self.DisplayArray) surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(self.SurfaceMapper) surfaceActor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.SurfaceMapper.GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() self.ScalarBarActor.SetLabelFormat("%.2f") self.ScalarBarActor.SetTitle("distances") self.ScalarBarActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) self.SphereWidget = vtk.vtkSphereWidget() self.SphereWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.SphereWidget.AddObserver("InteractionEvent", self.SphereCallback) self.ExamineText = vtk.vtkTextActor() self.ExamineText.SetInput("Examine Mode") self.ExamineText.GetPositionCoordinate().SetCoordinateSystemToNormalizedViewport() self.ExamineText.SetPosition(0.05, 0.95) self.ExamineText.VisibilityOff() self.vmtkRenderer.Renderer.AddActor2D(self.ExamineText) self.InputInfo("Please position the mouse and press space to add spheres, 'u' to undo\n") any = 0 while any == 0: self.InitializeSpheres() self.vmtkRenderer.Render() any = self.Spheres.GetNumberOfPoints() > 1 self.InputInfo( "Please position the mouse and press space to add spheres, 'u' to undo\nInsert at least 2 spheres." ) self.Surface = self.ComputeArray() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self.InputTraces == None): self.PrintError('Error: no Traces.') if (self.TimeStep == None): self.PrintError('Error: no TimeStep.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 surfaceViewer = vmtksurfaceviewer.vmtkSurfaceViewer() surfaceViewer.vmtkRenderer = self.vmtkRenderer surfaceViewer.Surface = self.InputTraces surfaceViewer.ArrayName = self.ArrayName surfaceViewer.ColorMap = self.ColorMap surfaceViewer.NumberOfColors = self.NumberOfColors surfaceViewer.Execute() if self.ColorMap == 'grayscale': lut = surfaceViewer.Actor.GetMapper().GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) lut.SetValueRange(0.0, 1.0) lut.SetSaturationRange(0.0, 0.0) lut.Build() surfaceViewer.Actor.GetMapper().SetLookupTable(lut) if self.ColorMap == 'rainbow': lut = surfaceViewer.Actor.GetMapper().GetLookupTable() lut.SetHueRange(0.666667, 0.0) lut.SetSaturationRange(0.75, 0.75) lut.SetValueRange(1.0, 1.0) lut.SetAlphaRange(1.0, 1.0) lut.SetNumberOfColors(self.NumberOfColors) lut.Build() surfaceViewer.Actor.GetMapper().SetLookupTable(lut) if self.ColorMap == 'blackbody': lut = surfaceViewer.Actor.GetMapper().GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToRGB() colorTransferFunction.AddRGBPoint(0, 0.0, 0.0, 0.0) colorTransferFunction.AddRGBPoint(0.4, 0.901961, 0.0, 0.0) colorTransferFunction.AddRGBPoint(0.8, 0.901961, 0.901961, 0.0) colorTransferFunction.AddRGBPoint(1.0, 1.0, 1.0, 1.0) for ii, ss in enumerate([ float(xx) / float(self.NumberOfColors) for xx in range(self.NumberOfColors) ]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii, cc[0], cc[1], cc[2], 1.0) lut.Build() surfaceViewer.Actor.GetMapper().SetLookupTable(lut) if self.ColorMap == 'cooltowarm': lut = surfaceViewer.Actor.GetMapper().GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToDiverging() colorTransferFunction.AddRGBPoint(0, 0.231373, 0.298039, 0.752941) colorTransferFunction.AddRGBPoint(0.5, 0.865003, 0.865003, 0.865003) colorTransferFunction.AddRGBPoint(1.0, 0.705882, 0.0156863, 0.14902) for ii, ss in enumerate([ float(xx) / float(self.NumberOfColors) for xx in range(self.NumberOfColors) ]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii, cc[0], cc[1], cc[2], 1.0) lut.Build() surfaceViewer.Actor.GetMapper().SetLookupTable(lut) if (self.Legend == 1): self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable( surfaceViewer.Actor.GetMapper().GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() self.ScalarBarActor.SetWidth(0.1) self.ScalarBarActor.SetHeight(0.6) self.ScalarBarActor.SetNumberOfLabels(4) self.ScalarBarActor.SetTitle(self.ArrayName + " [" + self.ArrayUnit + "]") self.ScalarBarActor.SetLabelFormat('%.2f') self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) self.Traces = vtk.vtkPolyData() self.Traces.DeepCopy(self.InputTraces) self.Traces.GetPointData().SetActiveScalars("IntegrationTime") timeRange = self.Traces.GetPointData().GetScalars().GetRange(0) currentCycle = 0 minTime = self.MinTime currentTime = self.TimeStep maxTime = self.MaxTime if (self.ArrayMax == None and self.ArrayName == "Velocity"): self.ArrayMax = round( self.Traces.GetPointData().GetArray('Speed').GetRange()[1], 0) if self.Method is 'particles': particleTime = minTime imageNumber = 0 while particleTime <= maxTime: contour = vtk.vtkContourFilter() contour.SetInput(self.Traces) i = 0 while i <= currentCycle: time = minTime + currentTime + (maxTime - minTime) * i if time < timeRange[0] or time > timeRange[1]: pass else: contour.SetValue(i, time) i += 1 contour.Update() surfaceViewer.vmtkRenderer = self.vmtkRenderer surfaceViewer.Actor.GetProperty().SetPointSize(self.PointSize) vtk.vtkPolyDataMapper.SafeDownCast( surfaceViewer.Actor.GetMapper()).SetInput( contour.GetOutput()) surfaceViewer.Actor.GetMapper().GetLookupTable( ).SetVectorModeToMagnitude() surfaceViewer.Actor.GetMapper( ).SetScalarModeToUsePointFieldData() surfaceViewer.Actor.GetMapper().SelectColorArray( self.ArrayName) surfaceViewer.Actor.GetMapper().SetScalarRange( [0.0, self.ArrayMax]) surfaceViewer.vmtkRenderer.RenderWindow.Render() if self.WithScreenshots: self.Screenshot(surfaceViewer, imageNumber) particleTime += self.TimeStep currentTime += self.TimeStep imageNumber += 1 elif self.Method is 'streaklines': particleTime = minTime imageNumber = 0 while particleTime <= maxTime: clip1 = vtk.vtkClipPolyData() clip1.SetInput(self.Traces) clip1.GenerateClipScalarsOff() clip1.InsideOutOn() clip2 = vtk.vtkClipPolyData() clip2.SetInput(clip1.GetOutput()) clip2.GenerateClipScalarsOff() clip2.InsideOutOff() cyclesPerRange = (int( (timeRange[1] - timeRange[0]) / (maxTime - minTime))) + 1 cycle = currentCycle % cyclesPerRange time = minTime + currentTime + (maxTime - minTime) * cycle streakLineTimeLength = self.StreakLineTimeLength clip1.SetValue(time) clip2.SetValue(time - streakLineTimeLength) clip2.Update() surfaceViewer.Actor.GetProperty().SetLineWidth(self.LineWidth) vtk.vtkPolyDataMapper.SafeDownCast( surfaceViewer.Actor.GetMapper()).SetInput( clip2.GetOutput()) surfaceViewer.Actor.GetMapper().GetLookupTable( ).SetVectorModeToMagnitude() surfaceViewer.Actor.GetMapper( ).SetScalarModeToUsePointFieldData() surfaceViewer.Actor.GetMapper().SelectColorArray( self.ArrayName) surfaceViewer.Actor.GetMapper().SetScalarRange( [0.0, self.ArrayMax]) surfaceViewer.vmtkRenderer = self.vmtkRenderer surfaceViewer.vmtkRenderer.RenderWindow.Render() if self.WithScreenshots: self.Screenshot(surfaceViewer, imageNumber) particleTime += self.TimeStep currentTime += self.TimeStep imageNumber += 1 else: self.PrintError('Error: pathlineanimator method not supported.')
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if self.CheckNonManifold: self.PrintLog('NonManifold check.') nonManifoldChecker = vmtkNonManifoldSurfaceChecker() nonManifoldChecker.Surface = self.Surface nonManifoldChecker.PrintError = self.PrintError nonManifoldChecker.Execute() if (nonManifoldChecker.NumberOfNonManifoldEdges > 0): self.PrintLog(nonManifoldChecker.Report) return if not self.vmtkRenderer and self.SeedSelectorName in ['pickpoint','openprofiles']: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.PrintLog('Cleaning surface.') surfaceCleaner = vtk.vtkCleanPolyData() surfaceCleaner.SetInput(self.Surface) surfaceCleaner.Update() self.PrintLog('Triangulating surface.') surfaceTriangulator = vtk.vtkTriangleFilter() surfaceTriangulator.SetInput(surfaceCleaner.GetOutput()) surfaceTriangulator.PassLinesOff() surfaceTriangulator.PassVertsOff() surfaceTriangulator.Update() centerlineInputSurface = surfaceTriangulator.GetOutput() capCenterIds = None if (self.SeedSelectorName == 'openprofiles') | (self.SeedSelectorName == 'carotidprofiles') | (self.SeedSelectorName == 'pickpoint'): self.PrintLog('Capping surface.') surfaceCapper = vtkvmtk.vtkvmtkCapPolyData() surfaceCapper.SetInput(surfaceTriangulator.GetOutput()) surfaceCapper.SetDisplacement(self.CapDisplacement) surfaceCapper.SetInPlaneDisplacement(self.CapDisplacement) surfaceCapper.Update() centerlineInputSurface = surfaceCapper.GetOutput() capCenterIds = surfaceCapper.GetCapCenterIds() if self.SeedSelector: pass elif self.SeedSelectorName: if self.SeedSelectorName == 'pickpoint': self.SeedSelector = vmtkPickPointSeedSelector() self.SeedSelector.vmtkRenderer = self.vmtkRenderer elif self.SeedSelectorName == 'openprofiles': self.SeedSelector = vmtkOpenProfilesSeedSelector() self.SeedSelector.vmtkRenderer = self.vmtkRenderer self.SeedSelector.SetSeedIds(surfaceCapper.GetCapCenterIds()) elif self.SeedSelectorName == 'carotidprofiles': self.SeedSelector = vmtkCarotidProfilesSeedSelector() self.SeedSelector.SetSeedIds(surfaceCapper.GetCapCenterIds()) elif (self.SeedSelectorName == 'idlist'): self.SeedSelector = vmtkIdListSeedSelector() self.SeedSelector.SourceIds = self.SourceIds self.SeedSelector.TargetIds = self.TargetIds elif (self.SeedSelectorName == 'pointlist'): self.SeedSelector = vmtkPointListSeedSelector() self.SeedSelector.SourcePoints = self.SourcePoints self.SeedSelector.TargetPoints = self.TargetPoints else: self.PrintError("SeedSelectorName unknown (available: pickpoint | openprofiles | carotidprofiles | idlist | pointlist)") return else: self.PrintError('vmtkCenterlines error: either SeedSelector or SeedSelectorName must be specified') return self.SeedSelector.SetSurface(centerlineInputSurface) self.SeedSelector.InputText = self.InputText self.SeedSelector.OutputText = self.OutputText self.SeedSelector.PrintError = self.PrintError self.SeedSelector.PrintLog = self.PrintLog self.SeedSelector.Execute() inletSeedIds = self.SeedSelector.GetSourceSeedIds() outletSeedIds = self.SeedSelector.GetTargetSeedIds() self.PrintLog('Computing centerlines.') centerlineFilter = vtkvmtk.vtkvmtkPolyDataCenterlines() centerlineFilter.SetInput(centerlineInputSurface) if (self.SeedSelectorName == 'openprofiles') | (self.SeedSelectorName == 'carotidprofiles'): centerlineFilter.SetCapCenterIds(capCenterIds) centerlineFilter.SetSourceSeedIds(inletSeedIds) centerlineFilter.SetTargetSeedIds(outletSeedIds) centerlineFilter.SetRadiusArrayName(self.RadiusArrayName) centerlineFilter.SetCostFunction(self.CostFunction) centerlineFilter.SetFlipNormals(self.FlipNormals) centerlineFilter.SetAppendEndPointsToCenterlines(self.AppendEndPoints) centerlineFilter.SetSimplifyVoronoi(self.SimplifyVoronoi) if self.DelaunayTessellation != None: centerlineFilter.GenerateDelaunayTessellationOff() centerlineFilter.SetDelaunayTessellation(self.DelaunayTessellation) if self.UseTetGen==1: self.PrintLog('Running TetGen.') import vmtkscripts surfaceToMesh = vmtkscripts.vmtkSurfaceToMesh() surfaceToMesh.Surface = centerlineInputSurface surfaceToMesh.Execute() tetgen = vmtkscripts.vmtkTetGen() tetgen.Mesh = surfaceToMesh.Mesh tetgen.PLC = 1 tetgen.NoMerge = 1 tetgen.Quality = 0 if self.TetGenDetectInter == 1: tetgen.DetectInter = 1 tetgen.NoMerge = 0 tetgen.OutputSurfaceElements = 0 tetgen.Execute() centerlineFilter.GenerateDelaunayTessellationOff() centerlineFilter.SetDelaunayTessellation(tetgen.Mesh) centerlineFilter.SetCenterlineResampling(self.Resampling) centerlineFilter.SetResamplingStepLength(self.ResamplingStepLength) centerlineFilter.Update() self.Centerlines = centerlineFilter.GetOutput() self.VoronoiDiagram = centerlineFilter.GetVoronoiDiagram() self.DelaunayTessellation = centerlineFilter.GetDelaunayTessellation() self.PoleIds = centerlineFilter.GetPoleIds() self.EikonalSolutionArrayName = centerlineFilter.GetEikonalSolutionArrayName() self.EdgeArrayName = centerlineFilter.GetEdgeArrayName() self.EdgePCoordArrayName = centerlineFilter.GetEdgePCoordArrayName() self.CostFunctionArrayName = centerlineFilter.GetCostFunctionArrayName() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if not self.Network: self.Network = vtk.vtkPolyData() networkPoints = vtk.vtkPoints() networkLines = vtk.vtkCellArray() radiusArray = vtk.vtkDoubleArray() radiusArray.SetName(self.RadiusArrayName) self.Network.SetPoints(networkPoints) self.Network.SetLines(networkLines) self.Network.GetPointData().AddArray(radiusArray) if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.ExitAfterTextInputMode = False self.vmtkRenderer.RegisterScript(self) if self.Image and (not self.PlaneWidgetX or not self.PlaneWidgetY or not self.PlaneWidgetZ): imageViewer = vmtkimageviewer.vmtkImageViewer() imageViewer.Image = self.Image imageViewer.vmtkRenderer = self.vmtkRenderer imageViewer.Display = 0 imageViewer.Execute() self.PlaneWidgetX = imageViewer.PlaneWidgetX self.PlaneWidgetY = imageViewer.PlaneWidgetY self.PlaneWidgetZ = imageViewer.PlaneWidgetZ if self.Image: spacing = self.Image.GetSpacing() self.CurrentRadius = min(spacing) if self.UseActiveTubes and not self.FeatureImage: imageFeatures = vmtkimagefeatures.vmtkImageFeatures() imageFeatures.Image = self.Image imageFeatures.FeatureImageType = 'vtkgradient' imageFeatures.Execute() self.FeatureImage = imageFeatures.FeatureImage self.NetworkRadiusArray = self.Network.GetPointData().GetArray( self.RadiusArrayName) self.Network.GetPointData().SetActiveScalars(self.RadiusArrayName) networkMapper = vtk.vtkPolyDataMapper() networkMapper.SetInput(self.Network) networkMapper.SetScalarModeToUseCellData() self.NetworkActor = vtk.vtkActor() self.NetworkActor.SetMapper(networkMapper) self.vmtkRenderer.Renderer.AddActor(self.NetworkActor) self.NetworkTube = vtk.vtkTubeFilter() self.NetworkTube.SetInput(self.Network) self.NetworkTube.SetVaryRadiusToVaryRadiusByAbsoluteScalar() self.NetworkTube.SetNumberOfSides(20) networkTubeMapper = vtk.vtkPolyDataMapper() networkTubeMapper.SetInput(self.NetworkTube.GetOutput()) networkTubeMapper.ScalarVisibilityOff() networkTubeActor = vtk.vtkActor() networkTubeActor.SetMapper(networkTubeMapper) networkTubeActor.PickableOff() networkTubeActor.GetProperty().SetOpacity(0.2) self.vmtkRenderer.Renderer.AddActor(networkTubeActor) self.Selection = vtk.vtkPolyData() self.SelectionPoints = vtk.vtkPoints() self.SelectionRadiusArray = vtk.vtkDoubleArray() self.SelectionRadiusArray.SetName(self.RadiusArrayName) self.Selection.SetPoints(self.SelectionPoints) self.Selection.GetPointData().AddArray(self.SelectionRadiusArray) self.Selection.GetPointData().SetActiveScalars(self.RadiusArrayName) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1.0) glyphSource.SetThetaResolution(20) glyphSource.SetPhiResolution(20) glyphs.SetInput(self.Selection) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToScaleByScalar() glyphs.SetScaleFactor(1.0) selectionMapper = vtk.vtkPolyDataMapper() selectionMapper.SetInput(glyphs.GetOutput()) self.SelectionActor = vtk.vtkActor() self.SelectionActor.SetMapper(selectionMapper) self.SelectionActor.GetProperty().SetColor(1.0, 0.0, 0.0) self.SelectionActor.GetProperty().SetOpacity(0.5) self.SelectionActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SelectionActor) self.ActiveSegmentSeeds = vtk.vtkPolyData() self.ActiveSegmentSeedsPoints = vtk.vtkPoints() self.ActiveSegmentSeedsRadiusArray = vtk.vtkDoubleArray() self.ActiveSegmentSeedsRadiusArray.SetName(self.RadiusArrayName) self.ActiveSegmentSeeds.SetPoints(self.ActiveSegmentSeedsPoints) self.ActiveSegmentSeeds.GetPointData().AddArray( self.ActiveSegmentSeedsRadiusArray) self.ActiveSegmentSeeds.GetPointData().SetActiveScalars( self.RadiusArrayName) activeSegmentSeedsGlyphs = vtk.vtkGlyph3D() activeSegmentSeedsGlyphSource = vtk.vtkSphereSource() activeSegmentSeedsGlyphSource.SetRadius(1.0) activeSegmentSeedsGlyphSource.SetThetaResolution(20) activeSegmentSeedsGlyphSource.SetPhiResolution(20) activeSegmentSeedsGlyphs.SetInput(self.ActiveSegmentSeeds) activeSegmentSeedsGlyphs.SetSource( activeSegmentSeedsGlyphSource.GetOutput()) activeSegmentSeedsGlyphs.SetScaleModeToScaleByScalar() activeSegmentSeedsGlyphs.SetScaleFactor(1.0) activeSegmentSeedsMapper = vtk.vtkPolyDataMapper() activeSegmentSeedsMapper.SetInput(activeSegmentSeedsGlyphs.GetOutput()) activeSegmentSeedsMapper.ScalarVisibilityOff() self.ActiveSegmentSeedsActor = vtk.vtkActor() self.ActiveSegmentSeedsActor.SetMapper(activeSegmentSeedsMapper) self.ActiveSegmentSeedsActor.GetProperty().SetColor(1.0, 0.0, 0.0) self.ActiveSegmentSeedsActor.GetProperty().SetOpacity(0.5) self.ActiveSegmentSeedsActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.ActiveSegmentSeedsActor) self.ActiveSegment = vtk.vtkPolyData() self.ActiveSegmentPoints = vtk.vtkPoints() self.ActiveSegmentCellArray = vtk.vtkCellArray() self.ActiveSegmentRadiusArray = vtk.vtkDoubleArray() self.ActiveSegmentRadiusArray.SetName(self.RadiusArrayName) self.ActiveSegment.SetPoints(self.ActiveSegmentPoints) self.ActiveSegment.SetLines(self.ActiveSegmentCellArray) self.ActiveSegment.GetPointData().AddArray( self.ActiveSegmentRadiusArray) self.ActiveSegment.GetPointData().SetActiveScalars( self.RadiusArrayName) activeSegmentMapper = vtk.vtkPolyDataMapper() activeSegmentMapper.ScalarVisibilityOff() if self.SplineInterpolation and self.Image != None: splineFilter = vtk.vtkSplineFilter() splineFilter.SetInput(self.ActiveSegment) splineFilter.SetSubdivideToLength() splineFilter.SetLength(2.0 * min(self.Image.GetSpacing())) activeSegmentMapper.SetInput(splineFilter.GetOutput()) else: activeSegmentMapper.SetInput(self.ActiveSegment) self.ActiveSegmentActor = vtk.vtkActor() self.ActiveSegmentActor.SetMapper(activeSegmentMapper) self.ActiveSegmentActor.GetProperty().SetColor(1.0, 1.0, 1.0) self.ActiveSegmentActor.GetProperty().SetLineWidth(3.0) self.ActiveSegmentActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.ActiveSegmentActor) activeTube = vtk.vtkTubeFilter() activeTube.SetInput(activeSegmentMapper.GetInput()) activeTube.SetVaryRadiusToVaryRadiusByAbsoluteScalar() activeTube.SetNumberOfSides(20) activeTubeMapper = vtk.vtkPolyDataMapper() activeTubeMapper.SetInput(activeTube.GetOutput()) activeTubeMapper.ScalarVisibilityOff() activeTubeActor = vtk.vtkActor() activeTubeActor.SetMapper(activeTubeMapper) activeTubeActor.PickableOff() activeTubeActor.GetProperty().SetOpacity(0.6) self.vmtkRenderer.Renderer.AddActor(activeTubeActor) self.NetworkLabelsArray = vtk.vtkStringArray.SafeDownCast( self.Network.GetCellData().GetAbstractArray(self.LabelsArrayName)) if not self.NetworkLabelsArray: self.NetworkLabelsArray = vtk.vtkStringArray() self.NetworkLabelsArray.SetName(self.LabelsArrayName) self.NetworkLabelsArray.SetNumberOfValues( self.Network.GetNumberOfCells()) for i in range(self.Network.GetNumberOfCells()): self.NetworkLabelsArray.SetValue(i, '') self.Network.GetCellData().AddArray(self.NetworkLabelsArray) self.CellCenters = vtk.vtkCellCenters() self.CellCenters.SetInput(self.Network) self.CellCenters.VertexCellsOff() self.CellCenters.Update() labeledMapper = vtk.vtkLabeledDataMapper() labeledMapper.SetInput(self.CellCenters.GetOutput()) labeledMapper.SetLabelModeToLabelFieldData() labeledMapper.SetFieldDataName(self.LabelsArrayName) labeledMapper.GetLabelTextProperty().SetFontFamilyToArial() labeledMapper.GetLabelTextProperty().BoldOff() labeledMapper.GetLabelTextProperty().ItalicOff() labeledMapper.GetLabelTextProperty().ShadowOff() self.LabelsActor = vtk.vtkActor2D() self.LabelsActor.SetMapper(labeledMapper) self.LabelsActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.LabelsActor) self.CellPicker = vtk.vtkCellPicker() self.CellPicker.SetTolerance(1E-2) self.CellPicker.InitializePickList() self.CellPicker.AddPickList(self.NetworkActor) self.CellPicker.PickFromListOn() self.vmtkRenderer.AddKeyBinding('a', 'Add mode.', self.AddCallback) self.vmtkRenderer.AddKeyBinding('d', 'Delete mode.', self.DeleteCallback) self.vmtkRenderer.AddKeyBinding('m', 'Merge mode.', self.MergeCallback) self.vmtkRenderer.AddKeyBinding('s', 'Split mode.', self.SplitCallback) self.vmtkRenderer.AddKeyBinding('l', 'Label mode.', self.LabelCallback) self.vmtkRenderer.AddKeyBinding('Tab', 'Show labels.', self.ShowLabelCallback) self.vmtkRenderer.RenderWindowInteractor.AddObserver( "KeyReleaseEvent", self.KeyReleaseCallback) self.vmtkRenderer.RenderWindowInteractor.AddObserver( "LeftButtonPressEvent", self.LeftButtonPressCallback) self.vmtkRenderer.RenderWindowInteractor.AddObserver( "MouseMoveEvent", self.MouseMoveCallback) if self.PlaneWidgetX: self.PlaneWidgetX.UseContinuousCursorOn() self.PlaneWidgetX.AddObserver("StartInteractionEvent", self.PlaneStartInteractionCallback) if self.PlaneWidgetY: self.PlaneWidgetY.UseContinuousCursorOn() self.PlaneWidgetY.AddObserver("StartInteractionEvent", self.PlaneStartInteractionCallback) if self.PlaneWidgetZ: self.PlaneWidgetZ.UseContinuousCursorOn() self.PlaneWidgetZ.AddObserver("StartInteractionEvent", self.PlaneStartInteractionCallback) self.FirstRender() self.Surface = self.NetworkTube.GetOutput() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInput(self.Spheres) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToScaleByScalar() glyphs.SetScaleFactor(1.) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInput(glyphs.GetOutput()) glyphMapper.ScalarVisibilityOff() self.SpheresActor = vtk.vtkActor() self.SpheresActor.SetMapper(glyphMapper) self.SpheresActor.GetProperty().SetColor(1.0, 0.0, 0.0) self.SpheresActor.GetProperty().SetOpacity(self.Opacity) self.SpheresActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SpheresActor) examineGlyphs = vtk.vtkGlyph3D() examineGlyphSource = vtk.vtkSphereSource() examineGlyphSource.SetRadius(1) examineGlyphs.SetInput(self.ExamineSpheres) examineGlyphs.SetSource(examineGlyphSource.GetOutput()) examineGlyphs.SetScaleModeToScaleByScalar() examineGlyphs.SetScaleFactor(1.) examineGlyphMapper = vtk.vtkPolyDataMapper() examineGlyphMapper.SetInput(examineGlyphs.GetOutput()) examineGlyphMapper.ScalarVisibilityOff() self.ExamineSpheresActor = vtk.vtkActor() self.ExamineSpheresActor.SetMapper(examineGlyphMapper) self.ExamineSpheresActor.GetProperty().SetColor(0.0, 1.0, 0.0) self.ExamineSpheresActor.GetProperty().SetOpacity(self.Opacity) self.ExamineSpheresActor.PickableOff() self.ExamineSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ExamineSpheresActor) self.vmtkRenderer.RenderWindowInteractor.AddObserver( "KeyPressEvent", self.KeyPressed) self.SurfaceMapper = vtk.vtkPolyDataMapper() self.SurfaceMapper.SetInput(self.Surface) self.SurfaceMapper.SetScalarVisibility(self.DisplayArray) surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(self.SurfaceMapper) surfaceActor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.SurfaceMapper.GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle('distances') self.ScalarBarActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) self.SphereWidget = vtk.vtkSphereWidget() self.SphereWidget.SetInteractor( self.vmtkRenderer.RenderWindowInteractor) self.SphereWidget.AddObserver("InteractionEvent", self.SphereCallback) self.ExamineText = vtk.vtkTextActor() self.ExamineText.SetInput("Examine Mode") self.ExamineText.GetPositionCoordinate( ).SetCoordinateSystemToNormalizedViewport() self.ExamineText.SetPosition(0.05, 0.95) self.ExamineText.VisibilityOff() self.vmtkRenderer.Renderer.AddActor2D(self.ExamineText) self.OutputText( 'Please position the mouse and press space to add spheres, \'u\' to undo\n' ) any = 0 while any == 0: self.InitializeSpheres() self.vmtkRenderer.Render() any = (self.Spheres.GetNumberOfPoints() > 1) self.Surface = self.ComputeArray() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: no Surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) triangleFilter = vtk.vtkTriangleFilter() triangleFilter.SetInput(self.Surface) triangleFilter.Update() self.Surface = triangleFilter.GetOutput() contourScalars = vtk.vtkDoubleArray() contourScalars.SetNumberOfComponents(1) contourScalars.SetNumberOfTuples(self.Surface.GetNumberOfPoints()) contourScalars.SetName(self.ContourScalarsArrayName) contourScalars.FillComponent(0, self.OutsideValue) self.Surface.GetPointData().AddArray(contourScalars) self.Surface.GetPointData().SetActiveScalars( self.ContourScalarsArrayName) mapper = vtk.vtkPolyDataMapper() mapper.SetInput(self.Surface) mapper.ScalarVisibilityOn() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.Actor.GetMapper().SetScalarRange(-1.0, 0.0) self.vmtkRenderer.Renderer.AddActor(self.Actor) self.ContourWidget = vtk.vtkContourWidget() self.ContourWidget.SetInteractor( self.vmtkRenderer.RenderWindowInteractor) rep = vtk.vtkOrientedGlyphContourRepresentation.SafeDownCast( self.ContourWidget.GetRepresentation()) rep.GetLinesProperty().SetColor(1, 0.2, 0) rep.GetLinesProperty().SetLineWidth(3.0) pointPlacer = vtk.vtkPolygonalSurfacePointPlacer() pointPlacer.AddProp(self.Actor) pointPlacer.GetPolys().AddItem(self.Surface) rep.SetPointPlacer(pointPlacer) self.Interpolator = vtk.vtkPolygonalSurfaceContourLineInterpolator() self.Interpolator.GetPolys().AddItem(self.Surface) rep.SetLineInterpolator(self.Interpolator) self.vmtkRenderer.AddKeyBinding('space', 'Generate scalars', self.ScalarsCallback) self.vmtkRenderer.AddKeyBinding('d', 'Delete contour', self.DeleteContourCallback) self.vmtkRenderer.AddKeyBinding('i', 'Start interaction', self.InteractCallback) self.Display() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInput(self.Spheres) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToScaleByScalar() glyphs.SetScaleFactor(1.) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInput(glyphs.GetOutput()) glyphMapper.ScalarVisibilityOff() self.SpheresActor = vtk.vtkActor() self.SpheresActor.SetMapper(glyphMapper) self.SpheresActor.GetProperty().SetColor(1.0,0.0,0.0) self.SpheresActor.GetProperty().SetOpacity(self.Opacity) self.SpheresActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SpheresActor) examineGlyphs = vtk.vtkGlyph3D() examineGlyphSource = vtk.vtkSphereSource() examineGlyphSource.SetRadius(1) examineGlyphs.SetInput(self.ExamineSpheres) examineGlyphs.SetSource(examineGlyphSource.GetOutput()) examineGlyphs.SetScaleModeToScaleByScalar() examineGlyphs.SetScaleFactor(1.) examineGlyphMapper = vtk.vtkPolyDataMapper() examineGlyphMapper.SetInput(examineGlyphs.GetOutput()) examineGlyphMapper.ScalarVisibilityOff() self.ExamineSpheresActor = vtk.vtkActor() self.ExamineSpheresActor.SetMapper(examineGlyphMapper) self.ExamineSpheresActor.GetProperty().SetColor(0.0,1.0,0.0) self.ExamineSpheresActor.GetProperty().SetOpacity(self.Opacity) self.ExamineSpheresActor.PickableOff() self.ExamineSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ExamineSpheresActor) self.vmtkRenderer.AddKeyBinding('u','Undo.',self.UndoCallback) self.vmtkRenderer.AddKeyBinding('space','Pick.',self.PickCallback) self.vmtkRenderer.AddKeyBinding('+','Increase sphere radius.',self.IncreaseSphereRadiusCallback) self.vmtkRenderer.AddKeyBinding('-','Decrease sphere radius.',self.DecreaseSphereRadiusCallback) self.vmtkRenderer.AddKeyBinding('n','Skip to next sphere.',self.NextCallback) self.vmtkRenderer.AddKeyBinding('v','Skip to previous sphere.',self.PreviousCallback) self.vmtkRenderer.AddKeyBinding('d','Show distances graph.',self.DistancesCallback) self.vmtkRenderer.AddKeyBinding('a','Change parameters.',self.ParametersCallback) self.vmtkRenderer.AddKeyBinding('w','Switch modes.',self.SwitchModeCallback) #self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.SurfaceMapper = vtk.vtkPolyDataMapper() self.SurfaceMapper.SetInput(self.Surface) self.SurfaceMapper.SetScalarVisibility(self.DisplayArray) surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(self.SurfaceMapper) surfaceActor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.SurfaceMapper.GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle('distances') self.ScalarBarActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) self.SphereWidget = vtk.vtkSphereWidget() self.SphereWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.SphereWidget.AddObserver("InteractionEvent", self.SphereCallback) self.ExamineText = vtk.vtkTextActor() self.ExamineText.SetInput("Examine Mode") self.ExamineText.GetPositionCoordinate().SetCoordinateSystemToNormalizedViewport() self.ExamineText.SetPosition(0.05,0.95) self.ExamineText.VisibilityOff() self.vmtkRenderer.Renderer.AddActor2D(self.ExamineText) self.InputInfo('Please position the mouse and press space to add spheres, \'u\' to undo\n') any = 0 while any == 0 or self.ParametersChanged: self.ParametersChanged = False if any == 0: self.InitializeSpheres() self.vmtkRenderer.Render() any = self.Spheres.GetNumberOfPoints() self.Surface = self.ComputeDistances() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Centerlines == None: self.PrintError('Error: No input centerlines.') if self.ReferenceSystems == None: self.PrintError('Error: No input reference systems.') if self.Interactive and not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 if self.Interactive: viewer = vmtkcenterlineviewer.vmtkCenterlineViewer() viewer.Centerlines = self.Centerlines viewer.CellDataArrayName = self.GroupIdsArrayName viewer.vmtkRenderer = self.vmtkRenderer viewer.InputText = self.InputText viewer.OutputText = self.OutputText viewer.PrintError = self.PrintError viewer.PringLog = self.PrintLog viewer.Execute() groupIdString = self.InputText( "Please input the reference groupId:\n", self.GroupIdValidator) self.ReferenceGroupId = int(groupIdString) offsetFilter = vtkvmtk.vtkvmtkCenterlineReferenceSystemAttributesOffset( ) offsetFilter.SetInput(self.Centerlines) offsetFilter.SetReferenceSystems(self.ReferenceSystems) offsetFilter.SetAbscissasArrayName(self.AbscissasArrayName) offsetFilter.SetNormalsArrayName(self.NormalsArrayName) if not self.ReplaceAttributes: offsetFilter.SetOffsetAbscissasArrayName( self.OffsetAbscissasArrayName) offsetFilter.SetOffsetNormalsArrayName(self.OffsetNormalsArrayName) else: offsetFilter.SetOffsetAbscissasArrayName(self.AbscissasArrayName) offsetFilter.SetOffsetNormalsArrayName(self.NormalsArrayName) offsetFilter.SetGroupIdsArrayName(self.GroupIdsArrayName) offsetFilter.SetCenterlineIdsArrayName(self.CenterlineIdsArrayName) offsetFilter.SetReferenceSystemsNormalArrayName( self.ReferenceSystemsNormalArrayName) offsetFilter.SetReferenceSystemsGroupIdsArrayName( self.GroupIdsArrayName) offsetFilter.SetReferenceGroupId(self.ReferenceGroupId) offsetFilter.Update() self.Centerlines = offsetFilter.GetOutput() if self.ReferenceGroupId == -1: self.ReferenceGroupId = offsetFilter.GetReferenceGroupId() if self.Centerlines.GetSource(): self.Centerlines.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if not self.Mesh: self.PrintError('Error: No input mesh.') if not self.Centerlines: self.PrintError('Error: No input centerlines.') if self.Interactive and not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 if self.Interactive: viewer = vmtkcenterlineviewer.vmtkCenterlineViewer() viewer.Centerlines = self.Centerlines viewer.CellDataArrayName = self.GroupIdsArrayName viewer.vmtkRenderer = self.vmtkRenderer viewer.InputText = self.InputText viewer.OutputText = self.OutputText viewer.PrintError = self.PrintError viewer.PringLog = self.PrintLog viewer.Execute() groupIdsString = self.InputText("Please input groupIds to clip:\n", self.GroupIdsValidator) self.GroupIds = [ int(groupId) for groupId in groupIdsString.split() ] clipper = vtkvmtk.vtkvmtkUnstructuredGridCenterlineGroupsClipper() clipper.SetInput(self.Mesh) clipper.SetCenterlines(self.Centerlines) clipper.SetCenterlineGroupIdsArrayName(self.GroupIdsArrayName) clipper.SetGroupIdsArrayName(self.GroupIdsArrayName) clipper.SetCenterlineRadiusArrayName(self.RadiusArrayName) clipper.SetBlankingArrayName(self.BlankingArrayName) clipper.SetCutoffRadiusFactor(self.CutoffRadiusFactor) clipper.SetClipValue(self.ClipValue) clipper.SetUseRadiusInformation(self.UseRadiusInformation) if self.GroupIds: groupIds = vtk.vtkIdList() for groupId in self.GroupIds: groupIds.InsertNextId(groupId) clipper.SetCenterlineGroupIds(groupIds) clipper.ClipAllCenterlineGroupIdsOff() else: clipper.ClipAllCenterlineGroupIdsOn() if not self.InsideOut: clipper.GenerateClippedOutputOff() else: clipper.GenerateClippedOutputOn() clipper.Update() if not self.InsideOut: self.Mesh = clipper.GetOutput() else: self.Mesh = clipper.GetClippedOutput() if self.Mesh: if self.Mesh.GetSource(): self.Mesh.GetSource().UnRegisterAllOutputs() if self.Centerlines.GetSource(): self.Centerlines.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') # cleaner = vtk.vtkCleanPolyData() # cleaner.SetInput(self.Surface) # cleaner.Update() # # triangleFilter = vtk.vtkTriangleFilter() # triangleFilter.SetInput(cleaner.GetOutput()) # triangleFilter.Update() # # self.Surface = triangleFilter.GetOutput() boundaryIds = vtk.vtkIdList() if self.Interactive: if not self.vmtkRenderer: import vmtkrenderer self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) boundaryExtractor = vtkvmtk.vtkvmtkPolyDataBoundaryExtractor() boundaryExtractor.SetInputData(self.Surface) boundaryExtractor.Update() boundaries = boundaryExtractor.GetOutput() numberOfBoundaries = boundaries.GetNumberOfCells() seedPoints = vtk.vtkPoints() for i in range(numberOfBoundaries): barycenter = [0.0, 0.0, 0.0] vtkvmtk.vtkvmtkBoundaryReferenceSystems.ComputeBoundaryBarycenter(boundaries.GetCell(i).GetPoints(),barycenter) seedPoints.InsertNextPoint(barycenter) seedPolyData = vtk.vtkPolyData() seedPolyData.SetPoints(seedPoints) labelsMapper = vtk.vtkLabeledDataMapper(); labelsMapper.SetInputData(seedPolyData) labelsMapper.SetLabelModeToLabelIds() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) surfaceMapper = vtk.vtkPolyDataMapper() surfaceMapper.SetInputData(self.Surface) surfaceMapper.ScalarVisibilityOff() surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(surfaceMapper) surfaceActor.GetProperty().SetOpacity(0.25) self.vmtkRenderer.Renderer.AddActor(surfaceActor) #self.vmtkRenderer.Render() #self.vmtkRenderer.Renderer.RemoveActor(labelsActor) #self.vmtkRenderer.Renderer.RemoveActor(surfaceActor) ok = False while not ok: labelString = self.InputText("Please input boundary ids: ",self.LabelValidator) labels = [int(label) for label in labelString.split()] ok = True for label in labels: if label not in range(numberOfBoundaries): ok = False for label in labels: boundaryIds.InsertNextId(label) if self.Method == 'simple': capper = vtkvmtk.vtkvmtkSimpleCapPolyData() capper.SetInputData(self.Surface) elif self.Method == 'centerpoint': capper = vtkvmtk.vtkvmtkCapPolyData() capper.SetInputData(self.Surface) capper.SetDisplacement(0.0) capper.SetInPlaneDisplacement(0.0) elif self.Method == 'smooth': triangle = vtk.vtkTriangleFilter() triangle.SetInputData(self.Surface) triangle.PassLinesOff() triangle.PassVertsOff() triangle.Update() capper = vtkvmtk.vtkvmtkSmoothCapPolyData() capper.SetInputConnection(triangle.GetOutputPort()) capper.SetConstraintFactor(self.ConstraintFactor) capper.SetNumberOfRings(self.NumberOfRings) elif self.Method == 'annular': capper = vtkvmtk.vtkvmtkAnnularCapPolyData() capper.SetInputData(self.Surface) elif self.Method == 'concaveannular': import vtkvmtkcontrib capper = vtkvmtkcontrib.vtkvmtkConcaveAnnularCapPolyData() capper.SetInputData(self.Surface) if self.Interactive: capper.SetBoundaryIds(boundaryIds) capper.SetCellEntityIdsArrayName(self.CellEntityIdsArrayName) capper.SetCellEntityIdOffset(self.CellEntityIdOffset) capper.Update() self.Surface = capper.GetOutput() if self.TriangleOutput == 1: triangle = vtk.vtkTriangleFilter() triangle.SetInputData(self.Surface) triangle.PassLinesOff() triangle.PassVertsOff() triangle.Update() self.Surface = triangle.GetOutput() normals = vtk.vtkPolyDataNormals() normals.SetInputData(self.Surface) normals.AutoOrientNormalsOn() normals.SplittingOff() normals.ConsistencyOn() normals.Update() self.Surface = normals.GetOutput()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 if self.Actor != None: self.vmtkRenderer.Renderer.RemoveActor(self.Actor) if self.ScalarBarActor != None: self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.Mesh != None: self.InitialMesh = self.Mesh self.DisplayMesh = self.Mesh mapper = vtk.vtkDataSetMapper() mapper.SetInputData(self.DisplayMesh) array = None if (self.ArrayName != ''): if self.DisplayCellData == 0: self.Mesh.GetPointData().SetActiveScalars(self.ArrayName) array = self.Mesh.GetPointData().GetScalars() else: self.Mesh.GetCellData().SetActiveScalars(self.ArrayName) array = self.Mesh.GetCellData().GetScalars() mapper.SetScalarModeToUseCellData() if (array != None): if (self.ScalarRange[1] > self.ScalarRange[0]): mapper.SetScalarRange(self.ScalarRange) else: mapper.SetScalarRange(array.GetRange(0)) if (self.Grayscale == 1): lut = vtk.vtkLookupTable() lut.SetValueRange(0.0,1.0) lut.SetSaturationRange(0.0,0.0) mapper.SetLookupTable(lut) self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) if (self.Color[0] >= 0.0): self.Actor.GetProperty().SetColor(self.Color) if (self.FlatInterpolation == 1): self.Actor.GetProperty().SetInterpolationToFlat() self.Actor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(self.Actor) if (self.Legend == 1) & (self.Actor != None): self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.Actor.GetMapper().GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() ## self.ScalarBarActor.GetLabelTextProperty().SetColor(0.0,0.0,0.0) self.ScalarBarActor.SetLabelFormat('%.2f') self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) #self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.vmtkRenderer.AddKeyBinding('i','Interact.',self.InteractCallback) self.vmtkRenderer.AddKeyBinding('c','Clip.',self.ClipCallback) self.vmtkRenderer.AddKeyBinding('e','Extract.',self.ExtractCallback) self.vmtkRenderer.AddKeyBinding('n','Show clipped area.',self.NCallback) self.vmtkRenderer.AddKeyBinding('d','Switch clipped/unclipped area.',self.DCallback) self.vmtkRenderer.AddKeyBinding('t','Redo.',self.TCallback) self.vmtkRenderer.AddKeyBinding('u','Undo.',self.UndoCallback) self.PlaneWidget = vtk.vtkImplicitPlaneWidget() self.PlaneWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidget.SetPlaceFactor(1.25) self.PlaneWidget.DrawPlaneOff() self.PlaneWidget.SetProp3D(self.Actor) self.PlaneWidget.PlaceWidget() #Work around bug/strange behaviour in vtk self.PlaneWidget.SetOrigin(self.Actor.GetCenter()) if (self.Display == 1): self.vmtkRenderer.Render() self.Mesh = self.InitialMesh if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): self.SeedSelectorName = "pickpoint" if self.Surface == None: self.PrintError('Error: No input surface.') if self.CheckNonManifold: self.PrintLog('NonManifold check.') nonManifoldChecker = vmtkNonManifoldSurfaceChecker() nonManifoldChecker.Surface = self.Surface nonManifoldChecker.PrintError = self.PrintError nonManifoldChecker.Execute() if (nonManifoldChecker.NumberOfNonManifoldEdges > 0): self.PrintLog(nonManifoldChecker.Report) return self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.PrintLog('Cleaning surface.') surfaceCleaner = vtk.vtkCleanPolyData() surfaceCleaner.SetInput(self.Surface) surfaceCleaner.Update() self.PrintLog('Triangulating surface.') surfaceTriangulator = vtk.vtkTriangleFilter() surfaceTriangulator.SetInput(surfaceCleaner.GetOutput()) surfaceTriangulator.PassLinesOff() surfaceTriangulator.PassVertsOff() surfaceTriangulator.Update() self.PrintLog('Capping surface.') surfaceCapper = vtkvmtk.vtkvmtkCapPolyData() surfaceCapper.SetInput(surfaceTriangulator.GetOutput()) surfaceCapper.SetDisplacement(self.CapDisplacement) surfaceCapper.SetInPlaneDisplacement(self.CapDisplacement) surfaceCapper.Update() centerlineInputSurface = surfaceCapper.GetOutput() capCenterIds = surfaceCapper.GetCapCenterIds() self.SeedSelector = vmtkPickPointSeedSelector() self.SeedSelector.vmtkRenderer = self.vmtkRenderer self.SeedSelector.Script = self self.SeedSelector.SetSurface(centerlineInputSurface) self.SeedSelector.InputInfo = self.InputInfo self.SeedSelector.InputText = self.InputText self.SeedSelector.OutputText = self.OutputText self.SeedSelector.PrintError = self.PrintError self.SeedSelector.PrintLog = self.PrintLog self.SeedSelector.Execute() inletSeedIds = self.SeedSelector.GetSourceSeedIds() outletSeedIds = self.SeedSelector.GetTargetSeedIds() point_source = [] points_target = [] s = "" text_target = "target%s: %s\n" text_source = "source: %s\n" for i in range(inletSeedIds.GetNumberOfIds()): point_source.append( centerlineInputSurface.GetPoint(inletSeedIds.GetId(i))) s += text_source % (str(point_source[-1])) for i in range(outletSeedIds.GetNumberOfIds()): points_target.append( centerlineInputSurface.GetPoint(outletSeedIds.GetId(i))) s += text_target % (i, points_target[-1]) f = open(path.join(self.Output, "points"), "w") f.write(s) f.close()
def Execute(self): if (self.Mesh == None): self.PrintError('Error: no Mesh.') if (self.Centerlines == None): self.PrintError('Error: no Centerlines') #Save the centerlines previousCenterlines = self.Centerlines cleaner = vtk.vtkCleanPolyData() cleaner.SetInput(self.Centerlines) cleaner.Update() self.Centerlines = cleaner.GetOutput() if self.Tolerance == -1: self.Tolerance = 0.000001*self.Mesh.GetLength() if self.RadiusArrayName != '': self.RadiusArray = self.Centerlines.GetPointData().GetArray(self.RadiusArrayName) if self.RadiusArray == None: self.PrintError('Error : could not find radius array') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 meshMapper = vtk.vtkDataSetMapper() meshMapper.SetInput(self.Mesh) meshMapper.ScalarVisibilityOff() self.MeshActor = vtk.vtkActor() self.MeshActor.SetMapper(meshMapper) self.MeshActor.GetProperty().SetOpacity(0.25) self.MeshActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.MeshActor) centerlinesMapper = vtk.vtkDataSetMapper() centerlinesMapper.SetInput(self.Centerlines) centerlinesMapper.ScalarVisibilityOff() self.CenterlinesActor = vtk.vtkActor() self.CenterlinesActor.SetMapper(centerlinesMapper) self.vmtkRenderer.Renderer.AddActor(self.CenterlinesActor) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInput(self.Spheres) glyphs.SetSource(glyphSource.GetOutput()) glyphs.SetScaleModeToScaleByScalar() glyphs.SetScaleFactor(1.) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInput(glyphs.GetOutput()) glyphMapper.ScalarVisibilityOff() self.SpheresActor = vtk.vtkActor() self.SpheresActor.SetMapper(glyphMapper) self.SpheresActor.GetProperty().SetColor(1.0,0.0,0.0) self.SpheresActor.GetProperty().SetOpacity(0.25) self.SpheresActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SpheresActor) self.InterpolatedGlyphs = vtk.vtkGlyph3D() interpolatedGlyphSource = vtk.vtkSphereSource() interpolatedGlyphSource.SetRadius(1) self.InterpolatedGlyphs.SetInput(self.Centerlines) self.InterpolatedGlyphs.SetSource(interpolatedGlyphSource.GetOutput()) #scaling is off for now self.InterpolatedGlyphs.SetScaleModeToDataScalingOff() self.InterpolatedGlyphs.SetScaleFactor(0.) interpolatedGlyphMapper = vtk.vtkPolyDataMapper() interpolatedGlyphMapper.SetInput(self.InterpolatedGlyphs.GetOutput()) interpolatedGlyphMapper.ScalarVisibilityOff() self.InterpolatedSpheresActor = vtk.vtkActor() self.InterpolatedSpheresActor.SetMapper(interpolatedGlyphMapper) self.InterpolatedSpheresActor.GetProperty().SetColor(0.0,1.0,0.0) self.InterpolatedSpheresActor.GetProperty().SetOpacity(0.25) self.InterpolatedSpheresActor.PickableOff() self.InterpolatedSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.InterpolatedSpheresActor) polyBallMapper = vtk.vtkPolyDataMapper() polyBallMapper.ScalarVisibilityOff() self.PolyBallActor = vtk.vtkActor() self.PolyBallActor.SetMapper(polyBallMapper) self.PolyBallActor.GetProperty().SetColor(0.0,1.0,0.0) self.PolyBallActor.GetProperty().SetOpacity(0.25) self.PolyBallActor.PickableOff() self.PolyBallActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.PolyBallActor) self.SphereWidget = vtk.vtkSphereWidget() self.SphereWidget.TranslationOff() self.SphereWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.SphereWidget.AddObserver("InteractionEvent", self.SphereCallback) self.Clipper = vtk.vtkClipDataSet() self.Clipper.SetInput(self.Mesh) self.Clipper.SetInsideOut(self.InsideOut) self.Clipper.GenerateClippedOutputOn() #self.LineClipper = vtkvmtk.vtkvmtkClipDataSetLine() #self.LineClipper.SetInput(self.Mesh) #self.LineClipper.SetInsideOut(self.InsideOut) #self.LineClipper.GenerateClippedOutputOn() self.InitializeSpheres() self.PreviewMesh = self.Mesh self.Display() self.PolyBallActor.VisibilityOff() self.ClipMesh() if self.ClippedMesh == None: #return an empty mesh self.ClippedMesh = vtk.vtkUnstructuredGrid() elif self.IncludeSurfaceCells: #Create the surface cells self.PreviewMesh = self.CreateSurfaceCells(self.PreviewMesh) self.ClippedMesh = self.CreateSurfaceCells(self.ClippedMesh) self.Mesh = self.PreviewMesh if self.OwnRenderer: self.vmtkRenderer.Deallocate() if self.Mesh.GetSource(): self.Mesh.GetSource().UnRegisterAllOutputs() #Restore the centerlines self.Centerlines = previousCenterlines
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 if self.Actor != None: self.vmtkRenderer.Renderer.RemoveActor(self.Actor) if self.ScalarBarActor != None: self.vmtkRenderer.Renderer.RemoveActor(self.ScalarBarActor) if self.Mesh != None: self.InitialMesh = self.Mesh self.DisplayMesh = self.Mesh mapper = vtk.vtkDataSetMapper() mapper.SetInput(self.DisplayMesh) array = None if (self.ArrayName != ''): if self.DisplayCellData == 0: self.Mesh.GetPointData().SetActiveScalars(self.ArrayName) array = self.Mesh.GetPointData().GetScalars() else: self.Mesh.GetCellData().SetActiveScalars(self.ArrayName) array = self.Mesh.GetCellData().GetScalars() mapper.SetScalarModeToUseCellData() if (array != None): if (self.ScalarRange[1] > self.ScalarRange[0]): mapper.SetScalarRange(self.ScalarRange) else: mapper.SetScalarRange(array.GetRange(0)) if (self.Grayscale == 1): lut = vtk.vtkLookupTable() lut.SetValueRange(0.0, 1.0) lut.SetSaturationRange(0.0, 0.0) mapper.SetLookupTable(lut) self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) if (self.Color[0] >= 0.0): self.Actor.GetProperty().SetColor(self.Color) if (self.FlatInterpolation == 1): self.Actor.GetProperty().SetInterpolationToFlat() self.Actor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(self.Actor) if (self.Legend == 1) & (self.Actor != None): self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable( self.Actor.GetMapper().GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() ## self.ScalarBarActor.GetLabelTextProperty().SetColor(0.0,0.0,0.0) self.ScalarBarActor.SetLabelFormat('%.2f') self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) #self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.vmtkRenderer.AddKeyBinding('i', 'Interact.', self.InteractCallback) self.vmtkRenderer.AddKeyBinding('c', 'Clip.', self.ClipCallback) self.vmtkRenderer.AddKeyBinding('e', 'Extract.', self.ExtractCallback) self.vmtkRenderer.AddKeyBinding('n', 'Show clipped area.', self.NCallback) self.vmtkRenderer.AddKeyBinding('d', 'Switch clipped/unclipped area.', self.DCallback) self.vmtkRenderer.AddKeyBinding('t', 'Redo.', self.TCallback) self.vmtkRenderer.AddKeyBinding('u', 'Undo.', self.UndoCallback) self.PlaneWidget = vtk.vtkImplicitPlaneWidget() self.PlaneWidget.SetInteractor( self.vmtkRenderer.RenderWindowInteractor) self.PlaneWidget.SetPlaceFactor(1.25) self.PlaneWidget.DrawPlaneOff() self.PlaneWidget.SetProp3D(self.Actor) self.PlaneWidget.PlaceWidget() #Work around bug/strange behaviour in vtk self.PlaneWidget.SetOrigin(self.Actor.GetCenter()) if (self.Display == 1): self.vmtkRenderer.Render() self.Mesh = self.InitialMesh if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if (self.ArrayName != ''): self.Image.GetPointData().SetActiveScalars(self.ArrayName) wholeExtent = self.Image.GetWholeExtent() if self.Picker == None: self.Picker = vtk.vtkCellPicker() if self.PlaneWidgetX == None: self.PlaneWidgetX = vtk.vtkImagePlaneWidget() if self.PlaneWidgetY == None: self.PlaneWidgetY = vtk.vtkImagePlaneWidget() if self.PlaneWidgetZ == None: self.PlaneWidgetZ = vtk.vtkImagePlaneWidget() self.Picker.SetTolerance(0.005) self.PlaneWidgetX.SetResliceInterpolateToLinear() self.PlaneWidgetX.SetTextureInterpolate(self.TextureInterpolation) self.PlaneWidgetX.SetUseContinuousCursor(self.ContinuousCursor) self.PlaneWidgetX.SetInput(self.Image) self.PlaneWidgetX.SetPlaneOrientationToXAxes() self.PlaneWidgetX.SetSliceIndex(wholeExtent[0]) self.PlaneWidgetX.DisplayTextOn() self.PlaneWidgetX.SetPicker(self.Picker) self.PlaneWidgetX.KeyPressActivationOff() self.PlaneWidgetX.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) if self.Margins: self.PlaneWidgetX.SetMarginSizeX(0.05) self.PlaneWidgetX.SetMarginSizeY(0.05) else: self.PlaneWidgetX.SetMarginSizeX(0.0) self.PlaneWidgetX.SetMarginSizeY(0.0) if self.WindowLevel[0] != 0.0: self.PlaneWidgetX.SetWindowLevel(self.WindowLevel[0],self.WindowLevel[1]) self.PlaneWidgetX.On() self.PlaneWidgetY.SetResliceInterpolateToLinear() self.PlaneWidgetY.SetTextureInterpolate(self.TextureInterpolation) self.PlaneWidgetY.SetUseContinuousCursor(self.ContinuousCursor) self.PlaneWidgetY.SetInput(self.Image) self.PlaneWidgetY.SetPlaneOrientationToYAxes() self.PlaneWidgetY.SetSliceIndex(wholeExtent[2]) self.PlaneWidgetY.DisplayTextOn() self.PlaneWidgetY.SetPicker(self.Picker) self.PlaneWidgetY.KeyPressActivationOff() self.PlaneWidgetY.SetLookupTable(self.PlaneWidgetX.GetLookupTable()) self.PlaneWidgetY.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) if self.Margins: self.PlaneWidgetY.SetMarginSizeX(0.05) self.PlaneWidgetY.SetMarginSizeY(0.05) else: self.PlaneWidgetY.SetMarginSizeX(0.0) self.PlaneWidgetY.SetMarginSizeY(0.0) if self.WindowLevel[0] != 0.0: self.PlaneWidgetY.SetWindowLevel(self.WindowLevel[0],self.WindowLevel[1]) self.PlaneWidgetY.On() self.PlaneWidgetZ.SetResliceInterpolateToLinear() self.PlaneWidgetZ.SetTextureInterpolate(self.TextureInterpolation) self.PlaneWidgetZ.SetUseContinuousCursor(self.ContinuousCursor) self.PlaneWidgetZ.SetInput(self.Image) self.PlaneWidgetZ.SetPlaneOrientationToZAxes() self.PlaneWidgetZ.SetSliceIndex(wholeExtent[4]) self.PlaneWidgetZ.DisplayTextOn() self.PlaneWidgetZ.SetPicker(self.Picker) self.PlaneWidgetZ.KeyPressActivationOff() self.PlaneWidgetZ.SetLookupTable(self.PlaneWidgetX.GetLookupTable()) self.PlaneWidgetZ.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) if self.Margins: self.PlaneWidgetZ.SetMarginSizeX(0.05) self.PlaneWidgetZ.SetMarginSizeY(0.05) else: self.PlaneWidgetZ.SetMarginSizeX(0.0) self.PlaneWidgetZ.SetMarginSizeY(0.0) if self.WindowLevel[0] != 0.0: self.PlaneWidgetZ.SetWindowLevel(self.WindowLevel[0],self.WindowLevel[1]) self.PlaneWidgetZ.On() if (self.Display == 1): self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if not self.Centerlines: self.PrintError('Error: No input centerlines.') return if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.CellDataArrayName: cellCenters = vtk.vtkCellCenters() cellCenters.SetInput(self.Centerlines) cellCenters.Update() cellCenters.GetOutput().GetPointData().SetActiveScalars( self.CellDataArrayName) labelsMapper = vtk.vtkLabeledDataMapper() labelsMapper.SetInput(cellCenters.GetOutput()) labelsMapper.SetLabelModeToLabelScalars() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) centerlineMapper = vtk.vtkPolyDataMapper() centerlineMapper.SetInput(self.Centerlines) if self.CellDataArrayName and not self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUseCellData() self.Centerlines.GetCellData().SetActiveScalars( self.CellDataArrayName) centerlineMapper.SetScalarRange( self.Centerlines.GetCellData().GetScalars().GetRange(0)) elif self.PointDataArrayName: centerlineMapper.ScalarVisibilityOn() centerlineMapper.SetScalarModeToUsePointData() self.Centerlines.GetPointData().SetActiveScalars( self.PointDataArrayName) centerlineMapper.SetScalarRange( self.Centerlines.GetPointData().GetScalars().GetRange(0)) else: centerlineMapper.ScalarVisibilityOff() if self.ColorMap == 'grayscale': lut = centerlineMapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) lut.SetValueRange(0.0, 1.0) lut.SetSaturationRange(0.0, 0.0) lut.Build() centerlineMapper.SetLookupTable(lut) if self.ColorMap == 'rainbow': lut = centerlineMapper.GetLookupTable() lut.SetHueRange(0.666667, 0.0) lut.SetSaturationRange(0.75, 0.75) lut.SetValueRange(1.0, 1.0) lut.SetAlphaRange(1.0, 1.0) lut.SetNumberOfColors(self.NumberOfColors) lut.Build() centerlineMapper.SetLookupTable(lut) if self.ColorMap == 'blackbody': lut = centerlineMapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToRGB() colorTransferFunction.AddRGBPoint(0, 0.0, 0.0, 0.0) colorTransferFunction.AddRGBPoint(0.4, 0.901961, 0.0, 0.0) colorTransferFunction.AddRGBPoint(0.8, 0.901961, 0.901961, 0.0) colorTransferFunction.AddRGBPoint(1.0, 1.0, 1.0, 1.0) for ii, ss in enumerate([ float(xx) / float(self.NumberOfColors) for xx in range(self.NumberOfColors) ]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii, cc[0], cc[1], cc[2], 1.0) lut.Build() centerlineMapper.SetLookupTable(lut) if self.ColorMap == 'cooltowarm': lut = centerlineMapper.GetLookupTable() lut.SetNumberOfTableValues(self.NumberOfColors) colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.SetColorSpaceToDiverging() colorTransferFunction.AddRGBPoint(0, 0.231373, 0.298039, 0.752941) colorTransferFunction.AddRGBPoint(0.5, 0.865003, 0.865003, 0.865003) colorTransferFunction.AddRGBPoint(1.0, 0.705882, 0.0156863, 0.14902) for ii, ss in enumerate([ float(xx) / float(self.NumberOfColors) for xx in range(self.NumberOfColors) ]): cc = colorTransferFunction.GetColor(ss) lut.SetTableValue(ii, cc[0], cc[1], cc[2], 1.0) lut.Build() centerlineMapper.SetLookupTable(lut) centerlineActor = vtk.vtkActor() centerlineActor.SetMapper(centerlineMapper) self.vmtkRenderer.Renderer.AddActor(centerlineActor) scalarBarActor = None if self.Legend and centerlineActor and self.PointDataArrayName: scalarBarActor = vtk.vtkScalarBarActor() scalarBarActor.SetLookupTable( centerlineActor.GetMapper().GetLookupTable()) scalarBarActor.GetLabelTextProperty().ItalicOff() scalarBarActor.GetLabelTextProperty().BoldOff() scalarBarActor.GetLabelTextProperty().ShadowOff() scalarBarActor.SetLabelFormat('%.2f') scalarBarActor.SetTitle(self.PointDataArrayName) self.vmtkRenderer.Renderer.AddActor(scalarBarActor) if self.Display: self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if not self.Surface: self.PrintError("Error: No input surface.") if not self.Centerlines: self.PrintError("Error: No input centerlines.") if self.Interactive and not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 if self.Interactive: viewer = vmtkcenterlineviewer.vmtkCenterlineViewer() viewer.Centerlines = self.Centerlines viewer.CellDataArrayName = self.GroupIdsArrayName viewer.vmtkRenderer = self.vmtkRenderer viewer.InputText = self.InputText viewer.OutputText = self.OutputText viewer.PrintError = self.PrintError viewer.PringLog = self.PrintLog viewer.Execute() groupIdsString = self.InputText("Please input groupIds to clip:\n", self.GroupIdsValidator) self.GroupIds = [int(groupId) for groupId in groupIdsString.split()] clipper = vtkvmtk.vtkvmtkPolyDataCenterlineGroupsClipper() clipper.SetInput(self.Surface) clipper.SetCenterlines(self.Centerlines) clipper.SetCenterlineGroupIdsArrayName(self.GroupIdsArrayName) clipper.SetGroupIdsArrayName(self.GroupIdsArrayName) clipper.SetCenterlineRadiusArrayName(self.RadiusArrayName) clipper.SetBlankingArrayName(self.BlankingArrayName) clipper.SetCutoffRadiusFactor(self.CutoffRadiusFactor) clipper.SetClipValue(self.ClipValue) clipper.SetUseRadiusInformation(self.UseRadiusInformation) if self.GroupIds: groupIds = vtk.vtkIdList() for groupId in self.GroupIds: groupIds.InsertNextId(groupId) clipper.SetCenterlineGroupIds(groupIds) clipper.ClipAllCenterlineGroupIdsOff() else: clipper.ClipAllCenterlineGroupIdsOn() if not self.InsideOut: clipper.GenerateClippedOutputOff() else: clipper.GenerateClippedOutputOn() clipper.Update() if not self.InsideOut: self.Surface = clipper.GetOutput() else: self.Surface = clipper.GetClippedOutput() if self.Surface: if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs() if self.Centerlines.GetSource(): self.Centerlines.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: No input surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInputData(self.SeedPoints) glyphs.SetSourceConnection(glyphSource.GetOutputPort()) glyphs.SetScaleModeToDataScalingOff() glyphs.SetScaleFactor(self.Surface.GetLength() * 0.01) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInputConnection(glyphs.GetOutputPort()) glyphMapper.ScalarVisibilityOff() self.PointActor = vtk.vtkActor() self.PointActor.SetMapper(glyphMapper) self.PointActor.GetProperty().SetColor(1.0, 0.0, 0.0) self.PointActor.GetProperty().SetOpacity(self.Opacity) self.PointActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.PointActor) examineGlyphs = vtk.vtkGlyph3D() examineGlyphSource = vtk.vtkSphereSource() examineGlyphSource.SetRadius(1) examineGlyphs.SetInputData(self.ExamineSpheres) examineGlyphs.SetSourceConnection(examineGlyphSource.GetOutputPort()) examineGlyphs.SetScaleModeToScaleByScalar() examineGlyphs.SetScaleFactor(1.) examineGlyphMapper = vtk.vtkPolyDataMapper() examineGlyphMapper.SetInputConnection(examineGlyphs.GetOutputPort()) examineGlyphMapper.ScalarVisibilityOff() self.ExamineSpheresActor = vtk.vtkActor() self.ExamineSpheresActor.SetMapper(examineGlyphMapper) self.ExamineSpheresActor.GetProperty().SetColor(0.0, 1.0, 0.0) self.ExamineSpheresActor.GetProperty().SetOpacity(self.Opacity) self.ExamineSpheresActor.PickableOff() self.ExamineSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ExamineSpheresActor) #self.vmtkRenderer.RenderWindowInteractor.AddObserver("KeyPressEvent", self.KeyPressed) self.vmtkRenderer.AddKeyBinding('u', 'Undo.', self.UndoCallback) self.vmtkRenderer.AddKeyBinding('space', 'Pick points.', self.SpaceCallback) self.vmtkRenderer.AddKeyBinding('w', 'Examine mode.', self.ExamineCallback) self.vmtkRenderer.AddKeyBinding('d', 'Display Distance.', self.DisplayDistanceCallback) self.vmtkRenderer.AddKeyBinding('a', 'Add.', self.AddCallback) self.SurfaceMapper = vtk.vtkPolyDataMapper() self.SurfaceMapper.SetInputData(self.Surface) self.SurfaceMapper.SetScalarVisibility(self.DisplayArray) surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(self.SurfaceMapper) surfaceActor.GetProperty().SetOpacity(self.Opacity) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.ScalarBarActor = vtk.vtkScalarBarActor() self.ScalarBarActor.SetLookupTable(self.SurfaceMapper.GetLookupTable()) self.ScalarBarActor.GetLabelTextProperty().ItalicOff() self.ScalarBarActor.GetLabelTextProperty().BoldOff() self.ScalarBarActor.GetLabelTextProperty().ShadowOff() self.ScalarBarActor.SetLabelFormat('%.2f') self.ScalarBarActor.SetTitle('distances') self.ScalarBarActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.ScalarBarActor) self.ExamineText = vtk.vtkTextActor() self.ExamineText.SetInput("Examine Mode") self.ExamineText.GetPositionCoordinate( ).SetCoordinateSystemToNormalizedViewport() self.ExamineText.SetPosition(0.05, 0.95) self.ExamineText.VisibilityOff() self.vmtkRenderer.Renderer.AddActor2D(self.ExamineText) self.InputInfo( 'Please position the mouse and press space to add points, \'u\' to undo\n' ) any = 0 while any == 0: self.InitializeSeeds() self.vmtkRenderer.Render() any = self.SeedIds.GetNumberOfIds() self.Surface = self.ComputeDistances() if self.Surface.GetSource(): self.Surface.GetSource().UnRegisterAllOutputs() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def BuildView(self): if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) if self.Volume: self.vmtkRenderer.Renderer.RemoveVolume(self.Volume) if (self.ArrayName != ''): self.Image.GetPointData().SetActiveScalars(self.ArrayName) scalarRange = [0.0, 0.0] if self.WindowLevel[0] > 0.0: scalarRange = [ self.WindowLevel[1] - self.WindowLevel[0] / 2.0, self.WindowLevel[1] + self.WindowLevel[0] / 2.0 ] else: scalarRange = self.Image.GetScalarRange() colorTransferFunction = vtk.vtkColorTransferFunction() colorTransferFunction.AddRGBPoint(scalarRange[0], 0.0, 0.0, 0.0) colorTransferFunction.AddRGBPoint(scalarRange[1], 1.0, 1.0, 1.0) volumeMapper = vtk.vtkFixedPointVolumeRayCastMapper() volumeMapper.SetInputData(self.Image) volumeMapper.SetBlendModeToMaximumIntensity() if self.AutoSampleDistance: volumeMapper.AutoAdjustSampleDistancesOn() else: volumeMapper.SetSampleDistance(self.SampleDistance) opacityFunction = vtk.vtkPiecewiseFunction() imageRange = self.Image.GetScalarRange() if self.Opacity is not None: opacityFunction.AddPoint(imageRange[0], 0) opacityFunction.AddPoint(scalarRange[0], self.Opacity[0]) opacityFunction.AddPoint(scalarRange[0], self.Opacity[1]) opacityFunction.AddPoint(imageRange[1], 1) volumeProperty = vtk.vtkVolumeProperty() volumeProperty.ShadeOn() volumeProperty.SetInterpolationTypeToLinear() volumeProperty.SetColor(colorTransferFunction) if self.Opacity is not None: volumeProperty.SetScalarOpacity(opacityFunction) self.Volume = vtk.vtkVolume() self.Volume.SetMapper(volumeMapper) self.Volume.SetProperty(volumeProperty) self.vmtkRenderer.Renderer.AddVolume(self.Volume) if (self.Display == 1): self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: no Surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.SeedSelector = vmtkPickPointSeedSelector() self.SeedSelector.vmtkRenderer = self.vmtkRenderer self.SeedSelector.Script = self self.SeedSelector.SetSurface(self.Surface) self.SeedSelector.InputInfo = self.InputInfo self.SeedSelector.InputText = self.InputText self.SeedSelector.OutputText = self.OutputText self.SeedSelector.PrintError = self.PrintError self.SeedSelector.PrintLog = self.PrintLog self.SeedSelector.Execute() mainBodySeedIds = self.SeedSelector.GetSourceSeedIds() mainBodySeedId = mainBodySeedIds.GetId(0) mainBodyPoint = self.Surface.GetPoint(mainBodySeedId) clipSeedIds = self.SeedSelector.GetTargetSeedIds() surfaceCleaner = vtk.vtkCleanPolyData() surfaceCleaner.SetInputData(self.Surface) surfaceCleaner.Update() surfaceTriangulator = vtk.vtkTriangleFilter() surfaceTriangulator.SetInputConnection(surfaceCleaner.GetOutputPort()) surfaceTriangulator.PassLinesOff() surfaceTriangulator.PassVertsOff() surfaceTriangulator.Update() clippedSurface = surfaceTriangulator.GetOutput() for i in range(clipSeedIds.GetNumberOfIds()): seedId = clipSeedIds.GetId(i) locator = vtk.vtkPointLocator() locator.SetDataSet(clippedSurface) locator.BuildLocator() seedPoint = self.Surface.GetPoint(seedId) seedPointId = locator.FindClosestPoint(seedPoint) planeEstimator = vtkvmtk.vtkvmtkPolyDataNormalPlaneEstimator() planeEstimator.SetInputData(clippedSurface) planeEstimator.SetOriginPointId(seedPointId) planeEstimator.Update() plane = vtk.vtkPlane() plane.SetOrigin(planeEstimator.GetOrigin()) plane.SetNormal(planeEstimator.GetNormal()) seamFilter = vtkvmtk.vtkvmtkTopologicalSeamFilter() seamFilter.SetInputData(clippedSurface) seamFilter.SetClosestPoint(seedPoint) seamFilter.SetSeamScalarsArrayName("SeamScalars") seamFilter.SetSeamFunction(plane) clipper = vtk.vtkClipPolyData() clipper.SetInputConnection(seamFilter.GetOutputPort()) clipper.GenerateClipScalarsOff() clipper.GenerateClippedOutputOn() connectivity = vtk.vtkPolyDataConnectivityFilter() connectivity.SetInputConnection(clipper.GetOutputPort()) connectivity.SetExtractionModeToClosestPointRegion() connectivity.SetClosestPoint(mainBodyPoint) surfaceCleaner = vtk.vtkCleanPolyData() surfaceCleaner.SetInputConnection(connectivity.GetOutputPort()) surfaceCleaner.Update() surfaceTriangulator = vtk.vtkTriangleFilter() surfaceTriangulator.SetInputConnection( surfaceCleaner.GetOutputPort()) surfaceTriangulator.PassLinesOff() surfaceTriangulator.PassVertsOff() surfaceTriangulator.Update() #clippedSurface = vtk.vtkPolyData() #clippedSurface.DeepCopy(surfaceTriangulator.GetOutput()) clippedSurface = surfaceTriangulator.GetOutput() self.Surface = clippedSurface if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self._Surface == None): self.PrintError('vmtkOpenProfilesSeedSelector Error: Surface not set.') return if (self._SeedIds == None): self.PrintError('vmtkOpenProfilesSeedSelector Error: SeedIds not set.') return self._SourceSeedIds.Initialize() self._TargetSeedIds.Initialize() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 seedPoints = vtk.vtkPoints() for i in range(self._SeedIds.GetNumberOfIds()): seedPoints.InsertNextPoint(self._Surface.GetPoint(self._SeedIds.GetId(i))) seedPolyData = vtk.vtkPolyData() seedPolyData.SetPoints(seedPoints) seedPolyData.Update() labelsMapper = vtk.vtkLabeledDataMapper(); labelsMapper.SetInput(seedPolyData) labelsMapper.SetLabelModeToLabelIds() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) surfaceMapper = vtk.vtkPolyDataMapper() surfaceMapper.SetInput(self._Surface) surfaceMapper.ScalarVisibilityOff() surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(surfaceMapper) surfaceActor.GetProperty().SetOpacity(0.25) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.vmtkRenderer.Render() self.vmtkRenderer.Renderer.RemoveActor(labelsActor) self.vmtkRenderer.Renderer.RemoveActor(surfaceActor) seedIdString = self.InputText("Please input list of inlet profile ids: ") separator = ' ' if seedIdString.find(',') != -1: separator = ',' seedIdList = seedIdString.split(separator) for seedIdString in seedIdList: self._SourceSeedIds.InsertNextId(int(seedIdString.strip())) seedIdString = self.InputText("Please input list of outlet profile ids (leave empty for all available profiles): ") if seedIdString.strip() == '': self.OutputText("Selected outlets: ") for i in range(seedPoints.GetNumberOfPoints()): if self._SourceSeedIds.IsId(i) == -1: self._TargetSeedIds.InsertNextId(i) self.OutputText("%d " % i) self.OutputText("\n") else: seedIdList = seedIdString.split(separator) for seedIdString in seedIdList: self._TargetSeedIds.InsertNextId(int(seedIdString.strip())) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self.Mesh == None): self.PrintError('Error: no Mesh.') if (self.Centerlines == None): self.PrintError('Error: no Centerlines') #Save the centerlines previousCenterlines = self.Centerlines cleaner = vtk.vtkCleanPolyData() cleaner.SetInputData(self.Centerlines) cleaner.Update() self.Centerlines = cleaner.GetOutput() if self.Tolerance == -1: self.Tolerance = 0.000001*self.Mesh.GetLength() if self.RadiusArrayName != '': self.RadiusArray = self.Centerlines.GetPointData().GetArray(self.RadiusArrayName) if self.RadiusArray == None: self.PrintError('Error : could not find radius array') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 meshMapper = vtk.vtkDataSetMapper() meshMapper.SetInputData(self.Mesh) meshMapper.ScalarVisibilityOff() self.MeshActor = vtk.vtkActor() self.MeshActor.SetMapper(meshMapper) self.MeshActor.GetProperty().SetOpacity(0.25) self.MeshActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.MeshActor) centerlinesMapper = vtk.vtkDataSetMapper() centerlinesMapper.SetInputData(self.Centerlines) centerlinesMapper.ScalarVisibilityOff() self.CenterlinesActor = vtk.vtkActor() self.CenterlinesActor.SetMapper(centerlinesMapper) self.vmtkRenderer.Renderer.AddActor(self.CenterlinesActor) glyphs = vtk.vtkGlyph3D() glyphSource = vtk.vtkSphereSource() glyphSource.SetRadius(1) glyphs.SetInputData(self.Spheres) glyphs.SetSourceConnection(glyphSource.GetOutputPort()) glyphs.SetScaleModeToScaleByScalar() glyphs.SetScaleFactor(1.) glyphMapper = vtk.vtkPolyDataMapper() glyphMapper.SetInputConnection(glyphs.GetOutput()) glyphMapper.ScalarVisibilityOff() self.SpheresActor = vtk.vtkActor() self.SpheresActor.SetMapper(glyphMapper) self.SpheresActor.GetProperty().SetColor(1.0,0.0,0.0) self.SpheresActor.GetProperty().SetOpacity(0.25) self.SpheresActor.PickableOff() self.vmtkRenderer.Renderer.AddActor(self.SpheresActor) self.InterpolatedGlyphs = vtk.vtkGlyph3D() interpolatedGlyphSource = vtk.vtkSphereSource() interpolatedGlyphSource.SetRadius(1) self.InterpolatedGlyphs.SetInputData(self.Centerlines) self.InterpolatedGlyphs.SetSourceConnection(interpolatedGlyphSource.GetOutputPort()) #scaling is off for now self.InterpolatedGlyphs.SetScaleModeToDataScalingOff() self.InterpolatedGlyphs.SetScaleFactor(0.) interpolatedGlyphMapper = vtk.vtkPolyDataMapper() interpolatedGlyphMapper.SetInputConnection(self.InterpolatedGlyphs.GetOutputPort()) interpolatedGlyphMapper.ScalarVisibilityOff() self.InterpolatedSpheresActor = vtk.vtkActor() self.InterpolatedSpheresActor.SetMapper(interpolatedGlyphMapper) self.InterpolatedSpheresActor.GetProperty().SetColor(0.0,1.0,0.0) self.InterpolatedSpheresActor.GetProperty().SetOpacity(0.25) self.InterpolatedSpheresActor.PickableOff() self.InterpolatedSpheresActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.InterpolatedSpheresActor) polyBallMapper = vtk.vtkPolyDataMapper() polyBallMapper.ScalarVisibilityOff() self.PolyBallActor = vtk.vtkActor() self.PolyBallActor.SetMapper(polyBallMapper) self.PolyBallActor.GetProperty().SetColor(0.0,1.0,0.0) self.PolyBallActor.GetProperty().SetOpacity(0.25) self.PolyBallActor.PickableOff() self.PolyBallActor.VisibilityOff() self.vmtkRenderer.Renderer.AddActor(self.PolyBallActor) self.SphereWidget = vtk.vtkSphereWidget() self.SphereWidget.TranslationOff() self.SphereWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) self.SphereWidget.AddObserver("InteractionEvent", self.SphereCallback) self.Clipper = vtk.vtkClipDataSet() self.Clipper.SetInputData(self.Mesh) self.Clipper.SetInsideOut(self.InsideOut) self.Clipper.GenerateClippedOutputOn() #self.LineClipper = vtkvmtk.vtkvmtkClipDataSetLine() #self.LineClipper.SetInputData(self.Mesh) #self.LineClipper.SetInsideOut(self.InsideOut) #self.LineClipper.GenerateClippedOutputOn() self.InitializeSpheres() self.PreviewMesh = self.Mesh self.Display() self.PolyBallActor.VisibilityOff() self.ClipMesh() if self.ClippedMesh == None: #return an empty mesh self.ClippedMesh = vtk.vtkUnstructuredGrid() elif self.IncludeSurfaceCells: #Create the surface cells self.PreviewMesh = self.CreateSurfaceCells(self.PreviewMesh) self.ClippedMesh = self.CreateSurfaceCells(self.ClippedMesh) self.Mesh = self.PreviewMesh if self.OwnRenderer: self.vmtkRenderer.Deallocate() if self.Mesh.GetSource(): self.Mesh.GetSource().UnRegisterAllOutputs() #Restore the centerlines self.Centerlines = previousCenterlines
def Execute(self): if not self.Mesh: self.PrintError('Error: No input mesh.') return if not self.CellEntityIdsArrayName: self.PrintError('Error: No input CellEntityIdsArrayName.') return if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 threshold = vtk.vtkThreshold() threshold.SetInput(self.Mesh) threshold.ThresholdByUpper(self.VolumeCellEntityId + 0.5) threshold.SetInputArrayToProcess(0, 0, 0, 1, self.CellEntityIdsArrayName) threshold.Update() boundaryMesh = threshold.GetOutput() boundaryMesh.GetCellData().SetActiveScalars( self.CellEntityIdsArrayName) boundaryMapper = vtk.vtkDataSetMapper() boundaryMapper.SetInput(boundaryMesh) boundaryMapper.ScalarVisibilityOn() boundaryMapper.SetScalarModeToUseCellData() boundaryMapper.SetScalarRange( boundaryMesh.GetCellData().GetScalars().GetRange()) boundaryActor = vtk.vtkActor() boundaryActor.SetMapper(boundaryMapper) self.vmtkRenderer.Renderer.AddActor(boundaryActor) wallThreshold = vtk.vtkThreshold() wallThreshold.SetInput(boundaryMesh) wallThreshold.ThresholdByLower(self.WallCellEntityId + 0.5) wallThreshold.SetInputArrayToProcess(0, 0, 0, 1, self.CellEntityIdsArrayName) wallThreshold.Update() wallMeshToSurface = vtk.vtkGeometryFilter() wallMeshToSurface.SetInput(wallThreshold.GetOutput()) wallMeshToSurface.Update() boundaryReferenceSystems = vtkvmtk.vtkvmtkBoundaryReferenceSystems() boundaryReferenceSystems.SetInput(wallMeshToSurface.GetOutput()) boundaryReferenceSystems.SetBoundaryRadiusArrayName("BoundaryRadius") boundaryReferenceSystems.SetBoundaryNormalsArrayName("BoundaryNormals") boundaryReferenceSystems.SetPoint1ArrayName("Point1Array") boundaryReferenceSystems.SetPoint2ArrayName("Point2Array") boundaryReferenceSystems.Update() self.ReferenceSystems = boundaryReferenceSystems.GetOutput() cellEntityIdsArray = vtk.vtkIntArray() cellEntityIdsArray.SetName(self.CellEntityIdsArrayName) cellEntityIdsArray.SetNumberOfTuples( self.ReferenceSystems.GetNumberOfPoints()) self.ReferenceSystems.GetPointData().AddArray(cellEntityIdsArray) wallMeshToSurface = vtk.vtkGeometryFilter() wallMeshToSurface.SetInput(boundaryMesh) wallMeshToSurface.Update() boundarySurface = wallMeshToSurface.GetOutput() pointCells = vtk.vtkIdList() surfaceCellEntityIdsArray = vtk.vtkIntArray() surfaceCellEntityIdsArray.DeepCopy( boundarySurface.GetCellData().GetArray( self.CellEntityIdsArrayName)) self.PrintLog('') for i in range(self.ReferenceSystems.GetNumberOfPoints()): pointId = boundarySurface.FindPoint( self.ReferenceSystems.GetPoint(i)) boundarySurface.GetPointCells(pointId, pointCells) cellId = pointCells.GetId(0) cellEntityId = surfaceCellEntityIdsArray.GetValue(cellId) cellEntityIdsArray.SetValue(i, cellEntityId) origin = self.ReferenceSystems.GetPoint(i) normal = self.ReferenceSystems.GetPointData().GetArray( "BoundaryNormals").GetTuple3(i) radius = self.ReferenceSystems.GetPointData().GetArray( "BoundaryRadius").GetTuple1(i) logLine = 'CellEntityId: %d\n' % cellEntityId logLine += ' Origin: %f, %f, %f\n' % (origin[0], origin[1], origin[2]) logLine += ' Normal: %f, %f, %f\n' % (normal[0], normal[1], normal[2]) logLine += ' Radius: %f\n' % radius self.PrintLog(logLine) self.ReferenceSystems.GetPointData().SetActiveScalars( self.CellEntityIdsArrayName) labelsMapper = vtk.vtkLabeledDataMapper() labelsMapper.SetInput(self.ReferenceSystems) labelsMapper.SetLabelModeToLabelScalars() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) self.vmtkRenderer.Render() if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if (self._Surface == None): self.PrintError( 'vmtkOpenProfilesSeedSelector Error: Surface not set.') return if (self._SeedIds == None): self.PrintError( 'vmtkOpenProfilesSeedSelector Error: SeedIds not set.') return self._SourceSeedIds.Initialize() self._TargetSeedIds.Initialize() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self.Script) seedPoints = vtk.vtkPoints() for i in range(self._SeedIds.GetNumberOfIds()): seedPoints.InsertNextPoint( self._Surface.GetPoint(self._SeedIds.GetId(i))) seedPolyData = vtk.vtkPolyData() seedPolyData.SetPoints(seedPoints) seedPolyData.Update() labelsMapper = vtk.vtkLabeledDataMapper() labelsMapper.SetInput(seedPolyData) labelsMapper.SetLabelModeToLabelIds() labelsActor = vtk.vtkActor2D() labelsActor.SetMapper(labelsMapper) self.vmtkRenderer.Renderer.AddActor(labelsActor) surfaceMapper = vtk.vtkPolyDataMapper() surfaceMapper.SetInput(self._Surface) surfaceMapper.ScalarVisibilityOff() surfaceActor = vtk.vtkActor() surfaceActor.SetMapper(surfaceMapper) surfaceActor.GetProperty().SetOpacity(0.25) self.vmtkRenderer.Renderer.AddActor(surfaceActor) self.vmtkRenderer.Render() seedIdString = self.InputText( "Please input list of inlet profile ids: ") separator = ' ' if seedIdString.find(',') != -1: separator = ',' seedIdList = seedIdString.split(separator) for seedIdString in seedIdList: self._SourceSeedIds.InsertNextId(int(seedIdString.strip())) seedIdString = self.InputText( "Please input list of outlet profile ids (leave empty for all available profiles): " ) if seedIdString.strip() == '': self.InputInfo("Selected outlets: ") for i in range(seedPoints.GetNumberOfPoints()): if self._SourceSeedIds.IsId(i) == -1: self._TargetSeedIds.InsertNextId(i) self.InputInfo("%d " % i) self.InputInfo("\n") else: seedIdList = seedIdString.split(separator) for seedIdString in seedIdList: self._TargetSeedIds.InsertNextId(int(seedIdString.strip())) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if not self.Centerlines: self.PrintError('Error: No input centerlines.') if not self.GroupIdsArrayName: self.PrintError('Error: GroupIdsArrayName not specified.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) groupIdsArray = self.Centerlines.GetCellData().GetArray(self.GroupIdsArrayName) groupIds = [] for i in range(groupIdsArray.GetNumberOfTuples()): groupIds.append(int(groupIdsArray.GetComponent(i,0))) groupIds.sort() uniqueGroupIds = [] for groupId in groupIds: if groupId not in uniqueGroupIds: uniqueGroupIds.append(groupId) labelMap = {} if not self.Labeling: viewer = vmtkcenterlineviewer.vmtkCenterlineViewer() viewer.Centerlines = self.Centerlines viewer.CellDataArrayName = self.GroupIdsArrayName viewer.vmtkRenderer = self.vmtkRenderer viewer.InputStream = self.InputStream viewer.OutputStream = self.OutputStream #viewer.InputText = self.InputText #viewer.OutputText = self.OutputText #viewer.PrintError = self.PrintError #viewer.PringLog = self.PrintLog viewer.Execute() ok = False while not ok: labelString = self.InputText("Please input labels for the following groupIds:\n%s\n" % " ".join([str(groupId) for groupId in uniqueGroupIds]),self.LabelValidator) labels = [int(label) for label in labelString.split()] if len(labels) == len(uniqueGroupIds): ok = True for groupId in uniqueGroupIds: labelMap[groupId] = labels[uniqueGroupIds.index(groupId)] else: if len(self.Labeling) != 2 * len(uniqueGroupIds): self.PrintError('Error: incorrect labeling specified') for i in range(len(self.Labeling)/2): groupId = self.Labeling[2*i] labelId = self.Labeling[2*i+1] if not groupId in uniqueGroupIds: self.PrintError('Error: groupId %d does not exist' % groupId) labelMap[groupId] = labelId labelIdsArray = vtk.vtkIntArray() labelIdsArray.SetName(self.LabelIdsArrayName) labelIdsArray.SetNumberOfComponents(1) labelIdsArray.SetNumberOfTuples(self.Centerlines.GetNumberOfCells()) groupIdsArray = self.Centerlines.GetCellData().GetArray(self.GroupIdsArrayName) for i in range(groupIdsArray.GetNumberOfTuples()): groupId = int(groupIdsArray.GetComponent(i,0)) labelIdsArray.SetComponent(i,0,labelMap[groupId]) self.Centerlines.GetCellData().AddArray(labelIdsArray) if self.OwnRenderer: self.vmtkRenderer.Deallocate()
def Execute(self): if self.Surface == None: self.PrintError('Error: no Surface.') self.Clipper = vtk.vtkClipPolyData() self.Clipper.SetInputData(self.Surface) self.Clipper.GenerateClippedOutputOn() self.Clipper.SetInsideOut(self.InsideOut) if self.Interactive: if self.WidgetType == "box": self.ClipFunction = vtk.vtkPlanes() elif self.WidgetType == "sphere": self.ClipFunction = vtk.vtkSphere() self.Clipper.SetClipFunction(self.ClipFunction) self.Cutter = vtk.vtkCutter() self.Cutter.SetInputData(self.Surface) self.Cutter.SetCutFunction(self.ClipFunction) self.ClippedSurface = vtk.vtkPolyData() self.CutLines = vtk.vtkPolyData() if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) mapper = vtk.vtkPolyDataMapper() mapper.SetInputData(self.Surface) mapper.ScalarVisibilityOff() self.Actor = vtk.vtkActor() self.Actor.SetMapper(mapper) self.vmtkRenderer.Renderer.AddActor(self.Actor) if self.WidgetType == "box": self.ClipWidget = vtk.vtkBoxWidget() self.ClipWidget.GetFaceProperty().SetColor(0.6, 0.6, 0.2) self.ClipWidget.GetFaceProperty().SetOpacity(0.25) elif self.WidgetType == "sphere": self.ClipWidget = vtk.vtkSphereWidget() self.ClipWidget.GetSphereProperty().SetColor(0.6, 0.6, 0.2) self.ClipWidget.GetSphereProperty().SetOpacity(0.25) self.ClipWidget.GetSelectedSphereProperty().SetColor( 0.6, 0.0, 0.0) self.ClipWidget.GetSelectedSphereProperty().SetOpacity(0.75) self.ClipWidget.SetRepresentationToSurface() self.ClipWidget.SetPhiResolution(20) self.ClipWidget.SetThetaResolution(20) self.ClipWidget.SetInteractor( self.vmtkRenderer.RenderWindowInteractor) self.vmtkRenderer.AddKeyBinding('space', 'Clip.', self.ClipCallback) self.vmtkRenderer.AddKeyBinding('i', 'Interact.', self.InteractCallback) self.Display() self.Transform = vtk.vtkTransform() self.ClipWidget.GetTransform(self.Transform) if self.OwnRenderer: self.vmtkRenderer.Deallocate() else: self.Surface.GetPointData().SetActiveScalars(self.ClipArrayName) self.Clipper.GenerateClipScalarsOff() self.Clipper.SetValue(self.ClipValue) self.Clipper.Update() self.Cutter = vtk.vtkContourFilter() self.Cutter.SetInputData(self.Surface) self.Cutter.SetValue(0, self.ClipValue) self.Cutter.Update() self.Surface = self.Clipper.GetOutput() self.ClippedSurface = self.Clipper.GetClippedOutput() self.CutLines = self.Cutter.GetOutput() if self.CleanOutput == 1: cleaner = vtk.vtkCleanPolyData() cleaner.SetInputData(self.Surface) cleaner.Update() self.Surface = cleaner.GetOutput() cleaner = vtk.vtkCleanPolyData() cleaner.SetInputData(self.ClippedSurface) cleaner.Update() self.ClippedSurface = cleaner.GetOutput() cleaner = vtk.vtkCleanPolyData() cleaner.SetInputData(self.CutLines) cleaner.Update() stripper = vtk.vtkStripper() stripper.SetInputConnection(cleaner.GetOutputPort()) stripper.Update() self.CutLines = stripper.GetOutput()