def initialize(self):
        # Bring used components
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebStartupRemoteConnection(
                _FileOpener.dsHost, _FileOpener.dsPort, _FileOpener.rsHost,
                _FileOpener.rsPort))
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebFileListing(_FileOpener.pathToList,
                                                "Home"))
        self.registerVtkWebProtocol(pv_protocols.ParaViewWebMouseHandler())
        self.registerVtkWebProtocol(pv_protocols.ParaViewWebViewPort())
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebViewPortImageDelivery())
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebViewPortGeometryDelivery())
        self.registerVtkWebProtocol(pv_protocols.ParaViewWebTimeHandler())

        # Update authentication key to use
        self.updateSecret(_FileOpener.authKey)

        # Create default pipeline
        if _FileOpener.fileToLoad:
            _FileOpener.reader = simple.OpenDataFile(_FileOpener.fileToLoad)
            simple.Show()

            _FileOpener.view = simple.Render()
            _FileOpener.view.ViewSize = [800, 800]
            # If this is running on a Mac DO NOT use Offscreen Rendering
            #view.UseOffscreenRendering = 1
            simple.ResetCamera()
        else:
            _FileOpener.view = simple.GetRenderView()
            simple.Render()
            _FileOpener.view.ViewSize = [800, 800]
        simple.SetActiveView(_FileOpener.view)
 def __init__(self):
     super(ParaViewWebPipelineManager, self).__init__()
     # Setup global variables
     self.pipeline = web_helper.Pipeline('Kitware')
     self.lutManager = web_helper.LookupTableManager()
     self.view = simple.GetRenderView()
     simple.SetActiveView(self.view)
     simple.Render()
     self.view.ViewSize = [800, 800]
     self.lutManager.setView(self.view)
Exemple #3
0
    def init_view(self):
        pasi.SetActiveView(pasi.GetRenderView())
        if paraview_loaded:
            camera = pasi.GetActiveCamera()
            self.camera = camera
            # cm = CameraMover(camera)
            print("Camera loaded")

            if self.view_size is not None:
                pasi.GetActiveView().ViewSize = self.view_size
Exemple #4
0
    def initialize(self):
        # Bring used components
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebStartupRemoteConnection(
                _FileOpener.dsHost, _FileOpener.dsPort, _FileOpener.rsHost,
                _FileOpener.rsPort))
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebFileListing(_FileOpener.pathToList,
                                                "Home"))
        self.registerVtkWebProtocol(pv_protocols.ParaViewWebMouseHandler())
        self.registerVtkWebProtocol(pv_protocols.ParaViewWebViewPort())
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebViewPortImageDelivery())
        self.registerVtkWebProtocol(
            pv_protocols.ParaViewWebViewPortGeometryDelivery())
        self.registerVtkWebProtocol(pv_protocols.ParaViewWebTimeHandler())

        # Update authentication key to use
        self.updateSecret(_FileOpener.authKey)

        # Create default pipeline
        if _FileOpener.fileToLoad:
            _FileOpener.reader = simple.OpenDataFile(_FileOpener.fileToLoad)
            simple.Show()

            _FileOpener.view = simple.Render()
            _FileOpener.view.ViewSize = [800, 800]
            # If this is running on a Mac DO NOT use Offscreen Rendering
            #view.UseOffscreenRendering = 1
            simple.ResetCamera()
        else:
            _FileOpener.view = simple.GetRenderView()
            simple.Render()
            _FileOpener.view.ViewSize = [800, 800]

            # test to prove server's working
            # independently from the web components
            #c = simple.Cone()
            #c.Resolution = 128
            #simple.Hide(c)
            #p = simple.ProcessIdScalars()
            #r = simple.Show(p)
            #a = p.PointData.GetArray('ProcessId')
            #r.ColorArrayName = 'ProcessId'
            #simple.AssignLookupTable(a,'Cool to Warm')
            #simple.Render()
            #simple.SaveScreenshot('/usr/common/graphics/ParaView/4.2.0-PDACS/data/test.png')

        simple.SetActiveView(_FileOpener.view)
 def __init__(self, baseDir=None, fileToLoad=None):
     super(ParaViewWebPipelineManager, self).__init__()
     # Setup global variables
     self.pipeline = helper.Pipeline('Kitware')
     self.lutManager = helper.LookupTableManager()
     self.view = simple.GetRenderView()
     self.baseDir = baseDir
     simple.SetActiveView(self.view)
     simple.Render()
     self.view.ViewSize = [800, 800]
     self.lutManager.setView(self.view)
     if fileToLoad and fileToLoad[-5:] != '.pvsm':
         try:
             self.openFile(fileToLoad)
         except:
             print "error loading..."
Exemple #6
0
    def ArrowsScript(Input1, Input2, Output, CamDirVec=None, CamUpVec=None):

        #### disable automatic camera reset on 'Show'
        pvs._DisableFirstRenderCameraReset()

        # create a new 'XML Unstructured Grid Reader'
        VTU1 = pvs.XMLUnstructuredGridReader(FileName=[Input1])
        VTU1.PointArrayStatus = ['Curvature']

        # create a new 'XML Unstructured Grid Reader'
        VTU2 = pvs.XMLUnstructuredGridReader(FileName=[Input2])
        VTU2.PointArrayStatus = ['Curvature']

        # get active view
        renderView1 = pvs.GetActiveViewOrCreate('RenderView')

        # show data in view
        VTU1Display = pvs.Show(VTU1, renderView1)
        VTU1Display.Representation = 'Surface'
        VTU1Display.Diffuse = 0.85
        VTU1Display.Ambient = 0.25

        makeGlyph(VTU1, renderView1, scale=40.0, color=[1.0, 0.0, 0.0])
        makeGlyph(VTU2, renderView1, scale=30.0, color=[0.0, 0.0, 1.0])

        # Save Screenshot
        AdjustCameraAndSave(renderView1,
                            Output,
                            ImageResolution=(2048, 2048),
                            CamDirVec=CamDirVec,
                            CamUpVec=CamUpVec)

        # set active source
        pvs.SetActiveSource(None)
        pvs.SetActiveView(None)
        pvs.Disconnect()
Exemple #7
0
    def UpdateCinema(self, view, datadescription, specLevel):
        """ called from catalyst at each timestep to add to the cinema database """
        if not view.IsA("vtkSMRenderViewProxy") == True:
            return

        try:
            import paraview.tpl.cinema_python.adaptors.explorers as explorers
            import paraview.tpl.cinema_python.adaptors.paraview.pv_explorers as pv_explorers
            import paraview.tpl.cinema_python.adaptors.paraview.pv_introspect as pv_introspect
        except ImportError as e:
            import paraview
            paraview.print_error("Cannot import cinema")
            paraview.print_error(e)
            return

        #figure out where to put this store
        import os.path
        vfname = view.cpFileName
        extension = os.path.splitext(vfname)[1]
        vfname = vfname[0:vfname.rfind("_")]  #strip _num.ext
        fname = os.path.join(os.path.dirname(vfname), "cinema",
                             os.path.basename(vfname), "info.json")

        def float_limiter(x):
            #a shame, but needed to make sure python, javascript and (directory/file)name agree
            if isinstance(x, (float)):
                return '%.6e' % x  #arbitrarily chose 6 significant digits
            else:
                return x

        #what time?
        time = datadescription.GetTime()
        view.ViewTime = time
        formatted_time = float_limiter(time)

        #ensure that cinema operates on the specified view
        simple.SetActiveView(view)

        # Include camera information in the user defined parameters.
        # pv_introspect uses __CinemaTracks to customize the exploration.
        co = view.cpCinemaOptions
        camType = co["camera"]
        if "phi" in co:
            self.__CinemaTracks["phi"] = co["phi"]
        if "theta" in co:
            self.__CinemaTracks["theta"] = co["theta"]
        if "roll" in co:
            self.__CinemaTracks["roll"] = co["roll"]

        tracking_def = {}
        if "tracking" in co:
            tracking_def = co['tracking']

        #figure out what we show now
        pxystate = pv_introspect.record_visibility()
        # a conservative global bounds for consistent z scaling
        minbds, maxbds = pv_introspect.max_bounds()

        #make sure depth rasters are consistent
        view.MaxClipBounds = [minbds, maxbds, minbds, maxbds, minbds, maxbds]
        view.LockBounds = 1

        disableValues = False if 'noValues' not in co else co['noValues']

        if specLevel == "B":
            p = pv_introspect.inspect(skip_invisible=True)
        else:
            p = pv_introspect.inspect(skip_invisible=False)
        fs = pv_introspect.make_cinema_store(p,
                                             fname,
                                             view,
                                             forcetime=formatted_time,
                                             userDefined=self.__CinemaTracks,
                                             specLevel=specLevel,
                                             camType=camType,
                                             extension=extension,
                                             disableValues=disableValues)

        #all nodes participate, but only root can writes out the files
        pm = servermanager.vtkProcessModule.GetProcessModule()
        pid = pm.GetPartitionId()

        enableFloatVal = False if 'floatValues' not in co else co['floatValues']

        new_files = {}
        ret = pv_introspect.explore(fs,
                                    p,
                                    iSave=(pid == 0),
                                    currentTime={'time': formatted_time},
                                    userDefined=self.__CinemaTracks,
                                    specLevel=specLevel,
                                    camType=camType,
                                    tracking=tracking_def,
                                    floatValues=enableFloatVal,
                                    disableValues=disableValues)
        if pid == 0:
            fs.save()
        new_files[vfname] = ret

        view.LockBounds = 0

        #restore what we showed
        pv_introspect.restore_visibility(pxystate)
        return os.path.basename(vfname), new_files
