Función cubo usando una tortuga Logo

Artículo en construcción.

En el ejercicio Construir un cubo a partir de una tortuga Logo 3D , se explica detalladamente un algoritmo para construir un cubo.

En este ejercicio construiremos un cubo, cuyo origen esta en el centro del mismo, para ello plantearemos una función cubo, que utiliza otra función que construye un cuadrado que tiene su origen en el centro del mismo. Esta función cuadrado, se utilizan otras dos funciones andar, que hace avanzar a la tortuga y a su vez carga las nuevas coordenadas en la lista coords, la otra función es carga_cara que va cargando en una lista los datos de cada cara del cubo.

En principio parece algo complejo, pero lo explicaremos detalladamente. La ventaja que se obtiene es que cada vez que llamamos a la función cubo, hemos acumulado sus coordenadas y caras para luego poder usarlas al crear un objeto en blender.

Si Usted ya hizo el ejercicio Construir un cuadrado a partir de una tortuga Logo 3D , este ejercicio le resultara muy fácil de entender.

Este es el script

import bpy

from tortuga import Tortuga

coords=[]

faces=[]

t=Tortuga()

t.Rolar(90)

def createMesh(name, origin, verts, edges, faces):

# Create mesh and object

me = bpy.data.meshes.new(name+'Mesh')

ob = bpy.data.objects.new(name, me)

ob.location = origin

ob.show_name = True

# Link object to scene

bpy.context.scene.objects.link(ob)

# Create mesh from given verts, edges, faces. Either edges or

# faces should be [], or you ask for problems

me.from_pydata(verts, edges, faces)

# Update mesh with new data

me.update(calc_edges=True)

return ob

def carga_coords():

coordenada=[]

coordenada.append(t.X)

coordenada.append(t.Y)

coordenada.append(t.Z)

coords.append(coordenada)

def andar(paso):

t.Andar(paso)

carga_coords()

def carga_cara(v1,v2,v3,v4,lista):

cara=[]

cara.append(v1)

cara.append(v2)

cara.append(v3)

cara.append(v4)

lista.append(cara)

def cuadrado(lado):

t.Andar(-lado/2)

t.Virar(-90)

andar(lado/2)

t.Virar(90)

i=0

cara=[]

while i < 3:

andar(lado)

t.Virar(90)

i = i + 1

t.Andar(lado/2)

t.Virar(90)

t.Andar(lado/2)

carga_cara(len(coords)-4,len(coords)-3,len(coords)-2,len(coords)-1,faces)

def cubo(lado):

t.Cabecear(90)

t.Andar(-lado/2)

t.Cabecear(-90)

cuadrado(lado)

t.Cabecear(90)

t.Andar(lado)

t.Cabecear(-90)

cuadrado(lado)

t.Cabecear(90)

t.Andar(-lado/2)

t.Cabecear(-90)

carga_cara(len(coords)-8,len(coords)-4,len(coords)-3,len(coords)-7,faces)

carga_cara(len(coords)-7,len(coords)-6,len(coords)-2,len(coords)-3,faces)

carga_cara(len(coords)-6,len(coords)-5,len(coords)-1,len(coords)-2,faces)

carga_cara(len(coords)-8,len(coords)-5,len(coords)-1,len(coords)-4,faces)

Video que explica los pasos que se van dando en la funcion cuadrado(lado).

http://youtube.com/watch?v=GLkMKAlmiYU

Video que explica los pasos que se van dando en la funcion cubo(lado)

http://youtube.com/watch?v=x4Qlgjbglpk