示例#1
0
def getCutActor(vtk_r,
                origin=[0, 0, 0],
                normal=[0, 0, 1],
                scalarField=None,
                scalarRange=None):

    plane = vtk.vtkPlane()
    plane.SetOrigin(*origin)
    plane.SetNormal(*normal)

    cutter = vtk.vtkCutter()
    cutter.GenerateTrianglesOff()
    cutter.SetCutFunction(plane)
    cutter.SetInputConnection(vtk_r.GetOutputPort())

    geoFilter = vtk.vtkCompositeDataGeometryFilter()
    geoFilter.SetInputConnection(cutter.GetOutputPort())

    cutterMapper = vtk.vtkPolyDataMapper()
    cutterMapper.SetInputConnection(geoFilter.GetOutputPort())
    colorMapper(cutterMapper, scalarField, scalarRange)

    cutActor = vtk.vtkActor()
    cutActor.GetProperty().SetEdgeVisibility(1)
    cutActor.SetMapper(cutterMapper)
    return cutActor
示例#2
0
    def _buildVtkBlocksActor(self, binfo):
        if binfo.multiblock_index is not None:
            eb = vtk.vtkExtractBlock()
            eb.SetInputConnection(self._reader.getVtkOutputPort())
            eb.AddIndex(binfo.multiblock_index)
            eb.Update()

            geometry = vtk.vtkCompositeDataGeometryFilter()
            geometry.SetInputConnection(0, eb.GetOutputPort(0))
            geometry.Update()

            mapper = vtk.vtkPolyDataMapper()
            mapper.SetInputConnection(geometry.GetOutputPort())
        else:
            mapper = vtk.vtkDataSetMapper()
            mapper.SetInputConnection(0, self._reader.getVtkOutputPort())
            mapper.ScalarVisibilityOff()

        mapper.InterpolateScalarsBeforeMappingOn()

        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        actor.VisibilityOn()

        return actor
示例#3
0
    def __init__(self, eb, camera):
        do = eb.GetOutput()
        self._bounds = self._computeBounds(do)

        self._info = {
            'cells': do.GetNumberOfCells(),
            'points': do.GetNumberOfPoints(),
        }

        self._geometry = vtk.vtkCompositeDataGeometryFilter()
        self._geometry.SetInputConnection(0, eb.GetOutputPort(0))
        self._geometry.Update()

        self._mapper = vtk.vtkPolyDataMapper()
        self._mapper.SetInputConnection(self._geometry.GetOutputPort())
        self._mapper.SetScalarModeToUsePointFieldData()
        self._mapper.InterpolateScalarsBeforeMappingOn()

        self._actor = vtk.vtkActor()
        self._actor.SetMapper(self._mapper)
        self._actor.SetScale(0.99999)
        self._actor.VisibilityOn()

        self._property = self._actor.GetProperty()
        self._property.SetRepresentationToSurface()

        self._color = [1, 1, 1]

        bnds = self._actor.GetBounds()
        self._cob = common.centerOfBounds(bnds)

        self._setUpSilhouette(camera)
示例#4
0
def main():
    colors = vtk.vtkNamedColors()

    # PART 1 Make some Data.
    # Make a tree.
    root = vtk.vtkMultiBlockDataSet()

    branch = vtk.vtkMultiBlockDataSet()
    root.SetBlock(0, branch)

    # Make some leaves.
    leaf1 = vtk.vtkSphereSource()
    leaf1.SetCenter(0, 0, 0)
    leaf1.Update()
    branch.SetBlock(0, leaf1.GetOutput())

    leaf2 = vtk.vtkSphereSource()
    leaf2.SetCenter(1.75, 2.5, 0)
    leaf2.SetRadius(1.5)
    leaf2.Update()
    branch.SetBlock(1, leaf2.GetOutput())

    leaf3 = vtk.vtkSphereSource()
    leaf3.SetCenter(4, 0, 0)
    leaf3.SetRadius(2)
    leaf3.Update()
    root.SetBlock(1, leaf3.GetOutput())

    # PART 2 Do something with the data
    # a non composite aware filter, the pipeline will iterate
    edges = vtk.vtkExtractEdges()
    edges.SetInputData(root)

    # PART 3 Show the data
    # also demonstrate a composite aware filter
    # this filter aggregates all blocks into one polydata
    # this is handy for display, although fairly limited
    # see vtkCompositePolyDataMapper2 for something better
    polydata = vtk.vtkCompositeDataGeometryFilter()
    polydata.SetInputConnection(edges.GetOutputPort())

    # Create the Renderer, RenderWindow, and RenderWindowInteractor.
    renderer = vtk.vtkRenderer()
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(0, polydata.GetOutputPort(0))
    actor = vtk.vtkActor()
    actor.GetProperty().SetColor(colors.GetColor3d("Yellow"))
    actor.GetProperty().SetLineWidth(2)
    actor.SetMapper(mapper)

    # Enable user interface interactor.
    renderer.AddActor(actor)
    renderer.SetBackground(colors.GetColor3d("CornflowerBlue"))
    renderWindow.Render()
    renderWindowInteractor.Start()
示例#5
0
def runVectorExample(filename):
    vtkdata = prepareVectorExample(filename)
    comp_filter = vtk.vtkCompositeDataGeometryFilter()
    comp_filter.SetInputData(vtkdata)
    comp_filter.Update()
    renderPolyData(init(), comp_filter.GetOutput())
    # renderMultiblockData(init(), vtkdata)
    run()
示例#6
0
 def extract_geometry(self):
     """Combines the geomertry of all blocks into a single ``PolyData``
     object. Place this filter at the end of a pipeline before a polydata
     consumer such as a polydata mapper to extract geometry from all blocks
     and append them to one polydata object.
     """
     gf = vtk.vtkCompositeDataGeometryFilter()
     gf.SetInputData(self)
     gf.Update()
     return wrap(gf.GetOutputDataObject(0))
示例#7
0
def main():
    colors = vtk.vtkNamedColors()

    # Input file and variable
    filename, nodal_var = get_program_parameters()

    # Read Exodus Data
    reader = vtk.vtkExodusIIReader()
    reader.SetFileName(filename)
    reader.UpdateInformation()
    reader.SetTimeStep(10)
    reader.SetAllArrayStatus(vtk.vtkExodusIIReader.NODAL,
                             1)  # enables all NODAL variables
    reader.Update()
    # print(reader)  # uncomment this to show the file information

    # Create Geometry
    geometry = vtk.vtkCompositeDataGeometryFilter()
    geometry.SetInputConnection(0, reader.GetOutputPort(0))
    geometry.Update()

    # Mapper
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(geometry.GetOutputPort())
    mapper.SelectColorArray(nodal_var)
    mapper.SetScalarModeToUsePointFieldData()
    mapper.InterpolateScalarsBeforeMappingOn()

    # Actor
    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    # Renderer
    renderer = vtk.vtkRenderer()
    renderer.AddViewProp(actor)
    renderer.SetBackground(colors.GetColor3d('DimGray'))

    renderer.GetActiveCamera().SetPosition(9.0, 9.0, 7.0)
    renderer.GetActiveCamera().SetFocalPoint(0, 0, 0)
    renderer.GetActiveCamera().SetViewUp(0.2, -0.7, 0.7)
    renderer.GetActiveCamera().SetDistance(14.5)

    # Window and Interactor
    window = vtk.vtkRenderWindow()
    window.AddRenderer(renderer)
    window.SetSize(600, 600)
    window.SetWindowName('ReadExodusData')

    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(window)
    interactor.Initialize()

    # Show the result
    window.Render()
    interactor.Start()
示例#8
0
def getStuctureActor(vtk_r, blockIndex, scalarField="p_rgh", scalarRange=None):
    """Return an actor with the ship structure
    """
    #--------------------------------- Structure
    structureOnly = vtk.vtkExtractBlock()
    structureOnly.SetInputConnection(vtk_r.GetOutputPort())
    structureOnly.AddIndex(blockIndex)

    structureDataFilter = vtk.vtkCompositeDataGeometryFilter()
    structureDataFilter.SetInputConnection(structureOnly.GetOutputPort())

    structureMapper = vtk.vtkDataSetMapper()
    structureMapper.SetInputConnection(structureDataFilter.GetOutputPort())
    colorMapper(structureMapper, scalarField, scalarRange)
    structureActor = vtk.vtkActor()
    structureActor.GetProperty().SetEdgeVisibility(0)
    structureActor.SetMapper(structureMapper)
    return structureActor