Exemple #8
0
def export_scene(baseDirName, viewSelection, trackSelection):
    '''This explores a set of user-defined views and tracks. export_scene is
    called from vtkCinemaExport.  The expected order of parameters is as follows:

    - viewSelection (following the format defined in Wrapping/Python/paraview/cpstate.py):

    Directory  of the form {'ViewName' : [parameters], ...}, with parameters defined in the
    order:  Image filename, freq, fittoscreen, magnification, width, height, cinema).

    - trackSelection:

    Directory of the form {'TrackName' : [v1, v2, v3], ...}

    Note:  baseDirName is used as the parent directory of the database generated for
    each view in viewSelection. 'Image filename' is used as the database directory name.
    '''

    import paraview.simple as pvs

    # save initial state
    initialView = pvs.GetActiveView()
    pvstate = record_visibility()

    atLeastOneViewExported = False
    for viewName, viewParams in viewSelection.iteritems():

        # check if this view was selected to export as spec b
        cinemaParams = viewParams[6]
        if len(cinemaParams) == 0:
            print "Skipping view: Not selected to export as cinema spherical."
            continue

        # get the view and save the initial status
        view = pvs.FindView(viewName)
        pvs.SetActiveView(view)
        view.ViewSize = [viewParams[4], viewParams[5]]
        pvs.Render() # fully renders the scene (if not, some faces might be culled)
        view.LockBounds = 1

        #writeFreq = viewParams[1] # TODO where to get the timestamp in this case?
        #if (writeFreq and timestamp % writeFreq == 0):

        #magnification = viewParams[3] # Not used in cinema (TODO hide in UI)

        fitToScreen = viewParams[2]
        if fitToScreen != 0:
            if view.IsA("vtkSMRenderViewProxy") == True:
                view.ResetCamera()
            elif view.IsA("vtkSMContextViewProxy") == True:
                view.ResetDisplay()
            else:
                print ' do not know what to do with a ', view.GetClassName()

        userDefValues = {}
        if "theta" in cinemaParams:
            userDefValues["theta"] = cinemaParams["theta"]

        if "phi" in cinemaParams:
            userDefValues["phi"] = cinemaParams["phi"]

        userDefValues.update(trackSelection)

        # generate file path
        import os.path
        viewFileName = viewParams[0]
        viewDirName = viewFileName[0:viewFileName.rfind("_")] #strip _num.ext
        filePath = os.path.join(baseDirName, viewDirName, "info.json")

        p = inspect()
        cs = make_cinema_store(p, filePath, forcetime = False,
          _userDefinedValues = userDefValues)

        explore(cs, p)

        view.LockBounds = 0
        cs.save()
        atLeastOneViewExported = True

    if not atLeastOneViewExported:
        print "No view was selected to export as cinema spherical."
        return

    # restore initial state
    pvs.SetActiveView(initialView)
    restore_visibility(pvstate)
