diff options
Diffstat (limited to 'release/scripts/discombobulator.py')
-rw-r--r-- | release/scripts/discombobulator.py | 692 |
1 files changed, 523 insertions, 169 deletions
diff --git a/release/scripts/discombobulator.py b/release/scripts/discombobulator.py index 1128c51c731..be7df1dbc07 100644 --- a/release/scripts/discombobulator.py +++ b/release/scripts/discombobulator.py @@ -2,14 +2,14 @@ """ Name: 'Discombobulator' -Blender: 236 +Blender: 237 Group: 'Mesh' Tip: 'Adds random geometry to a mesh' """ __author__ = "Evan J. Rosky (syrux)" __url__ = ("Script's homepage, http://evan.nerdsofparadise.com/programs/discombobulator/index.html") -__version__ = "236" +__version__ = "237" __bpydoc__ = """\ Discombobulator adds random geometry to a mesh. @@ -27,7 +27,19 @@ about the top of a protrusion or face. Usage:<br> Input your settings, make sure the mesh you would like to modify -is selected (active) and then click on "Discombobulate". +is selected (active) and then click on "Discombobulate".<br> + See the scripts tutorial page (on the homepage) for more info. + + +New Features:<br> + - Will use existing materials if there are any.<br> + - Clicking "Assign materials by part" will allow assigning +of different material indices to Protrusion or Doodad Sides +and Tops in the gui element below it.<br> + - Setting a material index to 0 will use whatever material +is assigned to the face that is discombobulated. + - You can now scroll using the arrow keys. + Notes:<br> - Modifications can be restricted to selected faces @@ -55,9 +67,20 @@ You can find more information at the Link above. # $Id$ -# +# +# Updated 2006-09-26 +# Changes since last version: +# > Works with Blender CVS and hopefully with Blender 2.40. +# > Swaps min/max values when min>max rather than complaining. +# > Will keep previously assigned materials. +# > Now allows user to assign custom material indices to +# Protrusion and Doodad Sides and Tops. +# > The initial Gui Layout will change depending on the aspect +# ratio of the window it is in. +# > Using the arrow keys will scroll the gui. +# # -------------------------------------------------------------------------- -# Discombobulator v5.3.5.406893.potato +# Discombobulator v2.1 # by Evan J. Rosky, 2005 # This plugin is protected by the GPL: Gnu Public Licence # GPL - http://www.gnu.org/copyleft/gpl.html @@ -86,7 +109,7 @@ You can find more information at the Link above. #Hit Alt-P to run import Blender -from Blender import NMesh,Object,Material,Window +from Blender import NMesh,Object,Material,Window,Types from Blender.NMesh import Vert,Face from Blender.Mathutils import * @@ -102,11 +125,21 @@ def randnum(low,high): num = num+low return num - +#Object Vars origmesh = NMesh.GetRaw() newmesh = NMesh.GetRaw() origobj = Object.Get() newobj = Object.Get() +materialArray = [0] + +#Material Vars +reassignMats = 0 +protSideMat = 1 +protTopMat = 2 +doodSideMat = 3 +doodTopMat = 4 +thereAreMats = 0 +currmat = 0 #Global Vars makenewobj = 1 @@ -132,7 +165,6 @@ selectface2 = 1 selectface3 = 1 selectface4 = 1 deselface = 1 -#vertselected = 0 #Doodad Vars makedoodads = 1 @@ -163,6 +195,14 @@ def isselectedface(theface): return 0 return 1 +def arrayInInclusive(start,end): + arr = [] + i = start + while i <= end: + arr.append(i) + i = i + 1 + return arr + def makeSubfaceArray(): global subfaceArray global subface1 @@ -243,7 +283,7 @@ def extrude(mid,nor,protrusion,v1,v2,v3,v4,tosel=1,flipnor=0): faceindex = len(newmesh.verts) - 4 - #face 1 + #side face 1 face = Face() face.v.append(newmesh.verts[v1]) face.v.append(newmesh.verts[v2]) @@ -251,9 +291,14 @@ def extrude(mid,nor,protrusion,v1,v2,v3,v4,tosel=1,flipnor=0): face.v.append(newmesh.verts[faceindex]) if flipnor != 0: face.v.reverse() + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) - #face 2 + #side face 2 face = Face() face.v.append(newmesh.verts[v2]) face.v.append(newmesh.verts[v3]) @@ -261,9 +306,14 @@ def extrude(mid,nor,protrusion,v1,v2,v3,v4,tosel=1,flipnor=0): face.v.append(newmesh.verts[faceindex+1]) if flipnor != 0: face.v.reverse() + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) - #face 3 + #side face 3 face = Face() face.v.append(newmesh.verts[v3]) face.v.append(newmesh.verts[v4]) @@ -271,9 +321,14 @@ def extrude(mid,nor,protrusion,v1,v2,v3,v4,tosel=1,flipnor=0): face.v.append(newmesh.verts[faceindex+2]) if flipnor != 0: face.v.reverse() + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) - #face 4 + #side face 4 face = Face() face.v.append(newmesh.verts[v4]) face.v.append(newmesh.verts[v1]) @@ -281,28 +336,30 @@ def extrude(mid,nor,protrusion,v1,v2,v3,v4,tosel=1,flipnor=0): face.v.append(newmesh.verts[faceindex+3]) if flipnor != 0: face.v.reverse() + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) - + + #top face face = Face() face.v = newmesh.verts[-4:] if flipnor != 0: face.v.reverse() if tosel == 1: face.sel = 1 + if thereAreMats == 1: + if reassignMats == 0 or protTopMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protTopMat-1 newmesh.faces.append(face) return face -def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17): - - #Global - global origmesh - global newmesh - global makenewobj - global origobj - global newobj - global messagetext - global errortext - global editmode +#Sets the global protrusion values +def setProtrusionValues(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15): #Protrusions global makeprots @@ -321,50 +378,8 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d global selectface3 global selectface4 global deselface - #global vertselected global subfaceArray - #Doodads - global makedoodads - global doodadfacepercent - global selectdoodad - global onlyonprotrusions - global doodad1 - global doodad2 - global doodad3 - global doodad4 - global doodad5 - global doodad6 - global doodadminperface - global doodadmaxperface - global doodadminsize - global doodadmaxsize - global doodadminheight - global doodadmaxheight - global doodadArray - global doodonselectedfaces - global selectdoodadtoponly - - #Global - try: - origobj = Object.GetSelected()[0] - except: - glRasterPos2d(10,50) - errortext = "YOU MUST SELECT AN OBJECT!" - messagetext = ErrorText(errortext) - Blender.Redraw() - return - - #Leave Editmode - editmode = Window.EditMode() - if editmode: Window.EditMode(0) - - newobj = Object.Get() - origmesh = origobj.getData() - newmesh = NMesh.GetRaw() - newmesh.verts = [] - makenewobj = g0 - #Protrusions makeprots = p0 faceschangedpercent = p1 @@ -386,6 +401,38 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d if len(subfaceArray) == 0: makeprots = 0 + if minimumheight > maximumheight: + a = maximumheight + maximimheight = minimumheight + minimumheight = a + elif minimumtaperpercent > maximumtaperpercent: + a = maximumtaperpercent + maximimtaperpercent = minimumtaperpercent + minimumtaperpercent = a + +#Sets the global Doodad values +def setDoodadValues(d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17): + + #Doodads + global makedoodads + global doodadfacepercent + global selectdoodad + global onlyonprotrusions + global doodad1 + global doodad2 + global doodad3 + global doodad4 + global doodad5 + global doodad6 + global doodadminperface + global doodadmaxperface + global doodadminsize + global doodadmaxsize + global doodadminheight + global doodadmaxheight + global doodadArray + global doodonselectedfaces + global selectdoodadtoponly #Doodads makedoodads = d0 @@ -409,52 +456,171 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d makeDoodadArray() if len(doodadArray) == 0: makedoodads = 0 - defaultdoodads.topsonly(selectdoodadtoponly) - if minimumheight > maximumheight: - glColor3f(1.0,0.0,0.0) - glRasterPos2d(10,50) - errortext = "MIN HEIGHT MUST BE LESS THAN OR EQUAL TO MAX HEIGHT!" - messagetext = ErrorText(errortext) - Blender.Redraw() - return - elif minimumtaperpercent > maximumtaperpercent: - glColor3f(1.0,0.0,0.0) - glRasterPos2d(10,50) - errortext = "MIN TAPER MUST BE LESS THAN OR EQUAL TO MAX TAPER!" - messagetext = ErrorText(errortext) - Blender.Redraw() - return elif doodadminperface > doodadmaxperface: - glColor3f(1.0,0.0,0.0) - glRasterPos2d(10,50) - errortext = "MIN NUMBER OF DOODADS MUST BE LESS THAN OR EQUAL TO MAX!" - messagetext = ErrorText(errortext) - Blender.Redraw() - return + a = doodadmaxperface + doodadmaxperface = doodadminperface + doodadminperface = a elif doodadminsize > doodadmaxsize: - glColor3f(1.0,0.0,0.0) + a = doodadmaxsize + doodadmaxsize = doodadminsize + doodadminsize = a + elif doodadminheight > doodadmaxheight: + a = doodadmaxheight + doodadmaxheight = doodadminheight + doodadminheight = a + +#Sets other global values +def setOtherValues(g0,m0,m1,m2,m3,m4): + + #Global + global reassignMats + global makenewobj + global protSideMat + global protTopMat + global doodSideMat + global doodTopMat + + #Get Misc Variables + makenewobj = g0 + reassignMats = m0 + protSideMat = m1 + protTopMat = m2 + doodSideMat = m3 + doodTopMat = m4 + +def discombobulate(): + + #Global + global origmesh + global newmesh + global makenewobj + global origobj + global newobj + global messagetext + global errortext + global editmode + + #Protrusions + global makeprots + global minimumtaperpercent + global maximumtaperpercent + global faceschangedpercent + global minimumheight + global maximumheight + global subface1 + global subface2 + global subface3 + global subface4 + global useselectedfaces + global selectface1 + global selectface2 + global selectface3 + global selectface4 + global deselface + global subfaceArray + + #Doodads + global makedoodads + global doodadfacepercent + global selectdoodad + global onlyonprotrusions + global doodad1 + global doodad2 + global doodad3 + global doodad4 + global doodad5 + global doodad6 + global doodadminperface + global doodadmaxperface + global doodadminsize + global doodadmaxsize + global doodadminheight + global doodadmaxheight + global doodadArray + global doodonselectedfaces + global selectdoodadtoponly + + #Global + global materialArray + global reassignMats + global protSideMat + global protTopMat + global doodSideMat + global doodTopMat + global thereAreMats + global currmat + + try: + origobj = Object.GetSelected()[0] + except: glRasterPos2d(10,50) - errortext = "MIN DOODAD SIZE MUST BE LESS THAN OR EQUAL TO MAX!" + errortext = "YOU MUST SELECT AN OBJECT!" messagetext = ErrorText(errortext) Blender.Redraw() return - elif doodadminheight > doodadmaxheight: - glColor3f(1.0,0.0,0.0) + + #Leave Editmode + editmode = Window.EditMode() + if editmode: Window.EditMode(0) + + #Get Major Variables + newobj = Object.Get() + origmesh = origobj.getData() + if type(origmesh) != Types.NMeshType: glRasterPos2d(10,50) - errortext = "MIN DOODAD HEIGHT MUST BE LESS THAN OR EQUAL TO MAX!" + errortext = "OBJECT MUST BE MESH!" messagetext = ErrorText(errortext) Blender.Redraw() return + newmesh = NMesh.GetRaw() + newmesh.verts = [] + materialArray = origmesh.getMaterials() + if len(materialArray) < 1: + thereAreMats = 0 + else: + thereAreMats = 1 + + #add material indices if necessary (only up to 4) + if thereAreMats == 1 and reassignMats == 1: + if len(materialArray) < 4: + if protSideMat > 4: protSideMat = 4 + if protTopMat > 4: protTopMat = 4 + if doodSideMat > 4: doodSideMat = 4 + if doodTopMat > 4: doodTopMat = 4 + else: + if protSideMat > len(materialArray): protSideMat = len(materialArray) + if protTopMat > len(materialArray): protTopMat = len(materialArray) + if doodSideMat > len(materialArray): doodSideMat = len(materialArray) + if doodTopMat > len(materialArray): doodTopMat = len(materialArray) + + #This only does something if there are less than 4 verts + for matind in [protSideMat,protTopMat,doodSideMat,doodTopMat]: + if matind > len(materialArray) and matind <= 4: + for i in arrayInInclusive(len(materialArray),matind): + materialArray.append(Material.New("AddedMat " + str(i))) + + #Sets the materials + newmesh.setMaterials(materialArray) + + #Set the doodad settings + defaultdoodads.settings(selectdoodadtoponly,materialArray,reassignMats,thereAreMats,doodSideMat,doodTopMat) + #defaultdoodads.settings(selectdoodadtoponly,materialArray,reassignMats,thereAreMats,currmat) newmesh.verts.extend(origmesh.verts) + #Start modifying faces for currface in origmesh.faces: + currmat = currface.materialIndex + defaultdoodads.setCurrMat(currmat) + #Check if it is a triangle if len(currface.v)<4: face = Face() face.v.extend([newmesh.verts[currface.v[0].index],newmesh.verts[currface.v[1].index],newmesh.verts[currface.v[2].index]]) + if thereAreMats == 1: + face.materialIndex = currmat newmesh.faces.append(face) continue @@ -462,6 +628,8 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d if makeprots == 0: face = Face() face.v.extend([newmesh.verts[currface.v[0].index],newmesh.verts[currface.v[1].index],newmesh.verts[currface.v[2].index],newmesh.verts[currface.v[3].index]]) + if thereAreMats == 1: + face.materialIndex = currmat newmesh.faces.append(face) if makedoodads == 1 and onlyonprotrusions == 0: if doodonselectedfaces == 1: @@ -485,6 +653,8 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d else: face = Face() face.v.extend([newmesh.verts[currface.v[0].index],newmesh.verts[currface.v[1].index],newmesh.verts[currface.v[2].index],newmesh.verts[currface.v[3].index]]) + if thereAreMats == 1: + face.materialIndex = currmat newmesh.faces.append(face) if makedoodads == 1 and onlyonprotrusions == 0: if doodonselectedfaces != 1: @@ -497,6 +667,8 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d if randnum(0,1)>faceschangedpercent: face = Face() face.v.extend([newmesh.verts[currface.v[0].index],newmesh.verts[currface.v[1].index],newmesh.verts[currface.v[2].index],newmesh.verts[currface.v[3].index]]) + if thereAreMats == 1: + face.materialIndex = currmat newmesh.faces.append(face) if makedoodads == 1 and onlyonprotrusions == 0: if doodonselectedfaces == 1: @@ -515,12 +687,14 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0,0,0]) for pt in currface.v: center = center + pt.co - center = center/len(currface.v) + center = divideVectorByInt(center,len(currface.v)) #Determine amount of subfaces subfaces = round(randnum(1,len(subfaceArray)),0) subfaces = subfaceArray[(int(subfaces) - 1)] + ######################## START DEALING WITH PROTRUSIONS ##################### + if subfaces == 1: prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,currface.v[0].index,currface.v[1].index,currface.v[2].index,currface.v[3].index,selectface1) @@ -541,7 +715,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d orientation = int(round(randnum(0,1))) p1 = currface.v[orientation] p2 = currface.v[orientation + 1] - p3 = (p2.co - p1.co)/2 + p1.co + p3 = divideVectorByInt((p2.co - p1.co),2) + p1.co ve1 = Vert(p3[0],p3[1],p3[2]) ve1.sel = 0 p1 = currface.v[2 + orientation] @@ -549,7 +723,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d p2 = currface.v[3] else: p2 = currface.v[0] - p3 = (p2.co - p1.co)/2 + p1.co + p3 = divideVectorByInt((p2.co - p1.co),2) + p1.co ve2 = Vert(p3[0],p3[1],p3[2]) ve2.sel = 0 if orientation < 0.5: @@ -574,7 +748,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0, 0, 0]) for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,v1,v2,v3,v4,selectface2) if makedoodads == 1: @@ -606,7 +780,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,v1,v2,v4,v3,selectface2) if makedoodads == 1: @@ -624,16 +798,36 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d if orientation < 0.5: face = Face() face.v.extend([newmesh.verts[p0],newmesh.verts[p1],newmesh.verts[v3]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) face = Face() face.v.extend([newmesh.verts[p2],newmesh.verts[p3],newmesh.verts[v4]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) else: face = Face() face.v.extend([newmesh.verts[p1],newmesh.verts[p2],newmesh.verts[v3]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) face = Face() face.v.extend([newmesh.verts[p3],newmesh.verts[p0],newmesh.verts[v4]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) elif subfaces == 3: @@ -643,7 +837,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d rotation = int(round(randnum(0,1))) p1 = currface.v[orientation] p2 = currface.v[orientation + 1] - p3 = (p2.co - p1.co)/2 + p1.co + p3 = divideVectorByInt((p2.co - p1.co),2) + p1.co ve1 = Vert(p3[0],p3[1],p3[2]) ve1.sel = 0 p1 = currface.v[2 + orientation] @@ -651,7 +845,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d p2 = currface.v[3] else: p2 = currface.v[0] - p3 = (p2.co - p1.co)/2 + p1.co + p3 = divideVectorByInt((p2.co - p1.co),2) + p1.co ve2 = Vert(p3[0],p3[1],p3[2]) ve2.sel = 0 fp = [] @@ -682,7 +876,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) layer2inds.extend([v3,v4]) tempface = extrude(center,currface.no,prot,v1,v2,v3,v4,selectface3) @@ -724,7 +918,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) layer2inds.extend([index, index +1]) tempface = extrude(center,currface.no,prot,v1,v2,v4,v3,selectface3) @@ -744,12 +938,12 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d #split next rect(pre-arranged, no orientation crud)--make flag in extruder for only one existing vert in mesh p1 = newmesh.verts[layer2inds[0]] p2 = newmesh.verts[layer2inds[1]] - p3 = (p2.co - p1.co)/2 + p1.co + p3 = divideVectorByInt((p2.co - p1.co),2) + p1.co ve3 = Vert(p3[0],p3[1],p3[2]) ve3.sel = 0 p1 = layer2verts[0] p2 = layer2verts[1] - p3 = (p2.co - p1.co)/2 + p1.co + p3 = divideVectorByInt((p2.co - p1.co),2) + p1.co ve4 = Vert(p3[0],p3[1],p3[2]) ve4.sel = 0 newmesh.verts.append(ve3) @@ -762,7 +956,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[v5],newmesh.verts[v6],newmesh.verts[t0],newmesh.verts[v3]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) if rotation < 0.5: flino = 1 else: flino = 0 @@ -782,18 +976,28 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d face = Face() fpt = t0 face.v.extend([newmesh.verts[fp[1]],newmesh.verts[fpt],newmesh.verts[v3]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) else: face = Face() fpt = t0 face.v.extend([newmesh.verts[fp[0]],newmesh.verts[v3],newmesh.verts[fpt]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) verti = layer2verts[1] tempindex = verti.index center = Vector([0]*3) for pt in [newmesh.verts[v5],newmesh.verts[v6],newmesh.verts[tempindex],newmesh.verts[v4]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,v6,v5,v4,tempindex,selectface3,flino) if makedoodads == 1: @@ -811,16 +1015,36 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d if rotation < 0.5: face = Face() face.v.extend([newmesh.verts[tempindex],newmesh.verts[fp[0]],newmesh.verts[v4]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) face = Face() face.v.extend([newmesh.verts[fpt],newmesh.verts[tempindex],newmesh.verts[v6]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) else: face = Face() face.v.extend([newmesh.verts[tempindex],newmesh.verts[v4],newmesh.verts[fp[1]]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) face = Face() face.v.extend([newmesh.verts[tempindex],newmesh.verts[fpt],newmesh.verts[v6]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) else: @@ -831,29 +1055,29 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d verti = currface.v[1] p1 = verti.index - pt = (newmesh.verts[p1].co - newmesh.verts[p0].co)/2 + newmesh.verts[p0].co + pt = divideVectorByInt((newmesh.verts[p1].co - newmesh.verts[p0].co),2) + newmesh.verts[p0].co v1 = Vert(pt[0],pt[1],pt[2]) v1.sel = 0 verti = currface.v[2] p2 = verti.index - pt = (newmesh.verts[p2].co - newmesh.verts[p1].co)/2 + newmesh.verts[p1].co + pt = divideVectorByInt((newmesh.verts[p2].co - newmesh.verts[p1].co),2) + newmesh.verts[p1].co v2 = Vert(pt[0],pt[1],pt[2]) v2.sel = 0 verti = currface.v[3] p3 = verti.index - pt = (newmesh.verts[p3].co - newmesh.verts[p2].co)/2 + newmesh.verts[p2].co + pt = divideVectorByInt((newmesh.verts[p3].co - newmesh.verts[p2].co),2) + newmesh.verts[p2].co v3 = Vert(pt[0],pt[1],pt[2]) v3.sel = 0 - pt = (newmesh.verts[p0].co - newmesh.verts[p3].co)/2 + newmesh.verts[p3].co + pt = divideVectorByInt((newmesh.verts[p0].co - newmesh.verts[p3].co),2) + newmesh.verts[p3].co v4 = Vert(pt[0],pt[1],pt[2]) v4.sel = 0 - pt = (v3.co - v1.co)/2 + v1.co + pt = divideVectorByInt((v3.co - v1.co),2) + v1.co m = Vert(pt[0],pt[1],pt[2]) m.sel = 0 @@ -866,7 +1090,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[p0],newmesh.verts[v1],newmesh.verts[m],newmesh.verts[v4]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,p0,v1,m,v4,selectface4) if makedoodads == 1: @@ -889,7 +1113,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[m],newmesh.verts[v1],newmesh.verts[p1],newmesh.verts[v2]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,m,v1,p1,v2,selectface4) if makedoodads == 1: @@ -912,7 +1136,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[m],newmesh.verts[v2],newmesh.verts[p2],newmesh.verts[v3]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,m,v2,p2,v3,selectface4) if makedoodads == 1: @@ -932,7 +1156,7 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d center = Vector([0]*3) for pt in [newmesh.verts[m],newmesh.verts[v3],newmesh.verts[p3],newmesh.verts[v4]]: center = center + pt.co - center = center/4 + center = divideVectorByInt(center,4) prot = randnum(minimumheight,maximumheight) tempface = extrude(center,currface.no,prot,v4,m,v3,p3,selectface4) if makedoodads == 1: @@ -950,15 +1174,35 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d face = Face() face.v.extend([newmesh.verts[p0],newmesh.verts[p1],newmesh.verts[v1]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) face = Face() face.v.extend([newmesh.verts[p1],newmesh.verts[p2],newmesh.verts[v2]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) face = Face() face.v.extend([newmesh.verts[p2],newmesh.verts[p3],newmesh.verts[v3]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) face = Face() face.v.extend([newmesh.verts[p3],newmesh.verts[p0],newmesh.verts[v4]]) + if thereAreMats == 1: + if reassignMats == 0 or protSideMat == 0: + face.materialIndex = currmat + else: + face.materialIndex = protSideMat-1 newmesh.faces.append(face) #NMesh.PutRaw(newmesh) @@ -967,8 +1211,8 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d newmesh.verts[unvert.index].sel = 0 if makenewobj == 1: newobj = Object.New('Mesh') - copyObjStuff(origobj,newobj) newobj.link(newmesh) + copyObjStuff(origobj,newobj) scene = Blender.Scene.getCurrent() scene.link(newobj) origobj.select(0) @@ -979,6 +1223,11 @@ def discombobulate(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,g0,d0,d #Return to Editmode if previously in it if editmode: Window.EditMode(1) +def divideVectorByInt(thevect,theint): + thevect.x = thevect.x/theint + thevect.y = thevect.y/theint + thevect.z = thevect.z/theint + return thevect ####################### gui ###################### from Blender.BGL import * @@ -1032,16 +1281,37 @@ doodheightmax = Create(doodadmaxheight) doodonselface = Create(doodonselectedfaces) seldoodtop = Create(selectdoodadtoponly) +#Material Buttons +assignNewMats = Create(reassignMats) +replProtSideIndex = Create(protSideMat) +replProtTopIndex = Create(protTopMat) +replDoodSideIndex = Create(doodSideMat) +replDoodTopIndex = Create(doodTopMat) # Events EVENT_NONE = 1 EVENT_DISCOMBOBULATE = 2 EVENT_EXIT = 3 +# Additions for moving gui +hadd = 0 +wadd = 0 +thadd = 410 +phadd = 245 +pwadd = 0 +dhadd = 55 +dwadd = 0 +ghadd = 10 +gwadd = 0 +mhadd = 55 +mwadd = 312 + def colorbox(x,y,xright,bottom): glColor3f(0.75, 0.75, 0.75) glRecti(x + 1, y + 1, xright - 1, bottom - 1) +firstDraw = 1 + def draw(): #Protrusions @@ -1083,90 +1353,164 @@ def draw(): global doodonselface global seldoodtop + #Materials + global assignNewMats + global replProtSideIndex + global replProtTopIndex + global replDoodSideIndex + global replDoodTopIndex + #Global Settings global makenewobject global messagetext global errortext - global EVENT_NONE,EVENT_DRAW,EVENT_EXIT + global EVENT_NONE,EVENT_DRAW,EVENT_EXIT,EVENT_UP,EVENT_DOWN,EVENT_LEFT,EVENT_RIGHT + + # Additions for moving gui + global hadd + global wadd + global thadd + global phadd + global pwadd + global dhadd + global dwadd + global ghadd + global gwadd + global mhadd + global mwadd + + #This is for creating the initial layout + global firstDraw + if(firstDraw == 1): + if(((Window.GetAreaSize()[1])*1.7) < Window.GetAreaSize()[0]): + thadd = 180 + phadd = 10 + dhadd = 10 + mhadd = 55 + ghadd = 10 + pwadd = 0 + dwadd = 305 + mwadd = 610 + gwadd = 610 + else: + thadd = 505 + phadd = 346 + dhadd = 160 + mhadd = 56 + ghadd = 10 + pwadd = 0 + dwadd = 0 + mwadd = 0 + gwadd = 0 + firstDraw = 0 - #Height Addition, this is for changing the gui - hadd = 10 #Title :420high glClearColor(0.6, 0.6, 0.6, 1.0) glClear(GL_COLOR_BUFFER_BIT) glColor3f(0.0,0.0,0.0) - glRasterPos2d(8, 400+hadd) - Text("Discombobulator v5.3.5.406893.potato") + glRasterPos2d(8+wadd, thadd+hadd) + Text("Discombobulator v2.1") #Protrusion - colorbox(8,385+hadd,312,230+hadd) + colorbox(8+pwadd+wadd,150+phadd+hadd,312+pwadd+wadd,phadd-5+hadd) glColor3f(0.0,0.0,0.0) - glRasterPos2d(12, 375+hadd) + glRasterPos2d(12+pwadd+wadd, 140+phadd+hadd) Text("Protrusions:") - doprots = Toggle("Make Protrusions",EVENT_NONE,12,352+hadd,145,18,doprots.val,"Make Protrusions?") - facechange = Number("Face %: ",EVENT_NONE,162,352+hadd,145,18,facechange.val,0,100,"Percentage of faces that will grow protrusions") - useselected = Toggle("Only selected faces",EVENT_NONE,12,332+hadd,145,18,useselected.val,"If on, only selected faces will be modified") - deselectvertices = Toggle("Deselect Selected",EVENT_NONE,162,332+hadd,145,18,deselectvertices.val,"Deselects any selected vertex except for ones selected by \"Select Tops\"") + doprots = Toggle("Make Protrusions",EVENT_NONE,12+pwadd+wadd,117+phadd+hadd,145,18,doprots.val,"Make Protrusions?") + facechange = Number("Face %: ",EVENT_NONE,162+pwadd+wadd,117+phadd+hadd,145,18,facechange.val,0,100,"Percentage of faces that will grow protrusions") + useselected = Toggle("Only selected faces",EVENT_NONE,12+pwadd+wadd,97+phadd+hadd,145,18,useselected.val,"If on, only selected faces will be modified") + deselectvertices = Toggle("Deselect Selected",EVENT_NONE,162+pwadd+wadd,97+phadd+hadd,145,18,deselectvertices.val,"Deselects any selected vertex except for ones selected by \"Select Tops\"") #Protrusion properties glColor3f(0.0,0.0,0.0) - glRasterPos2d(12, 315+hadd) + glRasterPos2d(12+pwadd+wadd, 80+phadd+hadd) Text("Protrusion Properties:") - minheight = Number("Min Height: ",EVENT_NONE,12,292+hadd,145,18,minheight.val,-100.0,100.0,"Minimum height of any protrusion") - maxheight = Number("Max Height: ",EVENT_NONE,162,292+hadd,145,18,maxheight.val,-100.0,100.0,"Maximum height of any protrusion") - mintaper = Number("Min Taper %: ",EVENT_NONE,12,272+hadd,145,18,mintaper.val,0,100,"Minimum taper percentage of protrusion") - maxtaper = Number("Max Taper %: ",EVENT_NONE,162,272+hadd,145,18,maxtaper.val,0,100,"Maximum taper percentage of protrusion") - glRasterPos2d(19, 257+hadd) + minheight = Number("Min Height: ",EVENT_NONE,12+pwadd+wadd,57+phadd+hadd,145,18,minheight.val,-100.0,100.0,"Minimum height of any protrusion") + maxheight = Number("Max Height: ",EVENT_NONE,162+pwadd+wadd,57+phadd+hadd,145,18,maxheight.val,-100.0,100.0,"Maximum height of any protrusion") + mintaper = Number("Min Taper %: ",EVENT_NONE,12+pwadd+wadd,37+phadd+hadd,145,18,mintaper.val,0,100,"Minimum taper percentage of protrusion") + maxtaper = Number("Max Taper %: ",EVENT_NONE,162+pwadd+wadd,37+phadd+hadd,145,18,maxtaper.val,0,100,"Maximum taper percentage of protrusion") + glRasterPos2d(19+pwadd+wadd, 22+phadd+hadd) Text("Number of protrusions:") - sub1 = Toggle("1",EVENT_NONE,12,235+hadd,34,18,sub1.val,"One Protrusion") - sub2 = Toggle("2",EVENT_NONE,48,235+hadd,34,18,sub2.val,"Two Protrusions") - sub3 = Toggle("3",EVENT_NONE,84,235+hadd,34,18,sub3.val,"Three Protrusions") - sub4 = Toggle("4",EVENT_NONE,120,235+hadd,34,18,sub4.val,"Four Protrusions") - glRasterPos2d(195, 257+hadd) + sub1 = Toggle("1",EVENT_NONE,12+pwadd+wadd,phadd+hadd,34,18,sub1.val,"One Protrusion") + sub2 = Toggle("2",EVENT_NONE,48+pwadd+wadd,phadd+hadd,34,18,sub2.val,"Two Protrusions") + sub3 = Toggle("3",EVENT_NONE,84+pwadd+wadd,phadd+hadd,34,18,sub3.val,"Three Protrusions") + sub4 = Toggle("4",EVENT_NONE,120+pwadd+wadd,phadd+hadd,34,18,sub4.val,"Four Protrusions") + glRasterPos2d(195+pwadd+wadd, 22+phadd+hadd) Text("Select tops of:") - selface1 = Toggle("1",EVENT_NONE,165,235+hadd,34,18,selface1.val,"Select the tip of the protrusion when it is created") - selface2 = Toggle("2",EVENT_NONE,201,235+hadd,34,18,selface2.val,"Select the tips of each protrusion when they are created") - selface3 = Toggle("3",EVENT_NONE,237,235+hadd,34,18,selface3.val,"Select the tips of each protrusion when they are created") - selface4 = Toggle("4",EVENT_NONE,273,235+hadd,34,18,selface4.val,"Select the tips of each protrusion when they are created") + selface1 = Toggle("1",EVENT_NONE,165+pwadd+wadd,phadd+hadd,34,18,selface1.val,"Select the tip of the protrusion when it is created") + selface2 = Toggle("2",EVENT_NONE,201+pwadd+wadd,phadd+hadd,34,18,selface2.val,"Select the tips of each protrusion when they are created") + selface3 = Toggle("3",EVENT_NONE,237+pwadd+wadd,phadd+hadd,34,18,selface3.val,"Select the tips of each protrusion when they are created") + selface4 = Toggle("4",EVENT_NONE,273+pwadd+wadd,phadd+hadd,34,18,selface4.val,"Select the tips of each protrusion when they are created") - #Doodad - colorbox(8,220+hadd,312,40+hadd) + #Doodads + colorbox(8+dwadd+wadd,175+dhadd+hadd,312+dwadd+wadd,dhadd-5+hadd) glColor3f(0.0,0.0,0.0) - glRasterPos2d(12, 210+hadd) + glRasterPos2d(12+dwadd+wadd, 165+dhadd+hadd) Text("Doodads:") - dood1 = Toggle("1 Box",EVENT_NONE,12,207+hadd-20,45,18,dood1.val,"Creates a rectangular box") - dood2 = Toggle("2 Box",EVENT_NONE,61,207+hadd-20,45,18,dood2.val,"Creates 2 side-by-side rectangular boxes") - dood3 = Toggle("3 Box",EVENT_NONE,110,207+hadd-20,45,18,dood3.val,"Creates 3 side-by-side rectangular boxes") - dood4 = Toggle("\"L\"",EVENT_NONE,164,207+hadd-20,45,18,dood4.val,"Creates a Tetris-style \"L\" shape") - dood5 = Toggle("\"T\"",EVENT_NONE,213,207+hadd-20,45,18,dood5.val,"Creates a Tetris-style \"T\" shape") - dood6 = Toggle("\"S\"",EVENT_NONE,262,207+hadd-20,45,18,dood6.val,"Creates a sort-of \"S\" or \"Z\" shape") - dodoodads = Toggle("Make Doodads",EVENT_NONE,12,165+hadd,145,18,dodoodads.val,"Make Doodads?") - doodadfacechange = Number("Face %: ",EVENT_NONE,162,165+hadd,145,18,doodadfacechange.val,0,100,"Percentage of faces that will gain doodads") - seldoodad = Toggle("Select Doodads",EVENT_NONE,12,145+hadd,145,18,seldoodad.val,"Selects doodads when they are created") - seldoodtop = Toggle("Only Select Tops",EVENT_NONE,162,145+hadd,145,18,seldoodtop.val,"Only Selects tops of doodads when\"Select Doodads\" is on") - doodonselface = Toggle("Only selected faces",EVENT_NONE,12,125+hadd,145,18,doodonselface.val,"Only create doodads on selected faces") - onprot = Toggle("Only on Protrusions",EVENT_NONE,162,125+hadd,145,18,onprot.val,"Only place doodads on protrusions") + dood1 = Toggle("1 Box",EVENT_NONE,12+dwadd+wadd,142+dhadd+hadd,45,18,dood1.val,"Creates a rectangular box") + dood2 = Toggle("2 Box",EVENT_NONE,61+dwadd+wadd,142+dhadd+hadd,45,18,dood2.val,"Creates 2 side-by-side rectangular boxes") + dood3 = Toggle("3 Box",EVENT_NONE,110+dwadd+wadd,142+dhadd+hadd,45,18,dood3.val,"Creates 3 side-by-side rectangular boxes") + dood4 = Toggle("\"L\"",EVENT_NONE,164+dwadd+wadd,142+dhadd+hadd,45,18,dood4.val,"Creates a Tetris-style \"L\" shape") + dood5 = Toggle("\"T\"",EVENT_NONE,213+dwadd+wadd,142+dhadd+hadd,45,18,dood5.val,"Creates a Tetris-style \"T\" shape") + dood6 = Toggle("\"S\"",EVENT_NONE,262+dwadd+wadd,142+dhadd+hadd,45,18,dood6.val,"Creates a sort-of \"S\" or \"Z\" shape") + dodoodads = Toggle("Make Doodads",EVENT_NONE,12+dwadd+wadd,120+dhadd+hadd,145,18,dodoodads.val,"Make Doodads?") + doodadfacechange = Number("Face %: ",EVENT_NONE,162+dwadd+wadd,120+dhadd+hadd,145,18,doodadfacechange.val,0,100,"Percentage of faces that will gain doodads") + seldoodad = Toggle("Select Doodads",EVENT_NONE,12+dwadd+wadd,100+dhadd+hadd,145,18,seldoodad.val,"Selects doodads when they are created") + seldoodtop = Toggle("Only Select Tops",EVENT_NONE,162+dwadd+wadd,100+dhadd+hadd,145,18,seldoodtop.val,"Only Selects tops of doodads when\"Select Doodads\" is on") + doodonselface = Toggle("Only selected faces",EVENT_NONE,12+dwadd+wadd,80+dhadd+hadd,145,18,doodonselface.val,"Only create doodads on selected faces") + onprot = Toggle("Only on Protrusions",EVENT_NONE,162+dwadd+wadd,80+dhadd+hadd,145,18,onprot.val,"Only place doodads on protrusions") + + #Doodad Properties glColor3f(0.0,0.0,0.0) - glRasterPos2d(12, 108+hadd) + glRasterPos2d(12+dwadd+wadd, 63+dhadd+hadd) Text("Doodad Properties:") - doodadminamount = Number("Min Amount: ",EVENT_NONE,12,85+hadd,145,18,doodadminamount.val,0,100,"Minimum number of doodads per face") - doodadmaxamount = Number("Max Amount: ",EVENT_NONE,162,85+hadd,145,18,doodadmaxamount.val,0,100,"Maximum number of doodads per face") - doodheightmin = Number("Min Height: ",EVENT_NONE,12,65+hadd,145,18,doodheightmin.val,0.0,100.0,"Minimum height of any doodad") - doodheightmax = Number("Max Height: ",EVENT_NONE,162,65+hadd,145,18,doodheightmax.val,0.0,100.0,"Maximum height of any doodad") - doodsizemin = Number("Min Size %: ",EVENT_NONE,12,45+hadd,145,18,doodsizemin.val,0.0,100.0,"Minimum size of any doodad in percentage of face") - doodsizemax = Number("Max Size %: ",EVENT_NONE,162,45+hadd,145,18,doodsizemax.val,0.0,100.0,"Maximum size of any doodad in percentage of face") + doodadminamount = Number("Min Amount: ",EVENT_NONE,12+dwadd+wadd,40+dhadd+hadd,145,18,doodadminamount.val,0,100,"Minimum number of doodads per face") + doodadmaxamount = Number("Max Amount: ",EVENT_NONE,162+dwadd+wadd,40+dhadd+hadd,145,18,doodadmaxamount.val,0,100,"Maximum number of doodads per face") + doodheightmin = Number("Min Height: ",EVENT_NONE,12+dwadd+wadd,20+dhadd+hadd,145,18,doodheightmin.val,0.0,100.0,"Minimum height of any doodad") + doodheightmax = Number("Max Height: ",EVENT_NONE,162+dwadd+wadd,20+dhadd+hadd,145,18,doodheightmax.val,0.0,100.0,"Maximum height of any doodad") + doodsizemin = Number("Min Size %: ",EVENT_NONE,12+dwadd+wadd,dhadd+hadd,145,18,doodsizemin.val,0.0,100.0,"Minimum size of any doodad in percentage of face") + doodsizemax = Number("Max Size %: ",EVENT_NONE,162+dwadd+wadd,dhadd+hadd,145,18,doodsizemax.val,0.0,100.0,"Maximum size of any doodad in percentage of face") + + #Materials + colorbox(8+mwadd+wadd,93+mhadd+hadd,312+mwadd+wadd,mhadd-5+hadd) + glColor3f(0.0,0.0,0.0) + glRasterPos2d(12+mwadd+wadd, 83+mhadd+hadd) + Text("Materials:") + glRasterPos2d(12+mwadd+wadd, 43+mhadd+hadd) + Text("Assigned Material Indices:") + assignNewMats = Toggle("Assign materials by part",EVENT_NONE,32+mwadd+wadd,60+mhadd+hadd,256,18,assignNewMats.val,"Otherwise, previous materials will be preserved") + replProtSideIndex = Number("Protrusion Sides:",EVENT_NONE,12+mwadd+wadd,20+mhadd+hadd,145,18,replProtSideIndex.val,0,16,"Material index assigned to sides of protrusions") + replProtTopIndex = Number("Protrusion Tops:",EVENT_NONE,162+mwadd+wadd,20+mhadd+hadd,145,18,replProtTopIndex.val,0,16,"Material index assigned to tops of protrusions") + replDoodSideIndex = Number("Doodad Sides:",EVENT_NONE,12+mwadd+wadd,mhadd+hadd,145,18,replDoodSideIndex.val,0,16,"Material index assigned to sides of doodads") + replDoodTopIndex = Number("Doodad Tops:",EVENT_NONE,162+mwadd+wadd,mhadd+hadd,145,18,replDoodTopIndex.val,0,16,"Material index assigned to tops and bottoms of doodads") #Global Parts + colorbox(8+gwadd+wadd,35+ghadd+hadd,312+gwadd+wadd,ghadd-5+hadd) glColor3f(1.0,0.0,0.0) - glRasterPos2d(10,35) + glRasterPos2d(12+gwadd+wadd,25+ghadd+hadd) messagetext = Text(errortext) glColor3f(0.0,0.0,0.0) - makenewobject = Toggle("Copy Before Modifying",EVENT_NONE,162,10,145,18,makenewobject.val,"If selected, the original object will be copied before it is changed") - Button("Discombobulate",EVENT_DISCOMBOBULATE,12,10,100,18) - Button("Exit",EVENT_EXIT,120,10,30,18) + makenewobject = Toggle("Copy Before Modifying",EVENT_NONE,162+gwadd+wadd,ghadd+hadd,145,18,makenewobject.val,"If selected, the original object will be copied before it is changed") + Button("Discombobulate",EVENT_DISCOMBOBULATE,12+gwadd+wadd,ghadd+hadd,100,18) + Button("Exit",EVENT_EXIT,120+gwadd+wadd,ghadd+hadd,30,18) -def event(evt, val): +def event(evt, val): + global wadd + global hadd + + if (evt == RIGHTARROWKEY and val): + wadd = wadd + 20 + Redraw(1) + if (evt == LEFTARROWKEY and val): + wadd = wadd - 20 + Redraw(1) + if (evt == UPARROWKEY and val): + hadd = hadd + 20 + Redraw(1) + if (evt == DOWNARROWKEY and val): + hadd = hadd - 20 + Redraw(1) if (evt == QKEY and not val): Exit() @@ -1211,6 +1555,13 @@ def bevent(evt): global doodonselface global seldoodtop + #Materials + global assignNewMats + global replProtSideIndex + global replProtTopIndex + global replDoodSideIndex + global replDoodTopIndex + #Global Settings global makenewobject global messagetext @@ -1222,7 +1573,10 @@ def bevent(evt): Exit() elif evt==EVENT_DISCOMBOBULATE: Window.WaitCursor(1) - discombobulate(doprots.val,facechange.val/100,minheight.val,maxheight.val,sub1.val,sub2.val,sub3.val,sub4.val,mintaper.val/100,maxtaper.val/100,useselected.val,selface1.val,selface2.val,selface3.val,selface4.val,deselectvertices.val,makenewobject.val,dodoodads.val,doodadfacechange.val/100,seldoodad.val,onprot.val,dood1.val,dood2.val,dood3.val,dood4.val,dood5.val,dood6.val,doodadminamount.val,doodadmaxamount.val,doodsizemin.val/100,doodsizemax.val/100,doodheightmin.val,doodheightmax.val,doodonselface.val,seldoodtop.val) + setProtrusionValues(doprots.val,facechange.val/100,minheight.val,maxheight.val,sub1.val,sub2.val,sub3.val,sub4.val,mintaper.val/100,maxtaper.val/100,useselected.val,selface1.val,selface2.val,selface3.val,selface4.val,deselectvertices.val) + setDoodadValues(dodoodads.val,doodadfacechange.val/100,seldoodad.val,onprot.val,dood1.val,dood2.val,dood3.val,dood4.val,dood5.val,dood6.val,doodadminamount.val,doodadmaxamount.val,doodsizemin.val/100,doodsizemax.val/100,doodheightmin.val,doodheightmax.val,doodonselface.val,seldoodtop.val) + setOtherValues(makenewobject.val,assignNewMats.val,replProtSideIndex.val,replProtTopIndex.val,replDoodSideIndex.val,replDoodTopIndex.val) + discombobulate() Window.WaitCursor(0) Blender.Redraw() |