This was written mainly to get to grips with python in blender. Select a mesh object and this script will randomise the vertex positions - useful for creating irregular bricklike objects and losing that too perfect 3d look.
If people think this is useful I will improve it to do things like shift verts in the vertex normal direction, make multiple randomised copies of an object, and maybe random object distribution as well. Let me know what you think.
BTW, I think you’ll need the full python install to access the ‘random’ module used.
Sorry, no time to upload a file, so you’ll have to copy and paste the following into blender…
# 'Randomiser'
# Randomises the vertices in selected object
import Blender
from Blender import *
from random import randint, random
def randomise():
obj = Blender.Object.GetSelected()
if obj !=[] and len(obj) == 1:
obj = obj[0]
newobj = Blender.Object.New("Mesh")
newobj.loc = obj.loc[0] + 1,obj.loc[1] + 1,obj.loc[2] + 1
newmesh = Blender.NMesh.GetRawFromObject(obj.name)
s = Blender.Scene.getCurrent()
newobj.link(newmesh)
s.link(newobj)
for v in newmesh.verts:
new = jitter(v.co[0], v.co[1], v.co[2])
v.co[0] = new[0]
v.co[1] = new[1]
v.co[2] = new[2]
newmesh.update()
else:
print "Select one mesh object only!"
def jitter(x,y,z):
if usex.val:
rx =randint(-1,1)* random()/scale.val
x = x + rx
if usey.val:
ry =randint(-1,1)* random()/scale.val
y = y + ry
if usez.val:
rz =randint(-1,1)* random()/scale.val
z = z + rz
return x,y,z
def gui():
global scale, usex, usey, usez
BGL.glClearColor(0,0.1,0.2, 1)
BGL.glColor3f(0.75,0.75,0.75)
BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)
BGL.glRasterPos2d(10, 200)
Blender.Draw.Text("VERTEX RANDOMISER")
BGL.glRasterPos2d(10, 180)
Blender.Draw.Text("Select a mesh, set the scale and axis options and hit the randomise button")
BGL.glRasterPos2d(10, 60)
Blender.Draw.Text("The higher the scale value, the smaller the displacement")
scale = Blender.Draw.Number("Scale = ",3,10,100,100,25,10,1,100,"Higher value = smaller displacement")
usex = Blender.Draw.Toggle("x",4,10,140,25,25,1,"Allow displacement in x axis")
usey = Blender.Draw.Toggle("y",5,37,140,25,25,1,"Allow displacement in y axis")
usez = Blender.Draw.Toggle("z",6,64,140,25,25,1,"Allow displacement in z axis")
Blender.Draw.Button("Randomise",2,10,10,100,25,"Randomise verts of selected mesh")
Blender.Draw.Button("Exit", 1, 120,10,100,25, "Exit randomiser script")
def event(evt, val):
if (evt== Blender.Draw.QKEY and not val):
Draw.Exit()
def bevent(evt):
if (evt== 2):
randomise()
Blender.Redraw()
if evt == 1:
draw.Exit()
Blender.Draw.Register(gui, event, bevent)