Exemple #9
0
pv._DisableFirstRenderCameraReset()

# create a new 'CSV Reader'
hitsCsv = pv.CSVReader(FileName=[args.hitsFile])

# create a new 'Table To Points'
tableToPoints1 = pv.TableToPoints(Input=hitsCsv)
tableToPoints1.XColumn = 'X'
tableToPoints1.YColumn = 'Y'
tableToPoints1.ZColumn = 'Z'

# find view
renderView1 = pv.FindViewOrCreate('RenderView1', viewtype='RenderView')

# set active view
pv.SetActiveView(renderView1)

# create a new 'Glyph'
# sphere
glyph1 = pv.Glyph(Input=tableToPoints1, GlyphType='Sphere')
glyph1.Scalars = ['POINTS', 'Q']
glyph1.ScaleMode = 'scalar'
glyph1.ScaleFactor = scaleFactor
glyph1.GlyphMode = 'All Points'
#glyph1.GlyphType.ThetaResolution = 8
#glyph1.GlyphType.PhiResolution = 8

# get color transfer function/color map for args.colourColumn
cLUT = pv.GetColorTransferFunction(args.colourColumn)
nc = vtk.vtkNamedColors()
rgb = [0. for i in range(3)]
    def createViews(self):
        """Create views
        """
        # Disable automatic camera reset on 'Show'
        pv._DisableFirstRenderCameraReset()

        # Create render view
        renderView = self.createRenderView([900, 900])

        # Activate render view
        pv.SetActiveView(renderView)

        # Create ExodusII reader
        reader = self.createExodusIIReader("Weight", "Load")

        # Create sqrt(load) calculator to optimize visuals
        sqrt_load = self.createCalculator(reader, "sqrt", "Load")

        # Create sqrt(load) glyph
        glyph = self.createGlyph(sqrt_load,
                                      factor=0.05)

        # Instantiate weight colors and points
        weight_colors = [223.48540319420192,
                         0.231373,
                         0.298039,
                         0.752941,
                         784.8585271892204,
                         0.865003,
                         0.865003,
                         0.865003,
                         1346.2316511842387,
                         0.705882,
                         0.0156863,
                         0.14902]
        weight_points = [223.48540319420192,
                         0.0,
                         0.5,
                         0.0,
                         1346.2316511842387,
                         1.0,
                         0.5,
                         0.0]
        # Create color transfert functions
        weightLUT = self.createColorTransferFunction(
            "Weight",
            weight_colors,
            [1., 1., 1.],
            0.0)
        weightPWF = self.createOpacityTransferFunction(
            "Weight",
            weight_points)

        readerDisplay = self.createDisplay(
            reader,
            renderView,
            ['CELLS', 'Weight'],
            weightLUT,
            4.0,
            None,
            None,
            weightPWF)

        # Instantiate load colors and points
        load_colors = [0.0,
                       0.231373,
                       0.298039,
                       0.752941,
                       130.73569142337513,
                       0.865003,
                       0.865003,
                       0.865003,
                       261.47138284675026,
                       0.705882,
                       0.0156863,
                       0.14902]
        load_points = [0.0,
                       0.0,
                       0.5,
                       0.0,
                       261.47138284675026,
                       1.0,
                       0.5,
                       0.0]

        # Create color transfert functions
        loadLUT = self.createColorTransferFunction(
            "Load",
            load_colors,
            [1.,1.,1.],
            None,
            "Never")
        loadPWF = self.createOpacityTransferFunction(
            "Load",
            load_points)

        # Create displays
        glyphDisplay = self.createDisplay(
            glyph,
            renderView,
            ['POINTS', 'Load'],
            loadLUT,
            None,
            0.005)

        # Activate glyph source
        pv.SetActiveSource(glyph)

        return reader
