diff options
Diffstat (limited to 'release/scripts/discombobulator.py')
-rw-r--r-- | release/scripts/discombobulator.py | 1526 |
1 files changed, 0 insertions, 1526 deletions
diff --git a/release/scripts/discombobulator.py b/release/scripts/discombobulator.py deleted file mode 100644 index 6dbb4e5382b..00000000000 --- a/release/scripts/discombobulator.py +++ /dev/null @@ -1,1526 +0,0 @@ -#!BPY - -""" -Name: 'Discombobulator' -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__ = "237" -__bpydoc__ = """\ -Discombobulator adds random geometry to a mesh. - -As an example, this script can easily give a "high-tech" -look to walls and spaceships. - -Definitions:<br> - - Protrusions: extrusions of each original face on the mesh. -You may have from 1 to 4 protrusions on each face.<br> - - Taper: The tips of each protrusion will be a percentage -smaller than the base.<br> - - Doodads: small extruded blocks/shapes that are randomly placed -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".<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 -by setting "Only selected faces" for protrusions and/or -doodads.<br> - - It's possible to restrict mesh generation to add only -protrusions or only doodads instead of both.<br> - - You may also choose to have Discombobulator select the -tops of created protrusions by clicking the corresponding -number of protrusion buttons under "Select Tops". You may -also do the same for doodads by choosing "Select Doodads" and -"Only Select Tops". You may choose to select the whole doodads -by leaving "Only Select Tops" off.<br> - - By selecting "Deselect Selected" you can have -discombobulator deselect everything but the selections it -makes.<br> - - The "Face %" option will set the percentage of faces that -will be modified either for the doodads or the protrusions.<br> - - "Copy Before Modifying" will create a new object with the -modifications where leaving it off will overwrite the original -mesh.<br> - -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 v2.1b -# by Evan J. Rosky, 2005 -# This plugin is protected by the GPL: Gnu Public Licence -# GPL - http://www.gnu.org/copyleft/gpl.html -# -------------------------------------------------------------------------- -# ***** 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 ***** -# -------------------------------------------------------------------------- - -#Hit Alt-P to run - -import Blender -from Blender import NMesh,Object,Material,Window,Types,Scene -from Blender.NMesh import Vert,Face -from Blender.Mathutils import * - -import defaultdoodads -import BPyMathutils -from BPyMathutils import genrand -a = BPyMathutils.sgenrand(int(round(Rand(1000,99999),0))) - -#Create random numbers -def randnum(low,high): - num = genrand() - num = num*(high-low) - num = num+low - return num - -#Object Vars -newmesh = NMesh.GetRaw() -materialArray = [0] - -#Material Vars -reassignMats = 0 -protSideMat = 1 -protTopMat = 2 -doodSideMat = 3 -doodTopMat = 4 -thereAreMats = 0 -currmat = 0 - -#Global Vars -makenewobj = 1 -errortext = "Remember to select an object." -editmode = 0 - -#Protrusion Vars -makeprots = 1 -faceschangedpercent = 1.0 -minimumheight = 0.2 -maximumheight = 0.4 -subface1 = 1 -subface2 = 1 -subface3 = 1 -subface4 = 1 -subfaceArray = [1,2,3,4] -minsubfaces = 1 -minimumtaperpercent = 0.15 -maximumtaperpercent = 0.35 -useselectedfaces = 0 -selectface1 = 1 -selectface2 = 1 -selectface3 = 1 -selectface4 = 1 -deselface = 1 - -#Doodad Vars -makedoodads = 1 -doodadfacepercent = 1.0 -selectdoodad = 0 -onlyonprotrusions = 0 -doodonselectedfaces = 0 -selectdoodadtoponly = 0 -doodad1 = 1 -doodad2 = 1 -doodad3 = 1 -doodad4 = 1 -doodad5 = 1 -doodad6 = 1 -doodadminperface = 2 -doodadmaxperface = 6 -doodadminsize = 0.15 -doodadmaxsize = 0.45 -doodadminheight = 0.0 -doodadmaxheight = 0.1 -doodadArray = [1,2,3,4,5,6] - -def makeSubfaceArray(): - global subfaceArray - global subface1 - global subface2 - global subface3 - global subface4 - - subfaceArray = [] - if subface1 > 0: - subfaceArray.append(1) - if subface2 > 0: - subfaceArray.append(2) - if subface3 > 0: - subfaceArray.append(3) - if subface4 > 0: - subfaceArray.append(4) - -def makeDoodadArray(): - global doodadArray - global doodad1 - global doodad2 - global doodad3 - global doodad4 - global doodad5 - global doodad6 - - doodadArray = [] - if doodad1 > 0: - doodadArray.append(1) - if doodad2 > 0: - doodadArray.append(2) - if doodad3 > 0: - doodadArray.append(3) - if doodad4 > 0: - doodadArray.append(4) - if doodad5 > 0: - doodadArray.append(5) - if doodad6 > 0: - doodadArray.append(6) - -def extrude(mid,nor,protrusion,v1,v2,v3,v4,tosel=1,flipnor=0): - taper = 1 - randnum(minimumtaperpercent,maximumtaperpercent) - newmesh_verts = newmesh.verts - newmesh_faces = newmesh.faces - - vert = newmesh_verts[v1] - point = (vert.co - mid)*taper + mid + protrusion*Vector(nor) - ver = Vert(point[0],point[1],point[2]) - ver.sel = tosel - newmesh_verts.append(ver) - vert = newmesh_verts[v2] - point = (vert.co - mid)*taper + mid + protrusion*Vector(nor) - ver = Vert(point[0],point[1],point[2]) - ver.sel = tosel - newmesh_verts.append(ver) - vert = newmesh_verts[v3] - point = (vert.co - mid)*taper + mid + protrusion*Vector(nor) - ver = Vert(point[0],point[1],point[2]) - ver.sel = tosel - newmesh_verts.append(ver) - vert = newmesh_verts[v4] - point = (vert.co - mid)*taper + mid + protrusion*Vector(nor) - ver = Vert(point[0],point[1],point[2]) - ver.sel = tosel - newmesh_verts.append(ver) - - faceindex = len(newmesh_verts) - 4 - - #side face 1 - face = Face([newmesh_verts[v1], newmesh_verts[v2], newmesh_verts[faceindex+1], 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) - - #side face 2 - face = Face([newmesh_verts[v2], newmesh_verts[v3], newmesh_verts[faceindex+2], 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) - - #side face 3 - face = Face([newmesh_verts[v3], newmesh_verts[v4], newmesh_verts[faceindex+3], 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) - - #side face 4 - face = Face([newmesh_verts[v4], newmesh_verts[v1], newmesh_verts[faceindex], 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(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 - -#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 - 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 - - #Protrusions - makeprots = p0 - faceschangedpercent = p1 - minimumheight = p2 - maximumheight = p3 - subface1 = p4 - subface2 = p5 - subface3 = p6 - subface4 = p7 - minimumtaperpercent = p8 - maximumtaperpercent = p9 - useselectedfaces = p10 - selectface1 = p11 - selectface2 = p12 - selectface3 = p13 - selectface4 = p14 - deselface = p15 - makeSubfaceArray() - 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 - doodadfacepercent = d1 - selectdoodad = d2 - onlyonprotrusions = d3 - doodad1 = d4 - doodad2 = d5 - doodad3 = d6 - doodad4 = d7 - doodad5 = d8 - doodad6 = d9 - doodadminperface = d10 - doodadmaxperface = d11 - doodadminsize = d12 - doodadmaxsize = d13 - doodadminheight = d14 - doodadmaxheight = d15 - doodonselectedfaces = d16 - selectdoodadtoponly = d17 - makeDoodadArray() - if len(doodadArray) == 0: - makedoodads = 0 - - elif doodadminperface > doodadmaxperface: - a = doodadmaxperface - doodadmaxperface = doodadminperface - doodadminperface = a - elif doodadminsize > doodadmaxsize: - 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 - - origobj = Scene.GetCurrent().objects.active - if not origobj: - 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) - - #Get Major Variables - - origmesh = origobj.getData() - - if origobj.type != 'Mesh': - glRasterPos2d(10,50) - errortext = "OBJECT MUST BE MESH!" - messagetext = ErrorText(errortext) - Blender.Redraw() - return - - newmesh = NMesh.GetRaw() - 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 xrange(len(materialArray),matind+1): - 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([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 - - #Check whether or not to make protrusions - if makeprots == 0: - face = Face([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: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray,face, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray,face, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - continue - - #Check if only changing selected faces - if useselectedfaces == 1: - #check if currface is selected - if currface.sel: - a = 1 - else: - face = Face([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: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray,face, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - continue - #Check if face should be modified by random chance - if randnum(0,1)>faceschangedpercent: - face = Face([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: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray,face, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray,face, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - continue - - center = Vector([0,0,0]) - for pt in currface.v: - center = center + pt.co - center = 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) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - - elif subfaces == 2: - orientation = int(round(randnum(0,1))) - p1 = currface.v[orientation] - p2 = currface.v[orientation + 1] - p3 = ((p2.co - p1.co)/2) + p1.co - ve1 = Vert(p3[0],p3[1],p3[2]) - ve1.sel = 0 - p1 = currface.v[2 + orientation] - if orientation < 0.5: - p2 = currface.v[3] - else: - p2 = currface.v[0] - p3 = ((p2.co - p1.co)/2) + p1.co - ve2 = Vert(p3[0],p3[1],p3[2]) - ve2.sel = 0 - if orientation < 0.5: - verti = currface.v[3] - p3 = verti.index - v1 = p3 - verti = currface.v[0] - p0 = verti.index - v2 = p0 - else: - verti = currface.v[0] - p0 = verti.index - v1 = p0 - verti = currface.v[1] - p1 = verti.index - v2 = p1 - newmesh.verts.append(ve1) - newmesh.verts.append(ve2) - index = len(newmesh.verts) - 2 - v4 = index + 1 - v3 = index - center = Vector([0, 0, 0]) - for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - tempface = extrude(center,currface.no,prot,v1,v2,v3,v4,selectface2) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - if orientation < 0.5: - verti = currface.v[1] - p1 = verti.index - v1 = p1 - verti = currface.v[2] - p2 = verti.index - v2 = p2 - else: - verti = currface.v[2] - p2 = verti.index - v1 = p2 - verti = currface.v[3] - p3 = verti.index - v2 = p3 - center = Vector([0]*3) - for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - tempface = extrude(center,currface.no,prot,v1,v2,v4,v3,selectface2) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - if orientation < 0.5: - face = Face([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([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([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([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: - layer2inds = [] - layer2verts = [] - orientation = int(round(randnum(0,1))) - rotation = int(round(randnum(0,1))) - p1 = currface.v[orientation] - p2 = currface.v[orientation + 1] - p3 = ((p2.co - p1.co)/2) + p1.co - ve1 = Vert(p3[0],p3[1],p3[2]) - ve1.sel = 0 - p1 = currface.v[2 + orientation] - if orientation < 0.5: - p2 = currface.v[3] - else: - p2 = currface.v[0] - p3 = ((p2.co - p1.co)/2) + p1.co - ve2 = Vert(p3[0],p3[1],p3[2]) - ve2.sel = 0 - fp = [] - - #make first protrusion - if rotation < 0.5: - if orientation < 0.5: - verti = currface.v[3] - fp.append(verti.index) - v1 = verti.index - verti = currface.v[0] - fp.append(verti.index) - v2 = verti.index - layer2verts.extend([newmesh.verts[currface.v[1].index],newmesh.verts[currface.v[2].index]]) - else: - verti = currface.v[0] - fp.append(verti.index) - v1 = verti.index - verti = currface.v[1] - fp.append(verti.index) - v2 = verti.index - layer2verts.extend([newmesh.verts[currface.v[2].index],newmesh.verts[currface.v[3].index]]) - newmesh.verts.append(ve1) - newmesh.verts.append(ve2) - index = len(newmesh.verts) - 2 - v4 = index + 1 - v3 = index - center = Vector([0]*3) - for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - layer2inds.extend([v3,v4]) - tempface = extrude(center,currface.no,prot,v1,v2,v3,v4,selectface3) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - #Still first protrusion - else: - if orientation < 0.5: - verti = currface.v[1] - fp.append(verti.index) - v1 = verti.index - verti = currface.v[2] - fp.append(verti.index) - v2 = verti.index - layer2verts.extend([newmesh.verts[currface.v[0].index],newmesh.verts[currface.v[3].index]]) - else: - verti = currface.v[2] - fp.append(verti.index) - v1 = verti.index - verti = currface.v[3] - fp.append(verti.index) - v2 = verti.index - layer2verts.extend([newmesh.verts[currface.v[1].index],newmesh.verts[currface.v[0].index]]) - newmesh.verts.append(ve2) - newmesh.verts.append(ve1) - index = len(newmesh.verts) - 2 - v4 = index - v3 = index + 1 - center = Vector([0]*3) - for pt in [newmesh.verts[v1],newmesh.verts[v2],newmesh.verts[v3],newmesh.verts[v4]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - layer2inds.extend([index, index +1]) - tempface = extrude(center,currface.no,prot,v1,v2,v4,v3,selectface3) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - - #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 - 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 - ve4 = Vert(p3[0],p3[1],p3[2]) - ve4.sel = 0 - newmesh.verts.append(ve3) - newmesh.verts.append(ve4) - tempindex = len(newmesh.verts) - 2 - v5 = tempindex - v6 = tempindex + 1 - verti = layer2verts[0] - t0 = verti.index - center = Vector([0]*3) - for pt in [newmesh.verts[v5],newmesh.verts[v6],newmesh.verts[t0],newmesh.verts[v3]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - if rotation < 0.5: flino = 1 - else: flino = 0 - tempface = extrude(center,currface.no,prot,v3,v5,v6,t0,selectface3,flino) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - if rotation < 0.5: - fpt = t0 - face = Face([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: - fpt = t0 - face = Face([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 += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - tempface = extrude(center,currface.no,prot,v6,v5,v4,tempindex,selectface3,flino) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - if rotation < 0.5: - face = Face([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([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([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([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: - #get all points - verti = currface.v[0] - p0 = verti.index - - verti = currface.v[1] - p1 = verti.index - - pt = ((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 - 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 - 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 - v4 = Vert(pt[0],pt[1],pt[2]) - v4.sel = 0 - - pt = ((v3.co - v1.co)/2) + v1.co - m = Vert(pt[0],pt[1],pt[2]) - m.sel = 0 - - #extrusion 1 - newmesh.verts.extend([v1,m,v4]) - index = len(newmesh.verts) - 3 - v1 = index - m = index + 1 - v4 = index + 2 - center = Vector([0]*3) - for pt in [newmesh.verts[p0],newmesh.verts[v1],newmesh.verts[m],newmesh.verts[v4]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - tempface = extrude(center,currface.no,prot,p0,v1,m,v4,selectface4) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - - #extrusion 2 - newmesh.verts.extend([v2]) - index = len(newmesh.verts) - 1 - v2 = index - center = Vector([0]*3) - for pt in [newmesh.verts[m],newmesh.verts[v1],newmesh.verts[p1],newmesh.verts[v2]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - tempface = extrude(center,currface.no,prot,m,v1,p1,v2,selectface4) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - - #extrusion 3 - newmesh.verts.extend([v3]) - index = len(newmesh.verts) - 1 - v3 = index - center = Vector([0]*3) - for pt in [newmesh.verts[m],newmesh.verts[v2],newmesh.verts[p2],newmesh.verts[v3]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - tempface = extrude(center,currface.no,prot,m,v2,p2,v3,selectface4) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - - #extrusion 4 - center = Vector([0]*3) - for pt in [newmesh.verts[m],newmesh.verts[v3],newmesh.verts[p3],newmesh.verts[v4]]: - center += pt.co - center = center/4 - prot = randnum(minimumheight,maximumheight) - tempface = extrude(center,currface.no,prot,v4,m,v3,p3,selectface4) - if makedoodads == 1: - if doodonselectedfaces == 1: - if currface.sel: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - else: - tempmesh = NMesh.GetRaw() - tempmesh = defaultdoodads.createDoodad(doodadArray, tempface, doodadminsize, doodadmaxsize, doodadminheight,doodadmaxheight, selectdoodad, doodadminperface, doodadmaxperface, doodadfacepercent) - newmesh.verts.extend(tempmesh.verts) - newmesh.faces.extend(tempmesh.faces) - - face = Face([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([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([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([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) - if deselface == 1: - for unvert in origmesh.verts: - newmesh.verts[unvert.index].sel = 0 - if makenewobj == 1: - newobj = origobj.__copy__() - newobj.link(newmesh) - scene = Blender.Scene.GetCurrent() - scene.objects.link(newobj) - origobj.sel = 0 - else: - origobj.link(newmesh) - - #Return to Editmode if previously in it - if editmode: Window.EditMode(1) - -####################### gui ###################### -from Blender.BGL import * -from Blender.Draw import * - -def ErrorText(errortext): - Window.WaitCursor(0) - Text(errortext) - PupMenu("ERROR: %s" % errortext.lower()) - -#Global Buttons -makenewobject = Create(makenewobj) -messagetext = Create(errortext) - -#Protrusion Buttons -doprots = Create(makeprots) -facechange = Create(faceschangedpercent*100) -minheight = Create(minimumheight) -maxheight = Create(maximumheight) -sub1 = Create(subface1) -sub2 = Create(subface2) -sub3 = Create(subface3) -sub4 = Create(subface4) -mintaper = Create(minimumtaperpercent*100) -maxtaper = Create(maximumtaperpercent*100) -useselected = Create(useselectedfaces) -selface1 = Create(selectface1) -selface2 = Create(selectface2) -selface3 = Create(selectface3) -selface4 = Create(selectface4) -deselectvertices = Create(deselface) -#selectbyverts = Create(vertselected) - -#Doodad Buttons -dodoodads = Create(makedoodads) -doodadfacechange = Create(doodadfacepercent*100) -seldoodad = Create(selectdoodad) -onprot = Create(onlyonprotrusions) -dood1 = Create(doodad1) -dood2 = Create(doodad2) -dood3 = Create(doodad3) -dood4 = Create(doodad4) -dood5 = Create(doodad5) -dood6 = Create(doodad6) -doodadminamount = Create(doodadminperface) -doodadmaxamount = Create(doodadmaxperface) -doodsizemin = Create(doodadminsize*100) -doodsizemax = Create(doodadmaxsize*100) -doodheightmin = Create(doodadminheight) -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 - global doprots - global facechange - global minheight - global maxheight - global sub1 - global sub2 - global sub3 - global sub4 - global mintaper - global maxtaper - global useselected - global selface1 - global selface2 - global selface3 - global selface4 - global deselectvertices - #global selectbyverts - - #Doodads - global dodoodads - global doodadfacechange - global seldoodad - global onprot - global dood1 - global dood2 - global dood3 - global dood4 - global dood5 - global dood6 - global doodadminamount - global doodadmaxamount - global doodsizemin - global doodsizemax - global doodheightmin - global doodheightmax - 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,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 - - - #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+wadd, thadd+hadd) - Text("Discombobulator v2.1b") - - #Protrusion - colorbox(8+pwadd+wadd,150+phadd+hadd,312+pwadd+wadd,phadd-5+hadd) - glColor3f(0.0,0.0,0.0) - glRasterPos2d(12+pwadd+wadd, 140+phadd+hadd) - Text("Protrusions:") - 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+pwadd+wadd, 80+phadd+hadd) - Text("Protrusion Properties:") - BeginAlign() - 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") - EndAlign() - BeginAlign() - 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") - EndAlign() - glRasterPos2d(19+pwadd+wadd, 22+phadd+hadd) - Text("Number of protrusions:") - BeginAlign() - 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") - EndAlign() - glRasterPos2d(195+pwadd+wadd, 22+phadd+hadd) - Text("Select tops of:") - BeginAlign() - 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") - EndAlign() - #Doodads - colorbox(8+dwadd+wadd,175+dhadd+hadd,312+dwadd+wadd,dhadd-5+hadd) - glColor3f(0.0,0.0,0.0) - glRasterPos2d(12+dwadd+wadd, 165+dhadd+hadd) - Text("Doodads:") - BeginAlign() - 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") - EndAlign() - BeginAlign() - 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") - EndAlign() - 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+dwadd+wadd, 63+dhadd+hadd) - Text("Doodad Properties:") - BeginAlign() - 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") - EndAlign() - BeginAlign() - 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") - EndAlign() - BeginAlign() - 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") - EndAlign() - - #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(12+gwadd+wadd,25+ghadd+hadd) - messagetext = Text(errortext) - glColor3f(0.0,0.0,0.0) - 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): - 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() - -def bevent(evt): - - #Protrusions - global doprots - global facechange - global minheight - global maxheight - global sub1 - global sub2 - global sub3 - global sub4 - global mintaper - global maxtaper - global useselected - global selface1 - global selface2 - global selface3 - global selface4 - global deselectvertices - #global selectbyverts - - #Doodads - global dodoodads - global doodadfacechange - global seldoodad - global onprot - global dood1 - global dood2 - global dood3 - global dood4 - global dood5 - global dood6 - global doodadminamount - global doodadmaxamount - global doodsizemin - global doodsizemax - global doodheightmin - global doodheightmax - 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 - - ######### Manages GUI events - if evt==EVENT_EXIT: - Exit() - elif evt==EVENT_DISCOMBOBULATE: - Window.WaitCursor(1) - 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() - -Register(draw, event, bevent) |