示例#9
0
    def __init__(self, eb):
        do = eb.GetOutput()
        self._info = {'points': do.GetNumberOfPoints()}

        self._geometry = vtk.vtkCompositeDataGeometryFilter()
        self._geometry.SetInputConnection(0, eb.GetOutputPort(0))
        self._geometry.Update()

        self._mapper = vtk.vtkPolyDataMapper()
        self._mapper.SetInputConnection(self._geometry.GetOutputPort())
        self._mapper.SetScalarModeToUsePointFieldData()
        self._mapper.InterpolateScalarsBeforeMappingOn()

        self._actor = vtk.vtkActor()
        self._actor.SetMapper(self._mapper)
        self._actor.VisibilityOff()

        self._property = self._actor.GetProperty()
示例#10
0
def getSymPlaneVtkActor(vtk_r,
                        blockIndex,
                        scalarField="alpha.water",
                        scalarRange=None):
    """return symmetry plane colored by field
    """
    #SymmetryPlane
    symPlane = vtk.vtkExtractBlock()
    symPlane.SetInputConnection(vtk_r.GetOutputPort())
    symPlane.AddIndex(blockIndex)
    symPlaneDataFilter = vtk.vtkCompositeDataGeometryFilter()
    symPlaneDataFilter.SetInputConnection(symPlane.GetOutputPort())
    symPlaneMapper = vtk.vtkDataSetMapper()
    symPlaneMapper.SetInputConnection(symPlaneDataFilter.GetOutputPort())
    colorMapper(symPlaneMapper, scalarField, scalarRange)

    symPlaneActor = vtk.vtkActor()
    symPlaneActor.GetProperty().SetEdgeVisibility(1)
    symPlaneActor.SetMapper(symPlaneMapper)
    return symPlaneActor
示例#11
0
    def load_vtk_structured(self, file_name):
        self.fname = file_name
        #reader = vtk.vtkUnstructuredGridReader()
        reader = vtk.vtkXMLMultiBlockDataReader()
        reader.SetFileName(file_name)
        reader.Update()

        Merge = vtk.vtkMultiBlockMergeFilter()
        Merge.AddInput(reader.GetOutput())
        Merge.Update()

        Mb = vtk.vtkStructuredGridOutlineFilter()
        if vtk.VTK_MAJOR_VERSION <= 5:
            Mb.SetInput(Merge.GetOutput())
        else:
            Mb.SetInputData(Merge.GetOutput())

        Geom01 = vtk.vtkCompositeDataGeometryFilter()
        Geom01.SetInputConnection(Merge.GetOutputPort())

        self.output = Geom01.GetOutput()
        self.vtk_pts = self.output.GetPointData()

        self.vtk_n_pts = self.output.GetNumberOfPoints()
        self.vtk_n_cells = self.output.GetNumberOfCells()
        self.vtk_n_props = self.vtk_pts.GetNumberOfArrays()

        self.reader = reader
        #get_range = self.output.GetScalarRange()
        #print get_range

        print " [Vtk_unstructured_reader]:"
        print "                           Cells: %d" % (self.vtk_n_cells)
        print "                           Point: %d" % (self.vtk_n_pts)
        print "                           Props: ",
        for i in range(self.vtk_n_props):
            print "\'%s\'" % (self.vtk_pts.GetArrayName(i)),
        print

        print "\n+[Vtk_multiblock_reader]: \'%s\'" % file_name
示例#12
0
    def setFileName(self, file_name, lut):

        try:
            self.currently_has_actor = True
            self.lut = lut

            self.file_name = file_name
            self.reader = vtk.vtkExodusIIReader()
            self.reader.SetFileName(self.file_name)
            self.reader.UpdateInformation()

            self.current_dim = self.reader.GetDimensionality()

            self.min_timestep = 0
            self.max_timestep = 0
            range = self.reader.GetTimeStepRange()
            self.min_timestep = range[0]
            self.max_timestep = range[1]

            self.reader.SetAllArrayStatus(vtk.vtkExodusIIReader.ELEM_BLOCK, 1)
            self.reader.SetAllArrayStatus(vtk.vtkExodusIIReader.NODAL, 1)
            self.reader.SetAllArrayStatus(vtk.vtkExodusIIReader.NODAL_TEMPORAL, 1)
            self.reader.SetTimeStep(self.max_timestep)
            self.reader.Update()
            self.current_variable_point_data = {}
            self.current_nodal_variables = []
            self.current_elemental_variables = []
            self.current_nodal_components = {}
            self.current_elemental_components = {}
            self.component_index = -1

            num_blocks = self.reader.GetNumberOfElementBlockArrays()
            self.blocks = set()
            self.block_to_name = {}
            for i in xrange(num_blocks):
                block_num = self.reader.GetObjectId(vtk.vtkExodusIIReader.ELEM_BLOCK,i)
                self.blocks.add(block_num)
                if 'Unnamed' not in self.reader.GetObjectName(vtk.vtkExodusIIReader.ELEM_BLOCK,i).split(' '):
                    self.block_to_name[block_num] = self.reader.GetObjectName(vtk.vtkExodusIIReader.ELEM_BLOCK,i).split(' ')[0]

            cdp = vtk.vtkCompositeDataPipeline()
            vtk.vtkAlgorithm.SetDefaultExecutivePrototype(cdp)

            self.output = self.reader.GetOutput()
            self.geom = vtk.vtkCompositeDataGeometryFilter()
            self.geom.SetInputConnection(0,self.reader.GetOutputPort(0))
            self.geom.Update()

            self.data = self.geom.GetOutput()

            num_nodal_variables = self.data.GetPointData().GetNumberOfArrays()
            for var_num in xrange(num_nodal_variables):
                var_name = self.data.GetPointData().GetArrayName(var_num)
                self.current_nodal_variables.append(var_name)
                components = self.data.GetPointData().GetVectors(var_name).GetNumberOfComponents()
                self.current_nodal_components[var_name] = components
                # self.data.GetPointData().GetVectors(value_string).GetComponentName(0)

            num_elemental_variables = self.data.GetCellData().GetNumberOfArrays()
            for var_num in xrange(num_elemental_variables):
                var_name = self.data.GetCellData().GetArrayName(var_num)
                self.current_elemental_variables.append(var_name)
                components = self.data.GetCellData().GetVectors(var_name).GetNumberOfComponents()
                self.current_elemental_components[var_name] = components

            self.application_filter = self.render_widget.application.filterResult(self.geom)

            self.mapper = vtk.vtkPolyDataMapper()
    #    self.mapper.SetInputConnection(self.tf.GetOutputPort())
            self.mapper.SetInputConnection(self.application_filter.GetOutputPort())
            self.mapper.ScalarVisibilityOn()
            self.mapper.SetLookupTable(lut)
            self.mapper.SetColorModeToMapScalars()
            self.mapper.InterpolateScalarsBeforeMappingOn()

            self.actor = vtk.vtkActor()
            self.current_actors.append(self.actor)
            self.actor.SetMapper(self.mapper)
            self.current_actor = self.actor

            self.clipper = vtk.vtkTableBasedClipDataSet()
            if vtk.VTK_MAJOR_VERSION <= 5:
                self.clipper.SetInput(self.output)
            else:
                self.clipper.SetInputData(self.output)
            self.clipper.SetClipFunction(self.plane)
            self.clipper.Update()

            self.clip_geom = vtk.vtkCompositeDataGeometryFilter()
            self.clip_geom.SetInputConnection(0,self.clipper.GetOutputPort(0))
            self.clip_geom.Update()

            self.clip_data = self.clip_geom.GetOutput()

            self.clip_application_filter = self.render_widget.application.filterResult(self.clip_geom)

            self.clip_mapper = vtk.vtkPolyDataMapper()
            self.clip_mapper.SetInputConnection(self.clip_application_filter.GetOutputPort())
            self.clip_mapper.ScalarVisibilityOn()
            self.clip_mapper.SetLookupTable(lut)

            self.clip_actor = vtk.vtkActor()
            self.clip_actor.SetMapper(self.clip_mapper)
            self.current_actors.append(self.clip_actor)

            self.scalar_bar = vtk.vtkScalarBarActor()
            self.current_actors.append(self.scalar_bar)
            self.scalar_bar.SetLookupTable(self.mapper.GetLookupTable())
            self.scalar_bar.SetNumberOfLabels(4)

            self.current_bounds = self.actor.GetBounds()
        except:
            pass