Exemple #11
0
    def StreamlinesScript(Input1,
                          Input2,
                          Output,
                          N1=None,
                          N2=None,
                          Offset1=0.0,
                          Offset2=0.0,
                          CamDirVec=None,
                          CamUpVec=None,
                          Origin=None):
        ''' Creates an image with the streamlines from two VTUs.

            Inputs:
                Input1 - VTU with first direction of curvatures
                Input2 - VTU with second direction of curvatures
                N1 - List of normal of slice for VTU1
                N2 - List of normal of slice for VTU2
                Offset1 - Value of offset for slice of VTU1
                Offset2 - Value of offset for slice of VTU2
                CamDirVec - Vector for camera direction
                CamUpVec - Vector for camera up direction
                Origin - Vector with the position for the origin'''

        #### disable automatic camera reset on 'Show'
        pvs._DisableFirstRenderCameraReset()

        # create a new 'XML Unstructured Grid Reader'
        VTU1 = pvs.XMLUnstructuredGridReader(FileName=[Input1])
        VTU1.PointArrayStatus = ['Curvature']

        ## Fix data for Slices
        if N1 is None:
            N1 = [0.9, 0.4, 0.2]
        if N2 is None:
            # N2 = np.cross(N1,[0,0,1])
            N2 = [-0.8, 0.5, 0.16]
        if Origin is None:
            Origin = paraview.servermanager.Fetch(
                pvs.IntegrateVariables(Input=VTU1)).GetPoint(0)

        # create a new 'XML Unstructured Grid Reader'
        VTU2 = pvs.XMLUnstructuredGridReader(FileName=[Input2])
        VTU2.PointArrayStatus = ['Curvature']

        # get active view
        renderView1 = pvs.GetActiveViewOrCreate('RenderView')

        # show data in view
        VTU1Display = pvs.Show(VTU1, renderView1)
        VTU1Display.Representation = 'Surface'
        VTU1Display.Diffuse = 0.85
        VTU1Display.Ambient = 0.25
        # show data in view
        VTU2Display = pvs.Show(VTU2, renderView1)
        VTU2Display.Representation = 'Surface'
        VTU2Display.Diffuse = 0.85
        VTU2Display.Ambient = 0.25

        # create a new 'Slice'
        slice1 = pvs.Slice(Input=VTU1)
        slice1.SliceType.Origin = Origin
        slice1.SliceType.Normal = N1
        slice1.SliceType.Offset = 0.0
        slice1.SliceOffsetValues = [Offset1]

        # create a new 'Slice'
        slice2 = pvs.Slice(Input=VTU2)
        slice2.SliceType.Origin = Origin
        slice2.SliceType.Normal = N2
        slice2.SliceType.Offset = 0.0
        slice2.SliceOffsetValues = [Offset2]

        # make stremlines
        makestream(VTU1, slice1, renderView1, [1.0, 0.0, 0.0])
        makestream(VTU2, slice2, renderView1, [0.0, 0.0, 1.0])

        # Save Screenshot
        AdjustCameraAndSave(renderView1,
                            Output,
                            ImageResolution=(2048, 2048),
                            CamDirVec=CamDirVec,
                            CamUpVec=CamUpVec)

        # set active source
        pvs.SetActiveSource(None)
        pvs.SetActiveView(None)
        pvs.Disconnect()
