Create a markups plane programmatically

I don’t know how to create a markups plane through code. I tried the following with no success:

A = slicer.vtkMRMLMarkupsPlaneNode()
A.SetOrigin([0,0,0])
A.SetNormal([0,0,1])
A.SetAxes([1,0,0],[0,1,0],[0,0,1])
A.UpdateScene(slicer.mrmlScene)

Expected behaviour: A new plane is shown on the 3D view and on the Markups Node list.

You need to add the node to the scene first. Try:

A = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLMarkupsPlaneNode")
A.SetOrigin([0,0,0])
A.SetNormal([0,0,1])
A.SetAxes([1,0,0],[0,1,0],[0,0,1])

In math only with an point and a normal vector it is possible to define a plane. So why do we use SetAxes function and what does it does?
Then, I have a transform linked to the PlaneToWorldMatrix of the plane and it’s applied to a model. Why when I execute these lines the position of the model changes for the same normal vector?:

plane.SetNormal([0,0,1])#
plane.SetNormal([0,1,0])
plane.SetNormal([1,0,0])
plane.SetNormal([0,0,1])#
plane.SetNormal([0,1,0])
plane.SetNormal([1,0,0])

How does the SetNormal function works?