# Input file and variable
filename = 'mug.e'
nodal_var = 'convected'

# Read Exodus Data
reader = vtk.vtkExodusIIReader()
reader.SetFileName(filename)
reader.UpdateInformation()
reader.SetTimeStep(10)
reader.SetAllArrayStatus(vtk.vtkExodusIIReader.NODAL, 1) # enables all NODAL variables
reader.Update()
#print reader # uncomment this to show the file information

# Create Geometry
geometry = vtk.vtkCompositeDataGeometryFilter()
geometry.SetInputConnection(0, reader.GetOutputPort(0))
geometry.Update()

# Mapper
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(geometry.GetOutputPort())
mapper.SelectColorArray(nodal_var)
mapper.SetScalarModeToUsePointFieldData()

# Actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)

# Renderer
renderer = vtk.vtkRenderer()
示例#14
0
def export_plotter_vtkjs(plotter, filename, compress_arrays=False):
    """Export a plotter's rendering window to the VTKjs format."""
    sceneName = os.path.split(filename)[1]
    doCompressArrays = compress_arrays

    # Generate timestamp and use it to make subdirectory within the top level output dir
    timeStamp = time.strftime("%a-%d-%b-%Y-%H-%M-%S")
    root_output_directory = os.path.split(filename)[0]
    output_dir = os.path.join(root_output_directory, timeStamp)
    mkdir_p(output_dir)

    renderers = plotter.ren_win.GetRenderers()

    scDirs = []
    sceneComponents = []
    textureToSave = {}

    for rIdx in range(renderers.GetNumberOfItems()):
        renderer = renderers.GetItemAsObject(rIdx)
        renProps = renderer.GetViewProps()
        for rpIdx in range(renProps.GetNumberOfItems()):
            renProp = renProps.GetItemAsObject(rpIdx)
            if not renProp.GetVisibility():
                continue
            if hasattr(renProp,
                       'GetMapper') and renProp.GetMapper() is not None:
                mapper = renProp.GetMapper()
                dataObject = mapper.GetInputDataObject(0, 0)
                dataset = None
                if dataObject is None:
                    continue
                if dataObject.IsA('vtkCompositeDataSet'):
                    if dataObject.GetNumberOfBlocks() == 1:
                        dataset = dataObject.GetBlock(0)
                    else:
                        gf = vtk.vtkCompositeDataGeometryFilter()
                        gf.SetInputData(dataObject)
                        gf.Update()
                        dataset = gf.GetOutput()
                else:
                    dataset = mapper.GetInput()

                if dataset and not isinstance(
                        dataset, (vtk.vtkPolyData, vtk.vtkImageData)):
                    # All data must be PolyData surfaces
                    gf = vtk.vtkGeometryFilter()
                    gf.SetInputData(dataset)
                    gf.Update()
                    dataset = gf.GetOutputDataObject(0)

                if dataset:  # and dataset.GetPoints(): # NOTE: vtkImageData does not have points
                    componentName = 'data_%d_%d' % (
                        rIdx, rpIdx)  # getComponentName(renProp)
                    scalarVisibility = mapper.GetScalarVisibility()
                    #arrayAccessMode = mapper.GetArrayAccessMode()
                    #colorArrayName = mapper.GetArrayName() #TODO: if arrayAccessMode == 1 else mapper.GetArrayId()
                    colorMode = mapper.GetColorMode()
                    scalarMode = mapper.GetScalarMode()
                    lookupTable = mapper.GetLookupTable()

                    dsAttrs = None
                    arrayLocation = ''

                    if scalarVisibility:
                        if scalarMode == 3 or scalarMode == 1:  # VTK_SCALAR_MODE_USE_POINT_FIELD_DATA or VTK_SCALAR_MODE_USE_POINT_DATA
                            dsAttrs = dataset.GetPointData()
                            arrayLocation = 'pointData'
                        # VTK_SCALAR_MODE_USE_CELL_FIELD_DATA or VTK_SCALAR_MODE_USE_CELL_DATA
                        elif scalarMode == 4 or scalarMode == 2:
                            dsAttrs = dataset.GetCellData()
                            arrayLocation = 'cellData'

                    colorArray = None
                    dataArray = None

                    if dsAttrs:
                        dataArray = dsAttrs.GetArray(
                            0)  # Force getting the active array

                    if dataArray:
                        # component = -1 => let specific instance get scalar from vector before mapping
                        colorArray = lookupTable.MapScalars(
                            dataArray, colorMode, -1)
                        colorArrayName = '__CustomRGBColorArray__'
                        colorArray.SetName(colorArrayName)
                        colorMode = 0
                    else:
                        colorArrayName = ''

                    color_array_info = {
                        'colorArray': colorArray,
                        'location': arrayLocation
                    }

                    scDirs.append(
                        write_data_set('',
                                       dataset,
                                       output_dir,
                                       color_array_info,
                                       new_name=componentName,
                                       compress=doCompressArrays))

                    # Handle texture if any
                    textureName = None
                    if renProp.GetTexture() and renProp.GetTexture().GetInput(
                    ):
                        textureData = renProp.GetTexture().GetInput()
                        textureName = 'texture_%d' % get_object_id(textureData)
                        textureToSave[textureName] = textureData

                    representation = renProp.GetProperty().GetRepresentation(
                    ) if hasattr(renProp, 'GetProperty') else 2
                    colorToUse = renProp.GetProperty().GetDiffuseColor(
                    ) if hasattr(renProp, 'GetProperty') else [1, 1, 1]
                    if representation == 1:
                        colorToUse = renProp.GetProperty().GetColor(
                        ) if hasattr(renProp, 'GetProperty') else [1, 1, 1]
                    pointSize = renProp.GetProperty().GetPointSize(
                    ) if hasattr(renProp, 'GetProperty') else 1.0
                    opacity = renProp.GetProperty().GetOpacity() if hasattr(
                        renProp, 'GetProperty') else 1.0
                    edgeVisibility = renProp.GetProperty().GetEdgeVisibility(
                    ) if hasattr(renProp, 'GetProperty') else False

                    p3dPosition = renProp.GetPosition() if renProp.IsA(
                        'vtkProp3D') else [0, 0, 0]
                    p3dScale = renProp.GetScale() if renProp.IsA(
                        'vtkProp3D') else [1, 1, 1]
                    p3dOrigin = renProp.GetOrigin() if renProp.IsA(
                        'vtkProp3D') else [0, 0, 0]
                    p3dRotateWXYZ = renProp.GetOrientationWXYZ(
                    ) if renProp.IsA('vtkProp3D') else [0, 0, 0, 0]

                    sceneComponents.append({
                        "name": componentName,
                        "type": "httpDataSetReader",
                        "httpDataSetReader": {
                            "url": componentName
                        },
                        "actor": {
                            "origin": p3dOrigin,
                            "scale": p3dScale,
                            "position": p3dPosition,
                        },
                        "actorRotation": p3dRotateWXYZ,
                        "mapper": {
                            "colorByArrayName": colorArrayName,
                            "colorMode": colorMode,
                            "scalarMode": scalarMode
                        },
                        "property": {
                            "representation": representation,
                            "edgeVisibility": edgeVisibility,
                            "diffuseColor": colorToUse,
                            "pointSize": pointSize,
                            "opacity": opacity
                        },
                        "lookupTable": {
                            "tableRange":
                            lookupTable.GetRange(),
                            "hueRange":
                            lookupTable.GetHueRange() if hasattr(
                                lookupTable, 'GetHueRange') else [0.5, 0]
                        }
                    })

                    if textureName:
                        sceneComponents[-1]['texture'] = textureName

    # Save texture data if any
    for key, val in textureToSave.items():
        write_data_set('',
                       val,
                       output_dir,
                       None,
                       new_name=key,
                       compress=doCompressArrays)

    cameraClippingRange = plotter.camera.GetClippingRange()

    sceneDescription = {
        "fetchGzip": doCompressArrays,
        "background": plotter.background_color,
        "camera": {
            "focalPoint": plotter.camera.GetFocalPoint(),
            "position": plotter.camera.GetPosition(),
            "viewUp": plotter.camera.GetViewUp(),
            "clippingRange": [elt for elt in cameraClippingRange],
        },
        "centerOfRotation": plotter.camera.GetFocalPoint(),
        "scene": sceneComponents
    }

    indexFilePath = os.path.join(output_dir, 'index.json')
    with open(indexFilePath, 'w') as outfile:
        json.dump(sceneDescription, outfile, indent=4)


