def tetrahedralize(self, leave_tetra_only=True):
     tetra = vtk.vtkDataSetTriangleFilter()
     if leave_tetra_only:
         tetra.TetrahedraOnlyOn()
     tetra.SetInputConnection(self.mesh.GetOutputPort())
     tetra.Update()
     self.mesh = tetra
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(
         self, module_manager,
         vtk.vtkDataSetTriangleFilter(), 'Processing.',
         ('vtkDataSet',), ('vtkUnstructuredGrid',),
         replaceDoc=True,
         inputFunctions=None, outputFunctions=None)
Example #3
0
def tetrahedralize_vtk_mesh(vtkdata):
    """
    3D cells are converted to tetrahedral meshes, 2D cells to triangles.

    Parameters
    ----------
    vtkdata : VTK object
        Mesh, scalar, vector and tensor data.

    Returns
    -------
    tetra : VTK object
        Mesh, scalar, vector and tensor data.
    """
    tetra = vtk.vtkDataSetTriangleFilter()
    if vtk_version < 6:
        tetra.SetInput(vtkdata)

    else:
        tetra.SetInputData(vtkdata)

    tetra.SetInput(vtkdata)
    tetra.Update()

    return tetra.GetOutput()
Example #4
0
def tetrahedralize_vtk_mesh(vtkdata):
    """
    3D cells are converted to tetrahedral meshes, 2D cells to triangles.

    Parameters
    ----------
    vtkdata : VTK object
        Mesh, scalar, vector and tensor data.

    Returns
    -------
    tetra : VTK object
        Mesh, scalar, vector and tensor data.
    """
    tetra = vtk.vtkDataSetTriangleFilter()
    if vtk_version < 6:
        tetra.SetInput(vtkdata)

    else:
        tetra.SetInputData(vtkdata)

    tetra.SetInput(vtkdata)
    tetra.Update()

    return tetra.GetOutput()
Example #5
0
def Slice_VTK_data_to_VTK(inputFileName,
                             outputFileName,
                                 point, normal,
                                 resolution
                                           ):
    reader = vtk.vtkXMLUnstructuredGridReader()
    reader.SetFileName(inputFileName)
    reader.Update()
    
    plane = vtk.vtkPlane()
    plane.SetOrigin(point)
    plane.SetNormal(normal)

    cutter = vtk.vtkFiltersCorePython.vtkCutter()
    cutter.SetCutFunction(plane)
    cutter.SetInputConnection(reader.GetOutputPort())
    cutter.Update()

    #Convert tht polydata structure générated by cutter into unstructured grid by triangulation
    triFilter = vtk.vtkDataSetTriangleFilter()
    triFilter.SetInputConnection(cutter.GetOutputPort())
    triFilter.Update()
    
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetInputData(triFilter.GetOutput())
    writer.SetFileName(outputFileName)
    writer.Write()
Example #6
0
def computeVolumes(meshVTK,
                   th,
                   scalarFieldName='rvot',
                   path=None,
                   writeInletOutlet=True,
                   returnMeshes=False,
                   **kwargs):
    meshVTK.GetPointData().SetActiveScalars(scalarFieldName)

    clip = vtk.vtkClipDataSet()
    clip.SetInputData(meshVTK)
    clip.SetValue(th)
    clip.SetInsideOut(kwargs.get('greaterOrEqual', True))  # Get <=
    clip.Update()

    tetrahedrilize = vtk.vtkDataSetTriangleFilter()
    tetrahedrilize.SetInputConnection(clip.GetOutputPort())
    tetrahedrilize.Update()
    outlet = tetrahedrilize.GetOutput()

    clip2 = vtk.vtkClipDataSet()
    clip2.SetInputData(meshVTK)
    clip2.SetValue(th)
    clip2.SetInsideOut(not kwargs.get('greaterOrEqual', True))
    clip2.Update()

    tetrahedrilize2 = vtk.vtkDataSetTriangleFilter()
    tetrahedrilize2.SetInputConnection(clip2.GetOutputPort())
    tetrahedrilize2.Update()
    inlet = tetrahedrilize2.GetOutput()

    if path is not None:
        path = path.replace('.1', '')
        if writeInletOutlet:
            utilities.writeUnstructuredGridVTK(
                utilities.appendStringBeforeFileType(
                    path, kwargs.get('name1', '_inlet')), inlet)
            utilities.writeUnstructuredGridVTK(
                utilities.appendStringBeforeFileType(
                    path, kwargs.get('name2', '_outlet')), outlet)
        else:
            utilities.writeUnstructuredGridVTK(path, inlet)
    if not returnMeshes:
        return computeVolumeTetrahedralMesh(
            inlet), computeVolumeTetrahedralMesh(outlet)
    else:
        return inlet, outlet
Example #7
0
    def getVTKActor(self, obj):
        self.triFilter = vtk.vtkDataSetTriangleFilter()
        self.mapper = vtk.vtkDataSetMapper()
        self.actor = vtk.vtkActor()

        self.triFilter.SetInput(obj)
        self.mapper.SetInput(self.triFilter.GetOutput())
        self.actor.SetMapper(self.mapper)
        self.ren.AddActor(self.actor)
Example #8
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(self,
                                       module_manager,
                                       vtk.vtkDataSetTriangleFilter(),
                                       'Processing.', ('vtkDataSet', ),
                                       ('vtkUnstructuredGrid', ),
                                       replaceDoc=True,
                                       inputFunctions=None,
                                       outputFunctions=None)
Example #9
0
 def WriteTecplotMeshFile(self):
     if (self.OutputFileName == ''):
         self.PrintError('Error: no OutputFileName.')
     self.PrintLog('Writing Tecplot file.')
     triangleFilter = vtk.vtkDataSetTriangleFilter()
     triangleFilter.SetInputData(self.Mesh)
     triangleFilter.Update()
     self.Mesh = triangleFilter.GetOutput()
     f = open(self.OutputFileName, 'w')
     line = "VARIABLES = X,Y,Z"
     arrayNames = []
     for i in range(self.Mesh.GetPointData().GetNumberOfArrays()):
         array = self.Mesh.GetPointData().GetArray(i)
         arrayName = array.GetName()
         if arrayName == None:
             continue
         if (arrayName[-1] == '_'):
             continue
         arrayNames.append(arrayName)
         if (array.GetNumberOfComponents() == 1):
             line = line + ',' + arrayName
         else:
             for j in range(array.GetNumberOfComponents()):
                 line = line + ',' + arrayName + str(j)
     line = line + '\n'
     f.write(line)
     tetraCellIdArray = vtk.vtkIdTypeArray()
     tetraCellType = 10
     self.Mesh.GetIdsOfCellsOfType(tetraCellType, tetraCellIdArray)
     numberOfTetras = tetraCellIdArray.GetNumberOfTuples()
     line = "ZONE " + "N=" + str(self.Mesh.GetNumberOfPoints(
     )) + ',' + "E=" + str(
         numberOfTetras) + ',' + "F=FEPOINT" + ',' + "ET=TETRAHEDRON" + '\n'
     f.write(line)
     for i in range(self.Mesh.GetNumberOfPoints()):
         point = self.Mesh.GetPoint(i)
         line = str(point[0]) + ' ' + str(point[1]) + ' ' + str(point[2])
         for arrayName in arrayNames:
             array = self.Mesh.GetPointData().GetArray(arrayName)
             for j in range(array.GetNumberOfComponents()):
                 line = line + ' ' + str(array.GetComponent(i, j))
         line = line + '\n'
         f.write(line)
     for i in range(numberOfTetras):
         cellPointIds = self.Mesh.GetCell(
             tetraCellIdArray.GetValue(i)).GetPointIds()
         line = ''
         for j in range(cellPointIds.GetNumberOfIds()):
             if (j > 0):
                 line = line + ' '
             line = line + str(cellPointIds.GetId(j) + 1)
         line = line + '\n'
         f.write(line)
