mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
141 lines
4.2 KiB
Python
141 lines
4.2 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
This file demonstrates the creation of a directed graph using the
|
|
Python interface to VTK.
|
|
"""
|
|
|
|
from vtk import *
|
|
from sys import exit
|
|
|
|
xdim = 400
|
|
ydim = 400
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Script Entry Point
|
|
#------------------------------------------------------------------------------
|
|
if __name__ == "__main__":
|
|
|
|
#----------------------------------------------------------
|
|
# Create a graph (see graph1.py for explanations)
|
|
G1 = vtkMutableDirectedGraph()
|
|
vertID1 = vtkIntArray()
|
|
vertID1.SetName("ID")
|
|
G1.GetVertexData().AddArray( vertID1 )
|
|
G1.GetVertexData().SetPedigreeIds( vertID1 )
|
|
for i in range(10):
|
|
G1.AddVertex()
|
|
vertID1.InsertNextValue(i)
|
|
for i in range(10):
|
|
G1.AddGraphEdge(i, (i+1)%10)
|
|
|
|
#----------------------------------------------------------
|
|
# Create a second graph
|
|
# - This one is a triangle, with one node's pedigree id field
|
|
# ID matching one of the vertices from G1. These nodes will
|
|
# be combined as the same node when merge is run.
|
|
vertID2 = vtkIntArray()
|
|
G2 = vtkMutableDirectedGraph()
|
|
vertID2 = vtkIntArray()
|
|
vertID2.SetName("ID")
|
|
G2.GetVertexData().AddArray(vertID2)
|
|
G2.GetVertexData().SetPedigreeIds(vertID2)
|
|
G2.AddVertex()
|
|
vertID2.InsertNextValue(3)
|
|
G2.AddVertex()
|
|
vertID2.InsertNextValue(20)
|
|
G2.AddVertex()
|
|
vertID2.InsertNextValue(21)
|
|
G2.AddGraphEdge(0,1)
|
|
G2.AddGraphEdge(0,2)
|
|
G2.AddGraphEdge(1,2)
|
|
|
|
#----------------------------------------------------------
|
|
# First Programmable Filter -- Add integer field to vertices
|
|
# with a 1 for every vertex into G1
|
|
G1_labeled = vtkProgrammableFilter()
|
|
G1_labeled.AddInputData( G1 )
|
|
|
|
def vertex_labeler_g1():
|
|
input = G1_labeled.GetInput()
|
|
output = G1_labeled.GetOutput()
|
|
output.ShallowCopy(input)
|
|
varray = vtkIntArray()
|
|
varray.SetName("color")
|
|
|
|
varray.SetNumberOfTuples( output.GetNumberOfVertices() )
|
|
for i in range( output.GetNumberOfVertices() ):
|
|
varray.SetValue(i, 1)
|
|
|
|
output.GetVertexData().AddArray(varray)
|
|
|
|
G1_labeled.SetExecuteMethod( vertex_labeler_g1 )
|
|
|
|
|
|
|
|
#----------------------------------------------------------
|
|
# Second Programmable Filter -- Add integer field to vertices
|
|
# with a 2 for every vertex into G2
|
|
G2_labeled = vtkProgrammableFilter()
|
|
G2_labeled.AddInputData( G2 )
|
|
|
|
def vertex_labeler_g2():
|
|
input = G2_labeled.GetInput()
|
|
output = G2_labeled.GetOutput()
|
|
output.ShallowCopy(input)
|
|
varray = vtkIntArray()
|
|
varray.SetName("color")
|
|
|
|
varray.SetNumberOfTuples( output.GetNumberOfVertices() )
|
|
for i in range( output.GetNumberOfVertices() ):
|
|
varray.SetValue(i, 2)
|
|
|
|
output.GetVertexData().AddArray(varray)
|
|
|
|
G2_labeled.SetExecuteMethod( vertex_labeler_g2 )
|
|
|
|
|
|
#----------------------------------------------------------
|
|
# Merge graphs takes two graphs on input ports 0 and 1.
|
|
# and combines them according to the pedigree id field.
|
|
merge = vtkMergeGraphs()
|
|
merge.SetInputConnection(0, G1_labeled.GetOutputPort() )
|
|
merge.SetInputConnection(1, G2_labeled.GetOutputPort() )
|
|
merge.Update()
|
|
|
|
|
|
|
|
#----------------------------------------------------------
|
|
# Draw the graph in a window
|
|
theme = vtkViewTheme.CreateMellowTheme()
|
|
theme.SetLineWidth(4)
|
|
theme.SetPointSize(15)
|
|
theme.SetCellOpacity(1)
|
|
theme.FastDelete()
|
|
|
|
# Rendered graph representation to make vertices circles
|
|
rep = vtkRenderedGraphRepresentation( )
|
|
rep.SetInputConnection(0, merge.GetOutputPort())
|
|
|
|
# vtkGraphToGlyph::CIRCLE == 7
|
|
rep.SetGlyphType(7)
|
|
|
|
# View containing the merged graph
|
|
view = vtkGraphLayoutView()
|
|
view.SetRepresentation( rep )
|
|
view.SetVertexLabelArrayName("ID")
|
|
view.SetVertexColorArrayName("color")
|
|
view.SetVertexLabelVisibility(True)
|
|
view.SetColorVertices(True)
|
|
view.SetLayoutStrategyToSimple2D()
|
|
view.SetVertexLabelFontSize(20)
|
|
view.ApplyViewTheme(theme)
|
|
|
|
|
|
|
|
view.GetRenderWindow().SetSize(xdim, ydim)
|
|
view.ResetCamera()
|
|
view.Render()
|
|
|
|
|
|
view.GetInteractor().Start()
|