# -----------------------------------------------------------------------------

# Now zip up the results and get rid of the temp directory
    sceneFileName = os.path.join(root_output_directory,
                                 '%s%s' % (sceneName, FILENAME_EXTENSION))

    try:
        import zlib
        compression = zipfile.ZIP_DEFLATED
    except:
        compression = zipfile.ZIP_STORED

    zf = zipfile.ZipFile(sceneFileName, mode='w')

    try:
        for dirName, subdirList, fileList in os.walk(output_dir):
            for fname in fileList:
                fullPath = os.path.join(dirName, fname)
                relPath = '%s/%s' % (sceneName,
                                     os.path.relpath(fullPath, output_dir))
                zf.write(fullPath, arcname=relPath, compress_type=compression)
    finally:
        zf.close()

    shutil.rmtree(output_dir)

    print('Finished exporting dataset to: ', sceneFileName)
示例#15
0
def render_window_serializer(render_window):
    """
    Function to convert a vtk render window in a list of 2-tuple where first value
    correspond to a relative file path in the `vtkjs` directory structure and values
    of the binary content of the corresponding file.
    """
    render_window.OffScreenRenderingOn()  # to not pop a vtk windows
    render_window.Render()
    renderers = render_window.GetRenderers()

    objIds = []
    scDirs = []

    sceneComponents = []
    textureToSave = {}

    for renderer in renderers:
        for renProp in renderer.GetViewProps():
            if not renProp.GetVisibility() or not isinstance(
                    renProp, vtk.vtkActor):
                continue
            if hasattr(renProp, 'GetMapper'):
                mapper = renProp.GetMapper()
                if mapper is None:
                    continue
                dataObject = mapper.GetInputDataObject(0, 0)
                dataset = None

                if dataObject.IsA('vtkCompositeDataSet'):
                    if dataObject.GetNumberOfBlocks() == 1:
                        dataset = dataObject.GetBlock(0)
                    else:
                        gf = vtk.vtkCompositeDataGeometryFilter()
                        gf.SetInputData(dataObject)
                        gf.Update()
                        dataset = gf.GetOutput()
                elif dataObject.IsA('vtkUnstructuredGrid'):
                    gf = vtk.vtkGeometryFilter()
                    gf.SetInputData(dataObject)
                    gf.Update()
                    dataset = gf.GetOutput()
                else:
                    dataset = mapper.GetInput()

                if dataset and not isinstance(dataset, (vtk.vtkPolyData)):
                    # All data must be PolyData surfaces!
                    gf = vtk.vtkGeometryFilter()
                    gf.SetInputData(dataset)
                    gf.Update()
                    dataset = gf.GetOutputDataObject(0)

                if dataset and dataset.GetPoints():
                    componentName = str(id(renProp))
                    scalar_visibility = mapper.GetScalarVisibility()
                    array_access_mode = mapper.GetArrayAccessMode()
                    array_name = mapper.GetArrayName(
                    )  # if arrayAccessMode == 1 else mapper.GetArrayId()
                    array_id = mapper.GetArrayId()
                    color_mode = mapper.GetColorMode()
                    scalar_mode = mapper.GetScalarMode()

                    arrayLocation = ''
                    colorArray = None
                    dataArray = None
                    colorArrayName = ''
                    lookupTable = mapper.GetLookupTable()

                    if scalar_visibility:
                        dataArray, arrayLocation = get_dataset_scalars(
                            dataset, scalar_mode, array_access_mode, array_id,
                            array_name)
                        # component = -1 => let specific instance get scalar from vector before mapping
                        if dataArray:
                            if dataArray.GetLookupTable():
                                lookupTable = dataArray.GetLookupTable()
                                colorArray = dataArray.GetLookupTable(
                                ).MapScalars(dataArray, color_mode, -1)
                            else:
                                colorArray = lookupTable.MapScalars(
                                    dataArray, color_mode, -1)
                            colorArrayName = '__CustomRGBColorArray__'
                            colorArray.SetName(colorArrayName)
                            color_mode = 0

                    colorArrayInfo = {
                        'colorArray': colorArray,
                        'location': arrayLocation
                    }

                    _write_data_set(scDirs,
                                    dataset,
                                    colorArrayInfo,
                                    newDSName=componentName)

                    # Handle texture if any
                    textureName = None
                    if renProp.GetTexture() and renProp.GetTexture().GetInput(
                    ):
                        textureData = renProp.GetTexture().GetInput()
                        textureName = 'texture_%d' % _get_object_id(
                            textureData, objIds)
                        textureToSave[textureName] = textureData

                    sceneComponents.append({
                        "name":
                        componentName,
                        "type":
                        "httpDataSetReader",
                        "httpDataSetReader": {
                            "url": componentName
                        },
                        "actor": {
                            # vtkProp
                            "visibility":
                            renProp.GetVisibility()
                            if renProp.IsA('vtkProp') else 0,
                            "pickable":
                            renProp.GetPickable()
                            if renProp.IsA('vtkProp') else 0,
                            "dragable":
                            renProp.GetDragable()
                            if renProp.IsA('vtkProp') else 0,
                            "useBounds":
                            renProp.GetUseBounds()
                            if renProp.IsA('vtkProp') else 0,
                            # vtkProp3D
                            "origin":
                            renProp.GetOrigin()
                            if renProp.IsA('vtkProp3D') else [0, 0, 0],
                            "scale":
                            renProp.GetScale()
                            if renProp.IsA('vtkProp3D') else [1, 1, 1],
                            "position":
                            renProp.GetPosition()
                            if renProp.IsA('vtkProp3D') else [0, 0, 0],
                            # vtkActor
                            'forceOpaque':
                            renProp.GetForceOpaque()
                            if renProp.IsA('vtkActor') else 0,
                            'forceTranslucent':
                            renProp.GetForceTranslucent()
                            if renProp.IsA('vtkActor') else 0,
                        },
                        "actorRotation":
                        renProp.GetOrientationWXYZ()
                        if renProp.IsA('vtkProp3D') else [0, 0, 0, 0],
                        "mapper": {
                            "colorByArrayName": colorArrayName,
                            "colorMode": color_mode,
                            "scalarMode": scalar_mode
                        },
                        "property":
                        extract_renprop_properties(renProp),
                        "lookupTable": {
                            "range":
                            lookupTable.GetRange(),
                            "hueRange":
                            lookupTable.GetHueRange() if hasattr(
                                lookupTable, 'GetHueRange') else [0.5, 0]
                        }
                    })

                    if textureName:
                        sceneComponents[-1]['texture'] = textureName

    # Save texture data if any
    for key, val in textureToSave.items():
        _write_data_set(scDirs, val, None, newDSName=key)

    activeCamera = renderer.GetActiveCamera()
    background = renderer.GetBackground()
    sceneDescription = {
        "fetchGzip": False,
        "background": background,
        "camera": {
            "focalPoint": activeCamera.GetFocalPoint(),
            "position": activeCamera.GetPosition(),
            "viewUp": activeCamera.GetViewUp(),
            "clippingRange": activeCamera.GetClippingRange()
        },
        "centerOfRotation": renderer.GetCenter(),
        "scene": sceneComponents,
    }

    scDirs.append(['index.json', json.dumps(sceneDescription, indent=4)])

    # create binary stream of the vtkjs directory structure
    compression = zipfile.ZIP_DEFLATED
    with BytesIO() as in_memory:
        zf = zipfile.ZipFile(in_memory, mode="w")
        try:
            for dirPath, data in scDirs:
                zf.writestr(dirPath, data, compress_type=compression)
        finally:
            zf.close()
        in_memory.seek(0)
        return in_memory.read()