Example #10
0
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: No input mesh.')

        tetrahedralizeFilter = vtk.vtkDataSetTriangleFilter()
        tetrahedralizeFilter.SetInputData(self.Mesh)
        if ((vtk.vtkVersion.GetVTKMajorVersion()>=5) and (vtk.vtkVersion.GetVTKMinorVersion()>0)):
            tetrahedralizeFilter.SetTetrahedraOnly(self.TetrahedraOnly)
        tetrahedralizeFilter.Update()

        self.Mesh = tetrahedralizeFilter.GetOutput()
Example #11
0
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: No input mesh.')

        tetrahedralizeFilter = vtk.vtkDataSetTriangleFilter()
        tetrahedralizeFilter.SetInputData(self.Mesh)
        if ((vtk.vtkVersion.GetVTKMajorVersion() >= 5)
                and (vtk.vtkVersion.GetVTKMinorVersion() > 0)):
            tetrahedralizeFilter.SetTetrahedraOnly(self.TetrahedraOnly)
        tetrahedralizeFilter.Update()

        self.Mesh = tetrahedralizeFilter.GetOutput()
Example #12
0
 def WriteTecplotMeshFile(self):
     if (self.OutputFileName == ''):
         self.PrintError('Error: no OutputFileName.')
     self.PrintLog('Writing Tecplot file.')
     triangleFilter = vtk.vtkDataSetTriangleFilter()
     triangleFilter.SetInputData(self.Mesh)
     triangleFilter.Update()
     self.Mesh = triangleFilter.GetOutput()
     f=open(self.OutputFileName, 'w')
     line = "VARIABLES = X,Y,Z"
     arrayNames = []
     for i in range(self.Mesh.GetPointData().GetNumberOfArrays()):
         array = self.Mesh.GetPointData().GetArray(i)
         arrayName = array.GetName()
         if arrayName == None:
             continue
         if (arrayName[-1]=='_'):
             continue
         arrayNames.append(arrayName)
         if (array.GetNumberOfComponents() == 1):
             line = line + ',' + arrayName
         else:
             for j in range(array.GetNumberOfComponents()):
                 line = line + ',' + arrayName + str(j)
     line = line + '\n'
     f.write(line)
     tetraCellIdArray = vtk.vtkIdTypeArray()
     tetraCellType = 10
     self.Mesh.GetIdsOfCellsOfType(tetraCellType,tetraCellIdArray)
     numberOfTetras = tetraCellIdArray.GetNumberOfTuples()
     line = "ZONE " + "N=" + str(self.Mesh.GetNumberOfPoints()) + ',' + "E=" + str(numberOfTetras) + ',' + "F=FEPOINT" + ',' + "ET=TETRAHEDRON" + '\n'
     f.write(line)
     for i in range(self.Mesh.GetNumberOfPoints()):
         point = self.Mesh.GetPoint(i)
         line = str(point[0]) + ' ' + str(point[1]) + ' ' + str(point[2])
         for arrayName in arrayNames:
             array = self.Mesh.GetPointData().GetArray(arrayName)
             for j in range(array.GetNumberOfComponents()):
                 line = line + ' ' + str(array.GetComponent(i,j))
         line = line + '\n'
         f.write(line)
     for i in range(numberOfTetras):
         cellPointIds = self.Mesh.GetCell(tetraCellIdArray.GetValue(i)).GetPointIds()
         line = ''
         for j in range(cellPointIds.GetNumberOfIds()):
             if (j>0):
                 line = line + ' '
             line = line + str(cellPointIds.GetId(j)+1)
         line = line + '\n'
         f.write(line)
Example #13
0
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: No input mesh.')

        tetrahedralizeFilter = vtk.vtkDataSetTriangleFilter()
        tetrahedralizeFilter.SetInput(self.Mesh)
        tetrahedralizeFilter.SetTetrahedraOnly(self.TetrahedraOnly)
        tetrahedralizeFilter.Update()

        self.Mesh = tetrahedralizeFilter.GetOutput()

        if self.Mesh.GetSource():
            self.Mesh.GetSource().UnRegisterAllOutputs()
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: No input mesh.')

        tetrahedralizeFilter = vtk.vtkDataSetTriangleFilter()
        tetrahedralizeFilter.SetInput(self.Mesh)
        tetrahedralizeFilter.SetTetrahedraOnly(self.TetrahedraOnly)
        tetrahedralizeFilter.Update()

        self.Mesh = tetrahedralizeFilter.GetOutput()

        if self.Mesh.GetSource():
            self.Mesh.GetSource().UnRegisterAllOutputs()
Example #15
0
    def triangulate(dataset):
        """
        Returns an all triangle mesh.  More complex polygons will be broken
        down into triangles.

        Returns
        -------
        mesh : vtki.UnstructuredGrid
            Mesh containing only triangles.

        """
        alg = vtk.vtkDataSetTriangleFilter()
        alg.SetInputData(dataset)
        alg.Update()
        return _get_output(alg)
Example #16
0
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: No input mesh.')

        tetrahedralizeFilter = vtk.vtkDataSetTriangleFilter()
        tetrahedralizeFilter.SetInputData(self.Mesh)
        tetrahedralizeFilter.TetrahedraOnlyOn()
        tetrahedralizeFilter.Update()

        self.Mesh = tetrahedralizeFilter.GetOutput()

        self.Volume = 0.0
        cellPoints = vtk.vtkIdList()
        for i in xrange(self.Mesh.GetNumberOfCells()):
            self.Mesh.GetCellPoints(i,cellPoints)
            point0 = self.Mesh.GetPoint(cellPoints.GetId(0))
            point1 = self.Mesh.GetPoint(cellPoints.GetId(1))
            point2 = self.Mesh.GetPoint(cellPoints.GetId(2))
            point3 = self.Mesh.GetPoint(cellPoints.GetId(3))
            self.Volume += abs(vtk.vtkTetra.ComputeVolume(point0,point1,point2,point3))
Example #17
0
def tetralize(dataset, tetsOnly=True):
    """Tetralize any type of dataset.
    If tetsOnly is True will cull all 1D and 2D cells from the output.

    Return a TetMesh.

    Example:

        .. code-block:: python

            from vedo import *
            ug = loadUnStructuredGrid(datadir+'ugrid.vtk')
            tmesh = tetralize(ug)
            tmesh.write('ugrid.vtu').show(axes=1)
    """
    tt = vtk.vtkDataSetTriangleFilter()
    tt.SetInputData(dataset)
    tt.SetTetrahedraOnly(tetsOnly)
    tt.Update()
    m = TetMesh(tt.GetOutput())
    return m
Example #18
0
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: No input mesh.')

        tetrahedralizeFilter = vtk.vtkDataSetTriangleFilter()
        tetrahedralizeFilter.SetInputData(self.Mesh)
        tetrahedralizeFilter.TetrahedraOnlyOn()
        tetrahedralizeFilter.Update()

        self.Mesh = tetrahedralizeFilter.GetOutput()

        self.Volume = 0.0
        cellPoints = vtk.vtkIdList()
        for i in range(self.Mesh.GetNumberOfCells()):
            self.Mesh.GetCellPoints(i, cellPoints)
            point0 = self.Mesh.GetPoint(cellPoints.GetId(0))
            point1 = self.Mesh.GetPoint(cellPoints.GetId(1))
            point2 = self.Mesh.GetPoint(cellPoints.GetId(2))
            point3 = self.Mesh.GetPoint(cellPoints.GetId(3))
            self.Volume += abs(
                vtk.vtkTetra.ComputeVolume(point0, point1, point2, point3))
Example #19
0
def Slice_VTK_data_to_VTK(inputFileName, outputFileName, point, normal,
                          resolution):
    reader = vtk.vtkXMLUnstructuredGridReader()
    reader.SetFileName(inputFileName)
    reader.Update()

    plane = vtk.vtkPlane()
    plane.SetOrigin(point)
    plane.SetNormal(normal)

    cutter = vtk.vtkCutter()
    cutter.SetCutFunction(plane)
    cutter.SetInputConnection(reader.GetOutputPort())
    cutter.Update()

    #Convert tht polydata structure générated by cutter into unstructured grid by triangulation
    triFilter = vtk.vtkDataSetTriangleFilter()
    triFilter.SetInputConnection(cutter.GetOutputPort())
    triFilter.Update()

    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetInputData(triFilter.GetOutput())
    writer.SetFileName(outputFileName)
    writer.Write()
