Beispiel #1
0
    def merge(self):
        merge_points = vtk.vtkMergePoints()
        merge_points.InitPointInsertion(self.points, self.points.GetBounds())
        id = vtk.reference(0)
        for i in range(self.vertice_number):
            merge_points.InsertUniquePoint(self.points.GetPoint(i), id)

        with open(self.files[self.Count], 'r') as f:
            for line in f.readlines():
                line = str.split(line, ' ')
                inserted = merge_points.InsertUniquePoint(
                    [float(line[0]),
                     float(line[1]),
                     float(line[2])], id)
                if inserted == 1:
                    self.vertice_number += 1

        self.points = merge_points.GetPoints()
        self.Count += 1
        renderers = self.interactor.GetRenderWindow().GetRenderers()
        renderers.InitTraversal()
        points_renderer = renderers.GetNextItem()
        points_renderer.RemoveActor(self.points_actor)
        self.points_actor = create_points_actor(points)
        points_renderer.AddActor(self.points_actor)

        surface_renderer = renderers.GetNextItem()
        surface_renderer.RemoveActor(self.surface_actor)
        self.surface_actor = create_surface_actor(points)
        surface_renderer.AddActor(self.surface_actor)
        self.interactor.GetRenderWindow().Render()
    def merge(self):
        merge_points = vtk.vtkMergePoints()
        merge_points.InitPointInsertion(self.points, self.points.GetBounds())
        id = vtk.reference(0)
        for i in range(self.vertice_number):
            merge_points.InsertUniquePoint(self.points.GetPoint(i), id)

        for i in range(self.Count,
                       min(self.Count + self.interval, len(self.vertices))):
            inserted = merge_points.InsertUniquePoint(self.vertices[i], id)
            if inserted == 1:
                self.vertice_number += 1

        if self.Count + self.interval < len(self.vertices):
            self.Count = self.Count + self.interval
        else:
            self.Count = len(self.vertices)

        self.points = merge_points.GetPoints()
        self.interactor.GetRenderWindow().GetRenderers().GetFirstRenderer(
        ).RemoveActor(self.actor)
        self.actor = create_points_actor(self.points)
        self.interactor.GetRenderWindow().GetRenderers().GetFirstRenderer(
        ).AddActor(self.actor)
        self.interactor.GetRenderWindow().Render()
Beispiel #3
0
def setVtkWidget(vtkWidget):

    colors = vtk.vtkNamedColors()

    # Create the RenderWindow, Renderer and Interactor.
    #

    ren1 = vtk.vtkRenderer()
    vtkWidget.GetRenderWindow().AddRenderer(ren1)

    iren = vtkWidget.GetRenderWindow().GetInteractor()

    reader = vtk.vtkMetaImageReader()
    reader.SetFileName('FullHead.mha')
    reader.Update()

    locator = vtk.vtkMergePoints()
    locator.SetDivisions(396, 396, 24)
    locator.SetNumberOfPointsPerBucket(1)
    locator.AutomaticOff()

    iso = vtk.vtkMarchingCubes()
    iso.SetInputConnection(reader.GetOutputPort())
    iso.ComputeGradientsOn()
    iso.ComputeScalarsOff()
    iso.SetValue(0, 1)
    iso.SetLocator(locator)

    isoMapper = vtk.vtkPolyDataMapper()
    isoMapper.SetInputConnection(iso.GetOutputPort())
    isoMapper.ScalarVisibilityOff()

    isoActor = vtk.vtkActor()
    isoActor.SetMapper(isoMapper)
    isoActor.GetProperty().SetColor(colors.GetColor3d("Wheat"))

    outline = vtk.vtkOutlineFilter()
    outline.SetInputConnection(reader.GetOutputPort())

    outlineMapper = vtk.vtkPolyDataMapper()
    outlineMapper.SetInputConnection(outline.GetOutputPort())

    outlineActor = vtk.vtkActor()
    outlineActor.SetMapper(outlineMapper)

    # Add the actors to the renderer, set the background and size.
    #
    ren1.AddActor(outlineActor)
    ren1.AddActor(isoActor)
    ren1.SetBackground(colors.GetColor3d("Black"))
    ren1.GetActiveCamera().SetFocalPoint(0, 0, 0)
    ren1.GetActiveCamera().SetPosition(0, -1, 0)
    ren1.GetActiveCamera().SetViewUp(0, 0, -1)
    ren1.ResetCamera()
    ren1.GetActiveCamera().Dolly(1.5)
    ren1.ResetCameraClippingRange()

    iren.Initialize()
Beispiel #4
0
def merge(feature_points_path, segment_points_path, merge_points_path):
    '''
    feature_points_path:str, 特征点的文件路径
    segment_points_path:str,  分割后网格的顶点的文件路径
    merge_points_path:str, 合并后的顶点存储路径
    '''
    # 读取feature_points
    vertice_number = 0
    feature_vertices = []
    with open(feature_points_path, 'r') as f1:
        for line in f1.readlines():
            line = str.split(line, ' ')
            vertice_number = vertice_number + 1
            feature_vertices.append(
                [float(line[0]),
                 float(line[1]),
                 float(line[2])])
    points = vtk.vtkPoints()
    points.SetNumberOfPoints(vertice_number)
    for i in range(vertice_number):
        points.SetPoint(i, feature_vertices[i])
    # 初始化合并的顶点集
    merge_points = vtk.vtkMergePoints()
    # merge_points.SetDataSet(points)
    merge_points.InitPointInsertion(points, points.GetBounds())
    id = vtk.reference(0)
    for i in range(vertice_number):
        merge_points.InsertUniquePoint(points.GetPoint(i), id)

    vertice_number = 0
    segment_points = []
    with open(segment_points_path, 'r') as f2:
        for line in f2.readlines():
            line = str.split(line, ' ')
            if line[0] == 'v':
                segment_points.append(
                    [float(line[1]),
                     float(line[2]),
                     float(line[3])])
                vertice_number = vertice_number + 1
            else:
                break
    id = vtk.reference(0)
    replated_points_id = []
    for i in range(vertice_number):
        inserted = merge_points.InsertUniquePoint(segment_points[i], id)
        if inserted == 0:
            replated_points_id.append([id, i])

    result = merge_points.GetPoints()
    with open(merge_points_path, 'w') as f3:
        for i in range(result.GetNumberOfPoints()):
            pointTemp = result.GetPoint(i)
            f3.write("%f %f %f\n" % (pointTemp[0], pointTemp[1], pointTemp[2]))

    print("Replicated points number: %d" % len(replated_points_id))
    return len(replated_points_id)