示例#16
0
def construct_palettes(render_window):
    """
    """
    legend = {}
    render_window.OffScreenRenderingOn()  # to not pop a vtk windows
    render_window.Render()
    renderers = render_window.GetRenderers()
    for renderer in renderers:
        for renProp in renderer.GetViewProps():
            if not renProp.GetVisibility() or not isinstance(
                    renProp, vtk.vtkActor):
                continue
            if hasattr(renProp, 'GetMapper'):
                mapper = renProp.GetMapper()
                if mapper is None:
                    continue
                dataObject = mapper.GetInputDataObject(0, 0)
                dataset = None

                if dataObject.IsA('vtkCompositeDataSet'):
                    if dataObject.GetNumberOfBlocks() == 1:
                        dataset = dataObject.GetBlock(0)
                    else:
                        gf = vtk.vtkCompositeDataGeometryFilter()
                        gf.SetInputData(dataObject)
                        gf.Update()
                        dataset = gf.GetOutput()
                elif dataObject.IsA('vtkUnstructuredGrid'):
                    gf = vtk.vtkGeometryFilter()
                    gf.SetInputData(dataObject)
                    gf.Update()
                    dataset = gf.GetOutput()
                else:
                    dataset = mapper.GetInput()

                if dataset and not isinstance(dataset, (vtk.vtkPolyData)):
                    # All data must be PolyData surfaces!
                    gf = vtk.vtkGeometryFilter()
                    gf.SetInputData(dataset)
                    gf.Update()
                    dataset = gf.GetOutputDataObject(0)

                if dataset and dataset.GetPoints():
                    scalar_visibility = mapper.GetScalarVisibility()
                    array_access_mode = mapper.GetArrayAccessMode()
                    array_name = mapper.GetArrayName(
                    )  # if arrayAccessMode == 1 else mapper.GetArrayId()
                    array_id = mapper.GetArrayId()
                    scalar_mode = mapper.GetScalarMode()
                    dataArray = None
                    lookupTable = mapper.GetLookupTable()

                    if scalar_visibility:
                        dataArray, _ = get_dataset_scalars(
                            dataset, scalar_mode, array_access_mode, array_id,
                            array_name)
                        # component = -1 => let specific instance get scalar from vector before mapping
                        if dataArray:
                            if dataArray.GetLookupTable():
                                lookupTable = dataArray.GetLookupTable()
                            if array_name and legend is not None:
                                legend.update({
                                    array_name:
                                    vtk_lut_to_palette(lookupTable)
                                })
    return legend
示例#17
0
#print reader # uncomment this to show the file information

blk0 = reader.GetOutput().GetBlock(0).GetBlock(0)

data = vtk.vtkDoubleArray()
data.SetName(varname)
data.SetNumberOfTuples(blk0.GetCellData().GetArray(0).GetNumberOfTuples())
data.FillComponent(0, vtk.vtkMath.Nan())
blk0.GetCellData().AddArray(data)

lookup = vtk.vtkLookupTable()
lookup.SetNanColor(0.5, 0.5, 0.5, 1)
lookup.SetTableRange(0, 2)

# Create Geometry
geometry = vtk.vtkCompositeDataGeometryFilter()
geometry.SetInputConnection(0, reader.GetOutputPort(0))
geometry.Update()

# Mapper
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(geometry.GetOutputPort())
mapper.SelectColorArray(varname)
mapper.SetLookupTable(lookup)
mapper.UseLookupTableScalarRangeOn()
mapper.SetScalarModeToUseCellFieldData()
mapper.InterpolateScalarsBeforeMappingOn()

# Actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)
示例#18
0
    def setFileName(self, file_name, lut):

        try:
            self.currently_has_actor = True
            self.lut = lut

            self.file_name = file_name
            self.reader = vtk.vtkExodusIIReader()
            self.reader.SetFileName(self.file_name)
            self.reader.UpdateInformation()

            self.current_dim = self.reader.GetDimensionality()

            self.min_timestep = 0
            self.max_timestep = 0
            range = self.reader.GetTimeStepRange()
            self.min_timestep = range[0]
            self.max_timestep = range[1]

            self.reader.SetAllArrayStatus(vtk.vtkExodusIIReader.ELEM_BLOCK, 1)
            self.reader.SetAllArrayStatus(vtk.vtkExodusIIReader.NODAL, 1)
            self.reader.SetAllArrayStatus(vtk.vtkExodusIIReader.NODAL_TEMPORAL,
                                          1)
            self.reader.SetTimeStep(self.max_timestep)
            self.reader.Update()
            self.current_variable_point_data = {}
            self.current_nodal_variables = []
            self.current_elemental_variables = []
            self.current_nodal_components = {}
            self.current_elemental_components = {}
            self.component_index = -1

            num_blocks = self.reader.GetNumberOfElementBlockArrays()
            self.blocks = set()
            self.block_to_name = {}
            for i in xrange(num_blocks):
                block_num = self.reader.GetObjectId(
                    vtk.vtkExodusIIReader.ELEM_BLOCK, i)
                self.blocks.add(block_num)
                if 'Unnamed' not in self.reader.GetObjectName(
                        vtk.vtkExodusIIReader.ELEM_BLOCK, i).split(' '):
                    self.block_to_name[block_num] = self.reader.GetObjectName(
                        vtk.vtkExodusIIReader.ELEM_BLOCK, i).split(' ')[0]

            cdp = vtk.vtkCompositeDataPipeline()
            vtk.vtkAlgorithm.SetDefaultExecutivePrototype(cdp)

            self.output = self.reader.GetOutput()
            self.geom = vtk.vtkCompositeDataGeometryFilter()
            self.geom.SetInputConnection(0, self.reader.GetOutputPort(0))
            self.geom.Update()

            self.data = self.geom.GetOutput()

            num_nodal_variables = self.data.GetPointData().GetNumberOfArrays()
            for var_num in xrange(num_nodal_variables):
                var_name = self.data.GetPointData().GetArrayName(var_num)
                self.current_nodal_variables.append(var_name)
                components = self.data.GetPointData().GetVectors(
                    var_name).GetNumberOfComponents()
                self.current_nodal_components[var_name] = components
                # self.data.GetPointData().GetVectors(value_string).GetComponentName(0)

            num_elemental_variables = self.data.GetCellData(
            ).GetNumberOfArrays()
            for var_num in xrange(num_elemental_variables):
                var_name = self.data.GetCellData().GetArrayName(var_num)
                self.current_elemental_variables.append(var_name)
                components = self.data.GetCellData().GetVectors(
                    var_name).GetNumberOfComponents()
                self.current_elemental_components[var_name] = components

            self.application_filter = self.render_widget.application.filterResult(
                self.geom)

            self.mapper = vtk.vtkPolyDataMapper()
            #    self.mapper.SetInputConnection(self.tf.GetOutputPort())
            self.mapper.SetInputConnection(
                self.application_filter.GetOutputPort())
            self.mapper.ScalarVisibilityOn()
            self.mapper.SetLookupTable(lut)
            self.mapper.SetColorModeToMapScalars()
            self.mapper.InterpolateScalarsBeforeMappingOn()

            self.actor = vtk.vtkActor()
            self.current_actors.append(self.actor)
            self.actor.SetMapper(self.mapper)
            self.current_actor = self.actor

            self.clipper = vtk.vtkTableBasedClipDataSet()
            if vtk.VTK_MAJOR_VERSION <= 5:
                self.clipper.SetInput(self.output)
            else:
                self.clipper.SetInputData(self.output)
            self.clipper.SetClipFunction(self.plane)
            self.clipper.Update()

            self.clip_geom = vtk.vtkCompositeDataGeometryFilter()
            self.clip_geom.SetInputConnection(0, self.clipper.GetOutputPort(0))
            self.clip_geom.Update()

            self.clip_data = self.clip_geom.GetOutput()

            self.clip_application_filter = self.render_widget.application.filterResult(
                self.clip_geom)

            self.clip_mapper = vtk.vtkPolyDataMapper()
            self.clip_mapper.SetInputConnection(
                self.clip_application_filter.GetOutputPort())
            self.clip_mapper.ScalarVisibilityOn()
            self.clip_mapper.SetLookupTable(lut)

            self.clip_actor = vtk.vtkActor()
            self.clip_actor.SetMapper(self.clip_mapper)
            self.current_actors.append(self.clip_actor)

            self.scalar_bar = vtk.vtkScalarBarActor()
            self.current_actors.append(self.scalar_bar)
            self.scalar_bar.SetLookupTable(self.mapper.GetLookupTable())
            self.scalar_bar.SetNumberOfLabels(4)

            self.current_bounds = self.actor.GetBounds()
        except:
            pass