Example #20
0
#
PIECE = 0
NUMBER_OF_PIECES = 8
reader = vtk.vtkImageReader()
reader.SetDataByteOrderToLittleEndian()
reader.SetDataExtent(0,63,0,63,1,64)
reader.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter")
reader.SetDataMask(0x7fff)
reader.SetDataSpacing(1.6,1.6,1.5)
clipper = vtk.vtkImageClip()
clipper.SetInputConnection(reader.GetOutputPort())
clipper.SetOutputWholeExtent(30,36,30,36,30,36)
clipper2 = vtk.vtkImageClip()
clipper2.SetInputConnection(reader.GetOutputPort())
clipper2.SetOutputWholeExtent(30,36,30,36,30,36)
tris = vtk.vtkDataSetTriangleFilter()
tris.SetInputConnection(clipper.GetOutputPort())
tris2 = vtk.vtkDataSetTriangleFilter()
tris2.SetInputConnection(clipper2.GetOutputPort())
geom = vtk.vtkGeometryFilter()
geom.SetInputConnection(tris.GetOutputPort())
pf = vtk.vtkProgrammableFilter()
pf.SetInputConnection(tris2.GetOutputPort())
def remove_ghosts():
    input = pf.GetInput()
    output = pf.GetOutputDataObject(0)
    output.ShallowCopy(input)
    output.RemoveGhostCells()
pf.SetExecuteMethod(remove_ghosts)
edges = vtk.vtkExtractEdges()
edges.SetInputConnection(pf.GetOutputPort())
Example #21
0
#
PIECE = 0
NUMBER_OF_PIECES = 8
reader = vtk.vtkImageReader()
reader.SetDataByteOrderToLittleEndian()
reader.SetDataExtent(0,63,0,63,1,64)
reader.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter")
reader.SetDataMask(0x7fff)
reader.SetDataSpacing(1.6,1.6,1.5)
clipper = vtk.vtkImageClip()
clipper.SetInputConnection(reader.GetOutputPort())
clipper.SetOutputWholeExtent(30,36,30,36,30,36)
clipper2 = vtk.vtkImageClip()
clipper2.SetInputConnection(reader.GetOutputPort())
clipper2.SetOutputWholeExtent(30,36,30,36,30,36)
tris = vtk.vtkDataSetTriangleFilter()
tris.SetInputConnection(clipper.GetOutputPort())
tris2 = vtk.vtkDataSetTriangleFilter()
tris2.SetInputConnection(clipper2.GetOutputPort())
geom = vtk.vtkGeometryFilter()
geom.SetInputConnection(tris.GetOutputPort())
pf = vtk.vtkProgrammableFilter()
pf.SetInputConnection(tris2.GetOutputPort())
def remove_ghosts():
    input = pf.GetInput()
    output = pf.GetOutputDataObject(0)
    output.ShallowCopy(input)
    output.RemoveGhostCells()
pf.SetExecuteMethod(remove_ghosts)
edges = vtk.vtkExtractEdges()
edges.SetInputConnection(pf.GetOutputPort())
    def Execute(self):

        if self.Surface == None:
            self.PrintError('Error: No input surface.')

        self.PrintLog("Capping surface")
        capper = vmtkscripts.vmtkSurfaceCapper()
        capper.Surface = self.Surface
        capper.Interactive = 0
        capper.Method = 'simple'
        capper.TriangleOutput = 0
        capper.CellEntityIdOffset = 1
        capper.Execute()

        self.PrintLog("Remeshing surface")
        remeshing = vmtkscripts.vmtkSurfaceRemeshing()
        remeshing.Surface = capper.Surface
        remeshing.CellEntityIdsArrayName = capper.CellEntityIdsArrayName
        remeshing.TargetEdgeLength = self.TargetEdgeLength
        remeshing.MaxEdgeLength = self.MaxEdgeLength
        remeshing.MinEdgeLength = self.MinEdgeLength
        remeshing.TargetEdgeLengthFactor = self.TargetEdgeLengthFactor
        remeshing.TargetEdgeLengthArrayName = self.TargetEdgeLengthArrayName
        remeshing.ElementSizeMode = self.ElementSizeMode
        remeshing.Execute()

        if self.BoundaryLayer:

            projection = vmtkscripts.vmtkSurfaceProjection()
            projection.Surface = remeshing.Surface
            projection.ReferenceSurface = capper.Surface
            projection.Execute()

            normals = vmtkscripts.vmtkSurfaceNormals()
            normals.Surface = projection.Surface
            normals.NormalsArrayName = 'Normals'
            normals.Execute()
    
            surfaceToMesh = vmtkscripts.vmtkSurfaceToMesh()
            surfaceToMesh.Surface = normals.Surface
            surfaceToMesh.Execute()

            self.PrintLog("Generating boundary layer")
            boundaryLayer = vmtkscripts.vmtkBoundaryLayer()
            boundaryLayer.Mesh = surfaceToMesh.Mesh
            boundaryLayer.WarpVectorsArrayName = 'Normals'
            boundaryLayer.NegateWarpVectors = True
            boundaryLayer.ThicknessArrayName = self.TargetEdgeLengthArrayName
            if self.ElementSizeMode == 'edgelength':
                boundaryLayer.ConstantThickness = True
            else: 
                boundaryLayer.ConstantThickness = False
            boundaryLayer.IncludeSurfaceCells = 0
            boundaryLayer.NumberOfSubLayers = self.NumberOfSubLayers
            boundaryLayer.SubLayerRatio = 0.5
            boundaryLayer.Thickness = self.BoundaryLayerThicknessFactor * self.TargetEdgeLength
            boundaryLayer.ThicknessRatio = self.BoundaryLayerThicknessFactor * self.TargetEdgeLengthFactor
            boundaryLayer.MaximumThickness = self.BoundaryLayerThicknessFactor * self.MaxEdgeLength
            boundaryLayer.Execute()

            cellEntityIdsArray = vtk.vtkIntArray()
            cellEntityIdsArray.SetName(self.CellEntityIdsArrayName)
            cellEntityIdsArray.SetNumberOfTuples(boundaryLayer.Mesh.GetNumberOfCells())
            cellEntityIdsArray.FillComponent(0,0.0)
            boundaryLayer.Mesh.GetCellData().AddArray(cellEntityIdsArray)

            innerCellEntityIdsArray = vtk.vtkIntArray()
            innerCellEntityIdsArray.SetName(self.CellEntityIdsArrayName)
            innerCellEntityIdsArray.SetNumberOfTuples(boundaryLayer.InnerSurfaceMesh.GetNumberOfCells())
            innerCellEntityIdsArray.FillComponent(0,0.0)
            boundaryLayer.InnerSurfaceMesh.GetCellData().AddArray(cellEntityIdsArray)

            meshToSurface = vmtkscripts.vmtkMeshToSurface()
            meshToSurface.Mesh = boundaryLayer.InnerSurfaceMesh
            meshToSurface.Execute()

            self.PrintLog("Computing sizing function")
            sizingFunction = vtkvmtk.vtkvmtkPolyDataSizingFunction()
            sizingFunction.SetInput(meshToSurface.Surface)
            sizingFunction.SetSizingFunctionArrayName(self.SizingFunctionArrayName)
            sizingFunction.SetScaleFactor(self.VolumeElementScaleFactor)
            sizingFunction.Update()

            surfaceToMesh2 = vmtkscripts.vmtkSurfaceToMesh()
            surfaceToMesh2.Surface = sizingFunction.GetOutput()
            surfaceToMesh2.Execute()

            self.PrintLog("Generating volume mesh")
            tetgen = vmtkscripts.vmtkTetGen()
            tetgen.Mesh = surfaceToMesh2.Mesh
            tetgen.GenerateCaps = 0
            tetgen.UseSizingFunction = 1
            tetgen.SizingFunctionArrayName = self.SizingFunctionArrayName
            tetgen.CellEntityIdsArrayName = self.CellEntityIdsArrayName
            tetgen.Order = 1
            tetgen.Quality = 1
            tetgen.PLC = 1
            tetgen.NoBoundarySplit = 1
            tetgen.RemoveSliver = 1
            tetgen.OutputSurfaceElements = 0
            tetgen.OutputVolumeElements = 1
            tetgen.Execute()

            if tetgen.Mesh.GetNumberOfCells() == 0 and surfaceToMesh.Mesh.GetNumberOfCells() > 0:
                self.PrintLog('An error occurred during tetrahedralization. Will only output surface mesh and boundary layer.')

            appendFilter = vtkvmtk.vtkvmtkAppendFilter()
            appendFilter.AddInput(surfaceToMesh.Mesh)
            appendFilter.AddInput(boundaryLayer.Mesh)
            appendFilter.AddInput(tetgen.Mesh)
            appendFilter.Update()

            self.Mesh = appendFilter.GetOutput()

        else:

            self.PrintLog("Computing sizing function")
            sizingFunction = vtkvmtk.vtkvmtkPolyDataSizingFunction()
            sizingFunction.SetInput(remeshing.Surface)
            sizingFunction.SetSizingFunctionArrayName(self.SizingFunctionArrayName)
            sizingFunction.SetScaleFactor(self.VolumeElementScaleFactor)
            sizingFunction.Update()
    
            self.PrintLog("Converting surface to mesh")
            surfaceToMesh = vmtkscripts.vmtkSurfaceToMesh()
            surfaceToMesh.Surface = sizingFunction.GetOutput()
            surfaceToMesh.Execute()

            self.PrintLog("Generating volume mesh")
            tetgen = vmtkscripts.vmtkTetGen()
            tetgen.Mesh = surfaceToMesh.Mesh
            tetgen.GenerateCaps = 0
            tetgen.UseSizingFunction = 1
            tetgen.SizingFunctionArrayName = self.SizingFunctionArrayName
            tetgen.CellEntityIdsArrayName = self.CellEntityIdsArrayName
            tetgen.Order = 1
            tetgen.Quality = 1
            tetgen.PLC = 1
            tetgen.NoBoundarySplit = 1
            tetgen.RemoveSliver = 1
            tetgen.OutputSurfaceElements = 1
            tetgen.OutputVolumeElements = 1
            tetgen.Execute()

            self.Mesh = tetgen.Mesh

            if self.Mesh.GetNumberOfCells() == 0 and surfaceToMesh.Mesh.GetNumberOfCells() > 0:
                self.PrintLog('An error occurred during tetrahedralization. Will only output surface mesh.')
                self.Mesh = surfaceToMesh.Mesh

        if self.Tetrahedralize:

            tetrahedralize = vtk.vtkDataSetTriangleFilter()
            tetrahedralize.SetInput(self.Mesh)
            tetrahedralize.Update()

            self.Mesh = tetrahedralize.GetOutput()
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: no Mesh.')

