# Question PlaneNode Normal

**URL:** <https://discourse.slicer.org/t/question-planenode-normal/44685>\
**Category:** Support\
**Created:** [October 7, 2025, 11:11am UTC](https://discourse.slicer.org/t/question-planenode-normal/44685 "2025-10-07T11:11:39Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![evaherbst](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/evaherbst/32/65595_2.png) [@evaherbst](https://discourse.slicer.org/u/evaherbst)\
**Post date:** [October 7, 2025, 11:11am UTC](https://discourse.slicer.org/t/question-planenode-normal/44685/1 "2025-10-07T11:11:39Z")

</div>

I am currently creating planes based on 3 control points as follows:

> planeNode = slicer.mrmlScene.AddNewNodeByClass(“vtkMRMLMarkupsPlaneNode”, “myPlaneNode")
> 
> planeNode.SetPlaneType(2) # PlaneTypeThreePoints
> 
> planeNode.AddControlPoint(p1[0], p1[1], p1[2])
> 
> planeNode.AddControlPoint(p2[0], p2[1], p2[2])
> 
> planeNode.AddControlPoint(p3[0], p3[1], p3[2])

However, sometimes the normal points correctly following right hand rule of order of points

i.e. it matches the normal that I can compute in python:

n1 = np.cross(p2 - p1, p3 - p1) # Normal direction for the plane

but other times the normal is flipped.

I see I can also set the plane by normal as a solution, but I want to understand how the normal is assigned for the 3 point based plane method (does it follow the right hand rule based on order of control points or not?).

Thank you.

---

<div class="post-metadata">

**Author:** ![mau\_igna\_06](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/mau_igna_06/32/9056_2.png) [@mau\_igna\_06](https://discourse.slicer.org/u/mau_igna_06)\
**Post date:** [October 7, 2025, 12:12pm UTC](https://discourse.slicer.org/t/question-planenode-normal/44685/2 "2025-10-07T12:12:01Z")

</div>

The code is opensource so you can check out the implementation:

> <https://github.com/Slicer/Slicer/blob/4a1e4f8ddf25bd73198c81b8cb9c67d0bd88238f/Libs/MRML/Core/vtkMRMLMarkupsPlaneNode.cxx#L571-L583>

HIH

---

<div class="post-metadata">

**Author:** ![evaherbst](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/evaherbst/32/65595_2.png) [@evaherbst](https://discourse.slicer.org/u/evaherbst)\
**Post date:** [October 7, 2025, 1:37pm UTC](https://discourse.slicer.org/t/question-planenode-normal/44685/3 "2025-10-07T13:37:59Z")

</div>

Thank you!

That answers my question, the bug must be somewhere else on my end.

Best,

Eva