示例#19
0
def main():
    colors = vtk.vtkNamedColors()

    # Create and populate the AMR dataset
    # The dataset should look like
    # Level 0
    #   uniform grid, dimensions 11, 11, 11, AMR box (0, 0, 0) - (9, 9, 9)
    # Level 1 - refinement ratio : 2
    #   uniform grid, dimensions 11, 11, 11, AMR box (0, 0, 0) - (9, 9, 9)
    #   uniform grid, dimensions 11, 11, 11, AMR box (10, 10, 10) - (19, 19, 19)
    # Use MakeScalars() above to fill the scalar arrays

    amr = vtk.vtkOverlappingAMR()
    blocksPerLevel = [1, 2]
    amr.Initialize(2, blocksPerLevel)

    origin = [0.0, 0.0, 0.0]
    spacing = [1.0, 1.0, 1.0]
    dims = [11, 11, 11]

    ug1 = vtk.vtkUniformGrid()
    # Geometry
    ug1.SetOrigin(origin)
    ug1.SetSpacing(spacing)
    ug1.SetDimensions(dims)

    # Data
    scalars = vtk.vtkFloatArray()
    ug1.GetPointData().SetScalars(scalars)
    MakeScalars(dims, origin, spacing, scalars)

    lo = [0, 0, 0]
    hi = [9, 9, 9]
    box1 = vtk.vtkAMRBox()
    amr.SetAMRBox(0, 0, box1)
    amr.SetDataSet(0, 0, ug1)

    spacing2 = [0.5, 0.5, 0.5]
    ug2 = vtk.vtkUniformGrid()
    # Geometry
    ug2.SetOrigin(origin)
    ug2.SetSpacing(spacing2)
    ug2.SetDimensions(dims)

    # Data
    scalars = vtk.vtkFloatArray()
    ug2.GetPointData().SetScalars(scalars)
    MakeScalars(dims, origin, spacing2, scalars)

    lo2 = [0, 0, 0]
    hi2 = [9, 9, 9]
    box2 = vtk.vtkAMRBox()
    amr.SetAMRBox(1, 0, box2)
    amr.SetDataSet(1, 0, ug2)

    origin3 = [5, 5, 5]
    ug3 = vtk.vtkUniformGrid()

    # Geometry
    ug3.SetOrigin(origin3)
    ug3.SetSpacing(spacing2)
    ug3.SetDimensions(dims)

    # Data
    scalars = vtk.vtkFloatArray()
    ug3.GetPointData().SetScalars(scalars)
    MakeScalars(dims, origin3, spacing2, scalars)

    lo3 = [10, 10, 10]
    hi3 = [19, 19, 19]
    box3 = vtk.vtkAMRBox()
    amr.SetAMRBox(1, 1, box3)
    amr.SetDataSet(1, 1, ug3)
    amr.SetRefinementRatio(0, 2)

    # Render the amr data here.
    of = vtk.vtkOutlineFilter()
    of.SetInputData(amr)

    geomFilter = vtk.vtkCompositeDataGeometryFilter()
    geomFilter.SetInputConnection(of.GetOutputPort())

    # Create an iso-surface - at 10.
    cf = vtk.vtkContourFilter()
    cf.SetInputData(amr)
    cf.SetNumberOfContours(1)
    cf.SetValue(0, 10.0)

    geomFilter2 = vtk.vtkCompositeDataGeometryFilter()
    geomFilter2.SetInputConnection(cf.GetOutputPort())

    # Create the render window, renderer, and interactor.
    aren = vtk.vtkRenderer()
    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(aren)

    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)

    # Associate the geometry with a mapper and the mapper to an actor.
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(geomFilter.GetOutputPort())
    actor1 = vtk.vtkActor()
    actor1.GetProperty().SetColor(colors.GetColor3d("Yellow"))
    actor1.SetMapper(mapper)

    # Associate the geometry with a mapper and the mapper to an actor.
    mapper2 = vtk.vtkPolyDataMapper()
    mapper2.SetInputConnection(geomFilter2.GetOutputPort())
    actor2 = vtk.vtkActor()
    actor2.SetMapper(mapper2)

    # Add the actor to the renderer and start handling events.
    aren.AddActor(actor1)
    aren.AddActor(actor2)
    aren.SetBackground(colors.GetColor3d("CornflowerBlue"))
    renWin.Render()
    iren.Start()
示例#20
0
    def go(self):
        
        print "Mapping",self.cfdData,"to",self.feaMesh
        
        # identify inner wall points

        """
        reader = vtk.vtkSTLReader()
        reader.SetFileName(self.feaMesh)
        reader.ScalarTagsOn()
        reader.Update()
        feadata = reader.GetOutput()
        """
        
        reader = vtk.vtkExodusIIReader()
        reader.SetFileName(self.feaMesh)
        reader.UpdateInformation()
        reader.SetAllArrayStatus(vtk.vtkExodusIIReader.NODAL, 1) # enables all NODAL variables
        reader.GenerateGlobalNodeIdArrayOn()
        reader.GenerateGlobalElementIdArrayOn()
        reader.ExodusModelMetadataOn()
        reader.Update()
        feadata = vtk.vtkCompositeDataGeometryFilter()
        feadata.SetInputConnection(0, reader.GetOutputPort(0))
        feadata.Update()

        transform = vtk.vtkTransform()
        transform.Scale(1000, 1000, 1000)
        test = vtk.vtkTransformPolyDataFilter()
        test.SetTransform(transform)
        test.SetInput(feadata.GetOutput())
        test.Update()
        feadata = test.GetOutput()
        
        normals = vtk.vtkPolyDataNormals()
        normals.SetInput(feadata)
        normals.ComputeCellNormalsOn()
        normals.ComputePointNormalsOn()
        normals.ConsistencyOn()
        normals.AutoOrientNormalsOn()
        normals.SplittingOn()
        normals.Update()
        feabody = normals.GetOutput()
        
        norms = feabody.GetPointData().GetArray('Normals')
        norms_n = numpy_support.vtk_to_numpy(norms)
        #print (norms_n)
        
        feapnts = feabody.GetPoints().GetData()
        feapnts_n = numpy_support.vtk_to_numpy(feapnts)
        #print (feapnts_n)

        reader = vtk.vtkPolyDataReader()
        reader.SetFileName(self.cfdData)
        reader.ReadAllVectorsOn()
        reader.ReadAllScalarsOn()
        reader.Update()
        cfddata = reader.GetOutput()
        
        transform = vtk.vtkTransform()
        transform.Scale(1000, 1000, 1000)
        test = vtk.vtkTransformPolyDataFilter()
        test.SetTransform(transform)
        test.SetInputConnection(reader.GetOutputPort())
        test.Update()
        cfddata = test.GetOutput()
        
        """
        reader = vtk.vtkUnstructuredGridReader()
        reader.SetFileName("volume.vtk")
        reader.ReadAllVectorsOn()
        reader.ReadAllScalarsOn()
        reader.Update()
        cfdvol = reader.GetOutput()
        """ 
       
        cfdpnts = cfddata.GetPoints().GetData()
        cfdpnts_n = numpy_support.vtk_to_numpy(cfdpnts)
        
        pointLocator = vtk.vtkPointLocator()
        pointLocator.SetDataSet(feabody)
        pointLocator.BuildLocator()

        innerIds = []
        for cfdpnt in cfdpnts_n:
            id = pointLocator.FindClosestPoint(cfdpnt)
            innerIds.append(id)
        innerIds = np.unique(innerIds)
            
        # foreach fea innerpoint
        # find the intersection point to cfddata
        # probe field cfddata using intersection point
        # append the field data to feabody
        
        caster = pycaster.rayCaster(cfddata) 
        
        interPoints={}
        interPointsSave = vtk.vtkPoints()
        ptcount=0
        for id in innerIds:
            feainpnt = feapnts_n[id]
            feainnorm = norms_n[id]
            sourcePnt = feainpnt
            targetPnt = feainpnt+(feainnorm*100)
            pointsIntersection = caster.castRay(sourcePnt, targetPnt)
            if len(pointsIntersection)!=0:
                interPointsSave.InsertPoint(ptcount, pointsIntersection[0]+(feainnorm*0))
                interPoints[id]=ptcount
                ptcount+=1
            else:
                targetPnt = feainpnt-(feainnorm*100)
                pointsIntersection = caster.castRay(sourcePnt, targetPnt)
                if len(pointsIntersection)!=0:
                    interPointsSave.InsertPoint(ptcount, pointsIntersection[0]-(feainnorm*0))
                    interPoints[id]=ptcount
                    ptcount+=1

        # for each interPoint, probe cfddata fields

        innerPointData = vtk.vtkPolyData()
        innerPointData.SetPoints(interPointsSave)
        
        """
        # IF LOADING FROM VOLUME
        transform = vtk.vtkTransform()
        transform.Scale(0.001,0.001,0.001)
        test = vtk.vtkTransformPolyDataFilter()
        test.SetTransform(transform)
        test.SetInput(innerPointData)
        test.Update()
        innerPointData = test.GetOutput()
        """
        
        probe = vtk.vtkProbeFilter()
        probe.SetInput(innerPointData)
        probe.SetSource(cfddata)
        
        pd = vtk.vtkAppendPolyData()
        pd.AddInputConnection(probe.GetOutputPort())
        pd.Update()
        probeData=pd.GetOutput()
        
        # detect all fields
        #fields=[]
        #for f in range(0,probeData.GetPointData().GetNumberOfArrays()):
        #    fields.append(probeData.GetPointData().GetArrayName(f))
        
        globalNodeIds=numpy_support.vtk_to_numpy(feabody.GetPointData().GetArray('PedigreeNodeId'))
        
        fieldData={}
        for f in self.fields:
            fieldData[f]=numpy_support.vtk_to_numpy(probeData.GetPointData().GetArray(f))
        
        for f in self.fields:
            ff = open("bc/"+f+"/"+f+"_"+self.cfdData.split("_")[1].replace(".vtk",".inp"),'w')
            if (f == "T"):
                ff.write("*BOUNDARY\n")
            elif (f == "p"):
                ff.write("*CLOAD\n")
            for id in innerIds:
                try:
                    #print ",".join([str(globalNodeIds[id]),'11','11',str(fieldData[f][interPoints[id]])])
                    if fieldData[f][interPoints[id]] != 0:
                        if (f == "T"):
                            ff.write(",".join([str(globalNodeIds[id]),'11','11',str(fieldData[f][interPoints[id]])])+"\n")
                        elif (f == "p"):
                            ff.write(",".join([str(globalNodeIds[id]),'3',str(fieldData[f][interPoints[id]])])+"\n")
                except:
                    pass
            ff.close()
        
        #writer = vtk.vtkDataSetWriter()
        #writer.SetFileName('probe.vtk')
        #writer.SetInput(probe.GetOutput())
        #writer.Write()

        """
        # WRITE INTERSECTION POINTS TO FILE
        interPointsSave = vtk.vtkPoints()
        ptcount=0
        for pnt in interPoints:
            interPointsSave.InsertPoint(ptcount, pnt)
            ptcount+=1
        innerPointData = vtk.vtkPolyData()
        innerPointData.SetPoints(interPointsSave)
        writer = vtk.vtkDataSetWriter()
        writer.SetFileName('points.vtk')
        writer.SetInput(innerPointData)
        writer.Write()
        """

        """
示例#21
0
def render_window_serializer(render_window):
    """ 
    Function to convert a vtk render window in a list of 2-tuple where first value 
    correspond to a relative file path in the `vtkjs` directory structure and values
    of the binary content of the corresponding file.
    """
    render_window.OffScreenRenderingOn()  # to not pop a vtk windows
    render_window.Render()
    renderers = render_window.GetRenderers()

    doCompressArrays = False

    objIds = []
    scDirs = []

    sceneComponents = []
    textureToSave = {}

    for renderer in renderers:
        renProps = renderer.GetViewProps()
        for rpIdx in range(renProps.GetNumberOfItems()):
            renProp = renProps.GetItemAsObject(rpIdx)
            if not renProp.GetVisibility():
                continue
            if hasattr(renProp, 'GetMapper'):
                mapper = renProp.GetMapper()
                if mapper is None:
                    continue
                dataObject = mapper.GetInputDataObject(0, 0)
                dataset = None

                if dataObject.IsA('vtkCompositeDataSet'):
                    if dataObject.GetNumberOfBlocks() == 1:
                        dataset = dataObject.GetBlock(0)
                    else:
                        gf = vtk.vtkCompositeDataGeometryFilter()
                        gf.SetInputData(dataObject)
                        gf.Update()
                        dataset = gf.GetOutput()
                elif dataObject.IsA('vtkUnstructuredGrid'):
                    gf = vtk.vtkGeometryFilter()
                    gf.SetInputData(dataObject)
                    gf.Update()
                    dataset = gf.GetOutput()
                else:
                    dataset = mapper.GetInput()

                if dataset and not isinstance(dataset, (vtk.vtkPolyData)):
                    # All data must be PolyData surfaces!
                    gf = vtk.vtkGeometryFilter()
                    gf.SetInputData(dataset)
                    gf.Update()
                    dataset = gf.GetOutputDataObject(0)

                if dataset and dataset.GetPoints():
                    componentName = str(id(renProp))
                    scalarVisibility = mapper.GetScalarVisibility()
                    arrayAccessMode = mapper.GetArrayAccessMode()
                    colorArrayName = mapper.GetArrayName(
                    ) if arrayAccessMode == 1 else mapper.GetArrayId()
                    colorMode = mapper.GetColorMode()
                    scalarMode = mapper.GetScalarMode()
                    lookupTable = mapper.GetLookupTable()

                    dsAttrs = None
                    arrayLocation = ''

                    if scalarVisibility:
                        if scalarMode == 0:
                            # By default (ScalarModeToDefault), the filter will use point data,
                            # and if no point data is available, then cell data is used
                            # https://vtk.org/doc/nightly/html/classvtkMapper.html#af330900726eb1a5e18e5f7f557306e52
                            if dataset.GetPointData().GetNumberOfArrays() >= 1:
                                dsAttrs = dataset.GetPointData()
                                arrayLocation = 'pointData'
                            else:
                                dsAttrs = dataset.GetCellData()
                                arrayLocation = 'cellData'
                        if scalarMode == 3 or scalarMode == 1:  # VTK_SCALAR_MODE_USE_POINT_FIELD_DATA or VTK_SCALAR_MODE_USE_POINT_DATA
                            dsAttrs = dataset.GetPointData()
                            arrayLocation = 'pointData'
                        elif scalarMode == 4 or scalarMode == 2:  # VTK_SCALAR_MODE_USE_CELL_FIELD_DATA or VTK_SCALAR_MODE_USE_CELL_DATA
                            dsAttrs = dataset.GetCellData()
                            arrayLocation = 'cellData'

                    colorArray = None
                    dataArray = None

                    if dsAttrs:
                        if colorArrayName >= 0:
                            dataArray = dsAttrs.GetArray(colorArrayName)
                        elif dsAttrs.GetNumberOfArrays() >= 1:
                            dataArray = dsAttrs.GetArray(0)

                    if dataArray:
                        # component = -1 => let specific instance get scalar from vector before mapping
                        colorArray = lookupTable.MapScalars(
                            dataArray, colorMode, -1)
                        colorArrayName = '__CustomRGBColorArray__'
                        colorArray.SetName(colorArrayName)
                        colorMode = 0
                    else:
                        colorArrayName = ''

                    colorArrayInfo = {
                        'colorArray': colorArray,
                        'location': arrayLocation
                    }

                    _write_data_set(scDirs,
                                    dataset,
                                    colorArrayInfo,
                                    newDSName=componentName,
                                    compress=doCompressArrays)

                    # Handle texture if any
                    textureName = None
                    if renProp.GetTexture() and renProp.GetTexture().GetInput(
                    ):
                        textureData = renProp.GetTexture().GetInput()
                        textureName = 'texture_%d' % _get_object_id(
                            textureData, objIds)
                        textureToSave[textureName] = textureData

                    representation = renProp.GetProperty().GetRepresentation(
                    ) if hasattr(renProp, 'GetProperty') else 2
                    if representation == 1:
                        colorToUse = renProp.GetProperty().GetColor(
                        ) if hasattr(renProp, 'GetProperty') else [1, 1, 1]
                    else:
                        colorToUse = renProp.GetProperty().GetDiffuseColor(
                        ) if hasattr(renProp, 'GetProperty') else [1, 1, 1]
                    pointSize = renProp.GetProperty().GetPointSize(
                    ) if hasattr(renProp, 'GetProperty') else 1.0
                    opacity = renProp.GetProperty().GetOpacity() if hasattr(
                        renProp, 'GetProperty') else 1.0
                    edgeVisibility = renProp.GetProperty().GetEdgeVisibility(
                    ) if hasattr(renProp, 'GetProperty') else False

                    p3dPosition = renProp.GetPosition() if renProp.IsA(
                        'vtkProp3D') else [0, 0, 0]
                    p3dScale = renProp.GetScale() if renProp.IsA(
                        'vtkProp3D') else [1, 1, 1]
                    p3dOrigin = renProp.GetOrigin() if renProp.IsA(
                        'vtkProp3D') else [0, 0, 0]
                    p3dRotateWXYZ = renProp.GetOrientationWXYZ(
                    ) if renProp.IsA('vtkProp3D') else [0, 0, 0, 0]

                    sceneComponents.append({
                        "name": componentName,
                        "type": "httpDataSetReader",
                        "httpDataSetReader": {
                            "url": componentName
                        },
                        "actor": {
                            "origin": p3dOrigin,
                            "scale": p3dScale,
                            "position": p3dPosition,
                        },
                        "actorRotation": p3dRotateWXYZ,
                        "mapper": {
                            "colorByArrayName": colorArrayName,
                            "colorMode": colorMode,
                            "scalarMode": scalarMode
                        },
                        "property": {
                            "representation": representation,
                            "edgeVisibility": edgeVisibility,
                            "diffuseColor": colorToUse,
                            "pointSize": pointSize,
                            "opacity": opacity
                        },
                        "lookupTable": {
                            "tableRange":
                            lookupTable.GetRange(),
                            "hueRange":
                            lookupTable.GetHueRange() if hasattr(
                                lookupTable, 'GetHueRange') else [0.5, 0]
                        }
                    })

                    if textureName:
                        sceneComponents[-1]['texture'] = textureName

    # Save texture data if any
    for key, val in textureToSave.items():
        _write_data_set(scDirs,
                        val,
                        None,
                        newDSName=key,
                        compress=doCompressArrays)

    activeCamera = renderer.GetActiveCamera()
    background = renderer.GetBackground()
    sceneDescription = {
        "fetchGzip": doCompressArrays,
        "background": background,
        "camera": {
            "focalPoint": activeCamera.GetFocalPoint(),
            "position": activeCamera.GetPosition(),
            "viewUp": activeCamera.GetViewUp(),
            "clippingRange": activeCamera.GetClippingRange()
        },
        "centerOfRotation": renderer.GetCenter(),
        "scene": sceneComponents,
    }

    scDirs.append(['index.json', json.dumps(sceneDescription, indent=4)])

    # create binary stream of the vtkjs directory structure
    compression = zipfile.ZIP_DEFLATED
    in_memory = BytesIO()
    zf = zipfile.ZipFile(in_memory, mode="w")
    try:
        for dirPath, data in (scDirs):
            zf.writestr(dirPath, data, compress_type=compression)
    finally:
        zf.close()

    in_memory.seek(0)
    return in_memory
示例#22
0
def getFreeSurfaceActor(vtk_r, scale=[1, 1, 1], fsRange=None):

    aa = vtk.vtkAssignAttribute()
    aa.SetInputConnection(vtk_r.GetOutputPort())
    aa.Assign('alpha.water', "SCALARS", "POINT_DATA")

    isoContour = vtk.vtkContourFilter()
    isoContour.SetInputConnection(aa.GetOutputPort())
    isoContour.SetValue(0, 0.5)
    # isoContour.SetGenerateTriangles(0)
    isoContour.SetNumberOfContours(1)

    isoContourDataFilter = vtk.vtkCompositeDataGeometryFilter()
    isoContourDataFilter.SetInputConnection(isoContour.GetOutputPort())

    transform = vtk.vtkTransform()
    transform.Scale(*scale)
    tf = vtk.vtkTransformPolyDataFilter()
    tf.SetInputConnection(isoContourDataFilter.GetOutputPort())
    tf.SetTransform(transform)

    # Use an ArrayCalculator to get the iso-contour elevation
    calc = vtk.vtkArrayCalculator()
    calc.SetInputConnection(tf.GetOutputPort())
    calc.SetAttributeModeToUsePointData()
    calc.AddCoordinateScalarVariable("coordsZ", 2)
    calc.SetFunction("coordsZ")
    calc.SetResultArrayName("coordsZ")

    #--- Map the data
    isoContourMapper = vtk.vtkDataSetMapper()
    isoContourMapper.SetInputConnection(calc.GetOutputPort())

    #---Select node property to display
    lutBlueRed = vtk.vtkLookupTable()
    lutBlueRed.SetHueRange(2. / 3., 0.)
    lutBlueRed.SetVectorModeToMagnitude()
    lutBlueRed.Build()

    scalarBar = vtk.vtkScalarBarActor()
    scalarBar.SetLookupTable(lutBlueRed)
    scalarBar.SetWidth(0.05)
    scalarBar.SetHeight(0.25)
    scalarBar.SetTitle("Z(m)")
    scalarBar.GetTitleTextProperty().SetColor(0., 0., 0.)
    scalarBar.GetLabelTextProperty().SetColor(0., 0., 0.)

    isoContourMapper.SelectColorArray("coordsZ")
    # isoContourMapper.SetScalarModeToUsePointData()
    isoContourMapper.SetScalarModeToUsePointFieldData()
    isoContourMapper.SetLookupTable(lutBlueRed)
    if fsRange is not None:
        isoContourMapper.SetScalarRange(*fsRange)
    isoContourMapper.SetUseLookupTableScalarRange(0)

    #---Add actor
    fsActor = vtk.vtkActor()
    fsActor.GetProperty().SetEdgeVisibility(0)
    fsActor.SetMapper(isoContourMapper)
    fsActor.GetProperty().SetOpacity(0.7)
    return fsActor, scalarBar