# Adrian Tudor Web Designer and Programmer

## Catalin George Festila: Blender 3D – ellipsoid.

This is a simple way to use Blender 3D – version 2.78c with python scripting tool to make one ellipsoid.

The ellipsoid may be parameterized in several ways but I used sin and cos functions:
x = sin(theta) * sin(phi)
y = cos(theta) * sin(phi)
z = cos(phi)

• make points of ellipsoid – CoordsPoints
• define a elipsoid vectors
• create a new mesh
• make rings for faces
• make a ellipsoid
• The verts_mesh and verts_mesh_face are used to make faces
• put all into the Blender 3D scene

``import bpyimport bmeshfrom math import degrees, radians, sin, cos, tanfrom mathutils import Vectorclass CoordsPoints: @property def xyz(self): theta = self.theta phi = self.phi x = sin(theta) * sin(phi) y = cos(theta) * sin(phi) z = cos(phi) R = self.R return R * Vector((x,y,z)) def __init__(self, R, theta, phi): self.R = R self.theta = theta self.phi = phi #self.xyz = self.point(theta, phi) def __repr__(self): return "Coords(%.4f, %.4f)" % (degrees(self.theta), degrees(self.phi))# define the ellipsoid method.def ellipsoid(a, b, c): def ellipsoid(v): x = a * (v.x) y = b * (v.y) z = c * (v.z) return Vector((x, y, z)) return ellipsoid# make the ellipsoid bmeshbm = bmesh.new()# TODO come up with a nicer way to do this.rings = [[CoordsPoints(1, radians(theta), radians(phi))  for theta in range (0, 360, 2)] for phi in range(0, 180, 2)]h = ellipsoid(1.0, 1.0, 1.5)verts_mesh = [bm.verts.new(h(p.xyz)) for p in rings[0]]verts_mesh.append(verts_mesh[0])for ring in range(1, len(rings)): verts_mesh_face = [bm.verts.new(h(p.xyz)) for p in rings[ring]] verts_mesh_face.append(verts_mesh_face[0]) faces = [ bm.faces.new(( verts_mesh[i], verts_mesh_face[i], verts_mesh_face[i+1], verts_mesh[i+1] )) for i in range(len(verts_mesh) - 1) ] verts_mesh = verts_mesh_face# create mesh link it to scene mesh = bpy.data.meshes.new("ellipsoid")bm.to_mesh(mesh)obj = bpy.data.objects.new("ellipsoid", mesh)scene = bpy.context.scenescene.objects.link(obj)scene.objects.active = objobj.select = Trueobj.location = scene.cursor_location``

Back Top