def RequestData():
    # R.1.2018.354
    import sys
    sys.path.insert(0, "EMC_SRC_PATH")
    from operator import itemgetter
    from datetime import datetime
    import numpy as np
    from vtk.numpy_interface import dataset_adapter as dsa
    from vtk.util import numpy_support
    import IrisEMC_Paraview_Lib as lib
    import paraview.simple as simple

    views = simple.GetViews(viewtype="SpreadSheetView")
    if len(views) > 0:
        # set active view
        view = simple.SetActiveView(views[0])
    else:
        view = simple.GetActiveView()
        layout = simple.GetLayout(view)
        location_id = layout.SplitViewVertical(view=view, fraction=0.7)

    myId = simple.GetActiveSource().Input.GetGlobalIDAsString()

    proxies = simple.GetSources()
    proxyList = []
    for key in proxies:
        list_elt = dict()
        list_elt['name'] = key[0]
        list_elt['id'] = key[1]
        proxy = proxies[key]
        parent_id = '0'
        if hasattr(proxy, 'Input'):
            parent_id = proxy.Input.GetGlobalIDAsString()
        list_elt['parent'] = parent_id
        proxyList.append(list_elt)

    pdi = self.GetInput()  # VTK PolyData Type
    try:
        np = pdi.GetNumberOfPoints()
    except Exception:
        raise Exception('Invalid input!')

    na = pdi.GetPointData().GetNumberOfArrays()
    val_arrays = []
    for i in range(na):
        val_arrays.append(pdi.GetPointData().GetArray(i))

    latitude = {}
    longitude = {}
    value = {}
    depth = {}
    pdo = self.GetOutput()  # VTK Table Type
    poly_data = vtk.vtkPolyData()
    data_points = vtk.vtkPoints()

    if len(Label.strip()) <= 0:
        pid = simple.GetActiveSource().Input.GetGlobalIDAsString()
        proxies = simple.GetSources()
        for key in proxies:
            if key[1] == pid:
                Label = " ".join(["Coordinates:", key[0]])
                break
    for i in range(np):
        point = pdi.GetPoints().GetPoint(i)
        (lat, lon, this_depth) = lib.xyz2llz(point[0], point[1], point[2])
        data_points.InsertNextPoint((lat, lon, this_depth))
        key = "%0.2f" % this_depth
        if key not in list(latitude.keys()):
            latitude[key] = []
            longitude[key] = []
            value[key] = []

        # need to control precision to have a reasonable sort order
        # note that these coordinates are recomputed
        if key not in list(depth.keys()):
            depth[key] = float('%0.4f' % this_depth)
        latitude[key].append(float('%0.4f' % lat))
        longitude[key].append(float('%0.4f' % lon))
        value_array = []
        for j in range(na):
            value_array.append(float(val_arrays[j].GetTuple1(i)))
        value[key].append(value_array)

    # store boundary metadata
    field_data = poly_data.GetFieldData()
    field_data.AllocateArrays(5)  # number of fields

    depth_data = vtk.vtkFloatArray()
    depth_data.SetName('depth')

    lat_data = vtk.vtkFloatArray()
    lat_data.SetName('latitude')

    lon_data = vtk.vtkFloatArray()
    lon_data.SetName('longitude')

    val_data = []
    for j in range(na):
        val_data.append(vtk.vtkFloatArray())
        val_data[j].SetName('value(%s)' %
                            pdi.GetPointData().GetArray(j).GetName())

    depth_keys = list(latitude.keys())

    for i in range(len(depth_keys)):
        depth_key = depth_keys[i]
        lon_list = longitude[depth_key]
        lat_list = latitude[depth_key]
        val_list = value[depth_key]
        point_list = list(zip(lat_list, lon_list, val_list))
        point_list.sort(key=itemgetter(0, 1))

        for index, data in enumerate(point_list):
            depth_data.InsertNextValue(float(depth[depth_key]))
            lat_data.InsertNextValue(float(data[0]))
            lon_data.InsertNextValue(float(data[1]))
            for k in range(na):
                point_data = data[2]
                val_data[k].InsertNextValue(point_data[k])

    field_data.AddArray(lat_data)
    field_data.AddArray(lon_data)
    field_data.AddArray(depth_data)
    for j in range(na):
        field_data.AddArray(val_data[j])

    if len(Label.strip()) > 0:
        simple.RenameSource(Label)

    pdo.SetFieldData(field_data)