home *** CD-ROM | disk | FTP | other *** search
/ Windows News 2005 November / WNnov2005.iso / Windows / Equipement / Blender / blender-2.37a-windows.exe / $_5_ / .blender / scripts / bpymodules / defaultdoodads.py < prev    next >
Text File  |  2005-05-17  |  19KB  |  695 lines

  1. # Default Doodad Set for Discombobulator
  2. # by Evan J. Rosky, 2005
  3. # GPL- http://www.gnu.org/copyleft/gpl.html
  4. #
  5. # $Id: defaultdoodads.py,v 1.1 2005/05/17 19:56:29 ianwill Exp $
  6. # --------------------------------------------------------------------------
  7. # ***** BEGIN GPL LICENSE BLOCK *****
  8. #
  9. # Copyright (C) 2005: Evan J. Rosky
  10. #
  11. # This program is free software; you can redistribute it and/or
  12. # modify it under the terms of the GNU General Public License
  13. # as published by the Free Software Foundation; either version 2
  14. # of the License, or (at your option) any later version.
  15. #
  16. # This program is distributed in the hope that it will be useful,
  17. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
  19. # GNU General Public License for more details.
  20. #
  21. # You should have received a copy of the GNU General Public License
  22. # along with this program; if not, write to the Free Software Foundation,
  23. # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  24. #
  25. # ***** END GPL LICENCE BLOCK *****
  26. # --------------------------------------------------------------------------
  27.  
  28.  
  29. #Run discombobulator.py, not this.
  30.  
  31. import Blender
  32. from Blender import NMesh,Object,Material
  33. from Blender.NMesh import Vert,Face
  34. from Blender.Mathutils import *
  35.         
  36. import BPyMathutils
  37. from BPyMathutils import genrand
  38. a = BPyMathutils.sgenrand(4859)
  39.  
  40. #Create random numbers
  41. def randnum(low,high):
  42.     num = genrand()
  43.     num = num*(high-low)
  44.     num = num+low
  45.     return num
  46.  
  47. face = Face()
  48. xmin = Vector([0,0,0])
  49. xmax = Vector([0,0,0])
  50. ymin = Vector([0,0,0])
  51. ymax = Vector([0,0,0])
  52. mxmin = Vector([0,0,0])
  53. mxmax = Vector([0,0,0])
  54. mymin = Vector([0,0,0])
  55. mymax = Vector([0,0,0])
  56. doodadCenter = Vector([0,0,0])
  57. orientation = 0
  58. center = Vector([0,0,0])
  59. tosel = 0
  60. seltopsonly = 0
  61. tempx = []
  62. doodadMesh = NMesh.GetRaw()
  63.  
  64. #face is the face to add the doodad to.
  65. #sizeX and sizeY are values from 0.0 to 1.0 that represents a percentage the face that is covered by the doodad.
  66. #height is how tall the doodad is.
  67.  
  68. def topsonly(seltops):
  69.     global seltopsonly
  70.     seltopsonly = seltops
  71.  
  72. #Find center and orientation of doodad
  73. def findDoodadCenter(sizeX, sizeY):
  74.     #globalizing junk
  75.     global face
  76.     global xmin
  77.     global xmax
  78.     global ymin
  79.     global ymax
  80.     global orientation
  81.     global doodadCenter
  82.     global center
  83.     global tosel
  84.     global mxmin
  85.     global mxmax
  86.     global mymin
  87.     global mymax
  88.     global tempx
  89.     global seltopsonly
  90.     
  91.     #Find the center of the face
  92.     center = Vector([0,0,0])
  93.     for pt in face.v:
  94.         center = center + pt.co
  95.     center = center/len(face.v)
  96.     
  97.     #Find Temp Location Range by looking at the sizes
  98.     txmin = (((face.v[0].co + face.v[3].co)/2) - center)*(1-sizeX) + center
  99.     txmax = (((face.v[1].co + face.v[2].co)/2) - center)*(1-sizeX) + center
  100.     tymin = (((face.v[0].co + face.v[1].co)/2) - center)*(1-sizeY) + center
  101.     tymax = (((face.v[2].co + face.v[3].co)/2) - center)*(1-sizeY) + center
  102.     
  103.     #Find Center of doodad
  104.     amtx = randnum(0.0,1.0)
  105.     amty = randnum(0.0,1.0)
  106.     thepoint = (((((txmin - txmax)*amtx + txmax) - ((tymin - tymax)*amty + tymax))*.5 + ((tymin - tymax)*amty + tymax)) - center)*2 + center
  107.     doodadCenter = Vector([thepoint[0],thepoint[1],thepoint[2]])
  108.     
  109.     #Find Main Range by looking at the sizes
  110.     mxmin = (face.v[0].co + face.v[3].co)/2
  111.     mxmax = (face.v[1].co + face.v[2].co)/2
  112.     mymin = (face.v[0].co + face.v[1].co)/2
  113.     mymax = (face.v[2].co + face.v[3].co)/2
  114.     
  115.     #Find x/y equivs for whole face
  116.     ve1 = (txmin - txmax)*amtx + txmax
  117.     ve1 = ve1 - mxmax
  118.     nax = ve1.length
  119.     ve1 = (mxmin - mxmax)
  120.     nax = nax/ve1.length
  121.     
  122.     ve1 = (tymin - tymax)*amty + tymax
  123.     ve1 = ve1 - mymax
  124.     nay = ve1.length
  125.     ve1 = (mymin - mymax)
  126.     nay = nay/ve1.length
  127.     
  128.     #Find new box thing
  129.     tempx = []
  130.     amtx = nax-sizeX/2
  131.     amty = nay-sizeY/2
  132.     tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center)
  133.     
  134.     amtx = nax-sizeX/2
  135.     amty = nay+sizeY/2
  136.     tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center)
  137.     
  138.     amtx = nax+sizeX/2
  139.     amty = nay+sizeY/2
  140.     tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center)
  141.     
  142.     amtx = nax+sizeX/2
  143.     amty = nay-sizeY/2
  144.     tempx.append((((((mxmin - mxmax)*amtx + mxmax) - ((mymin - mymax)*amty + mymax))*.5 + ((mymin - mymax)*amty + mymax)) - center)*2 + center)
  145.     
  146.     #Find New Location Range by looking at the sizes
  147.     xmin = (tempx[0] + tempx[3])/2
  148.     xmax = (tempx[1] + tempx[2])/2
  149.     ymin = (tempx[0] + tempx[1])/2
  150.     ymax = (tempx[2] + tempx[3])/2
  151.  
  152. #Make a point
  153. def makePoint(x,y,z=0):
  154.     global xmin
  155.     global xmax
  156.     global ymin
  157.     global ymax
  158.     global doodadCenter
  159.     global tosel
  160.     global seltopsonly
  161.     global face
  162.  
  163.     amtx = x
  164.     amty = y
  165.     thepoint = (((((xmin - xmax)*amtx + xmax) - ((ymin - ymax)*amty + ymax))*.5 + ((ymin - ymax)*amty + ymax)) - doodadCenter)*2 + doodadCenter
  166.     thepoint = thepoint + z*Vector(face.no)
  167.     tver = Vert(thepoint[0],thepoint[1],thepoint[2])
  168.     if tosel == 1 and seltopsonly == 0 and z == 0:
  169.         tver.sel = 1
  170.     return tver
  171.  
  172. #extrude ground-plane(s)
  173. def extrudedoodad(vArray,heig):
  174.     global face
  175.     global doodadMesh
  176.     global tosel
  177.     
  178.     topVArray = []
  179.     
  180.     doodadMesh.verts.extend(vArray)
  181.     
  182.     #Create array for extruded verts
  183.     for ind in range(0,(len(vArray))):
  184.         point = vArray[ind].co + heig*Vector(face.no)
  185.         ver = Vert(point[0],point[1],point[2])
  186.         if tosel == 1:
  187.             ver.sel = 1
  188.         topVArray.append(ver)
  189.         doodadMesh.verts.append(topVArray[ind])
  190.     
  191.     #make faces around sides
  192.     for ind in range(0,(len(vArray) - 1)):
  193.         face = Face()
  194.         face.v.extend([vArray[ind],vArray[ind+1],topVArray[ind+1],topVArray[ind]])
  195.         if tosel == 1 and seltopsonly == 0: face.sel = 1
  196.         doodadMesh.faces.append(face)
  197.     face = Face()
  198.     face.v.extend([vArray[len(vArray) - 1],vArray[0],topVArray[0],topVArray[len(topVArray) - 1]])
  199.     if tosel == 1 and seltopsonly == 0: 
  200.             face.sel = 1
  201.     doodadMesh.faces.append(face)
  202.     
  203.     return topVArray
  204.  
  205. #For switching face vertices
  206. def fixvertindex(ind):
  207.     if ind > 3:
  208.         indx = ind - 4
  209.     else:
  210.         indx = ind
  211.     return indx
  212.  
  213. #runs doodads
  214. def createDoodad(indexArray,facec,minsi,maxsi,minhei,maxhei,selec,amtmin,amtmax,facpercent):
  215.     global doodadMesh
  216.     global seltopsonly
  217.     global tosel
  218.     
  219.     doodadMesh = NMesh.GetRaw()
  220.     
  221.     theamt = round(randnum(amtmin,amtmax),0)
  222.     theamt = int(theamt)
  223.     tosel = selec
  224.     
  225.     for i in range(0,(theamt)):
  226.         if randnum(0,1) <= facpercent:
  227.             index = round(randnum(1,len(indexArray)),0)
  228.             index = indexArray[(int(index) - 1)]
  229.             
  230.             Xsi = randnum(minsi,maxsi)
  231.             Ysi = randnum(minsi,maxsi)
  232.             hei = randnum(minhei,maxhei)
  233.                     
  234.             #Determine orientation
  235.             orient = int(round(randnum(0.0,3.0)))
  236.             
  237.             facer = Face()
  238.             facer.v.extend([facec.v[orient],facec.v[fixvertindex(1+orient)],facec.v[fixvertindex(2+orient)],facec.v[fixvertindex(3+orient)]])
  239.             
  240.             if index == 1:
  241.                 singleBox(facer,Xsi,Ysi,hei)
  242.             if index == 2:
  243.                 doubleBox(facer,Xsi,Ysi,hei)
  244.             if index == 3:
  245.                 tripleBox(facer,Xsi,Ysi,hei)
  246.             if index == 4:
  247.                 LShape(facer,Xsi,Ysi,hei)
  248.             if index == 5:
  249.                 TShape(facer,Xsi,Ysi,hei)
  250.             if index == 6:
  251.                 if randnum(0.0,1.0) > .5:
  252.                     SShape(facer,Xsi,Ysi,hei)
  253.                 else:
  254.                     ZShape(facer,Xsi,Ysi,hei)
  255.     
  256.     return doodadMesh
  257.  
  258. #Single Box Doodad
  259. def singleBox(facel, Xsize, Ysize, height):
  260.     #globaling junk
  261.     global face
  262.     global tosel
  263.     global doodadMesh
  264.     
  265.     face = Face()
  266.     face = facel
  267.     
  268.     findDoodadCenter(Xsize, Ysize)
  269.     
  270.     vertArray = []
  271.     
  272.     #place four points
  273.     vertArray.append(makePoint(0,0))
  274.     vertArray.append(makePoint(0,1))
  275.     vertArray.append(makePoint(1,1))
  276.     vertArray.append(makePoint(1,0))
  277.     topVertArray = extrudedoodad(vertArray,height)
  278.     
  279.     face = Face()
  280.     face.v.extend(vertArray)
  281.     face.v.reverse()
  282.     doodadMesh.faces.append(face)
  283.     face = Face()
  284.     face.v.extend(topVertArray)
  285.     if tosel == 1: 
  286.             face.sel = 1
  287.     doodadMesh.faces.append(face)
  288.     
  289. #Double Box Doodad
  290. def doubleBox(facel, Xsize, Ysize, height):
  291.     #globaling junk
  292.     global face
  293.     global tosel
  294.     global doodadMesh
  295.     
  296.     face = Face()
  297.     face = facel
  298.     
  299.     findDoodadCenter(Xsize, Ysize)
  300.     
  301.     vertArray = []
  302.     
  303.     #place first box
  304.     vertArray.append(makePoint(0,0))
  305.     vertArray.append(makePoint(0,1))
  306.     vertArray.append(makePoint(0.45,1))
  307.     vertArray.append(makePoint(0.45,0))
  308.     topVertArray = extrudedoodad(vertArray,height)
  309.     
  310.     face = Face()
  311.     face.v.extend(vertArray)
  312.     face.v.reverse()
  313.     doodadMesh.faces.append(face)
  314.     face = Face()
  315.     face.v.extend(topVertArray)
  316.     if tosel == 1: 
  317.             face.sel = 1
  318.     doodadMesh.faces.append(face)
  319.     
  320.     vertArray = []
  321.     
  322.     #place second box
  323.     vertArray.append(makePoint(0.55,0))
  324.     vertArray.append(makePoint(0.55,1))
  325.     vertArray.append(makePoint(1,1))
  326.     vertArray.append(makePoint(1,0))
  327.     topVertArray = extrudedoodad(vertArray,height)
  328.     
  329.     face = Face()
  330.     face.v.extend(vertArray)
  331.     face.v.reverse()
  332.     doodadMesh.faces.append(face)
  333.     face = Face()
  334.     face.v.extend(topVertArray)
  335.     if tosel == 1: 
  336.             face.sel = 1
  337.     doodadMesh.faces.append(face)
  338.  
  339. #Triple Box Doodad
  340. def tripleBox(facel, Xsize, Ysize, height):
  341.     #globaling junk
  342.     global face
  343.     global tosel
  344.     global doodadMesh
  345.     
  346.     face = Face()
  347.     face = facel
  348.     
  349.     findDoodadCenter(Xsize, Ysize)
  350.     
  351.     vertArray = []
  352.     
  353.     #place first box
  354.     vertArray.append(makePoint(0,0))
  355.     vertArray.append(makePoint(0,1))
  356.     vertArray.append(makePoint(0.3,1))
  357.     vertArray.append(makePoint(0.3,0))
  358.     topVertArray = extrudedoodad(vertArray,height)
  359.     
  360.     face = Face()
  361.     face.v.extend(vertArray)
  362.     face.v.reverse()
  363.     doodadMesh.faces.append(face)
  364.     face = Face()
  365.     face.v.extend(topVertArray)
  366.     if tosel == 1: 
  367.             face.sel = 1
  368.     doodadMesh.faces.append(face)
  369.     
  370.     vertArray = []
  371.     
  372.     #place second box
  373.     vertArray.append(makePoint(0.35,0))
  374.     vertArray.append(makePoint(0.35,1))
  375.     vertArray.append(makePoint(0.65,1))
  376.     vertArray.append(makePoint(0.65,0))
  377.     topVertArray = extrudedoodad(vertArray,height)
  378.     
  379.     face = Face()
  380.     face.v.extend(vertArray)
  381.     face.v.reverse()
  382.     doodadMesh.faces.append(face)
  383.     face = Face()
  384.     face.v.extend(topVertArray)
  385.     if tosel == 1: 
  386.             face.sel = 1
  387.     doodadMesh.faces.append(face)
  388.     
  389.     vertArray = []
  390.     
  391.     #place third box
  392.     vertArray.append(makePoint(0.7,0))
  393.     vertArray.append(makePoint(0.7,1))
  394.     vertArray.append(makePoint(1,1))
  395.     vertArray.append(makePoint(1,0))
  396.     topVertArray = extrudedoodad(vertArray,height)
  397.     
  398.     face = Face()
  399.     face.v.extend(vertArray)
  400.     face.v.reverse()
  401.     doodadMesh.faces.append(face)
  402.     face = Face()
  403.     face.v.extend(topVertArray)
  404.     if tosel == 1: 
  405.             face.sel = 1
  406.     doodadMesh.faces.append(face)
  407.  
  408. #The "L" Shape
  409. def LShape(facel, Xsize, Ysize, height):
  410.     #globaling junk
  411.     global face
  412.     global tosel
  413.     global doodadMesh
  414.     
  415.     face = Face()
  416.     face = facel
  417.     
  418.     findDoodadCenter(Xsize, Ysize)
  419.     
  420.     rcon1 = randnum(0.2,0.8)
  421.     rcon2 = randnum(0.2,0.8)
  422.     
  423.     vertArray = []
  424.     
  425.     #place L shape
  426.     vertArray.append(makePoint(0,0))
  427.     vertArray.append(makePoint(0,rcon1))
  428.     vertArray.append(makePoint(0,1))
  429.     vertArray.append(makePoint(rcon2,1))
  430.     vertArray.append(makePoint(rcon2,rcon1))
  431.     vertArray.append(makePoint(1,rcon1))
  432.     vertArray.append(makePoint(1,0))
  433.     vertArray.append(makePoint(rcon2,0))
  434.     topVertArray = extrudedoodad(vertArray,height)
  435.     
  436.     face = Face()
  437.     face.v.extend([vertArray[0],vertArray[1],vertArray[4],vertArray[7]])
  438.     face.v.reverse()
  439.     doodadMesh.faces.append(face)
  440.     face = Face()
  441.     face.v.extend([vertArray[1],vertArray[2],vertArray[3],vertArray[4]])
  442.     face.v.reverse()
  443.     doodadMesh.faces.append(face)
  444.     face = Face()
  445.     face.v.extend([vertArray[4],vertArray[5],vertArray[6],vertArray[7]])
  446.     face.v.reverse()
  447.     doodadMesh.faces.append(face)
  448.     
  449.     face = Face()
  450.     face.v.extend([topVertArray[0],topVertArray[1],topVertArray[4],topVertArray[7]])
  451.     if tosel == 1: 
  452.             face.sel = 1
  453.     doodadMesh.faces.append(face)
  454.     face = Face()
  455.     face.v.extend([topVertArray[1],topVertArray[2],topVertArray[3],topVertArray[4]])
  456.     if tosel == 1: 
  457.             face.sel = 1
  458.     doodadMesh.faces.append(face)
  459.     face = Face()
  460.     face.v.extend([topVertArray[4],topVertArray[5],topVertArray[6],topVertArray[7]])
  461.     if tosel == 1: 
  462.             face.sel = 1
  463.     doodadMesh.faces.append(face)
  464.     
  465. #The "T" Shape
  466. def TShape(facel, Xsize, Ysize, height):
  467.     #globaling junk
  468.     global face
  469.     global tosel
  470.     global doodadMesh
  471.     
  472.     face = Face()
  473.     face = facel
  474.     
  475.     findDoodadCenter(Xsize, Ysize)
  476.     
  477.     rcony = randnum(0.25,0.75)
  478.     rconx1 = randnum(0.1,0.49)
  479.     rconx2 = randnum(0.51,0.9)
  480.     
  481.     vertArray = []
  482.     
  483.     #place T shape
  484.     vertArray.append(makePoint(0,0))
  485.     vertArray.append(makePoint(0,rcony))
  486.     vertArray.append(makePoint(rconx1,rcony))
  487.     vertArray.append(makePoint(rconx1,1))
  488.     vertArray.append(makePoint(rconx2,1))
  489.     vertArray.append(makePoint(rconx2,rcony))
  490.     vertArray.append(makePoint(1,rcony))
  491.     vertArray.append(makePoint(1,0))
  492.     vertArray.append(makePoint(rconx2,0))
  493.     vertArray.append(makePoint(rconx1,0))
  494.     topVertArray = extrudedoodad(vertArray,height)
  495.     
  496.     face = Face()
  497.     face.v.extend([vertArray[0],vertArray[1],vertArray[2],vertArray[9]])
  498.     face.v.reverse()
  499.     doodadMesh.faces.append(face)
  500.     face = Face()
  501.     face.v.extend([vertArray[2],vertArray[3],vertArray[4],vertArray[5]])
  502.     face.v.reverse()
  503.     doodadMesh.faces.append(face)
  504.     face = Face()
  505.     face.v.extend([vertArray[5],vertArray[6],vertArray[7],vertArray[8]])
  506.     face.v.reverse()
  507.     doodadMesh.faces.append(face)
  508.     face = Face()
  509.     face.v.extend([vertArray[8],vertArray[9],vertArray[2],vertArray[5]])
  510.     face.v.reverse()
  511.     doodadMesh.faces.append(face)
  512.     
  513.     face = Face()
  514.     face.v.extend([topVertArray[0],topVertArray[1],topVertArray[2],topVertArray[9]])
  515.     if tosel == 1: 
  516.             face.sel = 1
  517.     doodadMesh.faces.append(face)
  518.     face = Face()
  519.     face.v.extend([topVertArray[2],topVertArray[3],topVertArray[4],topVertArray[5]])
  520.     if tosel == 1: 
  521.             face.sel = 1
  522.     doodadMesh.faces.append(face)
  523.     face = Face()
  524.     face.v.extend([topVertArray[5],topVertArray[6],topVertArray[7],topVertArray[8]])
  525.     if tosel == 1: 
  526.             face.sel = 1
  527.     doodadMesh.faces.append(face)
  528.     face = Face()
  529.     face.v.extend([topVertArray[8],topVertArray[9],topVertArray[2],topVertArray[5]])
  530.     if tosel == 1: 
  531.             face.sel = 1
  532.     doodadMesh.faces.append(face)
  533.     
  534. #The "S" or "Z" Shapes
  535. def SShape(facel, Xsize, Ysize, height):
  536.     #globaling junk
  537.     global face
  538.     global tosel
  539.     global doodadMesh
  540.     
  541.     face = Face()
  542.     face = facel
  543.     
  544.     findDoodadCenter(Xsize, Ysize)
  545.     
  546.     rcony1 = randnum(0.1,0.49)
  547.     rcony2 = randnum(0.51,0.9)
  548.     rconx1 = randnum(0.1,0.49)
  549.     rconx2 = randnum(0.51,0.9)
  550.     
  551.     vertArray = []
  552.     
  553.     #place S shape
  554.     vertArray.append(makePoint(0,0))
  555.     vertArray.append(makePoint(0,rcony1))
  556.     vertArray.append(makePoint(rconx1,rcony1))
  557.     vertArray.append(makePoint(rconx1,rcony2))
  558.     vertArray.append(makePoint(rconx1,1))
  559.     vertArray.append(makePoint(rconx2,1))
  560.     vertArray.append(makePoint(1,1))
  561.     vertArray.append(makePoint(1,rcony2))
  562.     vertArray.append(makePoint(rconx2,rcony2))
  563.     vertArray.append(makePoint(rconx2,rcony1))
  564.     vertArray.append(makePoint(rconx2,0))
  565.     vertArray.append(makePoint(rconx1,0))
  566.     topVertArray = extrudedoodad(vertArray,height)
  567.     
  568.     face = Face()
  569.     face.v.extend([vertArray[0],vertArray[1],vertArray[2],vertArray[11]])
  570.     face.v.reverse()
  571.     doodadMesh.faces.append(face)
  572.     face = Face()
  573.     face.v.extend([vertArray[2],vertArray[9],vertArray[10],vertArray[11]])
  574.     face.v.reverse()
  575.     doodadMesh.faces.append(face)
  576.     face = Face()
  577.     face.v.extend([vertArray[2],vertArray[3],vertArray[8],vertArray[9]])
  578.     face.v.reverse()
  579.     doodadMesh.faces.append(face)
  580.     face = Face()
  581.     face.v.extend([vertArray[3],vertArray[4],vertArray[5],vertArray[8]])
  582.     face.v.reverse()
  583.     doodadMesh.faces.append(face)
  584.     face = Face()
  585.     face.v.extend([vertArray[5],vertArray[6],vertArray[7],vertArray[8]])
  586.     face.v.reverse()
  587.     doodadMesh.faces.append(face)
  588.     
  589.     face = Face()
  590.     face.v.extend([topVertArray[0],topVertArray[1],topVertArray[2],topVertArray[11]])
  591.     if tosel == 1: 
  592.             face.sel = 1
  593.     doodadMesh.faces.append(face)
  594.     face = Face()
  595.     face.v.extend([topVertArray[2],topVertArray[9],topVertArray[10],topVertArray[11]])
  596.     if tosel == 1: 
  597.             face.sel = 1
  598.     doodadMesh.faces.append(face)
  599.     face = Face()
  600.     face.v.extend([topVertArray[2],topVertArray[3],topVertArray[8],topVertArray[9]])
  601.     if tosel == 1: 
  602.             face.sel = 1
  603.     doodadMesh.faces.append(face)
  604.     face = Face()
  605.     face.v.extend([topVertArray[3],topVertArray[4],topVertArray[5],topVertArray[8]])
  606.     if tosel == 1: 
  607.             face.sel = 1
  608.     doodadMesh.faces.append(face)
  609.     face = Face()
  610.     face.v.extend([topVertArray[5],topVertArray[6],topVertArray[7],topVertArray[8]])
  611.     if tosel == 1: 
  612.             face.sel = 1
  613.     doodadMesh.faces.append(face)
  614.     
  615. def ZShape(facel, Xsize, Ysize, height):
  616.     #globaling junk
  617.     global face
  618.     global tosel
  619.     global doodadMesh
  620.     
  621.     face = Face()
  622.     face = facel
  623.     
  624.     findDoodadCenter(Xsize, Ysize)
  625.     
  626.     rcony1 = randnum(0.1,0.49)
  627.     rcony2 = randnum(0.51,0.9)
  628.     rconx1 = randnum(0.1,0.49)
  629.     rconx2 = randnum(0.51,0.9)
  630.     
  631.     vertArray = []
  632.     
  633.     #place Z shape
  634.     vertArray.append(makePoint(0,0))
  635.     vertArray.append(makePoint(0,rcony1))
  636.     vertArray.append(makePoint(0,rcony2))
  637.     vertArray.append(makePoint(rconx1,rcony2))
  638.     vertArray.append(makePoint(rconx2,rcony2))
  639.     vertArray.append(makePoint(rconx2,1))
  640.     vertArray.append(makePoint(1,1))
  641.     vertArray.append(makePoint(1,rcony2))
  642.     vertArray.append(makePoint(1,rcony1))
  643.     vertArray.append(makePoint(rconx2,rcony1))
  644.     vertArray.append(makePoint(rconx1,rcony1))
  645.     vertArray.append(makePoint(rconx1,0))
  646.     topVertArray = extrudedoodad(vertArray,height)
  647.     
  648.     face = Face()
  649.     face.v.extend([vertArray[0],vertArray[1],vertArray[10],vertArray[11]])
  650.     face.v.reverse()
  651.     doodadMesh.faces.append(face)
  652.     face = Face()
  653.     face.v.extend([vertArray[1],vertArray[2],vertArray[3],vertArray[10]])
  654.     face.v.reverse()
  655.     doodadMesh.faces.append(face)
  656.     face = Face()
  657.     face.v.extend([vertArray[3],vertArray[4],vertArray[9],vertArray[10]])
  658.     face.v.reverse()
  659.     doodadMesh.faces.append(face)
  660.     face = Face()
  661.     face.v.extend([vertArray[4],vertArray[7],vertArray[8],vertArray[9]])
  662.     face.v.reverse()
  663.     doodadMesh.faces.append(face)
  664.     face = Face()
  665.     face.v.extend([vertArray[4],vertArray[5],vertArray[6],vertArray[7]])
  666.     face.v.reverse()
  667.     doodadMesh.faces.append(face)
  668.     
  669.     face = Face()
  670.     face.v.extend([topVertArray[0],topVertArray[1],topVertArray[10],topVertArray[11]])
  671.     if tosel == 1: 
  672.             face.sel = 1
  673.     doodadMesh.faces.append(face)
  674.     face = Face()
  675.     face.v.extend([topVertArray[1],topVertArray[2],topVertArray[3],topVertArray[10]])
  676.     if tosel == 1: 
  677.             face.sel = 1
  678.     doodadMesh.faces.append(face)
  679.     face = Face()
  680.     face.v.extend([topVertArray[3],topVertArray[4],topVertArray[9],topVertArray[10]])
  681.     if tosel == 1: 
  682.             face.sel = 1
  683.     doodadMesh.faces.append(face)
  684.     face = Face()
  685.     face.v.extend([topVertArray[4],topVertArray[7],topVertArray[8],topVertArray[9]])
  686.     if tosel == 1: 
  687.             face.sel = 1
  688.     doodadMesh.faces.append(face)
  689.     face = Face()
  690.     face.v.extend([topVertArray[4],topVertArray[5],topVertArray[6],topVertArray[7]])
  691.     if tosel == 1: 
  692.             face.sel = 1
  693.     doodadMesh.faces.append(face)
  694.     
  695.