##        if (self.FOVNormal != [0.0, 0.0, 1.0]):
##                    
##            translation = [-self.FOVCenter[0], -self.FOVCenter[1], -self.FOVCenter[2]]
##    
##            referenceNormal = [0.0, 0.0, 1.0]
##            rotationAxis = [0.0, 0.0, 0.0]
##            vtk.vtkMath.Normalize(self.FOVNormal)
##            vtk.vtkMath.Cross(self.FOVNormal,referenceNormal,rotationAxis)
##            angle = self.AngleBetweenNormals(referenceNormal,self.FOVNormal) / vtk.vtkMath.Pi() * 180.0
##        
##            transform = vtk.vtkTransform()
##            transform.PostMultiply()
##            transform.Translate(translation)
##            transform.RotateWXYZ(angle,rotationAxis)
##            transform.Translate(self.FOVCenter)
##    
##            transformFilter = vtk.vtkTransformFilter()
##            transformFilter.SetInput(self.Mesh)
##            transformFilter.SetTransform(transform)
##            transformFilter.Update()
##            
##            acquiredMesh = transformFilter.GetOutput()

        if (self.KSpaceDimensionality == 3) or not self.SliceModel:

            origin = [self.FOVCenter[0] - self.FOV[0]/2.0,
                      self.FOVCenter[1] - self.FOV[1]/2.0,
                      self.FOVCenter[2] - self.FOV[2]/2.0]

            spacing = [self.FOV[0] / self.MatrixSize[0],
                       self.FOV[1] / self.MatrixSize[1],
                       self.FOV[2] / self.MatrixSize[2]]

            self.KSpace = self.AcquireKSpace(self.Mesh,origin,spacing)

        elif self.KSpaceDimensionality == 2:
            
            kSpaceAppend = vtk.vtkImageAppend()
            kSpaceAppend.SetAppendAxis(2)

            sliceLocations = []
            sliceLocation = self.FOVCenter[2] - self.FOV[2]/2.0
            while (sliceLocation < self.FOVCenter[2] + self.FOV[2]/2.0):
                sliceLocations.append(sliceLocation)
                sliceLocation += self.SliceSpacing

            spacing = [self.FOV[0] / self.MatrixSize[0],
                       self.FOV[1] / self.MatrixSize[1],
                       self.FOV[2] / self.MatrixSize[2]]
            
            bounds = self.Mesh.GetBounds()
           
            for sliceLocation in sliceLocations:

                self.PrintLog("Processing slice at" + float(sliceLocation))

                origin = [self.FOVCenter[0] - self.FOV[0]/2.0,
                          self.FOVCenter[1] - self.FOV[1]/2.0,
                          sliceLocation]
                
                clipper1 = vtk.vtkClipDataSet()
                clipper1.SetInput(self.Mesh)
                clipper1.InsideOutOff()
                
                plane1 = vtk.vtkPlane()
                plane1.SetNormal(0.0,0.0,1.0)
                plane1.SetOrigin(0.0,0.0,sliceLocation - self.SliceThickness / 2.0)

                clipper1.SetClipFunction(plane1)
                clipper1.Update()

                clipper2 = vtk.vtkClipDataSet()
                clipper2.SetInput(clipper1.GetOutput())
                clipper2.InsideOutOn()
                
                plane2 = vtk.vtkPlane()
                plane2.SetNormal(0.0,0.0,1.0)
                plane2.SetOrigin(0.0,0.0,sliceLocation + self.SliceThickness / 2.0)

                clipper2.SetClipFunction(plane2)
                clipper2.Update()

                clipper2Bounds = clipper2.GetOutput().GetBounds()

                cleaner = vtk.vtkExtractUnstructuredGrid()
                cleaner.SetInput(clipper2.GetOutput())
                cleaner.ExtentClippingOn()
                cleaner.SetExtent(clipper2Bounds[0],clipper2Bounds[1],
                                  clipper2Bounds[2],clipper2Bounds[3],
                                  sliceLocation-self.SliceThickness/2.0,sliceLocation+self.SliceThickness/2.0)
                cleaner.Update()

                tetraFilter = vtk.vtkDataSetTriangleFilter()
                tetraFilter.SetInput(cleaner.GetOutput())
                tetraFilter.Update()

                sliceMesh = tetraFilter.GetOutput()

                self.PrintLog("Number of integration elements:" + int(sliceMesh.GetNumberOfCells()))

                sliceKSpace = self.AcquireKSpace(sliceMesh,origin,spacing)

                kSpaceAppend.AddInput(sliceKSpace)
                
            kSpaceAppend.Update()
            
            self.KSpace = self.ComputeKSpaceOperation(kSpaceAppend.GetOutput())
pd2cd.Update()
timer.StopTimer()
time = timer.GetElapsedTime()
print("Point Data To Cell Data (Structured): {0}".format(time))

# Convert to unstructured grid using threshold hack (side effect is
# conversion to vtkUnstructuredGrid)
extract = vtk.vtkThreshold()
extract.SetInputConnection(ele.GetOutputPort())
extract.SetThresholdFunction(vtk.vtkThreshold.THRESHOLD_BETWEEN)
extract.SetLowerThreshold(-10000.0)
extract.SetUpperThreshold(10000.0)
extract.Update()

