Cube pyramid script help

I am trying to make a pyramid of cube with python. I am doing this by duplicating the cube, and then moving it to a certain position. This is my current script:

import Blender
from Blender import NMesh
obj = NMesh.GetRaw("Cube")
for i in range(0,20,1):
    for j in range(0,20,1):
        for k in range(0,20,1):
            v=NMesh
    Example = Blender.Object.Get("Cube")
    Blender.Object.Duplicate()
    Example.LocX -= 0.3510
    Example.LocZ -= 2.0390
    Example.LocY -= 0.261
    Blender.Redraw()

It doesn’t work properly, the cubes don’t go to the right position, but they do if I don’t make the script repeat.

Bump, any suggestions?

sorry but nmesh should not be use itis derecated !

use mesh instead

good luck

Here this works:

from Blender import *
import bpy

def Cube_pyramid():
    sce = bpy.data.scenes.active
    ob = Object.Get("Cube")
    ob.sel = 1
    for z in range(20):
        for x in range(-z,z):
            for y in range(-z,z):
                Object.Duplicate(mesh=1,material=1,texture=1,ipo=1)
                ob_new = sce.objects.active
                ob_new.loc = (2*x+1,2*y+1,-2*z)
                
    Window.RedrawAll()
    return

Cube_pyramid()

I dont know how much you should wait it to finish with z = 20… I tried it with z = 11 and in about a minute it produced this (consisting of 1541 cubes, including the original):

http://abidos.rbcmail.ru/Pics/Cube_pyramid_10.jpg

For z = 20, N_cubes should be = 11481 :eek:

Regards,

but don’t forget the real one has 2,400,000 blocks

but don’t really need to do the inside ones
but stil represent a lot

any way to add theses blocks only on the outside layer?

and how to get some ramdom lenght for the blocks to make a row
any possibilities for this ?

would look more like the eal one

Thanks

It is a matter of a script producing the cubes ONLY where they are really visible… :wink:

Regards,

In blender 2.69, this is my 2 examples scripts:

https://raw.github.com/zebus3d/varios_blender/master/ejercicio_piramide3d_blender.py


import bpy

# selecciono todo y lo borro:
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)

diametro = 8
# si el diametro es mayor que la altura 
# en la cima quedara una base muy amplia
x = diametro
y = diametro
# si el diametro es bajo por mas que tegamos 
# mas altura, el maximo de altura sera lo que permita las restas del diametro
altura = 8

def laminas2D(x,y,z):
    for v in range(-x,x): # -x es un -8,-7,-6,etc... y x es 8,7,6,etc...
        for h in range(-y,y):
            # a las posiciones h,v les resto de offset x,y para que se centren sobre si mismas
            bpy.ops.mesh.primitive_cube_add(view_align=False,location=(v*2, h*2, z*2))
        
# para darle la profundidad en z:
for i in range(altura):
    laminas2D(x,y,i)
    x -= 1  # le voy restando para que cada pasada al subir de altura las laminas sean de menor size
    y -= 1  # le voy restando para que cada pasada al subir de altura las laminas sean de menor size

https://raw.github.com/zebus3d/varios_blender/0e31261450e53664d78a01651b8e996dda40c7df/ejercicio_piramide3d_blender.py


import bpy

# selecciono todo y lo borro:
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)

diametro = 8
# si el diametro es mayor que la altura 
# en la cima quedara una base muy amplia
x = diametro
y = diametro
# si el diametro es bajo por mas que tegamos 
# mas altura, el maximo de altura sera lo que permita las restas del diametro
altura = 8

def laminas2D(x,y,z):
    for v in range(y):
        for h in range(x):
            # a las posiciones h,v les voy sumando z para que se vayan centrando...
            bpy.ops.mesh.primitive_cube_add(view_align=False,location=(h*2+z, v*2+z, z*2))
        
# para darle la profundidad en z:
for i in range(altura):
    laminas2D(x,y,i)
    x -= 1  # le voy restando para que cada pasada al subir de altura las laminas sean de menor size
    y -= 1  # le voy restando para que cada pasada al subir de altura las laminas sean de menor size

:slight_smile: