# Displacement Vector Visualisation

**URL:** https://discourse.slicer.org/t/displacement-vector-visualisation/6180
**Category:** Support
**Created:** [March 18, 2019, 3:14am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180 "2019-03-18T03:14:44Z")
**Posts on this page:** 16
**Page:** 1

<div class="post-metadata">

### Author: ![GerryG](https://avatars.discourse-cdn.com/v4/letter/g/a698b9/32.png) [@GerryG](https://discourse.slicer.org/u/GerryG)
#### Post date: [March 18, 2019, 3:14am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/1 "2019-03-18T03:14:44Z")

</div>

I have a Model read in from a .vtu file in an unstructured grid format. Each point in this unstructured grid has its position data which visualises nicely but it also has a unique PointData Vector associated with it describing that point’s displacement from a previous time step. I’m wondering if there is a way to turn those vectors into a glyph. I’m aware that the Transformation module is designed to do this with Volumes but I can’t see how to make it work with a Model, especially given that the deformations cannot be summarised in a Transformation Matrix.  
Thank you!

---

<div class="post-metadata">

### Author: ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)
#### Post date: [March 18, 2019, 4:35am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/2 "2019-03-18T04:35:59Z")

</div>

Slicer’s transforms module requires transforms that define displacements (and their inverse) everywhere, not just at specific sample points.