# Create tests
tetras = vtk.vtkDataSetTriangleFilter()
tetras.SetInputConnection(extract.GetOutputPort())

if genHexes:
    output = extract.GetOutput()
    print("Processing {0} hexes".format(
        extract.GetOutput().GetNumberOfCells()))
else:
    tetras.Update()
    output = tetras.GetOutput()
    print("Processing {0} tets".format(tetras.GetOutput().GetNumberOfCells()))

# Now process the data
pd2cd2 = vtk.vtkPointDataToCellData()
pd2cd2.SetInputData(output)
pd2cd2.SetCategoricalData(catData)
Example #25
0
from vtk.util.misc import vtkGetDataRoot

VTK_DATA_ROOT = vtkGetDataRoot()

math = vtk.vtkMath()
math.RandomSeed(22)

pl3d = vtk.vtkMultiBlockPLOT3DReader()
pl3d.SetXYZFileName(VTK_DATA_ROOT + "/Data/combxyz.bin")
pl3d.SetQFileName(VTK_DATA_ROOT + "/Data/combq.bin")
pl3d.SetScalarFunctionNumber(100)
pl3d.Update()

output = pl3d.GetOutput().GetBlock(0)

dst = vtk.vtkDataSetTriangleFilter()
dst.SetInputData(output)

extract = vtk.vtkExtractUnstructuredGridPiece()
extract.SetInputConnection(dst.GetOutputPort())

cf = vtk.vtkContourFilter()
cf.SetInputConnection(extract.GetOutputPort())
cf.SetValue(0, 0.24)

pdn = vtk.vtkPolyDataNormals()
pdn.SetInputConnection(cf.GetOutputPort())

ps = vtk.vtkPieceScalars()
ps.SetInputConnection(pdn.GetOutputPort())
Example #26
0
def GetSource(dataType):
    s = vtk.vtkRTAnalyticSource()
    # Fake serial source
    if rank == 0:
        s.Update()

    if dataType == 'ImageData':
        return s.GetOutput()

    elif dataType == 'UnstructuredGrid':
        dst = vtk.vtkDataSetTriangleFilter()
        dst.SetInputData(s.GetOutput())
        dst.Update()
        return dst.GetOutput()

    elif dataType == 'RectilinearGrid':

        input = s.GetOutput()

        rg = vtk.vtkRectilinearGrid()
        rg.SetExtent(input.GetExtent())
        dims = input.GetDimensions()
        spacing = input.GetSpacing()

        x = vtk.vtkFloatArray()
        x.SetNumberOfTuples(dims[0])
        for i in range(dims[0]):
            x.SetValue(i, spacing[0]*i)

        y = vtk.vtkFloatArray()
        y.SetNumberOfTuples(dims[1])
        for i in range(dims[1]):
            y.SetValue(i, spacing[1]*i)

        z = vtk.vtkFloatArray()
        z.SetNumberOfTuples(dims[2])
        for i in range(dims[2]):
            z.SetValue(i, spacing[2]*i)

        rg.SetXCoordinates(x)
        rg.SetYCoordinates(y)
        rg.SetZCoordinates(z)

        rg.GetPointData().ShallowCopy(input.GetPointData())

        return rg

    elif dataType == 'StructuredGrid':

        input = s.GetOutput()

        sg = vtk.vtkStructuredGrid()
        sg.SetExtent(input.GetExtent())
        pts = vtk.vtkPoints()
        sg.SetPoints(pts)
        npts = input.GetNumberOfPoints()
        for i in xrange(npts):
            pts.InsertNextPoint(input.GetPoint(i))
        sg.GetPointData().ShallowCopy(input.GetPointData())

        return sg
   polydatawriter.SetInput(polydata)
   polydatawriter.Update()


DiffusingTipLength  =  100.
DiffusingTipRadius  =  10.

vtkCylinder = vtk.vtkCylinderSource()
vtkCylinder.SetHeight(DiffusingTipLength ); 
vtkCylinder.SetRadius(DiffusingTipRadius );
vtkCylinder.SetCenter(0.0, 0.0, 0.0);
vtkCylinder.SetResolution(16);
vtkCylinder.Update()

# create 3d model
trianglefilter = vtk.vtkDataSetTriangleFilter()
trianglefilter.SetInput(vtkCylinder.GetOutput() )

## cylinderdata = vtkCylinder.GetOutput()
## numpoints = cylinderdata.GetNumberOfPoints()
## 
## # create 3d surface
## # The points to be triangulated are generated randomly in the unit
## # cube located at the origin. The points are then associated with a
## # vtkPolyData.
## math = vtk.vtkMath()
## points = vtk.vtkPoints()
## pointcounter=0
## for iii in range(numpoints ):
##   (xx,yy,zz) =  cylinderdata.GetPoint(iii)
##   for  jjj in range(1,6):
Example #28
0
    def Execute(self):

        if self.Mesh == None:
            self.PrintError('Error: no Mesh.')


##        if (self.FOVNormal != [0.0, 0.0, 1.0]):
##
##            translation = [-self.FOVCenter[0], -self.FOVCenter[1], -self.FOVCenter[2]]
##
##            referenceNormal = [0.0, 0.0, 1.0]
##            rotationAxis = [0.0, 0.0, 0.0]
##            vtk.vtkMath.Normalize(self.FOVNormal)
##            vtk.vtkMath.Cross(self.FOVNormal,referenceNormal,rotationAxis)
##            angle = self.AngleBetweenNormals(referenceNormal,self.FOVNormal) / vtk.vtkMath.Pi() * 180.0
##
##            transform = vtk.vtkTransform()
##            transform.PostMultiply()
##            transform.Translate(translation)
##            transform.RotateWXYZ(angle,rotationAxis)
##            transform.Translate(self.FOVCenter)
##
##            transformFilter = vtk.vtkTransformFilter()
##            transformFilter.SetInput(self.Mesh)
##            transformFilter.SetTransform(transform)
##            transformFilter.Update()
##
##            acquiredMesh = transformFilter.GetOutput()

        if (self.KSpaceDimensionality == 3) or not self.SliceModel:

            origin = [
                self.FOVCenter[0] - self.FOV[0] / 2.0,
                self.FOVCenter[1] - self.FOV[1] / 2.0,
                self.FOVCenter[2] - self.FOV[2] / 2.0
            ]

            spacing = [
                self.FOV[0] / self.MatrixSize[0],
                self.FOV[1] / self.MatrixSize[1],
                self.FOV[2] / self.MatrixSize[2]
            ]

            self.KSpace = self.AcquireKSpace(self.Mesh, origin, spacing)

        elif self.KSpaceDimensionality == 2:

            kSpaceAppend = vtk.vtkImageAppend()
            kSpaceAppend.SetAppendAxis(2)

            sliceLocations = []
            sliceLocation = self.FOVCenter[2] - self.FOV[2] / 2.0
            while (sliceLocation < self.FOVCenter[2] + self.FOV[2] / 2.0):
                sliceLocations.append(sliceLocation)
                sliceLocation += self.SliceSpacing

            spacing = [
                self.FOV[0] / self.MatrixSize[0],
                self.FOV[1] / self.MatrixSize[1],
                self.FOV[2] / self.MatrixSize[2]
            ]

            bounds = self.Mesh.GetBounds()

            for sliceLocation in sliceLocations:

                self.PrintLog("Processing slice at" + float(sliceLocation))

                origin = [
                    self.FOVCenter[0] - self.FOV[0] / 2.0,
                    self.FOVCenter[1] - self.FOV[1] / 2.0, sliceLocation
                ]

                clipper1 = vtk.vtkClipDataSet()
                clipper1.SetInput(self.Mesh)
                clipper1.InsideOutOff()

                plane1 = vtk.vtkPlane()
                plane1.SetNormal(0.0, 0.0, 1.0)
                plane1.SetOrigin(0.0, 0.0,
                                 sliceLocation - self.SliceThickness / 2.0)

                clipper1.SetClipFunction(plane1)
                clipper1.Update()

                clipper2 = vtk.vtkClipDataSet()
                clipper2.SetInput(clipper1.GetOutput())
                clipper2.InsideOutOn()

                plane2 = vtk.vtkPlane()
                plane2.SetNormal(0.0, 0.0, 1.0)
                plane2.SetOrigin(0.0, 0.0,
                                 sliceLocation + self.SliceThickness / 2.0)

                clipper2.SetClipFunction(plane2)
                clipper2.Update()

                clipper2Bounds = clipper2.GetOutput().GetBounds()

                cleaner = vtk.vtkExtractUnstructuredGrid()
                cleaner.SetInput(clipper2.GetOutput())
                cleaner.ExtentClippingOn()
                cleaner.SetExtent(clipper2Bounds[0], clipper2Bounds[1],
                                  clipper2Bounds[2], clipper2Bounds[3],
                                  sliceLocation - self.SliceThickness / 2.0,
                                  sliceLocation + self.SliceThickness / 2.0)
                cleaner.Update()

                tetraFilter = vtk.vtkDataSetTriangleFilter()
                tetraFilter.SetInput(cleaner.GetOutput())
                tetraFilter.Update()

                sliceMesh = tetraFilter.GetOutput()

                self.PrintLog("Number of integration elements:" +
                              int(sliceMesh.GetNumberOfCells()))

                sliceKSpace = self.AcquireKSpace(sliceMesh, origin, spacing)

                kSpaceAppend.AddInput(sliceKSpace)

            kSpaceAppend.Update()

            self.KSpace = self.ComputeKSpaceOperation(kSpaceAppend.GetOutput())
