Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/discombobulator.py')
-rw-r--r--release/scripts/discombobulator.py692
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()