[vtkusers] Mapping nodal scalar values to graded color
Alex Malyushytskyy
alexmalvtk at gmail.com
Tue Aug 4 00:03:33 EDT 2015
I am not fluent with python,
but should not you replace
aMeshGrid.GetPointData().GetScalars()
with something like
aMeshGrid.GetPointData().SetScalars(stress)
?
On Mon, Aug 3, 2015 at 2:15 PM, roobaru <chpradeep.ith at gmail.com> wrote:
> 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.
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtkusers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150803/9a7c70c4/attachment.html>
More information about the vtkusers
mailing list