Example #29
0
    def Execute(self):

        if self.Surface == None:
            self.PrintError('Error: No input surface.')

        wallEntityOffset = 1

        if self.SkipCapping:
            self.PrintLog("Not capping surface")
            surface = self.Surface
        else:
            self.PrintLog("Capping surface")
            capper = vmtkscripts.vmtkSurfaceCapper()
            capper.Surface = self.Surface
            capper.Interactive = 0
            capper.Method = self.CappingMethod
            capper.TriangleOutput = 0
            capper.CellEntityIdOffset = 1
            capper.CellEntityIdOffset = wallEntityOffset
            capper.Execute()
            surface = capper.Surface

        if self.SkipRemeshing:
            remeshedSurface = surface
        else:
            self.PrintLog("Remeshing surface")
            remeshing = vmtkscripts.vmtkSurfaceRemeshing()
            remeshing.Surface = surface
            remeshing.CellEntityIdsArrayName = self.CellEntityIdsArrayName
            remeshing.TargetEdgeLength = self.TargetEdgeLength
            remeshing.MaxEdgeLength = self.MaxEdgeLength
            remeshing.MinEdgeLength = self.MinEdgeLength
            remeshing.TargetEdgeLengthFactor = self.TargetEdgeLengthFactor
            remeshing.TargetEdgeLengthArrayName = self.TargetEdgeLengthArrayName
            remeshing.ElementSizeMode = self.ElementSizeMode
            if self.RemeshCapsOnly:
                remeshing.ExcludeEntityIds = [wallEntityOffset]
            remeshing.Execute()
            remeshedSurface = remeshing.Surface

        if self.BoundaryLayer:

            projection = vmtkscripts.vmtkSurfaceProjection()
            projection.Surface = remeshedSurface
            projection.ReferenceSurface = surface
            projection.Execute()

            normals = vmtkscripts.vmtkSurfaceNormals()
            normals.Surface = projection.Surface
            normals.NormalsArrayName = 'Normals'
            normals.Execute()

            surfaceToMesh = vmtkscripts.vmtkSurfaceToMesh()
            surfaceToMesh.Surface = normals.Surface
            surfaceToMesh.Execute()

            self.PrintLog("Generating boundary layer")
            boundaryLayer = vmtkscripts.vmtkBoundaryLayer()
            boundaryLayer.Mesh = surfaceToMesh.Mesh
            boundaryLayer.WarpVectorsArrayName = 'Normals'
            boundaryLayer.NegateWarpVectors = True
            boundaryLayer.ThicknessArrayName = self.TargetEdgeLengthArrayName
            if self.ElementSizeMode == 'edgelength':
                boundaryLayer.ConstantThickness = True
            else:
                boundaryLayer.ConstantThickness = False
            boundaryLayer.IncludeSurfaceCells = 0
            boundaryLayer.NumberOfSubLayers = self.NumberOfSubLayers
            boundaryLayer.SubLayerRatio = 0.5
            boundaryLayer.Thickness = self.BoundaryLayerThicknessFactor * self.TargetEdgeLength
            boundaryLayer.ThicknessRatio = self.BoundaryLayerThicknessFactor * self.TargetEdgeLengthFactor
            boundaryLayer.MaximumThickness = self.BoundaryLayerThicknessFactor * self.MaxEdgeLength
            boundaryLayer.Execute()

            cellEntityIdsArray = vtk.vtkIntArray()
            cellEntityIdsArray.SetName(self.CellEntityIdsArrayName)
            cellEntityIdsArray.SetNumberOfTuples(
                boundaryLayer.Mesh.GetNumberOfCells())
            cellEntityIdsArray.FillComponent(0, 0.0)
            boundaryLayer.Mesh.GetCellData().AddArray(cellEntityIdsArray)

            innerCellEntityIdsArray = vtk.vtkIntArray()
            innerCellEntityIdsArray.SetName(self.CellEntityIdsArrayName)
            innerCellEntityIdsArray.SetNumberOfTuples(
                boundaryLayer.InnerSurfaceMesh.GetNumberOfCells())
            innerCellEntityIdsArray.FillComponent(0, 0.0)
            boundaryLayer.InnerSurfaceMesh.GetCellData().AddArray(
                cellEntityIdsArray)

            meshToSurface = vmtkscripts.vmtkMeshToSurface()
            meshToSurface.Mesh = boundaryLayer.InnerSurfaceMesh
            meshToSurface.Execute()

            self.PrintLog("Computing sizing function")
            sizingFunction = vtkvmtk.vtkvmtkPolyDataSizingFunction()
            sizingFunction.SetInput(meshToSurface.Surface)
            sizingFunction.SetSizingFunctionArrayName(
                self.SizingFunctionArrayName)
            sizingFunction.SetScaleFactor(self.VolumeElementScaleFactor)
            sizingFunction.Update()

            surfaceToMesh2 = vmtkscripts.vmtkSurfaceToMesh()
            surfaceToMesh2.Surface = sizingFunction.GetOutput()
            surfaceToMesh2.Execute()

            self.PrintLog("Generating volume mesh")
            tetgen = vmtkscripts.vmtkTetGen()
            tetgen.Mesh = surfaceToMesh2.Mesh
            tetgen.GenerateCaps = 0
            tetgen.UseSizingFunction = 1
            tetgen.SizingFunctionArrayName = self.SizingFunctionArrayName
            tetgen.CellEntityIdsArrayName = self.CellEntityIdsArrayName
            tetgen.Order = 1
            tetgen.Quality = 1
            tetgen.PLC = 1
            tetgen.NoBoundarySplit = 1
            tetgen.RemoveSliver = 1
            tetgen.OutputSurfaceElements = 0
            tetgen.OutputVolumeElements = 1
            tetgen.Execute()

            if tetgen.Mesh.GetNumberOfCells(
            ) == 0 and surfaceToMesh.Mesh.GetNumberOfCells() > 0:
                self.PrintLog(
                    'An error occurred during tetrahedralization. Will only output surface mesh and boundary layer.'
                )

            appendFilter = vtkvmtk.vtkvmtkAppendFilter()
            appendFilter.AddInput(surfaceToMesh.Mesh)
            appendFilter.AddInput(boundaryLayer.Mesh)
            appendFilter.AddInput(tetgen.Mesh)
            appendFilter.Update()

            self.Mesh = appendFilter.GetOutput()

        else:

            self.PrintLog("Computing sizing function")
            sizingFunction = vtkvmtk.vtkvmtkPolyDataSizingFunction()
            sizingFunction.SetInput(remeshedSurface)
            sizingFunction.SetSizingFunctionArrayName(
                self.SizingFunctionArrayName)
            sizingFunction.SetScaleFactor(self.VolumeElementScaleFactor)
            sizingFunction.Update()

            self.PrintLog("Converting surface to mesh")
            surfaceToMesh = vmtkscripts.vmtkSurfaceToMesh()
            surfaceToMesh.Surface = sizingFunction.GetOutput()
            surfaceToMesh.Execute()

            self.PrintLog("Generating volume mesh")
            tetgen = vmtkscripts.vmtkTetGen()
            tetgen.Mesh = surfaceToMesh.Mesh
            tetgen.GenerateCaps = 0
            tetgen.UseSizingFunction = 1
            tetgen.SizingFunctionArrayName = self.SizingFunctionArrayName
            tetgen.CellEntityIdsArrayName = self.CellEntityIdsArrayName
            tetgen.Order = 1
            tetgen.Quality = 1
            tetgen.PLC = 1
            tetgen.NoBoundarySplit = 1
            tetgen.RemoveSliver = 1
            tetgen.OutputSurfaceElements = 1
            tetgen.OutputVolumeElements = 1
            tetgen.Execute()

            self.Mesh = tetgen.Mesh

            if self.Mesh.GetNumberOfCells(
            ) == 0 and surfaceToMesh.Mesh.GetNumberOfCells() > 0:
                self.PrintLog(
                    'An error occurred during tetrahedralization. Will only output surface mesh.'
                )
                self.Mesh = surfaceToMesh.Mesh

        if self.Tetrahedralize:

            tetrahedralize = vtk.vtkDataSetTriangleFilter()
            tetrahedralize.SetInput(self.Mesh)
            tetrahedralize.Update()

            self.Mesh = tetrahedralize.GetOutput()

        self.RemeshedSurface = remeshedSurface
