forked from bartvdbraak/blender
5c31e9f2b5
- Discombobulator by Evan R and DirectX8 Exporter by Ben Omari. BPython: - Crashed Blender while testing discombobulator: obj.setMaterials() was not checking if the passed obj had valid obj->data. If the object had been created and not linked yet to a mesh, a crash would happen when trying to sync ob and me material lists. Now an error is returned. Also made obj.setMaterials accept an empty list, since obj.getMaterials can return that. Thanks to the script authors for the updated versions and special thanks to Tom (LetterRip) for collecting info about updated and new scripts, sending me updates I had missed, etc.
1584 lines
52 KiB
Python
1584 lines
52 KiB
Python
#!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.1
|
|
# 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
|
|
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
|
|
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
|
|
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]
|
|
|
|
SEL = NMesh.FaceFlags['SELECT']
|
|
|
|
def isselectedface(theface):
|
|
for vertic in theface.v:
|
|
if vertic.sel == 0:
|
|
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
|
|
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 copyObjStuff(startObj,endObj):
|
|
endObj.setDeltaLocation(startObj.getDeltaLocation())
|
|
endObj.setDrawMode(startObj.getDrawMode())
|
|
endObj.setDrawType(startObj.getDrawType())
|
|
endObj.setEuler(startObj.getEuler())
|
|
if(startObj.getIpo() != None):
|
|
endObj.setIpo(startObj.getIpo())
|
|
endObj.setLocation(startObj.getLocation())
|
|
endObj.setMaterials(startObj.getMaterials())
|
|
endObj.setMatrix(startObj.getMatrix())
|
|
endObj.setSize(startObj.getSize())
|
|
endObj.setTimeOffset(startObj.getTimeOffset())
|
|
|
|
|
|
def extrude(mid,nor,protrusion,v1,v2,v3,v4,tosel=1,flipnor=0):
|
|
taper = 1 - randnum(minimumtaperpercent,maximumtaperpercent)
|
|
|
|
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()
|
|
face.v.append(newmesh.verts[v1])
|
|
face.v.append(newmesh.verts[v2])
|
|
face.v.append(newmesh.verts[faceindex+1])
|
|
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)
|
|
|
|
#side face 2
|
|
face = Face()
|
|
face.v.append(newmesh.verts[v2])
|
|
face.v.append(newmesh.verts[v3])
|
|
face.v.append(newmesh.verts[faceindex+2])
|
|
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)
|
|
|
|
#side face 3
|
|
face = Face()
|
|
face.v.append(newmesh.verts[v3])
|
|
face.v.append(newmesh.verts[v4])
|
|
face.v.append(newmesh.verts[faceindex+3])
|
|
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)
|
|
|
|
#side face 4
|
|
face = Face()
|
|
face.v.append(newmesh.verts[v4])
|
|
face.v.append(newmesh.verts[v1])
|
|
face.v.append(newmesh.verts[faceindex])
|
|
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
|
|
|
|
#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
|
|
|
|
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)
|
|
|
|
#Get Major Variables
|
|
newobj = Object.Get()
|
|
origmesh = origobj.getData()
|
|
if type(origmesh) != Types.NMeshType:
|
|
glRasterPos2d(10,50)
|
|
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
|
|
|
|
#Check whether or not to make protrusions
|
|
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:
|
|
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()
|
|
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:
|
|
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()
|
|
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:
|
|
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 = 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)
|
|
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 = divideVectorByInt((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 = divideVectorByInt((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 = center + pt.co
|
|
center = divideVectorByInt(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 = center + pt.co
|
|
center = divideVectorByInt(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()
|
|
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:
|
|
layer2inds = []
|
|
layer2verts = []
|
|
orientation = int(round(randnum(0,1)))
|
|
rotation = int(round(randnum(0,1)))
|
|
p1 = currface.v[orientation]
|
|
p2 = currface.v[orientation + 1]
|
|
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]
|
|
if orientation < 0.5:
|
|
p2 = currface.v[3]
|
|
else:
|
|
p2 = currface.v[0]
|
|
p3 = divideVectorByInt((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 = center + pt.co
|
|
center = divideVectorByInt(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 = center + pt.co
|
|
center = divideVectorByInt(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 = 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 = divideVectorByInt((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 = center + pt.co
|
|
center = divideVectorByInt(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:
|
|
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 = divideVectorByInt(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()
|
|
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:
|
|
#get all points
|
|
verti = currface.v[0]
|
|
p0 = verti.index
|
|
|
|
verti = currface.v[1]
|
|
p1 = verti.index
|
|
|
|
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 = 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 = 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 = 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 = divideVectorByInt((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 = center + pt.co
|
|
center = divideVectorByInt(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 = center + pt.co
|
|
center = divideVectorByInt(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 = center + pt.co
|
|
center = divideVectorByInt(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 = center + pt.co
|
|
center = divideVectorByInt(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()
|
|
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)
|
|
if deselface == 1:
|
|
for unvert in origmesh.verts:
|
|
newmesh.verts[unvert.index].sel = 0
|
|
if makenewobj == 1:
|
|
newobj = Object.New('Mesh')
|
|
newobj.link(newmesh)
|
|
copyObjStuff(origobj,newobj)
|
|
scene = Blender.Scene.getCurrent()
|
|
scene.link(newobj)
|
|
origobj.select(0)
|
|
newobj.select(1)
|
|
else:
|
|
origobj.link(newmesh)
|
|
|
|
#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 *
|
|
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.1")
|
|
|
|
#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:")
|
|
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+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+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")
|
|
|
|
#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:")
|
|
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+dwadd+wadd, 63+dhadd+hadd)
|
|
Text("Doodad Properties:")
|
|
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(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)
|