# How to change the rotation center point for vtkTransform?

**URL:** https://discourse.vtk.org/t/how-to-change-the-rotation-center-point-for-vtktransform/9877
**Category:** Support
**Created:** [November 18, 2022, 8:33am UTC](https://discourse.vtk.org/t/how-to-change-the-rotation-center-point-for-vtktransform/9877 "2022-11-18T08:33:21Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![zhang-qiang-github](https://discourse.vtk.org/user_avatar/discourse.vtk.org/zhang-qiang-github/32/2519_2.png) [@zhang-qiang-github](https://discourse.vtk.org/u/zhang-qiang-github)
#### Post date: [November 18, 2022, 8:33am UTC](https://discourse.vtk.org/t/how-to-change-the-rotation-center-point-for-vtktransform/9877/1 "2022-11-18T08:33:21Z")

</div>

For example, I have a cylinder, whose center point is `(0, 10, 0)`. I want this cylinder can rotation 30 degree along x axis with `(0, 10, 0)` as the rotation center. My code is:

```auto
import vtkmodules.all as vtk

cylinder = vtk.vtkCylinderSource()
cylinder.SetCenter(0, 10, 0)
cylinder.SetRadius(5)
cylinder.SetHeight(10)
cylinder.SetResolution(100)
cylinder.Update()

cylinderMapper = vtk.vtkPolyDataMapper()
cylinderMapper.SetInputData(cylinder.GetOutput())
cylinderActor = vtk.vtkActor()
cylinderActor.SetMapper(cylinderMapper)
cylinderActor.GetProperty().SetOpacity(0.3)

########################################################
# rotation 
transform = vtk.vtkTransform()
transform.RotateX(30)
cylinderActor.SetUserTransform(transform)
########################################################

def Line(p0, p1, c):

    line = vtk.vtkLineSource()
    line.SetPoint1(p0[0], p0[1], p0[2])
    line.SetPoint2(p1[0], p1[1], p1[2])
    line.Update()

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputData(line.GetOutput())
    actor = vtk.vtkActor()
    actor.SetMapper(mapper)
    actor.GetProperty().SetColor(c[0], c[1], c[2])
    return actor

x = Line(p0=[0, 0, 0], p1=[20, 0, 0], c=[1, 0, 0])
y = Line(p0=[0, 0, 0], p1=[0, 20, 0], c=[0, 1, 0])
z = Line(p0=[0, 0, 0], p1=[0, 0, 20], c=[0, 0, 1])

renderer = vtk.vtkRenderer()
renderer.AddActor(cylinderActor)
renderer.AddActor(x)
renderer.AddActor(y)
renderer.AddActor(z)

renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(renderer)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
iren.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
iren.Initialize()
iren.Start()

```

The final result is:

![image](https://discourse.vtk.org/uploads/default/original/2X/2/2411dbad7c0cc8294541ff8cb92bcfd9b33efcaa.png)

We can see that the rotation center point is `(0, 0, 0)`. How can I set the rotation center point to `(0, 10, 0)`. I hope I can ahieve the following picture:

![image](https://discourse.vtk.org/uploads/default/original/2X/d/d152c5f76d7ccd1e15f7d5e5b99a5571ad58a9f0.png)

The above figure is obtained using `vtk3DProp::SetOrigin` & `vtk3DProp::RotateX`. How can I achieve the same result using `vtkTransform` and `SetUserTransform`.

Ang suggestion is appreciated~~~

---

<div class="post-metadata">

### Author: ![Paulo\_Carvalho](https://discourse.vtk.org/user_avatar/discourse.vtk.org/paulo_carvalho/32/370_2.png) [@Paulo\_Carvalho](https://discourse.vtk.org/u/Paulo_Carvalho)
#### Post date: [November 24, 2022, 7:24pm UTC](https://discourse.vtk.org/t/how-to-change-the-rotation-center-point-for-vtktransform/9877/2 "2022-11-24T19:24:29Z")

</div>

Hello,

A rotation is always with respect to (0,0,0). Hence, to effect a rotation centered at (0,10,0), you have to compose three transforms: 1) translate by (0,-10,0); 2) rotate; 3) translate by (0,10,0).

```cpp
transform = vtk.vtkTransform()
transform.Translate(0,10,0)
transform.RotateX(30)
transform.Translate(0,-10,0)
cylinderActor.SetUserTransform(transform)

```

No, it’s not inverted. Remember the linear algebra: the first transform is the last in effect.

cheers,

Paulo