Example #30
0
    polydatawriter.SetInput(polydata)
    polydatawriter.Update()


DiffusingTipLength = 100.
DiffusingTipRadius = 10.

vtkCylinder = vtk.vtkCylinderSource()
vtkCylinder.SetHeight(DiffusingTipLength)
vtkCylinder.SetRadius(DiffusingTipRadius)
vtkCylinder.SetCenter(0.0, 0.0, 0.0)
vtkCylinder.SetResolution(16)
vtkCylinder.Update()

# create 3d model
trianglefilter = vtk.vtkDataSetTriangleFilter()
trianglefilter.SetInput(vtkCylinder.GetOutput())

## cylinderdata = vtkCylinder.GetOutput()
## numpoints = cylinderdata.GetNumberOfPoints()
##
## # create 3d surface
## # The points to be triangulated are generated randomly in the unit
## # cube located at the origin. The points are then associated with a
## # vtkPolyData.
## math = vtk.vtkMath()
## points = vtk.vtkPoints()
## pointcounter=0
## for iii in range(numpoints ):
##   (xx,yy,zz) =  cylinderdata.GetPoint(iii)
##   for  jjj in range(1,6):
Example #31
0
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()


math = vtk.vtkMath()
math.RandomSeed(22)

pl3d = vtk.vtkMultiBlockPLOT3DReader()
pl3d.SetXYZFileName(VTK_DATA_ROOT + "/Data/combxyz.bin")
pl3d.SetQFileName(VTK_DATA_ROOT + "/Data/combq.bin")
pl3d.SetScalarFunctionNumber(100)
pl3d.Update()

output = pl3d.GetOutput().GetBlock(0)

dst = vtk.vtkDataSetTriangleFilter()
dst.SetInputData(output)

extract = vtk.vtkExtractUnstructuredGridPiece()
extract.SetInputConnection(dst.GetOutputPort())

cf = vtk.vtkContourFilter()
cf.SetInputConnection(extract.GetOutputPort())
cf.SetValue(0, 0.24)

pdn = vtk.vtkPolyDataNormals()
pdn.SetInputConnection(cf.GetOutputPort())

ps = vtk.vtkPieceScalars()
ps.SetInputConnection(pdn.GetOutputPort())
Example #32
0
    def __init__(self, parent=None):

        super(VTK_Widget1, self).__init__(parent)
        self.source_is_connected = False
        
        # vtk to point data
        self.c2p = vtk.vtkCellDataToPointData()
        self.opacityTransferFunction = vtk.vtkPiecewiseFunction()
        self.colorTransferFunction = vtk.vtkColorTransferFunction()

        # create a volume property for describing how the data will look
        self.volumeProperty = vtk.vtkVolumeProperty()
        self.volumeProperty.SetColor(self.colorTransferFunction)
        self.volumeProperty.SetScalarOpacity(self.opacityTransferFunction)
        self.volumeProperty.ShadeOn()
        self.volumeProperty.SetInterpolationTypeToLinear()
        
        # convert to unstructured grid volume
        self.triangleFilter = vtk.vtkDataSetTriangleFilter()
        self.triangleFilter.TetrahedraOnlyOn()
        self.triangleFilter.SetInputConnection(self.c2p.GetOutputPort())

        # create a ray cast mapper
        self.compositeFunction = vtk.vtkUnstructuredGridBunykRayCastFunction()
        self.volumeMapper = vtk.vtkUnstructuredGridVolumeRayCastMapper()
        self.volumeMapper.SetRayCastFunction(self.compositeFunction)
        self.volumeMapper.SetInputConnection(self.triangleFilter.GetOutputPort())
        
        # create a volume
        self.volume = vtk.vtkVolume()
        self.volume.SetMapper(self.volumeMapper)
        self.volume.SetProperty(self.volumeProperty)
        self.volume.VisibilityOff()
        
        # create the VTK widget for rendering
        self.vtkw=QVTKRenderWindowInteractor(self)
        self.ren = vtk.vtkRenderer()
        self.vtkw.GetRenderWindow().AddRenderer(self.ren)
        self.ren.AddVolume(self.volume)
        
        self.alphaSlider = QSlider(Qt.Horizontal)
        self.alphaSlider.setValue(50)
        self.alphaSlider.setRange(0,100)
        self.alphaSlider.setTickPosition(QSlider.NoTicks) 
        self.connect(self.alphaSlider,SIGNAL("valueChanged(int)"),self.AdjustAlpha)
        
        self.alphaLabel = QLabel("alpha: ")
        
        # layout manager
        self.layout = QVBoxLayout()
        self.layout2 = QHBoxLayout()
        self.layout2.addWidget(self.alphaLabel)
        self.layout2.addWidget(self.alphaSlider)
        self.layout.addWidget(self.vtkw)
        self.layout.addSpacing(34)
        self.layout.addLayout(self.layout2)
        
        self.setLayout(self.layout)
        
        # initialize the interactor
        self.vtkw.Initialize()
        self.vtkw.Start()
Example #33
0
def GetSource(dataType):
    s = vtk.vtkRTAnalyticSource()

    if dataType == 'ImageData':
        return s

    elif dataType == 'UnstructuredGrid':
        dst = vtk.vtkDataSetTriangleFilter()
        dst.SetInputConnection(s.GetOutputPort())
        return dst

    elif dataType == 'RectilinearGrid':
        s.Update()

        input = s.GetOutput()

        rg = vtk.vtkRectilinearGrid()
        rg.SetExtent(input.GetExtent())
        dims = input.GetDimensions()
        spacing = input.GetSpacing()

        x = vtk.vtkFloatArray()
        x.SetNumberOfTuples(dims[0])
        for i in range(dims[0]):
            x.SetValue(i, spacing[0] * i)

        y = vtk.vtkFloatArray()
        y.SetNumberOfTuples(dims[1])
        for i in range(dims[1]):
            y.SetValue(i, spacing[1] * i)

        z = vtk.vtkFloatArray()
        z.SetNumberOfTuples(dims[2])
        for i in range(dims[2]):
            z.SetValue(i, spacing[2] * i)

        rg.SetXCoordinates(x)
        rg.SetYCoordinates(y)
        rg.SetZCoordinates(z)

        rg.GetPointData().ShallowCopy(input.GetPointData())

        pf.SetInputData(rg)
        return pf

    elif dataType == 'StructuredGrid':
        s.Update()

        input = s.GetOutput()

        sg = vtk.vtkStructuredGrid()
        sg.SetExtent(input.GetExtent())
        pts = vtk.vtkPoints()
        sg.SetPoints(pts)
        npts = input.GetNumberOfPoints()
        for i in range(npts):
            pts.InsertNextPoint(input.GetPoint(i))
        sg.GetPointData().ShallowCopy(input.GetPointData())

        pf.SetInputData(sg)
        return pf