You can construct a transform from displacements known at random points by creating a [thin-plate-spline transform](https://vtk.org/doc/nightly/html/classvtkThinPlateSplineTransform.html). It is probably 10-15 lines of Python code: use original point coordinates as source landmarks, use warp filter to compute displaced point coordinates, use those as target landmarks, then set the VTK transform to a new transform node.

If you had many thousands of points then evaluating the thin-plate-spline transform could take a long time. You can then use [ScatteredTransform extension](https://www.slicer.org/wiki/Documentation/Nightly/Extensions/ScatteredTransform) to create a regularly sampled b-spline displacement field from sparse samples, which may make the transform magnitudes faster to evaluate.

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [February 27, 2020, 3:10am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/3 "2020-02-27T03:10:23Z")

</div>

> [@lassoan](#):
>
> arp filter to compute displaced point coordinates,

Hi Andras,  
Would you please give me some information on how can i use warpbyvector filter in slicer for warping models.

Thank you

Regards,  
Saima Safdar

---

<div class="post-metadata">

### Author: ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)
#### Post date: [February 27, 2020, 8:09pm UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/4 "2020-02-27T20:09:34Z")

</div>

You can get the mesh from the model node, set it as input to a [vtkWarpVector](https://vtk.org/doc/nightly/html/classvtkWarpVector.html#details), and create a new model from the output of the filter.

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [March 5, 2020, 5:54am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/5 "2020-03-05T05:54:01Z")

</div>

Hi Andras,  
I tried it  
mesh = model.GetMesh()  
warpvector = vtk.vtkWarpVector()  
warpvector.SetInputData(mesh)  
warpvector.Update()  
output = warpvector.GetUnstructuredGridOutput()

mesh2 = vtk.vtkUnstructuredGrid()  
mesh2.SetPoints(output.GetPoints())  
mesh2.SetCells(output.GetCellTypesArray(),output.GetCellLocationsArray(), output.GetCells())  
mesh2.UpdateCellGhostArrayCache()  
mesh2.UpdatePointGhostArrayCache()

modelNode = slicer.mrmlScene.AddNewNodeByClass(‘vtkMRMLModelNode’)  
modelNode.SetAndObserveMesh(mesh2)

but didnt get the warped model. Could you please see what am I missing in the code above.

It gives me the exact model as before.

Thanks alot

Regards,  
Saima Safdar

---

<div class="post-metadata">

### Author: ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)
#### Post date: [March 5, 2020, 1:38pm UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/6 "2020-03-05T13:38:55Z")

</div>

Probably you just miss active vector selection, warping mode setting, etc. Check out warp filter [VTK examples](https://lorensen.github.io/VTKExamples/site) to see what exactly you need to set and how.

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [March 6, 2020, 5:31am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/7 "2020-03-06T05:31:26Z")

</div>

Thanks Andras. Yes I was missing the setactivevectors for the mesh grid.

Thanks a lot

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [May 1, 2020, 6:12am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/8 "2020-05-01T06:12:21Z")

</div>

Hi andras,  
Is it possible to show the coloring for the deformed mesh according to the displacements

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [January 29, 2021, 5:47am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/9 "2021-01-29T05:47:55Z")

</div>

Hi Andras,  
I am trying to offset a mesh using warpvector by setting the setscalarfactor. But dont know what is missing . could you please see the attached code.

Thank you or is there any other way to get one or two layers of extranodes around the existing mesh.

Thank you  
modelNode = slicer.mrmlScene.AddNewNodeByClass(‘vtkMRMLModelNode’)

```
  model = slicer.util.getNode(inputModel.GetID())
  mesh = model.GetMesh()
  mesh.GetPointData().SetActiveVectors("Displacements")
  warpvector = vtk.vtkWarpVector()
  warpvector.SetInputData(mesh)
  warpvector.SetInputArrayToProcess(0,0,0,"vtkDataObject::FIELD_ASSOCIATION_POINTS", "Displacements")

  warpvector.SetScaleFactor(1.0)
  warpvector.Update()
  output = warpvector.GetUnstructuredGridOutput()
  
  mesh2 = vtk.vtkUnstructuredGrid()
  mesh2.SetPoints(output.GetPoints())
  mesh2.SetCells(output.GetCellTypesArray(),output.GetCellLocationsArray(), output.GetCells())
  mesh2.UpdateCellGhostArrayCache()
  mesh2.UpdatePointGhostArrayCache()
  modelNode.SetAndObserveMesh(mesh2)   

```

Regards,  
Saima sAfdar

---

<div class="post-metadata">

### Author: ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)
#### Post date: [January 29, 2021, 5:55am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/10 "2021-01-29T05:55:31Z")

</div>

> [@Saima](#):
>
> `warpvector.SetInputArrayToProcess(0,0,0,"vtkDataObject::FIELD_ASSOCIATION_POINTS", "Displacements")`

This syntax does not look familiar. Normally we use something like this:

```
threshold.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, "Distance")

```

> [@Saima](#):
>
> ` output = warpvector.GetUnstructuredGridOutput()`

We usually simply use `output = warpvector.GetOutput()`.

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [January 29, 2021, 5:59am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/11 "2021-01-29T05:59:07Z")

</div>

Hi Andras.  
I am getting the output mesh but with no scalar factor. THe code I pasted is without errors but I dont get desired output.

I do not understand threshold line …

Regards,  
Saima Safdar

---

<div class="post-metadata">

### Author: ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)
#### Post date: [January 29, 2021, 6:02am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/12 "2021-01-29T06:02:43Z")

</div>

> [@Saima](#):
>
> I am getting the output mesh but with no scalar factor.

I don’t understand what you mean by this.

You can check our VTK examples website for complete examples of using the warp filter. One you get an example working, modify it step by step so that it does exactly what you need.

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [February 1, 2022, 5:16am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/13 "2022-02-01T05:16:26Z")

</div>

Dear Andras,  
I am trying to visualise the electric potential within 3D slicer. In paraview, I can use select potentail from a drop down window and then apply rescale to visible data range and it shoes me a coloured vtk mesh. Mesh is a hexahedral mesh.

How can I do something like below in paraview in 3D slicer:

 ![eeg](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/e/9/e9100f22de705ce47c06d5e472f1d18f46a318ef.jpeg)

---

<div class="post-metadata">

### Author: ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)
#### Post date: [February 1, 2022, 5:35am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/14 "2022-02-01T05:35:08Z")

</div>

In Slicer you can configure how a scalar array colors a model in Models module / Display / Scalars section.

---

<div class="post-metadata">

### Author: ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)
#### Post date: [February 4, 2022, 6:40am UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/15 "2022-02-04T06:40:10Z")

</div>

> [@lassoan](#):
>
> ow a scalar array colors a mod

Hi Andras,  
I can see all variable in active scalar under scalar section, but when i select variable it does not show it on the model.

![pic](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/4/3/433700bd28dfa8b5f0755038e8056a34f77ec84a.jpeg)  
 ![pic2](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/2/e/2ef05e3d4fcc3dd5ef78236db5c01a947bc77f1e.jpeg)

regards,  
Saima Safdar

---

<div class="post-metadata">

### Author: ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)
#### Post date: [February 8, 2022, 8:03pm UTC](https://discourse.slicer.org/t/displacement-vector-visualisation/6180/16 "2022-02-08T20:03:17Z")

</div>

You have set a very large display range for `potential`, therefore all your valid values have very similar color. Reduce the displayed range manually or switch to `Scalar range mode` → `Data scalar range (auto)`.
