def __init__(self, divvyProtocol, colorManager): super(ScatterPlotProtocol, self).__init__() self.divvyProtocol = divvyProtocol self.colorManager = colorManager self.dataTable = None self.dataMesh = None self.meshRepresentation = None self.arrays = {} self.renderView = simple.CreateView('RenderView') self.renderView.InteractionMode = '3D' self.renderView.SMProxy.GetRenderWindow().SetMultiSamples(0) self.renderView.EnableRenderOnInteraction = 0 self.representationMap = self.createCustomShaderMap() self.trivProducer = None self._lutImages = None self._colorMapName = '' self.scaleTransferFunction = simple.CreatePiecewiseFunction( Points=[0.0, 0.3, 0.5, 0.0, 1.0, 0.05, 0.5, 0.0]) self.opacityTransferFunction = simple.CreatePiecewiseFunction( Points=[0.0, 0.3, 0.5, 0.0, 1.0, 0.05, 0.5, 0.0]) self.userSelScalePoints = [0.0, 0.3, 0.5, 0.0, 1.0, 0.05, 0.5, 0.0] self.userSelOpacityPoints = [0.0, 0.3, 0.5, 0.0, 1.0, 0.05, 0.5, 0.0] self.userSelPointSizeRange = [1, 3] module_path = os.path.abspath(__file__) pathToLuts = os.path.join(os.path.dirname(module_path), 'ColorMaps.json') self.lutMap = readColorMaps(pathToLuts) self._selectionLutInitialized = False presets = servermanager.vtkSMTransferFunctionPresets() importSuccess = presets.ImportPresets(pathToLuts) print('Presets were%simported successfully' % (' ' if importSuccess else ' NOT ')) self.activeSelectionInformation = { "activeAnnotation": { "selection": { "type": "empty" }, "score": [] }, "activeScores": [] } self.initializeUserSelectionPreset()
def volumeRender(self): global view self._extractVolumeImageData() (lenx, leny, lenz) = (self.bounds[1] - self.bounds[0], self.bounds[3] - self.bounds[2], self.bounds[5] - self.bounds[4]) (midx, midy, midz) = (self.center[0], self.center[1], self.center[2]) maxDim = max(lenx, leny, lenz) # Adjust camera properties appropriately view.CameraFocalPoint = self.center view.CenterOfRotation = self.center view.CameraPosition = [ midx - self.DISTANCE_FACTOR * maxDim, midy, midz ] view.CameraViewUp = [0, 0, 1] # Create RGB transfer function rgbPoints = [ self.scalarRange[0], 0, 0, 0, self.scalarRange[1], 1, 1, 1 ] self.lookupTable = simple.GetLookupTableForArray( self.colorArrayName, 1) self.lookupTable.RGBPoints = rgbPoints self.lookupTable.ScalarRangeInitialized = 1.0 self.lookupTable.ColorSpace = 0 # 0 corresponds to RGB # Create opacity transfer function sofPoints = [ self.scalarRange[0], 0, 0.5, 0, self.scalarRange[1], 1, 0.5, 0 ] self.sof = simple.CreatePiecewiseFunction() self.sof.Points = sofPoints self.rep.ColorArrayName = self.colorArrayName self.rep.Representation = 'Volume' self.rep.ScalarOpacityFunction = self.sof self.rep.LookupTable = self.lookupTable simple.Show() simple.Render() return { 'scalarRange': self.scalarRange, 'bounds': self.bounds, 'extent': self.extent, 'sofPoints': sofPoints, 'rgbPoints': rgbPoints }
def _create_piecewise_function(self, scalarRange): return simple.CreatePiecewiseFunction(Points=[ scalarRange[0], 0.0, 0.5, 0.0, scalarRange[1], 1.0, 0.5, 0.0 ])
# create another calculator to compute inverse distance calculator2 = simple.Calculator(Input=calculator1) calculator2.ResultArrayName = 'Inverse Distance' calculator2.Function = '%s-Distance' % str(NUM_POINTS - 1) # Get the representation rep = simple.Show(calculator2) # Set up coloring by one array rep.Representation = 'Point Gaussian' simple.ColorBy(rep, ('POINTS', 'Ordinal')) vtkSMPVRepresentationProxy.RescaleTransferFunctionToDataRange( rep.SMProxy, 'Ordinal', 0, False) # Set up sizing by another array scaleTransferFunction = simple.CreatePiecewiseFunction( Points=[0.0, 0.05, 0.5, 0.0, NUM_POINTS - 1, 0.15, 0.5, 0.0]) rep.ScaleTransferFunction = scaleTransferFunction rep.SetScaleArray = 'Distance' rep.ScaleByArray = 1 rep.GaussianRadius = 1 # And finally, set up opacity by a third array opacityTransferFunction = simple.CreatePiecewiseFunction( Points=[0.0, 0.2, 0.5, 0.0, NUM_POINTS - 1, 1.0, 0.5, 0.0]) rep.OpacityTransferFunction = opacityTransferFunction rep.OpacityArray = 'Inverse Distance' rep.OpacityByArray = 1 # Now set a custom shader snippet rep.CustomShader = ''' //VTK::Color::Impl
def updateSof(self, sofPoints): self.sof = simple.CreatePiecewiseFunction() self.sof.Points = sofPoints self.rep.ScalarOpacityFunction = self.sof simple.Render()