def create_merge_points(program_data):
    merge_points = vtk.vtkMergePoints()
    points = vtk.vtkPoints()
    top_level_box = program_data['grid_desc']['create_box']
    bounds = []
    bounds.append(top_level_box['xlo'])
    bounds.append(top_level_box['xhi'])
    bounds.append(top_level_box['ylo'])
    bounds.append(top_level_box['yhi'])
    bounds.append(top_level_box['zlo'])
    bounds.append(top_level_box['zhi'])
    merge_points.InitPointInsertion(points, bounds)
    return merge_points
    def OnEndHeader(self):
        """Get ready to add blocks
        """
        self.TotalFluidSites = self.Domain.BlockFluidSiteCounts.sum()

        # Efficiently add the voxel corner points
        self.Locator = vtk.vtkMergePoints()
        self.Points = vtk.vtkPoints()

        # Compute the bounds of the voxel corner points
        # Initially in a shape == (3,2) array [[0, nSites[x]], ... ]
        bounds = np.concatenate(
            (np.zeros(3, dtype=int), self.Domain.SiteCounts)).reshape(
                (2, 3)).transpose()
        # shift half a voxel down, scale and then translate
        bounds = self.Domain.VoxelSize*(bounds - 0.5) + \
            self.Domain.Origin[:, np.newaxis]

        # Since we know how the points will be arranged, use that information
        # to tune the vtkMergePoints
        self.Locator.SetDivisions(*self.Domain.BlockCounts)
        self.Locator.InitPointInsertion(self.Points, bounds.flatten(),
                                        self.TotalFluidSites)

        # This is what we're trying to construct. Allocate data (we know how
        # many cells (= TotalFluidSites) but not how many points, as we don't
        # know the number of surface sites.
        self.Grid = vtk.vtkUnstructuredGrid()
        self.Grid.Allocate(self.TotalFluidSites, 1000)
        self.Grid.SetPoints(self.Points)

        # Array of offsets from a point to the corners of its cell.
        self.deltas = 0.5 * self.Domain.VoxelSize * \
            np.array([[ 1, 1, 1],
                      [ 1, 1,-1],
                      [ 1,-1, 1],
                      [ 1,-1,-1],
                      [-1, 1, 1],
                      [-1, 1,-1],
                      [-1,-1, 1],
                      [-1,-1,-1]],
                dtype=float)
        # Used as a working array.
        self.vox = vtk.vtkVoxel()

        return
 def OnEndHeader(self):
     """Get ready to add blocks
     """
     self.TotalFluidSites = self.Domain.BlockFluidSiteCounts.sum()
     
     # Efficiently add the voxel corner points
     self.Locator = vtk.vtkMergePoints()
     self.Points = vtk.vtkPoints()
     
     # Compute the bounds of the voxel corner points
     # Initially in a shape == (3,2) array [[0, nSites[x]], ... ]
     bounds = np.concatenate((np.zeros(3,dtype=int),
                              self.Domain.SiteCounts)).reshape((2,3)).transpose()
     # shift half a voxel down, scale and then translate
     bounds = self.Domain.VoxelSize*(bounds - 0.5) + \
         self.Domain.Origin[:, np.newaxis]
     
     # Since we know how the points will be arranged, use that information
     # to tune the vtkMergePoints
     self.Locator.SetDivisions(*self.Domain.BlockCounts)
     self.Locator.InitPointInsertion(self.Points, bounds.flatten(),
                                     self.TotalFluidSites)
     
     # This is what we're trying to construct. Allocate data (we know how
     # many cells (= TotalFluidSites) but not how many points, as we don't
     # know the number of surface sites.
     self.Grid = vtk.vtkUnstructuredGrid()
     self.Grid.Allocate(self.TotalFluidSites, 1000)
     self.Grid.SetPoints(self.Points)
     
     # Array of offsets from a point to the corners of its cell.
     self.deltas = 0.5 * self.Domain.VoxelSize * \
         np.array([[ 1, 1, 1],
                   [ 1, 1,-1],
                   [ 1,-1, 1],
                   [ 1,-1,-1],
                   [-1, 1, 1],
                   [-1, 1,-1],
                   [-1,-1, 1],
                   [-1,-1,-1]],
             dtype=float)
     # Used as a working array.
     self.vox = vtk.vtkVoxel()
     
     return
