import bpy import mathutils def draw_plane(hessian): # Extract the plane coefficients from the Hessian form a, b, c, d = hessian # Calculate the normal vector of the plane normal = mathutils.Vector((a, b, c)) # Calculate the point at the center of the plane point = normal * d # Calculate a vector perpendicular to the normal if abs(normal.z) < 1e-6: tangent = mathutils.Vector((0, 0, 1)) else: tangent = mathutils.Vector((0, 1, -normal.y/normal.z)).normalized() binorm = tangent.cross(normal) # Create a new mesh object for the point, dot, and line mesh = bpy.data.meshes.new(name="Plane Center and Normal") obj = bpy.data.objects.new(name="Plane Object", object_data=mesh) # Create the vertices for the point, dot, and line vertices = [ point + tangent * 0.1, point, point + normal, point + binorm * 0.1, ] # Create the edges for the line edges = [ (0, 1), # Edge from point to start of line (1, 2) , # Edge for the line (1, 3) ] # Create the mesh data for the point, dot, and line mesh.from_pydata(vertices, edges, []) # Add the object to the scene bpy.context.scene.collection.objects.link(obj) planes = [(-0.96225, 0.192449, 0.192451, -4.04145), (-0.404079, 0.888975, 0.21551, -3.85222), (-0.703526, -0.502519, -0.502519, -2.31159), (-0.123091, -0.86164, 0.492366, -2.33874), (-0.211079, -0.492518, 0.844317, -3.02547), (0.442326, 0.147442, 0.884652, -2.50651), (0.928279, -0.206284, 0.309426, -1.13456), (0.973329, -0.162221, 0.162222, -1.29777), (0.117041, 0.702247, -0.702247, -3.04307), (-9.6656e-08, 1.35319e-07, -1, -2)] #planes = [(0, 0, -1, -12), (0, 1, 0, 9)] for p in planes: draw_plane(p) #draw_plane((0, 1, 0, 11))