Example #1
0
    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()
Example #2
0
    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
        }
Example #3
0
 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
Example #5
0
 def updateSof(self, sofPoints):
     self.sof = simple.CreatePiecewiseFunction()
     self.sof.Points = sofPoints
     self.rep.ScalarOpacityFunction = self.sof
     simple.Render()