Beispiel #8
0
def clean_unstructured_grid(ugrid):
    """Collapse a vtu produced from a discontinuous grid back down to the continuous space.

    Args:
    ugrid (vtkUnstructuredGrid): the input discontinuous grid

    Results
    out_grid (vtkUnstructuredGrid): A continuous grid"""

    merge_points = vtk.vtkMergePoints()
    out_grid = vtk.vtkUnstructuredGrid()

    for i in range(ugrid.GetNumberOfPoints()):
        merge_points.InsertUniquePoint(ugrid.GetPoints().GetPoint(i))

    merge_points.BuildLocator()

    pts = vtk.vtkPoints()
    pts.DeepCopy(merge_points.GetPoints())
    out_grid.SetPoints(pts)

    for i in range(ugrid.GetNumberOfCells()):
        cell = ugrid.GetCell(i)
        cell_ids = cell.GetPointIds()

        for j in range(cell.GetNumberOfPoints()):

            original_point = cell.GetPoints().GetPoint(j)
            cell_ids.SetId(j,
                           merge_points.FindClosestInsertedPoint(original_point))

        out_grid.InsertNextCell(cell.GetCellType(), cell.GetPointIds())


    out_grid.GetCellData().DeepCopy(ugrid.GetCellData())

    return out_grid
Beispiel #9
0
    def GenerateTetrInFile(self):

        self.PrintLog('Generating Tetr .in file.')

        f = open(self.OutputFileName, 'w')

        line = '$title' + '\n'
        f.write(line)
        line = self.OutputFileName + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$compress' + '\n'
        f.write(line)
        line = 'gzip -f' + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        self.NormalizationTransform.Identity()

        if (self.NormalizationEntity != ''):
            sectionBoundaryPointIds = self.GetSectionBoundaryPointIds(
                self.NormalizationEntity)
            sectionProperties = SectionProperties()
            sectionProperties.Mesh = self.Mesh
            sectionProperties.NormalizationTransform = self.NormalizationTransform
            sectionProperties.SectionBoundaryPointIds = sectionBoundaryPointIds
            sectionProperties.Execute()
            self.NormalizationRadius = sectionProperties.Radius

        if (self.NormalizationRadius != 0.0) & (self.NormalizationRadius !=
                                                1.0):
            self.NormalizationTransform.Scale(1.0 / self.NormalizationRadius,
                                              1.0 / self.NormalizationRadius,
                                              1.0 / self.NormalizationRadius)

        line = '$radius' + '\n'
        f.write(line)
        line = str(self.NormalizationRadius) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$viscosity' + '\n'
        f.write(line)
        line = str(0.035) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$density' + '\n'
        f.write(line)
        line = str(1.06) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$red' + '\n'
        f.write(line)
        line = str(0) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$alpha' + '\n'
        f.write(line)
        line = str(0) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$nsolve' + '\n'
        f.write(line)
        line = '22' + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$Uzawa_PC' + '\n'
        f.write(line)
        line = '1' + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$node' + '\n'
        f.write(line)
        line = str(self.Mesh.GetNumberOfPoints()) + '\n'
        f.write(line)
        for i in range(self.Mesh.GetNumberOfPoints()):
            point = [0.0, 0.0, 0.0]
            self.NormalizationTransform.TransformPoint(self.Mesh.GetPoint(i),
                                                       point)
            line = str(i + 1) + ' ' + str(point[0]) + ' ' + str(
                point[1]) + ' ' + str(point[2]) + '\n'
            f.write(line)

        line = '\n'
        f.write(line)

        line = '$elem' + '\n'
        f.write(line)
        quadratidTetraCellType = 24
        quadraticTetraCellIds = vtk.vtkIdTypeArray()
        self.Mesh.GetIdsOfCellsOfType(quadratidTetraCellType,
                                      quadraticTetraCellIds)
        line = str(quadraticTetraCellIds.GetNumberOfTuples()) + '\n'
        f.write(line)
        for i in range(quadraticTetraCellIds.GetNumberOfTuples()):
            line = str(i + 1) + ' '
            cell = self.Mesh.GetCell(quadraticTetraCellIds.GetValue(i))
            line += str(cell.GetPointId(0) + 1) + ' '
            line += str(cell.GetPointId(4) + 1) + ' '
            line += str(cell.GetPointId(1) + 1) + ' '
            line += str(cell.GetPointId(5) + 1) + ' '
            line += str(cell.GetPointId(2) + 1) + ' '
            line += str(cell.GetPointId(6) + 1) + ' '
            line += str(cell.GetPointId(7) + 1) + ' '
            line += str(cell.GetPointId(8) + 1) + ' '
            line += str(cell.GetPointId(9) + 1) + ' '
            line += str(cell.GetPointId(3) + 1) + ' '
            line += '\n'
            f.write(line)


#        inletEntities = self.InletEntities
#        reversedInlets = self.ReverseInlets

#        inletEntitiesReversed = zip(inletEntities,reversedInlets)

#        for inletEntityReversed in inletEntitiesReversed:
#            inletEntity = inletEntityReversed[0]
#            reversedInlet = inletEntityReversed[1]
#            if (inletEntity == ''):
#                continue
        for inletEntity in self.InletEntities:
            reversedInlet = inletEntity in self.ReverseInletEntities
            line = '\n'
            f.write(line)
            line = '$binlet' + ' (' + inletEntity + ') ' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(inletEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                line = str(i + 1) + '\n'
                f.write(line)

            sectionBoundaryPointIds = self.GetSectionBoundaryPointIds(
                inletEntity)
            sectionProperties = SectionProperties()
            sectionProperties.Mesh = self.Mesh
            sectionProperties.NormalizationTransform = self.NormalizationTransform
            sectionProperties.SectionBoundaryPointIds = sectionBoundaryPointIds
            if not reversedInlet:
                sectionProperties.FlipOutwardNormal = 1
            else:
                sectionProperties.FlipOutwardNormal = 0
            sectionProperties.Execute()
            line = str(sectionProperties.Radius) + '\n'
            f.write(line)
            line = str(sectionProperties.Origin[0]) + ' ' + str(
                sectionProperties.Origin[1]) + ' ' + str(
                    sectionProperties.Origin[2]) + '\n'
            f.write(line)
            line = str(sectionProperties.Normal[0]) + ' ' + str(
                sectionProperties.Normal[1]) + ' ' + str(
                    sectionProperties.Normal[2]) + '\n'
            f.write(line)
            #TODO: for every inlet insert fourier coefficients given points of waveform (spline-interpolate points beforehands to get them equispaced).

        if (self.OutletEntity != ''):
            line = '\n'
            f.write(line)
            line = '$boutlet' + ' (' + self.OutletEntity + ') ' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(self.OutletEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                line = str(i + 1) + '\n'
                f.write(line)
            sectionBoundaryPointIds = self.GetSectionBoundaryPointIds(
                self.OutletEntity)
            sectionProperties = SectionProperties()
            sectionProperties.Mesh = self.Mesh
            sectionProperties.NormalizationTransform = self.NormalizationTransform
            sectionProperties.SectionBoundaryPointIds = sectionBoundaryPointIds
            sectionProperties.FlipOutwardNormal = 0
            sectionProperties.Execute()
            line = str(sectionProperties.Radius) + '\n'
            f.write(line)
            line = str(sectionProperties.Origin[0]) + ' ' + str(
                sectionProperties.Origin[1]) + ' ' + str(
                    sectionProperties.Origin[2]) + '\n'
            f.write(line)
            line = str(sectionProperties.Normal[0]) + ' ' + str(
                sectionProperties.Normal[1]) + ' ' + str(
                    sectionProperties.Normal[2]) + '\n'
            f.write(line)

        if (self.WallEntity != ''):
            line = '\n'
            f.write(line)
            line = '$bwall' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(self.WallEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                line = str(i + 1) + '\n'
                f.write(line)

            wallPointIdsMap = vtk.vtkIdList()
            if (self.WriteWNodeSection == 1):
                line = '\n'
                f.write(line)
                line = '$wnode' + '\n'
                f.write(line)
                line = str(numberOfEntityNodes) + '\n'
                f.write(line)
                count = 0
                wallPointIdsMap.SetNumberOfIds(entityArray.GetNumberOfTuples())
                extractSurface = vtk.vtkGeometryFilter()
                extractSurface.SetInputData(self.Mesh)
                extractSurface.Update()
                normalsFilter = vtk.vtkPolyDataNormals()
                normalsFilter.SetInputConnection(
                    extractSurface.GetOutputPort())
                normalsFilter.AutoOrientNormalsOn()
                normalsFilter.ConsistencyOn()
                normalsFilter.Update()
                normalsSurface = normalsFilter.GetOutput()
                locator = vtk.vtkMergePoints()
                locator.SetDataSet(normalsSurface)
                locator.BuildLocator()
                for i in range(entityArray.GetNumberOfTuples()):
                    if (entityArray.GetComponent(i, 0) != 1.0):
                        wallPointIdsMap.SetId(i, -1)
                        continue
                    wallPointIdsMap.SetId(i, count)
                    point = self.Mesh.GetPoint(i)
                    surfacePointId = locator.FindClosestPoint(point)
                    normal = normalsSurface.GetPointData().GetNormals(
                    ).GetTuple3(surfacePointId)
                    line = str(count + 1) + ' ' + str(i + 1) + ' ' + str(
                        normal[0]) + ' ' + str(normal[1]) + ' ' + str(
                            normal[2]) + '\n'
                    f.write(line)
                    count += 1

            if (self.WriteWElemSection == 1):
                line = '\n'
                f.write(line)
                line = '$welem' + '\n'
                f.write(line)
                dataArray = vtk.vtkIntArray()
                dataArray.SetNumberOfComponents(8)
                for i in range(self.Mesh.GetNumberOfCells()):
                    qtetra = self.Mesh.GetCell(i)
                    for j in range(qtetra.GetNumberOfFaces()):
                        face = qtetra.GetFace(j)
                        isBoundaryFace = 1
                        for k in range(face.GetNumberOfPoints()):
                            if (entityArray.GetComponent(
                                    face.GetPointId(k), 0) != 1.0):
                                isBoundaryFace = 0
                                break
                        if (isBoundaryFace == 0):
                            continue
                        dataArray.InsertNextValue(i)
                        dataArray.InsertNextValue(j)
                        for k in range(face.GetNumberOfPoints()):
                            dataArray.InsertNextValue(face.GetPointId(k))
                line = str(dataArray.GetNumberOfTuples()) + '\n'
                f.write(line)
                for i in range(dataArray.GetNumberOfTuples()):
                    line = str(i + 1) + ' '
                    line += str(int(dataArray.GetComponent(i, 0)) + 1) + ' '
                    faceId = int(dataArray.GetComponent(i, 1))
                    newTetrFaceIdsMap = [2, 4, 3, 1]
                    line += str(newTetrFaceIdsMap[faceId]) + ' '
                    for j in range(2, dataArray.GetNumberOfComponents()):
                        line += str(
                            wallPointIdsMap.GetId(
                                int(dataArray.GetComponent(i, j))) + 1) + ' '
                    line += '\n'
                    f.write(line)

        if (self.HistoryEntity != ''):
            line = '\n'
            f.write(line)
            line = '$history' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(self.HistoryEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i, 0) != 1.0):
                    continue
                line = str(i + 1) + '\n'
                f.write(line)

        self.WriteTimeSteps(f)
Beispiel #10
0
    def GenerateTetrInFile(self):

        self.PrintLog('Generating Tetr .in file.')
        
        f=open(self.OutputFileName, 'w')

        line = '$title' + '\n'
        f.write(line)
        line = self.OutputFileName + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$compress' + '\n'
        f.write(line)
        line = 'gzip -f' + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        self.NormalizationTransform.Identity()

        if (self.NormalizationEntity != ''):
            sectionBoundaryPointIds = self.GetSectionBoundaryPointIds(self.NormalizationEntity)
            sectionProperties = SectionProperties()
            sectionProperties.Mesh = self.Mesh
            sectionProperties.NormalizationTransform = self.NormalizationTransform
            sectionProperties.SectionBoundaryPointIds = sectionBoundaryPointIds
            sectionProperties.Execute()
            self.NormalizationRadius = sectionProperties.Radius

        if (self.NormalizationRadius != 0.0) & (self.NormalizationRadius != 1.0):
            self.NormalizationTransform.Scale(1.0/self.NormalizationRadius,1.0/self.NormalizationRadius,1.0/self.NormalizationRadius)

        line = '$radius' + '\n'
        f.write(line)
        line = str(self.NormalizationRadius) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$viscosity' + '\n'
        f.write(line)
        line = str(0.035) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$density' + '\n'
        f.write(line)
        line = str(1.06) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$red' + '\n'
        f.write(line)
        line = str(0) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$alpha' + '\n'
        f.write(line)
        line = str(0) + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$nsolve' + '\n'
        f.write(line)
        line = '22' + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$Uzawa_PC' + '\n'
        f.write(line)
        line = '1' + '\n'
        f.write(line)
        line = '\n'
        f.write(line)

        line = '$node' + '\n'
        f.write(line)
        line = str(self.Mesh.GetNumberOfPoints()) + '\n'
        f.write(line)
        for i in range(self.Mesh.GetNumberOfPoints()):
            point = [0.0,0.0,0.0]
            self.NormalizationTransform.TransformPoint(self.Mesh.GetPoint(i),point)
            line = str(i+1) + ' ' + str(point[0]) + ' ' + str(point[1]) + ' ' + str(point[2]) + '\n'
            f.write(line)

        line = '\n'
        f.write(line)
            
        line = '$elem' + '\n'
        f.write(line)
        quadratidTetraCellType = 24
        quadraticTetraCellIds = vtk.vtkIdTypeArray()
        self.Mesh.GetIdsOfCellsOfType(quadratidTetraCellType,quadraticTetraCellIds)
        line = str(quadraticTetraCellIds.GetNumberOfTuples()) + '\n'
        f.write(line)
        for i in range(quadraticTetraCellIds.GetNumberOfTuples()):
            line = str(i+1) + ' '
            cell = self.Mesh.GetCell(quadraticTetraCellIds.GetValue(i))
            line += str(cell.GetPointId(0)+1) + ' '
            line += str(cell.GetPointId(4)+1) + ' '
            line += str(cell.GetPointId(1)+1) + ' '
            line += str(cell.GetPointId(5)+1) + ' '
            line += str(cell.GetPointId(2)+1) + ' '
            line += str(cell.GetPointId(6)+1) + ' '
            line += str(cell.GetPointId(7)+1) + ' '
            line += str(cell.GetPointId(8)+1) + ' '
            line += str(cell.GetPointId(9)+1) + ' '
            line += str(cell.GetPointId(3)+1) + ' '
            line += '\n'
            f.write(line)

#        inletEntities = self.InletEntities
#        reversedInlets = self.ReverseInlets

#        inletEntitiesReversed = zip(inletEntities,reversedInlets)

#        for inletEntityReversed in inletEntitiesReversed:
#            inletEntity = inletEntityReversed[0]
#            reversedInlet = inletEntityReversed[1]
#            if (inletEntity == ''):
#                continue
        for inletEntity in self.InletEntities:
            reversedInlet = inletEntity in self.ReverseInletEntities
            line = '\n'
            f.write(line)
            line = '$binlet' + ' (' + inletEntity + ') ' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(inletEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                line = str(i+1) + '\n'
                f.write(line)
            
            sectionBoundaryPointIds = self.GetSectionBoundaryPointIds(inletEntity)
            sectionProperties = SectionProperties()
            sectionProperties.Mesh = self.Mesh
            sectionProperties.NormalizationTransform = self.NormalizationTransform
            sectionProperties.SectionBoundaryPointIds = sectionBoundaryPointIds
            if not reversedInlet:
                sectionProperties.FlipOutwardNormal = 1
            else:
                sectionProperties.FlipOutwardNormal = 0
            sectionProperties.Execute()
            line = str(sectionProperties.Radius) + '\n'
            f.write(line)
            line = str(sectionProperties.Origin[0]) + ' ' + str(sectionProperties.Origin[1]) + ' ' + str(sectionProperties.Origin[2]) + '\n'
            f.write(line)
            line = str(sectionProperties.Normal[0]) + ' ' + str(sectionProperties.Normal[1]) + ' ' + str(sectionProperties.Normal[2]) + '\n'
            f.write(line)
            #TODO: for every inlet insert fourier coefficients given points of waveform (spline-interpolate points beforehands to get them equispaced).

        if (self.OutletEntity != ''):
            line = '\n'
            f.write(line)
            line = '$boutlet' + ' (' + self.OutletEntity + ') ' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(self.OutletEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                line = str(i+1) + '\n'
                f.write(line)
            sectionBoundaryPointIds = self.GetSectionBoundaryPointIds(self.OutletEntity)
            sectionProperties = SectionProperties()
            sectionProperties.Mesh = self.Mesh
            sectionProperties.NormalizationTransform = self.NormalizationTransform
            sectionProperties.SectionBoundaryPointIds = sectionBoundaryPointIds
            sectionProperties.FlipOutwardNormal = 0
            sectionProperties.Execute()
            line = str(sectionProperties.Radius) + '\n'
            f.write(line)
            line = str(sectionProperties.Origin[0]) + ' ' + str(sectionProperties.Origin[1]) + ' ' + str(sectionProperties.Origin[2]) + '\n'
            f.write(line)
            line = str(sectionProperties.Normal[0]) + ' ' + str(sectionProperties.Normal[1]) + ' ' + str(sectionProperties.Normal[2]) + '\n'
            f.write(line)

        if (self.WallEntity != ''):
            line = '\n'
            f.write(line)
            line = '$bwall' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(self.WallEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                line = str(i+1) + '\n'
                f.write(line)

            wallPointIdsMap = vtk.vtkIdList()
            if (self.WriteWNodeSection == 1):
                line = '\n'
                f.write(line)
                line = '$wnode' + '\n'
                f.write(line)
                line = str(numberOfEntityNodes) + '\n'
                f.write(line)
                count = 0
                wallPointIdsMap.SetNumberOfIds(entityArray.GetNumberOfTuples())
                extractSurface = vtk.vtkGeometryFilter()
                extractSurface.SetInput(self.Mesh)
                extractSurface.Update()
                normalsFilter = vtk.vtkPolyDataNormals()
                normalsFilter.SetInput(extractSurface.GetOutput())
                normalsFilter.AutoOrientNormalsOn()
                normalsFilter.ConsistencyOn()
                normalsFilter.Update()
                normalsSurface = normalsFilter.GetOutput()
                locator = vtk.vtkMergePoints()
                locator.SetDataSet(normalsSurface)
                locator.BuildLocator()
                for i in range(entityArray.GetNumberOfTuples()):
                    if (entityArray.GetComponent(i,0) != 1.0):
                        wallPointIdsMap.SetId(i,-1)
                        continue
                    wallPointIdsMap.SetId(i,count)
                    point = self.Mesh.GetPoint(i)
                    surfacePointId = locator.FindClosestPoint(point)
                    normal = normalsSurface.GetPointData().GetNormals().GetTuple3(surfacePointId)
                    line = str(count+1) + ' ' + str(i+1) + ' ' + str(normal[0]) + ' ' + str(normal[1]) + ' ' + str(normal[2]) + '\n'
                    f.write(line)
                    count += 1
                
            if (self.WriteWElemSection == 1):
                line = '\n'
                f.write(line)
                line = '$welem' + '\n'
                f.write(line)
                dataArray = vtk.vtkIntArray()
                dataArray.SetNumberOfComponents(8)
                for i in range(self.Mesh.GetNumberOfCells()):
                    qtetra = self.Mesh.GetCell(i)
                    for j in range(qtetra.GetNumberOfFaces()):
                        face = qtetra.GetFace(j)
                        isBoundaryFace = 1
                        for k in range(face.GetNumberOfPoints()):
                            if (entityArray.GetComponent(face.GetPointId(k),0) != 1.0):
                                isBoundaryFace = 0
                                break
                        if (isBoundaryFace == 0):
                            continue
                        dataArray.InsertNextValue(i)
                        dataArray.InsertNextValue(j)
                        for k in range(face.GetNumberOfPoints()):
                            dataArray.InsertNextValue(face.GetPointId(k))
                line = str(dataArray.GetNumberOfTuples()) + '\n'
                f.write(line)
                for i in range(dataArray.GetNumberOfTuples()):
                    line = str(i+1) + ' '
                    line += str(int(dataArray.GetComponent(i,0))+1) + ' '
                    faceId = int(dataArray.GetComponent(i,1))
                    newTetrFaceIdsMap = [2, 4, 3, 1]
                    line += str(newTetrFaceIdsMap[faceId]) + ' '
                    for j in range(2,dataArray.GetNumberOfComponents()):
                        line += str(wallPointIdsMap.GetId(int(dataArray.GetComponent(i,j)))+1) + ' '
                    line += '\n'
                    f.write(line)
                        

        if (self.HistoryEntity != ''):
            line = '\n'
            f.write(line)
            line = '$history' + '\n'
            f.write(line)
            entityArray = self.Mesh.GetPointData().GetArray(self.HistoryEntity)
            numberOfEntityNodes = 0
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                numberOfEntityNodes += 1
            line = str(numberOfEntityNodes) + '\n'
            f.write(line)
            for i in range(entityArray.GetNumberOfTuples()):
                if (entityArray.GetComponent(i,0) != 1.0):
                    continue
                line = str(i+1) + '\n'
                f.write(line)

        self.WriteTimeSteps(f)
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# create pipeline
#
v16 = vtk.vtkVolume16Reader()
v16.SetDataDimensions(64,64)
v16.GetOutput().SetOrigin(0.0,0.0,0.0)
v16.SetDataByteOrderToLittleEndian()
v16.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter")
v16.SetImageRange(1,93)
v16.SetDataSpacing(3.2,3.2,1.5)
v16.Update()
myLocator = vtk.vtkMergePoints()
isoXY = vtk.vtkMarchingSquares()
isoXY.SetInputConnection(v16.GetOutputPort())
isoXY.GenerateValues(2,600,1200)
isoXY.SetImageRange(0,32,32,63,45,45)
isoXY.SetLocator(myLocator)
isoXYMapper = vtk.vtkPolyDataMapper()
isoXYMapper.SetInputConnection(isoXY.GetOutputPort())
isoXYMapper.SetScalarRange(600,1200)
isoXYActor = vtk.vtkActor()
isoXYActor.SetMapper(isoXYMapper)
isoYZ = vtk.vtkMarchingSquares()
isoYZ.SetInputConnection(v16.GetOutputPort())
isoYZ.GenerateValues(2,600,1200)
isoYZ.SetImageRange(32,32,32,63,46,92)
isoYZMapper = vtk.vtkPolyDataMapper()
Beispiel #12
0
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# create pipeline
#
v16 = vtk.vtkVolume16Reader()
v16.SetDataDimensions(64,64)
v16.GetOutput().SetOrigin(0.0,0.0,0.0)
v16.SetDataByteOrderToLittleEndian()
v16.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter")
v16.SetImageRange(1,93)
v16.SetDataSpacing(3.2,3.2,1.5)
v16.Update()
myLocator = vtk.vtkMergePoints()
isoXY = vtk.vtkMarchingSquares()
isoXY.SetInputConnection(v16.GetOutputPort())
isoXY.GenerateValues(2,600,1200)
isoXY.SetImageRange(0,32,32,63,45,45)
isoXY.SetLocator(myLocator)
isoXYMapper = vtk.vtkPolyDataMapper()
isoXYMapper.SetInputConnection(isoXY.GetOutputPort())
isoXYMapper.SetScalarRange(600,1200)
isoXYActor = vtk.vtkActor()
isoXYActor.SetMapper(isoXYMapper)
isoYZ = vtk.vtkMarchingSquares()
isoYZ.SetInputConnection(v16.GetOutputPort())
isoYZ.GenerateValues(2,600,1200)
isoYZ.SetImageRange(32,32,32,63,46,92)
isoYZMapper = vtk.vtkPolyDataMapper()
Beispiel #13
0
    def _shellSolidify(surfacePd, shellThickness, shellOffsetDirection):
        """Create a thick shell from a surface by extruding in surface normal direction"""

        # remove double vertices
        cleanPolyData = vtk.vtkCleanPolyData()
        cleanPolyData.SetInputData(surfacePd)

        # create normals
        normals = vtk.vtkPolyDataNormals()
        normals.SetComputeCellNormals(1)
        normals.SetInputConnection(cleanPolyData.GetOutputPort())
        normals.SplittingOff()
        if shellOffsetDirection == SHELL_OFFSET_OUTSIDE:
            normals.FlipNormalsOn()
        normals.Update()

        surfacePd = vtk.vtkPolyData()
        surfacePd.DeepCopy(normals.GetOutput())
        numberOfPoints = surfacePd.GetNumberOfPoints()

        # get boundary edges, used later
        featureEdges = vtk.vtkFeatureEdges()
        featureEdges.BoundaryEdgesOn()
        featureEdges.ColoringOff()
        featureEdges.FeatureEdgesOff()
        featureEdges.NonManifoldEdgesOff()
        featureEdges.ManifoldEdgesOff()
        featureEdges.SetInputData(normals.GetOutput())
        featureEdges.Update()

        addingPoints = []
        addingPolys = []

        allNormalsArray = surfacePd.GetCellData().GetArray('Normals')

        for pointID in range(numberOfPoints):
            cellIDs = vtk.vtkIdList()
            surfacePd.GetPointCells(pointID, cellIDs)
            normalsArray = []

            # ilterate through all cells/faces which contain point
            for i in range(cellIDs.GetNumberOfIds()):
                n = allNormalsArray.GetTuple3(cellIDs.GetId(i))
                normalsArray.append(np.array(n))

            # calculate position of new vert
            dir_vec = np.zeros(3)

            for n in normalsArray:
                dir_vec = dir_vec + np.array(n)

            dir_vec_norm = dir_vec / np.linalg.norm(dir_vec)
            proj_length = np.dot(dir_vec_norm, np.array(normalsArray[0]))
            dir_vec_finallenght = dir_vec_norm * proj_length
            vertex_neu = np.array(surfacePd.GetPoint(pointID)) + (
                dir_vec_finallenght * shellThickness)

            # append point
            addingPoints.append(vertex_neu)

        for cellID in range(surfacePd.GetNumberOfCells()):
            pointIDs = vtk.vtkIdList()
            surfacePd.GetCellPoints(cellID, pointIDs)

            newPointIDs = vtk.vtkIdList()
            for i in reversed(range(pointIDs.GetNumberOfIds())):
                newPointIDs.InsertNextId(
                    int(pointIDs.GetId(i) + numberOfPoints))

            addingPolys.append(newPointIDs)

        doubleSurfacePoints = vtk.vtkPoints()
        doubleSurfacePolys = vtk.vtkCellArray()

        doubleSurfacePoints.DeepCopy(surfacePd.GetPoints())
        doubleSurfacePolys.DeepCopy(surfacePd.GetPolys())

        for p in addingPoints:
            doubleSurfacePoints.InsertNextPoint(p)
        for p in addingPolys:
            doubleSurfacePolys.InsertNextCell(p)

        doubleSurfacePD = vtk.vtkPolyData()
        doubleSurfacePD.SetPoints(doubleSurfacePoints)
        doubleSurfacePD.SetPolys(doubleSurfacePolys)

        # add faces to boundary edges
        mergePoints = vtk.vtkMergePoints()
        mergePoints.InitPointInsertion(doubleSurfacePD.GetPoints(),
                                       doubleSurfacePD.GetBounds())
        mergePoints.SetDataSet(doubleSurfacePD)
        mergePoints.BuildLocator()

        manifoldPolys = vtk.vtkCellArray()
        manifoldPolys.DeepCopy(doubleSurfacePD.GetPolys())
        manifoldPoints = vtk.vtkPoints()
        manifoldPoints.DeepCopy(doubleSurfacePD.GetPoints())

        for e in range(featureEdges.GetOutput().GetNumberOfCells()):
            pointIDs = vtk.vtkIdList()
            featureEdges.GetOutput().GetCellPoints(e, pointIDs)
            if pointIDs.GetNumberOfIds() == 2:  # -> Edge
                matchingPointIDs = []
                newPointIDs = vtk.vtkIdList()
                for p in range(2):
                    matchingPointIDs.append(
                        mergePoints.IsInsertedPoint(
                            featureEdges.GetOutput().GetPoint(
                                pointIDs.GetId(p))))
                if not (
                        -1
                ) in matchingPointIDs:  # edge vertex not found in original pd, should not happen
                    newPointIDs.InsertNextId(matchingPointIDs[1])
                    newPointIDs.InsertNextId(matchingPointIDs[0])
                    newPointIDs.InsertNextId(matchingPointIDs[0] +
                                             numberOfPoints)
                    newPointIDs.InsertNextId(matchingPointIDs[1] +
                                             numberOfPoints)
                    manifoldPolys.InsertNextCell(newPointIDs)

        manifoldPD = vtk.vtkPolyData()
        manifoldPD.SetPoints(manifoldPoints)
        manifoldPD.SetPolys(manifoldPolys)

        triangleFilter = vtk.vtkTriangleFilter()
        triangleFilter.SetInputData(manifoldPD)

        # Compute normals to make the result look smooth
        normals = vtk.vtkPolyDataNormals()
        normals.SetInputConnection(triangleFilter.GetOutputPort())
        normals.Update()

        return normals.GetOutput()
def main():
    fileName = get_program_parameters()

    colors = vtk.vtkNamedColors()

    # Create the RenderWindow, Renderer and Interactor.
    #

    ren1 = vtk.vtkRenderer()

    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(ren1)

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

    # Create the pipeline.
    #

    reader = vtk.vtkMetaImageReader()
    reader.SetFileName(fileName)
    reader.Update()

    locator = vtk.vtkMergePoints()
    locator.SetDivisions(64, 64, 92)
    locator.SetNumberOfPointsPerBucket(2)
    locator.AutomaticOff()

    iso = vtk.vtkMarchingCubes()
    iso.SetInputConnection(reader.GetOutputPort())
    iso.ComputeGradientsOn()
    iso.ComputeScalarsOff()
    iso.SetValue(0, 1150)
    iso.SetLocator(locator)

    isoMapper = vtk.vtkPolyDataMapper()
    isoMapper.SetInputConnection(iso.GetOutputPort())
    isoMapper.ScalarVisibilityOff()

    isoActor = vtk.vtkActor()
    isoActor.SetMapper(isoMapper)
    isoActor.GetProperty().SetColor(colors.GetColor3d("Wheat"))

    outline = vtk.vtkOutlineFilter()
    outline.SetInputConnection(reader.GetOutputPort())

    outlineMapper = vtk.vtkPolyDataMapper()
    outlineMapper.SetInputConnection(outline.GetOutputPort())

    outlineActor = vtk.vtkActor()
    outlineActor.SetMapper(outlineMapper)

    # Add the actors to the renderer, set the background and size.
    #
    ren1.AddActor(outlineActor)
    ren1.AddActor(isoActor)
    ren1.SetBackground(colors.GetColor3d("SlateGray"))
    ren1.GetActiveCamera().SetFocalPoint(0, 0, 0)
    ren1.GetActiveCamera().SetPosition(0, -1, 0)
    ren1.GetActiveCamera().SetViewUp(0, 0, -1)
    ren1.ResetCamera()
    ren1.GetActiveCamera().Dolly(1.5)
    ren1.ResetCameraClippingRange()

    renWin.SetSize(640, 480)

    renWin.Render()
    iren.Start()
Beispiel #15
0
def main():
    # vtkFlyingEdges3D was introduced in VTK >= 8.2
    use_flying_edges = vtk_version_ok(8, 2, 0)

    file_name = get_program_parameters()

    colors = vtk.vtkNamedColors()

    # Create the RenderWindow, Renderer and Interactor.
    #

    ren = vtk.vtkRenderer()

    ren_win = vtk.vtkRenderWindow()
    ren_win.AddRenderer(ren)

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

    # Create the pipeline.
    #

    reader = vtk.vtkMetaImageReader()
    reader.SetFileName(file_name)
    reader.Update()

    locator = vtk.vtkMergePoints()
    locator.SetDivisions(64, 64, 92)
    locator.SetNumberOfPointsPerBucket(2)
    locator.AutomaticOff()

    if use_flying_edges:
        try:
            using_marching_cubes = False
            iso = vtk.vtkDiscreteFlyingEdges3D()
        except AttributeError:
            using_marching_cubes = True
            iso = vtk.vtkDiscreteMarchingCubes()
    else:
        using_marching_cubes = True
        iso = vtk.vtkDiscreteMarchingCubes()
    iso.SetInputConnection(reader.GetOutputPort())
    iso.ComputeGradientsOn()
    iso.ComputeScalarsOff()
    iso.SetValue(0, 1150)
    if using_marching_cubes:
        iso.SetLocator(locator)

    iso_mapper = vtk.vtkPolyDataMapper()
    iso_mapper.SetInputConnection(iso.GetOutputPort())
    iso_mapper.ScalarVisibilityOff()

    iso_actor = vtk.vtkActor()
    iso_actor.SetMapper(iso_mapper)
    iso_actor.GetProperty().SetColor(colors.GetColor3d('Ivory'))

    outline = vtk.vtkOutlineFilter()
    outline.SetInputConnection(reader.GetOutputPort())

    outline_mapper = vtk.vtkPolyDataMapper()
    outline_mapper.SetInputConnection(outline.GetOutputPort())

    outline_actor = vtk.vtkActor()
    outline_actor.SetMapper(outline_mapper)

    # Add the actors to the renderer, set the background and size.
    #
    ren.AddActor(outline_actor)
    ren.AddActor(iso_actor)
    ren.SetBackground(colors.GetColor3d('SlateGray'))
    ren.GetActiveCamera().SetFocalPoint(0, 0, 0)
    ren.GetActiveCamera().SetPosition(0, -1, 0)
    ren.GetActiveCamera().SetViewUp(0, 0, -1)
    ren.ResetCamera()
    ren.GetActiveCamera().Dolly(1.5)
    ren.ResetCameraClippingRange()

    ren_win.SetSize(640, 480)
    ren_win.SetWindowName('HeadBone')

    ren_win.Render()
    iren.Start()