Hi,
I would like to build a plane knowing only three points. Here is my code, but it dosen’t work can someone help please?
planes = []
planes.append(vtkPlanes())
planes[0].SetPoints(points_bct)
piano_aorta = planes[0].GetPlane(0)
The problem is that pianoaorta is empty
Welcome to VTK, @ioneianni !
I don’t believe vtkPlanes will compute a plane the way you want it to. You’ll instead have to supply an origin point and a normal to define the plane yourself. Fortunately, this isn’t too difficult.
Select one of your points {p1, p2, p3}
as the plane’s Origin. Let’s say you pick p1
. Now, compute two vectors v1
and v2
from the other two points by subtracting p1
from those points. Normalize the vectors. Finally, find the cross product of the normalized vectors to give you a normal.
In VTK code, you can do this with
from vtk import vtkMath
p1 = your first point. Could be list or tuple
p2 =
p3 =
v1 = [0, 0, 0] # make it a list because a list is assignable
v2 = [0, 0, 0]
normal = [0, 0, 0]
vtkMath::Subtract(p2, p1, v1);
vtkMath::Normalize(v1);
vtkMath::Subtract(p3, p1, v2);
vtkMath::Normalize(v2);
vtkMath::Cross(v1, v2, normal);
Now you can define a plane with something like
planes[0].SetNumberOfPlanes(1)
plane = planes[0].GetPlane(0)
plane.SetOrigin(p1)
plane.SetNormal(normal)
Hope that helps!
1 Like
Thanks, for your answer!