diff options
Diffstat (limited to 'release/scripts/bpymodules/defaultdoodads.py')
-rw-r--r-- | release/scripts/bpymodules/defaultdoodads.py | 694 |
1 files changed, 694 insertions, 0 deletions
diff --git a/release/scripts/bpymodules/defaultdoodads.py b/release/scripts/bpymodules/defaultdoodads.py new file mode 100644 index 00000000000..b36f285e904 --- /dev/null +++ b/release/scripts/bpymodules/defaultdoodads.py @@ -0,0 +1,694 @@ +# Default Doodad Set for Discombobulator +# by Evan J. Rosky, 2005 +# GPL- http://www.gnu.org/copyleft/gpl.html +# +# $Id$ +# -------------------------------------------------------------------------- +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# Copyright (C) 2005: Evan J. Rosky +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** +# -------------------------------------------------------------------------- + + +#Run discombobulator.py, not this. + +import Blender +from Blender import NMesh,Object,Material +from Blender.NMesh import Vert,Face +from Blender.Mathutils import * + +import BPyMathutils +from BPyMathutils import genrand +a = BPyMathutils.sgenrand(4859) + +#Create random numbers +def randnum(low,high): + num = genrand() + num = num*(high-low) + num = num+low + return num + +face = Face() +xmin = Vector([0,0,0]) +xmax = Vector([0,0,0]) +ymin = Vector([0,0,0]) +ymax = Vector([0,0,0]) +mxmin = Vector([0,0,0]) +mxmax = Vector([0,0,0]) +mymin = Vector([0,0,0]) +mymax = Vector([0,0,0]) +doodadCenter = Vector([0,0,0]) +orientation = 0 +center = Vector([0,0,0]) +tosel = 0 +seltopsonly = 0 +tempx = [] +doodadMesh = NMesh.GetRaw() + +#face is the face to add the doodad to. +#sizeX and sizeY are values from 0.0 to 1.0 that represents a percentage the face that is covered by the doodad. +#height is how tall the doodad is. + +def topsonly(seltops): + global seltopsonly + seltopsonly = seltops + +#Find center and orientation of doodad +def findDoodadCenter(sizeX, sizeY): + #globalizing junk + global face + global xmin + global xmax + global ymin + global ymax + global orientation + global doodadCenter + global center + global tosel + global mxmin + global mxmax + global mymin + global mymax + global tempx + global seltopsonly + + #Find the center of the face + center = Vector([0,0,0]) + for pt in face.v: + center = center + pt.co + center = center/len(face.v) + + #Find Temp Location Range by looking at the sizes + txmin = (((face.v[0].co + face.v[3].co)/2) - center)*(1-sizeX) + center + txmax = (((face.v[1].co + face.v[2].co)/2) - center)*(1-sizeX) + center + tymin = (((face.v[0].co + face.v[1].co)/2) - center)*(1-sizeY) + center + tymax = (((face.v[2].co + face.v[3].co)/2) - center)*(1-sizeY) + center + + #Find Center of doodad + amtx = randnum(0.0,1.0) + amty = randnum(0.0,1.0) + thepoint = (((((txmin - txmax)*amtx + txmax) - ((tymin - tymax)*amty + tymax))*.5 + ((tymin - tymax)*amty + tymax)) - center)*2 + center + doodadCenter = Vector([thepoint[0],thepoint[1],thepoint[2]]) + + #Find Main Range by looking at the sizes + mxmin = (face.v[0].co + face.v[3].co)/2 + mxmax = (face.v[1].co + face.v[2].co)/2 + mymin = (face.v[0].co + face.v[1].co)/2 + mymax = (face.v[2].co + face.v[3].co)/2 + + #Find x/y equivs for whole face + ve1 = (txmin - txmax)*amtx + txmax + ve1 = ve1 - mxmax + nax = ve1.length + ve1 = (mxmin - mxmax) + nax = nax/ve1.length + + ve1 = (tymin - tymax)*amty + tymax + ve1 = ve1 - mymax + nay = ve1.length + ve1 = (mymin - mymax) + nay = nay/ve1.length + + #Find new box thing + tempx = [] + amtx = nax-sizeX/2 + amty = nay-sizeY/2 + tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center) + + amtx = nax-sizeX/2 + amty = nay+sizeY/2 + tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center) + + amtx = nax+sizeX/2 + amty = nay+sizeY/2 + tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center) + + amtx = nax+sizeX/2 + amty = nay-sizeY/2 + tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center) + + #Find New Location Range by looking at the sizes + xmin = (tempx[0] + tempx[3])/2 + xmax = (tempx[1] + tempx[2])/2 + ymin = (tempx[0] + tempx[1])/2 + ymax = (tempx[2] + tempx[3])/2 + +#Make a point +def makePoint(x,y,z=0): + global xmin + global xmax + global ymin + global ymax + global doodadCenter + global tosel + global seltopsonly + global face + + amtx = x + amty = y + thepoint = (((((xmin - xmax)*amtx + xmax) - ((ymin - ymax)*amty + ymax))*.5 + ((ymin - ymax)*amty + ymax)) - doodadCenter)*2 + doodadCenter + thepoint = thepoint + z*Vector(face.no) + tver = Vert(thepoint[0],thepoint[1],thepoint[2]) + if tosel == 1 and seltopsonly == 0 and z == 0: + tver.sel = 1 + return tver + +#extrude ground-plane(s) +def extrudedoodad(vArray,heig): + global face + global doodadMesh + global tosel + + topVArray = [] + + doodadMesh.verts.extend(vArray) + + #Create array for extruded verts + for ind in range(0,(len(vArray))): + point = vArray[ind].co + heig*Vector(face.no) + ver = Vert(point[0],point[1],point[2]) + if tosel == 1: + ver.sel = 1 + topVArray.append(ver) + doodadMesh.verts.append(topVArray[ind]) + + #make faces around sides + for ind in range(0,(len(vArray) - 1)): + face = Face() + face.v.extend([vArray[ind],vArray[ind+1],topVArray[ind+1],topVArray[ind]]) + if tosel == 1 and seltopsonly == 0: face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vArray[len(vArray) - 1],vArray[0],topVArray[0],topVArray[len(topVArray) - 1]]) + if tosel == 1 and seltopsonly == 0: + face.sel = 1 + doodadMesh.faces.append(face) + + return topVArray + +#For switching face vertices +def fixvertindex(ind): + if ind > 3: + indx = ind - 4 + else: + indx = ind + return indx + +#runs doodads +def createDoodad(indexArray,facec,minsi,maxsi,minhei,maxhei,selec,amtmin,amtmax,facpercent): + global doodadMesh + global seltopsonly + global tosel + + doodadMesh = NMesh.GetRaw() + + theamt = round(randnum(amtmin,amtmax),0) + theamt = int(theamt) + tosel = selec + + for i in range(0,(theamt)): + if randnum(0,1) <= facpercent: + index = round(randnum(1,len(indexArray)),0) + index = indexArray[(int(index) - 1)] + + Xsi = randnum(minsi,maxsi) + Ysi = randnum(minsi,maxsi) + hei = randnum(minhei,maxhei) + + #Determine orientation + orient = int(round(randnum(0.0,3.0))) + + facer = Face() + facer.v.extend([facec.v[orient],facec.v[fixvertindex(1+orient)],facec.v[fixvertindex(2+orient)],facec.v[fixvertindex(3+orient)]]) + + if index == 1: + singleBox(facer,Xsi,Ysi,hei) + if index == 2: + doubleBox(facer,Xsi,Ysi,hei) + if index == 3: + tripleBox(facer,Xsi,Ysi,hei) + if index == 4: + LShape(facer,Xsi,Ysi,hei) + if index == 5: + TShape(facer,Xsi,Ysi,hei) + if index == 6: + if randnum(0.0,1.0) > .5: + SShape(facer,Xsi,Ysi,hei) + else: + ZShape(facer,Xsi,Ysi,hei) + + return doodadMesh + +#Single Box Doodad +def singleBox(facel, Xsize, Ysize, height): + #globaling junk + global face + global tosel + global doodadMesh + + face = Face() + face = facel + + findDoodadCenter(Xsize, Ysize) + + vertArray = [] + + #place four points + vertArray.append(makePoint(0,0)) + vertArray.append(makePoint(0,1)) + vertArray.append(makePoint(1,1)) + vertArray.append(makePoint(1,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend(vertArray) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend(topVertArray) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + +#Double Box Doodad +def doubleBox(facel, Xsize, Ysize, height): + #globaling junk + global face + global tosel + global doodadMesh + + face = Face() + face = facel + + findDoodadCenter(Xsize, Ysize) + + vertArray = [] + + #place first box + vertArray.append(makePoint(0,0)) + vertArray.append(makePoint(0,1)) + vertArray.append(makePoint(0.45,1)) + vertArray.append(makePoint(0.45,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend(vertArray) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend(topVertArray) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + + vertArray = [] + + #place second box + vertArray.append(makePoint(0.55,0)) + vertArray.append(makePoint(0.55,1)) + vertArray.append(makePoint(1,1)) + vertArray.append(makePoint(1,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend(vertArray) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend(topVertArray) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + +#Triple Box Doodad +def tripleBox(facel, Xsize, Ysize, height): + #globaling junk + global face + global tosel + global doodadMesh + + face = Face() + face = facel + + findDoodadCenter(Xsize, Ysize) + + vertArray = [] + + #place first box + vertArray.append(makePoint(0,0)) + vertArray.append(makePoint(0,1)) + vertArray.append(makePoint(0.3,1)) + vertArray.append(makePoint(0.3,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend(vertArray) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend(topVertArray) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + + vertArray = [] + + #place second box + vertArray.append(makePoint(0.35,0)) + vertArray.append(makePoint(0.35,1)) + vertArray.append(makePoint(0.65,1)) + vertArray.append(makePoint(0.65,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend(vertArray) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend(topVertArray) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + + vertArray = [] + + #place third box + vertArray.append(makePoint(0.7,0)) + vertArray.append(makePoint(0.7,1)) + vertArray.append(makePoint(1,1)) + vertArray.append(makePoint(1,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend(vertArray) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend(topVertArray) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + +#The "L" Shape +def LShape(facel, Xsize, Ysize, height): + #globaling junk + global face + global tosel + global doodadMesh + + face = Face() + face = facel + + findDoodadCenter(Xsize, Ysize) + + rcon1 = randnum(0.2,0.8) + rcon2 = randnum(0.2,0.8) + + vertArray = [] + + #place L shape + vertArray.append(makePoint(0,0)) + vertArray.append(makePoint(0,rcon1)) + vertArray.append(makePoint(0,1)) + vertArray.append(makePoint(rcon2,1)) + vertArray.append(makePoint(rcon2,rcon1)) + vertArray.append(makePoint(1,rcon1)) + vertArray.append(makePoint(1,0)) + vertArray.append(makePoint(rcon2,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend([vertArray[0],vertArray[1],vertArray[4],vertArray[7]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[1],vertArray[2],vertArray[3],vertArray[4]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[4],vertArray[5],vertArray[6],vertArray[7]]) + face.v.reverse() + doodadMesh.faces.append(face) + + face = Face() + face.v.extend([topVertArray[0],topVertArray[1],topVertArray[4],topVertArray[7]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[1],topVertArray[2],topVertArray[3],topVertArray[4]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[4],topVertArray[5],topVertArray[6],topVertArray[7]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + +#The "T" Shape +def TShape(facel, Xsize, Ysize, height): + #globaling junk + global face + global tosel + global doodadMesh + + face = Face() + face = facel + + findDoodadCenter(Xsize, Ysize) + + rcony = randnum(0.25,0.75) + rconx1 = randnum(0.1,0.49) + rconx2 = randnum(0.51,0.9) + + vertArray = [] + + #place T shape + vertArray.append(makePoint(0,0)) + vertArray.append(makePoint(0,rcony)) + vertArray.append(makePoint(rconx1,rcony)) + vertArray.append(makePoint(rconx1,1)) + vertArray.append(makePoint(rconx2,1)) + vertArray.append(makePoint(rconx2,rcony)) + vertArray.append(makePoint(1,rcony)) + vertArray.append(makePoint(1,0)) + vertArray.append(makePoint(rconx2,0)) + vertArray.append(makePoint(rconx1,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend([vertArray[0],vertArray[1],vertArray[2],vertArray[9]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[2],vertArray[3],vertArray[4],vertArray[5]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[5],vertArray[6],vertArray[7],vertArray[8]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[8],vertArray[9],vertArray[2],vertArray[5]]) + face.v.reverse() + doodadMesh.faces.append(face) + + face = Face() + face.v.extend([topVertArray[0],topVertArray[1],topVertArray[2],topVertArray[9]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[2],topVertArray[3],topVertArray[4],topVertArray[5]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[5],topVertArray[6],topVertArray[7],topVertArray[8]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[8],topVertArray[9],topVertArray[2],topVertArray[5]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + +#The "S" or "Z" Shapes +def SShape(facel, Xsize, Ysize, height): + #globaling junk + global face + global tosel + global doodadMesh + + face = Face() + face = facel + + findDoodadCenter(Xsize, Ysize) + + rcony1 = randnum(0.1,0.49) + rcony2 = randnum(0.51,0.9) + rconx1 = randnum(0.1,0.49) + rconx2 = randnum(0.51,0.9) + + vertArray = [] + + #place S shape + vertArray.append(makePoint(0,0)) + vertArray.append(makePoint(0,rcony1)) + vertArray.append(makePoint(rconx1,rcony1)) + vertArray.append(makePoint(rconx1,rcony2)) + vertArray.append(makePoint(rconx1,1)) + vertArray.append(makePoint(rconx2,1)) + vertArray.append(makePoint(1,1)) + vertArray.append(makePoint(1,rcony2)) + vertArray.append(makePoint(rconx2,rcony2)) + vertArray.append(makePoint(rconx2,rcony1)) + vertArray.append(makePoint(rconx2,0)) + vertArray.append(makePoint(rconx1,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend([vertArray[0],vertArray[1],vertArray[2],vertArray[11]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[2],vertArray[9],vertArray[10],vertArray[11]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[2],vertArray[3],vertArray[8],vertArray[9]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[3],vertArray[4],vertArray[5],vertArray[8]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[5],vertArray[6],vertArray[7],vertArray[8]]) + face.v.reverse() + doodadMesh.faces.append(face) + + face = Face() + face.v.extend([topVertArray[0],topVertArray[1],topVertArray[2],topVertArray[11]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[2],topVertArray[9],topVertArray[10],topVertArray[11]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[2],topVertArray[3],topVertArray[8],topVertArray[9]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[3],topVertArray[4],topVertArray[5],topVertArray[8]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[5],topVertArray[6],topVertArray[7],topVertArray[8]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + +def ZShape(facel, Xsize, Ysize, height): + #globaling junk + global face + global tosel + global doodadMesh + + face = Face() + face = facel + + findDoodadCenter(Xsize, Ysize) + + rcony1 = randnum(0.1,0.49) + rcony2 = randnum(0.51,0.9) + rconx1 = randnum(0.1,0.49) + rconx2 = randnum(0.51,0.9) + + vertArray = [] + + #place Z shape + vertArray.append(makePoint(0,0)) + vertArray.append(makePoint(0,rcony1)) + vertArray.append(makePoint(0,rcony2)) + vertArray.append(makePoint(rconx1,rcony2)) + vertArray.append(makePoint(rconx2,rcony2)) + vertArray.append(makePoint(rconx2,1)) + vertArray.append(makePoint(1,1)) + vertArray.append(makePoint(1,rcony2)) + vertArray.append(makePoint(1,rcony1)) + vertArray.append(makePoint(rconx2,rcony1)) + vertArray.append(makePoint(rconx1,rcony1)) + vertArray.append(makePoint(rconx1,0)) + topVertArray = extrudedoodad(vertArray,height) + + face = Face() + face.v.extend([vertArray[0],vertArray[1],vertArray[10],vertArray[11]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[1],vertArray[2],vertArray[3],vertArray[10]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[3],vertArray[4],vertArray[9],vertArray[10]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[4],vertArray[7],vertArray[8],vertArray[9]]) + face.v.reverse() + doodadMesh.faces.append(face) + face = Face() + face.v.extend([vertArray[4],vertArray[5],vertArray[6],vertArray[7]]) + face.v.reverse() + doodadMesh.faces.append(face) + + face = Face() + face.v.extend([topVertArray[0],topVertArray[1],topVertArray[10],topVertArray[11]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[1],topVertArray[2],topVertArray[3],topVertArray[10]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[3],topVertArray[4],topVertArray[9],topVertArray[10]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[4],topVertArray[7],topVertArray[8],topVertArray[9]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + face = Face() + face.v.extend([topVertArray[4],topVertArray[5],topVertArray[6],topVertArray[7]]) + if tosel == 1: + face.sel = 1 + doodadMesh.faces.append(face) + |