[vtkusers] Mapping nodal scalar values to graded color
roobaru
chpradeep.ith at gmail.com
Mon Aug 3 17:15:00 EDT 2015
Hello,
I am trying to display stress values on an FEM mesh as color grade using
vtkColorTransferFunction. I am reading the nodal stress values from a file.
I also added a scale widget on the right. The widget shows the colors
correctly but the mesh doesn't display any graded color. I tried to achieve
this using a single hexahedron mesh and it was displaying quite well. But
the fileinput method somehow doesn't do anything. If anybody can see a
glaring mistake and point it out, it will be a great help. I am attaching
the code and the input file. Thanks for any help.
#!/usr/bin/env python
# This is a function, which takes a string parameter: file_path. This string
is
# the path of the geometry txt file from which vtk will grab and display
data.
import vtk
def displayMesh(file_path):
import vtk
from vtk import vtkHexahedron
VTK_HEXAHEDRON = vtkHexahedron().GetCellType()
with open(file_path, 'r') as f:
aMeshGrid = vtk.vtkUnstructuredGrid()
aMeshGrid.Allocate(1, 1)
# Get number of mesh points
no_points = int(f.readline())
print no_points
# Set number of points
meshPoints = vtk.vtkPoints()
meshPoints.SetNumberOfPoints(no_points)
# Iterate through point data
for i in range(no_points):
#print i
# Get coord info for each point
point_info = f.readline().split() # I need to split, before I
assign to point_coord
# else the whole thing is split into single numbers
point_ID = (int(point_info[0])-1) # -1 because the IDs need to
start with 0.
point_x = float(point_info[1])
point_y = float(point_info[2])
point_z = float(point_info[3])
# Set coord info in mesh
meshPoints.InsertPoint(point_ID, point_x, point_y, point_z)
# Get number of elements
no_elements = int(f.readline())
# Set number of elements
for i in range(no_elements):
element_info = f.readline().split()
element_ID = (int(element_info[0])-1)
element_ID_list = vtk.vtkIdList()
for j in range(8):
node_no = int(element_info[j+1])
element_ID_list.InsertNextId(node_no -1)
#print j, node_no
cell_type = VTK_HEXAHEDRON
aMeshGrid.InsertNextCell(cell_type, element_ID_list)
stress = vtk.vtkFloatArray()
for i in range(no_points):
stress_value = f.readline()
stress.InsertNextValue(float(stress_value))
aMeshGrid.GetPointData().GetScalars()
aMeshMapper = vtk.vtkDataSetMapper()
# # colorTransferFunction
min=0.00001
max=0.035
avg=(min+max)/2.0
aMeshMapper.SetInputData(aMeshGrid)
colorTransferFunction = vtk.vtkColorTransferFunction()
colorTransferFunction.AddRGBPoint(min, 0.0, 0.0, 1.0)
colorTransferFunction.AddRGBPoint(avg, 1.0, 1.0, 0.0)
colorTransferFunction.AddRGBPoint(max, 1.0, 0.0, 0.0)
aMeshMapper.SetLookupTable(colorTransferFunction)
scalar_bar = vtk.vtkScalarBarActor()
scalar_bar.SetOrientationToHorizontal()
scalar_bar.SetLookupTable(colorTransferFunction)
scalar_bar.SetTitle("Stress")
scalar_bar.GetTitleTextProperty().SetColor(1.0,1.0,1.0)
aMeshGrid.SetPoints(meshPoints)
aMeshActor = vtk.vtkActor()
aMeshActor.AddPosition(0,0,0)
aMeshActor.SetMapper(aMeshMapper)
aMeshActor.GetProperty().SetDiffuseColor(1, 1, 0)
aMeshActor.GetProperty().SetEdgeVisibility(1)
aMeshActor.GetProperty().SetEdgeColor(1, 0, 0)
# Create the usual rendering stuff.
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetSize(1920, 1080)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# create the scalar_bar_widget
scalar_bar_widget = vtk.vtkScalarBarWidget()
scalar_bar_widget.SetInteractor(iren)
scalar_bar_widget.SetScalarBarActor(scalar_bar)
scalar_bar_widget.On()
# CompassWidget
compassRepresentation = vtk.vtkCompassRepresentation()
compassWidget = vtk.vtkCompassWidget()
compassWidget.SetInteractor(iren)
compassWidget.SetRepresentation(compassRepresentation)
ren.AddActor(aMeshActor)
ren.SetBackground(0.323,0.341,0.431)
# Add Axes
transform = vtk.vtkTransform()
transform.Translate(0.0, 0.0, 0.0)
axes = vtk.vtkAxesActor()
# The axes are positioned with a user transform
axes.SetUserTransform(transform)
ren.AddActor(axes)
ren.GetActiveCamera().SetPosition(-0.6,-0.6,-0.5)
ren.ResetCamera()
renWin.Render()
compassWidget.EnabledOn()
style = vtk.vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)
## Render the scene and start interaction.
iren.Initialize()
iren.Start()
displayMesh('D:\VTK_Visualization\Beam_colorwidget.txt')
file:
https://drive.google.com/file/d/0B1TsQHxIsXV8NWRNNnRBTE5BaWs/view?usp=sharing
--
View this message in context: http://vtk.1045678.n5.nabble.com/Mapping-nodal-scalar-values-to-graded-color-tp5733238.html
Sent from the VTK - Users mailing list archive at Nabble.com.
More information about the vtkusers
mailing list