def GetSource(dataType):
    s = vtk.vtkRTAnalyticSource()

    if dataType == 'ImageData':
        return s

    elif dataType == 'UnstructuredGrid':
        dst = vtk.vtkDataSetTriangleFilter()
        dst.SetInputConnection(s.GetOutputPort())
        return dst

    elif dataType == 'RectilinearGrid':
        s.Update()

        input = s.GetOutput()

        rg = vtk.vtkRectilinearGrid()
        rg.SetExtent(input.GetExtent())
        dims = input.GetDimensions()
        spacing = input.GetSpacing()

        x = vtk.vtkFloatArray()
        x.SetNumberOfTuples(dims[0])
        for i in range(dims[0]):
            x.SetValue(i, spacing[0]*i)

        y = vtk.vtkFloatArray()
        y.SetNumberOfTuples(dims[1])
        for i in range(dims[1]):
            y.SetValue(i, spacing[1]*i)

        z = vtk.vtkFloatArray()
        z.SetNumberOfTuples(dims[2])
        for i in range(dims[2]):
            z.SetValue(i, spacing[2]*i)

        rg.SetXCoordinates(x)
        rg.SetYCoordinates(y)
        rg.SetZCoordinates(z)

        rg.GetPointData().ShallowCopy(input.GetPointData())

        pf.SetInputData(rg)
        return pf

    elif dataType == 'StructuredGrid':
        s.Update()

        input = s.GetOutput()

        sg = vtk.vtkStructuredGrid()
        sg.SetExtent(input.GetExtent())
        pts = vtk.vtkPoints()
        sg.SetPoints(pts)
        npts = input.GetNumberOfPoints()
        for i in range(npts):
            pts.InsertNextPoint(input.GetPoint(i))
        sg.GetPointData().ShallowCopy(input.GetPointData())

        pf.SetInputData(sg)
        return pf

    elif dataType == 'Table':
        s.Update()
        input = s.GetOutput()

        table = vtk.vtkTable()
        RTData = input.GetPointData().GetArray(0)
        nbTuples = RTData.GetNumberOfTuples()

        array = vtk.vtkFloatArray()
        array.SetName("RTData")
        array.SetNumberOfTuples(nbTuples)

        for i in range(0, nbTuples):
            array.SetTuple1(i, float(RTData.GetTuple1(i)))

        table.AddColumn(array)

        pf.SetInputData(table)
        return pf
Example #35
0
    def __init__(
        self,
        inputobj=None,
        c=('r', 'y', 'lg', 'lb', 'b'),  #('b','lb','lg','y','r')
        alpha=(0.5, 1),
        alphaUnit=1,
        mapper='tetra',
    ):

        BaseGrid.__init__(self)

        self.useArray = 0

        inputtype = str(type(inputobj))
        #printc('TetMesh inputtype', inputtype)

        ###################
        if inputobj is None:
            self._data = vtk.vtkUnstructuredGrid()

        elif isinstance(inputobj, vtk.vtkUnstructuredGrid):
            self._data = inputobj

        elif isinstance(inputobj, vtk.vtkRectilinearGrid):
            r2t = vtk.vtkRectilinearGridToTetrahedra()
            r2t.SetInputData(inputobj)
            r2t.RememberVoxelIdOn()
            r2t.SetTetraPerCellTo6()
            r2t.Update()
            self._data = r2t.GetOutput()

        elif isinstance(inputobj, vtk.vtkDataSet):
            r2t = vtk.vtkDataSetTriangleFilter()
            r2t.SetInputData(inputobj)
            #r2t.TetrahedraOnlyOn()
            r2t.Update()
            self._data = r2t.GetOutput()

        elif isinstance(inputobj, str):
            from vedo.io import download, loadUnStructuredGrid
            if "https://" in inputobj:
                inputobj = download(inputobj, verbose=False)
            ug = loadUnStructuredGrid(inputobj)
            tt = vtk.vtkDataSetTriangleFilter()
            tt.SetInputData(ug)
            tt.SetTetrahedraOnly(True)
            tt.Update()
            self._data = tt.GetOutput()

        elif utils.isSequence(inputobj):
            # if "ndarray" not in inputtype:
            #     inputobj = np.array(inputobj)
            self._data = self._buildtetugrid(inputobj[0], inputobj[1])

        ###################
        if 'tetra' in mapper:
            self._mapper = vtk.vtkProjectedTetrahedraMapper()
        elif 'ray' in mapper:
            self._mapper = vtk.vtkUnstructuredGridVolumeRayCastMapper()
        elif 'zs' in mapper:
            self._mapper = vtk.vtkUnstructuredGridVolumeZSweepMapper()
        elif isinstance(mapper, vtk.vtkMapper):
            self._mapper = mapper
        else:
            printc('Unknown mapper type', [mapper], c='r')
            raise RuntimeError()

        self._mapper.SetInputData(self._data)
        self.SetMapper(self._mapper)
        self.color(c).alpha(alpha)
        if alphaUnit:
            self.GetProperty().SetScalarOpacityUnitDistance(alphaUnit)

        # remember stuff:
        self._color = c
        self._alpha = alpha
        self._alphaUnit = alphaUnit
Example #36
0
    def __init__(
        self,
        inputobj=None,
        c=('r', 'y', 'lg', 'lb', 'b'),  #('b','lb','lg','y','r')
        alpha=(0.5, 1),
        alphaUnit=1,
        mapper='tetra',
    ):

        vtk.vtkVolume.__init__(self)
        ActorBase.__init__(self)

        self._ugrid = None

        self.useCells = True
        self.useArray = 0

        inputtype = str(type(inputobj))
        #printc('TetMesh inputtype', inputtype)

        ###################
        if inputobj is None:
            self._ugrid = vtk.vtkUnstructuredGrid()
        elif isinstance(inputobj, vtk.vtkUnstructuredGrid):
            self._ugrid = inputobj
        elif isinstance(inputobj, vtk.vtkRectilinearGrid):
            r2t = vtk.vtkRectilinearGridToTetrahedra()
            r2t.SetInputData(inputobj)
            r2t.RememberVoxelIdOn()
            r2t.SetTetraPerCellTo6()
            r2t.Update()
            self._ugrid = r2t.GetOutput()
        elif isinstance(inputobj, vtk.vtkDataSet):
            r2t = vtk.vtkDataSetTriangleFilter()
            r2t.SetInputData(inputobj)
            #r2t.TetrahedraOnlyOn()
            r2t.Update()
            self._ugrid = r2t.GetOutput()
        elif isinstance(inputobj, str):
            from vtkplotter.vtkio import loadUnStructuredGrid
            self._ugrid = loadUnStructuredGrid(inputobj)
        elif utils.isSequence(inputobj):
            if "ndarray" not in inputtype:
                inputobj = np.array(inputobj)
            self._ugrid = self._buildugrid(inputobj[0], inputobj[1])

        ###################
        if 'tetra' in mapper:
            self._mapper = vtk.vtkProjectedTetrahedraMapper()
        elif 'ray' in mapper:
            self._mapper = vtk.vtkUnstructuredGridVolumeRayCastMapper()
        elif 'zs' in mapper:
            self._mapper = vtk.vtkUnstructuredGridVolumeZSweepMapper()
        elif isinstance(mapper, vtk.vtkMapper):
            self._mapper = mapper
        else:
            printc('Unknown mapper type', [mapper], c=1)
            return

        self._mapper.SetInputData(self._ugrid)
        self.SetMapper(self._mapper)
        self.color(c).alpha(alpha)
        if alphaUnit:
            self.GetProperty().SetScalarOpacityUnitDistance(alphaUnit)

        # remember stuff:
        self._color = c
        self._alpha = alpha
        self._alphaUnit = alphaUnit