uvcalc_smart_project.py - fixed error in rare cases.

xfig_export.py - NMesh to Mesh, minor improvements/cleanup.
unweld.py - fixed error when a vert had no faces, also some small speedups and changes.
This commit is contained in:
Campbell Barton 2007-05-01 09:40:10 +00:00
parent a61638013e
commit ab77b4aade
3 changed files with 176 additions and 219 deletions

@ -100,7 +100,7 @@ SUBSURF=0
DIM=Create(1.0) DIM=Create(1.0)
def Buffer(v,t): def Buffer(v,t):
print dir(v) if DEBUG : print dir(v)
for n in range(len(v)): t[n]=t[n]+v[n] for n in range(len(v)): t[n]=t[n]+v[n]
return t return t
@ -138,7 +138,7 @@ def connectedFacesList(me,thegood):
for f in me.faces: for f in me.faces:
for v in f.v: for v in f.v:
if v==thegood: if v==thegood:
if v.index not in listf2v.keys(): if v.index not in listf2v: # .keys()
listf2v[me.verts.index(v)]=[f] listf2v[me.verts.index(v)]=[f]
elif f not in listf2v[me.verts.index(v)]: elif f not in listf2v[me.verts.index(v)]:
listf2v[me.verts.index(v)].append(f) listf2v[me.verts.index(v)].append(f)
@ -189,7 +189,7 @@ def collecte_edge(listf2v,me,thegood):
vlist = [0,1,2,0] vlist = [0,1,2,0]
else: else:
vlist = [0,1] vlist = [0,1]
for i in range(len(vlist)-1): for i in xrange(len(vlist)-1):
vert0 = min(face.v[vlist[i]].index,face.v[vlist[i+1]].index) vert0 = min(face.v[vlist[i]].index,face.v[vlist[i+1]].index)
vert1 = max(face.v[vlist[i]].index,face.v[vlist[i+1]].index) vert1 = max(face.v[vlist[i]].index,face.v[vlist[i+1]].index)
edgeinlist = 0 edgeinlist = 0
@ -204,16 +204,17 @@ def collecte_edge(listf2v,me,thegood):
edge = [vert0,vert1,1,me.faces.index(face)] edge = [vert0,vert1,1,me.faces.index(face)]
edgelist.append(edge) edgelist.append(edge)
for edge in edgelist: for i, edge in enumerate(edgelist):
#print edge #print edge
if len(edge)==4: if len(edge)==4:
del edgelist[edgelist.index(edge)] del edgelist[i]
edges=len(edgelist) edges=len(edgelist)
if DEBUG : print 'number of edges : ',edges," Edge list : " ,edgelist if DEBUG : print 'number of edges : ',edges," Edge list : " ,edgelist
return edges, edgelist return edges, edgelist
OBJECT=Blender.Scene.GetCurrent().getActiveObject() import bpy
OBJECT= bpy.data.scenes.active.objects.active
if OBJECT and OBJECT.type=='Mesh': if OBJECT and OBJECT.type=='Mesh':
if OBJECT.getData(mesh=1).multires: if OBJECT.getData(mesh=1).multires:
@ -227,22 +228,20 @@ if OBJECT and OBJECT.type=='Mesh':
result = Blender.Draw.PupMenu(name) result = Blender.Draw.PupMenu(name)
if result: if result:
me=OBJECT.getData() me=OBJECT.getData()
sole=0
vSelection=[]
for v in me.verts: for v in me.verts:
if v.sel==1: if v.sel:
vSelection.append(v)
for v in vSelection:
thegood=v thegood=v
if DEBUG : print thegood if DEBUG : print thegood
listf2v=connectedFacesList(me,thegood) listf2v=connectedFacesList(me,thegood)
me=createAdditionalFace(me,thegood,listf2v) if listf2v:
#OBJECT.link(me) me=createAdditionalFace(me,thegood,listf2v)
me.update() #OBJECT.link(me)
OBJECT.makeDisplayList() me.update()
OBJECT.makeDisplayList()
Blender.Window.EditMode(EDITMODE) Blender.Window.EditMode(EDITMODE)
else: else:
name = "Nothing to do! Did you select at least one vertex?" BPyMessages.Error_NoMeshActive()
result = Blender.Draw.PupMenu(name)

@ -644,6 +644,9 @@ def getUvIslands(faceGroups, me):
faceGroupIdx-=1 faceGroupIdx-=1
faces = faceGroups[faceGroupIdx] faces = faceGroups[faceGroupIdx]
if not faces:
continue
# Build edge dict # Build edge dict
edge_users = {} edge_users = {}

@ -1,8 +1,7 @@
#!BPY #!BPY
""" """
Name: 'xfig export (.fig)' Name: 'xfig export (.fig)'
Blender: 237 Blender: 244
Group: 'Export' Group: 'Export'
Tooltip: 'Export selected mesh to xfig Format (.fig)' Tooltip: 'Export selected mesh to xfig Format (.fig)'
""" """
@ -29,7 +28,7 @@ __bpydoc__ = """\
# 'Raw triangle export' (Anthony D'Agostino, http://www.redrival.com/scorpius)| # 'Raw triangle export' (Anthony D'Agostino, http://www.redrival.com/scorpius)|
import Blender import Blender
from Blender import NMesh, Draw, BGL from Blender import Draw, BGL
from Blender.Window import DrawProgressBar from Blender.Window import DrawProgressBar
#, meshtools #, meshtools
import sys import sys
@ -40,8 +39,8 @@ import sys
# ================================= # =================================
#globals definition and init #globals definition and init
mystring = "" mystring = ''
mymsg = "" mymsg = ''
toggle=0 toggle=0
sel3files=0 sel3files=0
maxX=-1000000000 maxX=-1000000000
@ -64,107 +63,57 @@ SpacePopup=0
#end of globals definition #end of globals definition
def getmaxmin(): def getmaxmin(ob, mesh):
"""Gets the max-min coordinates of the mesh""" """Gets the max-min coordinates of the mesh"""
global maxX,maxY,maxZ,minX,minY,minZ global maxX,maxY,maxZ,minX,minY,minZ
"""Getting the extremes of the mesh to be exported""" """Getting the extremes of the mesh to be exported"""
objects = Blender.Object.GetSelected()
objname = objects[0].name
meshname = objects[0].getData(name_only=1)
mesh = Blender.NMesh.GetRaw(meshname)
obj = Blender.Object.Get(objname)
#initializing max-min find.
# ...is there a standard python function to find those values?
face =mesh.faces[1]
if len(face.v)==3:
v1,v2,v3=face.v
if len(face.v)==4:
v1,v2,v3,v4=face.v
if len(face.v)==2:
v1,v2=face.v
#is the next condition a nonsense for a face? ...Anyway, to be sure....
if len(face.v)==1:
v1=face.v
maxX,maxY,maxZ = v1 maxX=maxY=maxZ = -1000000000
minX, minY, minZ = v1 minX=minY=minZ = 1000000000
for face in mesh.faces: for face in mesh.faces:
#if (face.flag & Blender.NMesh.FaceFlags['ACTIVE']): for v in face:
if len(face.v) == 3: # triangle x,y,z = v.co
v1, v2, v3 = face.v maxX = max(maxX, x)
x1,y1,z1 = v1.co maxY = max(maxY, y)
x2,y2,z2 = v2.co maxZ = max(maxZ, z)
x3,y3,z3 = v3.co minX = min(minX, x)
maxX = max (maxX, x1, x2, x3) minY = min(minY, y)
maxY = max (maxY, y1, y2, y3) minZ = min(minZ, z)
maxZ = max (maxZ, z1, z2, z3)
minX = min (minX, x1, x2, x3)
minY = min (minY, y1, y2, y3)
minZ = min (minZ, z1, z2, z3)
elif len(face.v)==2:
v1,v2=face.v
x1,y1,z1 = v1.co
x2,y2,z2 = v2.co
maxX = max (maxX, x1, x2)
maxY = max (maxY, y1, y2)
maxZ = max (maxZ, z1, z2)
minX = min (minX, x1, x2)
minY = min (minY, y1, y2)
minZ = min (minZ, z1, z2)
elif len(face.v)==1:
v1=face.v
x1,y1,z1 = v1.co
maxX = max (maxX, x1)
maxY = max (maxY, y1)
maxZ = max (maxZ, z1)
minX = min (minX, x1)
minY = min (minY, y1)
minZ = min (minZ, z1)
elif len(face.v)==4:
v1,v2,v3,v4=face.v
x1,y1,z1 = v1.co
x2,y2,z2 = v2.co
x3,y3,z3 = v3.co
x4,y4,z4 = v4.co
maxX = max (maxX, x1, x2, x3, x4)
maxY = max (maxY, y1, y2, y3, y4)
maxZ = max (maxZ, z1, z2, z3, z4)
minX = min (minX, x1, x2, x3, x4)
minY = min (minY, y1, y2, y3, y4)
minZ = min (minZ, z1, z2, z3, z4)
def xfigheader(): def xfigheader():
global export_type global export_type
print "#FIG 3.2 Produced by xfig version 3.2.5-alpha5" print '#FIG 3.2 Produced by xfig version 3.2.5-alpha5'
print "Landscape" print 'Landscape'
print"Center" print 'Center'
if boolmode==0: if boolmode==0:
print"Inches" print 'Inches'
else: else:
print"Metric" print 'Metric'
#print export_type #print export_type
print"Letter" print 'Letter'
print"100.00" print '100.00'
print"Single" print 'Single'
print "-2" print '-2'
print "1200 2" print '1200 2'
def xytransform (face): def xytransform(face):
"""gives the face vertexes coordinates in the xfig format/translation (view xy)""" """gives the face vertexes coordinates in the xfig format/translation (view xy)"""
v4=None v4=None
x4=y4=z4=None x4=y4=z4=None
if len(face.v)==3: if len(face)==3:
v1,v2,v3=face.v v1,v2,v3=face.v
else: else:
v1,v2,v3,v4=face.v v1,v2,v3,v4=face.v
x1,y1,z1 = v1.co x1,y1,z1 = v1.co
x2,y2,z2 = v2.co x2,y2,z2 = v2.co
x3,y3,z3 = v3.co x3,y3,z3 = v3.co
y1=-y1 y1=-y1
y2=-y2 y2=-y2
y3=-y3 y3=-y3
if v4 !=None: if v4:
x4,y4,z4 = v4.co x4,y4,z4 = v4.co
y4=-y4 y4=-y4
return x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4 return x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4
@ -173,10 +122,10 @@ def xztransform(face):
"""gives the face vertexes coordinates in the xfig format/translation (view xz)""" """gives the face vertexes coordinates in the xfig format/translation (view xz)"""
v4=None v4=None
x4=y4=z4=None x4=y4=z4=None
if len(face.v)==3: if len(face)==3:
v1,v2,v3=face.v v1,v2,v3=face.v
else: else:
v1,v2,v3,v4=face.v v1,v2,v3,v4=face.v
#Order vertexes #Order vertexes
x1,y1,z1 = v1.co x1,y1,z1 = v1.co
@ -190,7 +139,7 @@ def xztransform(face):
z2=-z2+maxZ-minY +space z2=-z2+maxZ-minY +space
z3=-z3+maxZ-minY +space z3=-z3+maxZ-minY +space
if v4 !=None: if v4:
x4,y4,z4 = v4.co x4,y4,z4 = v4.co
y4=-y4 y4=-y4
z4=-z4+maxZ-minY +space z4=-z4+maxZ-minY +space
@ -200,219 +149,214 @@ def yztransform(face):
"""gives the face vertexes coordinates in the xfig format/translation (view xz)""" """gives the face vertexes coordinates in the xfig format/translation (view xz)"""
v4=None v4=None
x4=y4=z4=None x4=y4=z4=None
if len(face.v)==3: if len(face)==3:
v1,v2,v3=face.v v1,v2,v3=face.v
else: else:
v1,v2,v3,v4=face.v v1,v2,v3,v4=face.v
#Order vertexes #Order vertexes
x1,y1,z1 = v1.co x1,y1,z1 = v1.co
x2,y2,z2 = v2.co x2,y2,z2 = v2.co
x3,y3,z3 = v3.co x3,y3,z3 = v3.co
y1=-y1 y1=-y1; y2=-y2; y3=-y3
y2=-y2
y3=-y3
z1=-(z1-maxZ-maxX-space) z1=-(z1-maxZ-maxX-space)
z2=-(z2-maxZ-maxX-space) z2=-(z2-maxZ-maxX-space)
z3=-(z3-maxZ-maxX-space) z3=-(z3-maxZ-maxX-space)
if v4 !=None: if v4:
x4,y4,z4 = v4.co x4,y4,z4 = v4.co
y4=-y4 y4=-y4
z4=-(z4-maxZ-maxX-space) z4=-(z4-maxZ-maxX-space)
return x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4 return x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4
def figdata(expview): def figdata(ob, expview):
"""Prints all the xfig data (no header)""" """Prints all the xfig data (no header)"""
objects = Blender.Object.GetSelected() mesh = ob.getData(mesh=1)
objname = objects[0].name
meshname = objects[0].getData(name_only=1)
mesh = Blender.NMesh.GetRaw(meshname)
obj = Blender.Object.Get(objname)
facenumber = len(mesh.faces) facenumber = len(mesh.faces)
for face in mesh.faces: for face in mesh.faces:
if len(face.v) == 3: # triangle if len(face) == 3: # triangle
print "2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4" print '2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4'
if expview=="xy": if expview=='xy':
x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xytransform(face) x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xytransform(face)
faceverts = int(x1*scale),int(y1*scale),int(x2*scale),int(y2*scale),int(x3*scale),int(y3*scale), int(x1*scale),int(y1*scale) faceverts = int(x1*scale),int(y1*scale),int(x2*scale),int(y2*scale),int(x3*scale),int(y3*scale), int(x1*scale),int(y1*scale)
elif expview=="xz": elif expview=='xz':
x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xztransform(face) x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xztransform(face)
faceverts = int(x1*scale),int(z1*scale),int(x2*scale),int(z2*scale),int(x3*scale),int(z3*scale), int(x1*scale),int(z1*scale) faceverts = int(x1*scale),int(z1*scale),int(x2*scale),int(z2*scale),int(x3*scale),int(z3*scale), int(x1*scale),int(z1*scale)
elif expview=="yz": elif expview=='yz':
x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=yztransform(face) x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=yztransform(face)
faceverts = int(z1*scale),int(y1*scale),int(z2*scale),int(y2*scale),int(z3*scale),int(y3*scale),int(z1*scale),int(y1*scale) faceverts = int(z1*scale),int(y1*scale),int(z2*scale),int(y2*scale),int(z3*scale),int(y3*scale),int(z1*scale),int(y1*scale)
print "\t% i % i % i % i % i % i % i % i" % faceverts print '\t% i % i % i % i % i % i % i % i' % faceverts
else: else: # Quad
if len(face.v) == 4: #quadrilateral print '2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5'
print "2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5" if expview=='xy':
if expview=="xy": x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xytransform(face)
x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xytransform(face) faceverts = int(x1*scale),int(y1*scale),int(x2*scale),int(y2*scale),int(x3*scale),int(y3*scale),int(x4*scale),int(y4*scale), int(x1*scale),int(y1*scale)
faceverts = int(x1*scale),int(y1*scale),int(x2*scale),int(y2*scale),int(x3*scale),int(y3*scale),int(x4*scale),int(y4*scale), int(x1*scale),int(y1*scale)
elif expview=="xz": elif expview=='xz':
x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xztransform(face) x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=xztransform(face)
faceverts = int(x1*scale),int(z1*scale),int(x2*scale),int(z2*scale),int(x3*scale),int(z3*scale),int(x4*scale),int(z4*scale), int(x1*scale),int(z1*scale) faceverts = int(x1*scale),int(z1*scale),int(x2*scale),int(z2*scale),int(x3*scale),int(z3*scale),int(x4*scale),int(z4*scale), int(x1*scale),int(z1*scale)
elif expview=="yz": elif expview=='yz':
x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=yztransform(face) x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4=yztransform(face)
faceverts = int(z1*scale),int(y1*scale),int(z2*scale),int(y2*scale),int(z3*scale),int(y3*scale),int(z4*scale),int(y4*scale), int(z1*scale),int(y1*scale) faceverts = int(z1*scale),int(y1*scale),int(z2*scale),int(y2*scale),int(z3*scale),int(y3*scale),int(z4*scale),int(y4*scale), int(z1*scale),int(y1*scale)
print "\t% i % i % i % i % i % i % i % i % i % i" % faceverts print '\t% i % i % i % i % i % i % i % i % i % i' % faceverts
else:
pass #it should not occour, but....
def writexy(filename):
def writexy(ob, filename):
"""writes the x-y view file exported""" """writes the x-y view file exported"""
global maxX, maxY, maxZ global maxX, maxY, maxZ
global minX, minY, minZ global minX, minY, minZ
global space global space
global scale global scale
#start = time.clock() #start = time.clock()
file = open(filename, "wb") file = open(filename, 'wb')
std=sys.stdout std=sys.stdout
sys.stdout=file sys.stdout=file
xfigheader() xfigheader()
figdata("xy")# xydata() figdata(ob, 'xy')# xydata()
sys.stdout=std sys.stdout=std
Blender.Window.DrawProgressBar(1.0, '') # clear progressbar Blender.Window.DrawProgressBar(1.0, '') # clear progressbar
file.close() file.close()
#end = time.clock() #end = time.clock()
#seconds = " in %.2f %s" % (end-start, "seconds") #seconds = " in %.2f %s" % (end-start, "seconds")
message = "Successfully exported " + Blender.sys.basename(filename)# + seconds print 'Successfully exported ', Blender.sys.basename(filename)# + seconds
print message
def writexz(filename): def writexz(filename):
"""writes the x-z view file exported""" """writes the x-z view file exported"""
global space,maxX,maxY,maxZ, scale global space,maxX,maxY,maxZ, scale
#start = time.clock() #start = time.clock()
file = open(filename, "wb") file = open(filename, 'wb')
std=sys.stdout std=sys.stdout
sys.stdout=file sys.stdout=file
xfigheader() xfigheader()
figdata("xz")#xzdata() figdata(ob, 'xz')#xzdata()
sys.stdout=std sys.stdout=std
Blender.Window.DrawProgressBar(1.0, '') # clear progressbar Blender.Window.DrawProgressBar(1.0, '') # clear progressbar
file.close() file.close()
#end = time.clock() #end = time.clock()
#seconds = " in %.2f %s" % (end-start, "seconds") #seconds = " in %.2f %s" % (end-start, "seconds")
message = "Successfully exported " + Blender.sys.basename(filename)# + seconds print 'Successfully exported ', Blender.sys.basename(filename)# + seconds
print message
def writeyz(filename): def writeyz(filename):
"""writes the y-z view file exported""" """writes the y-z view file exported"""
global maxX, maxY, maxZ, minX, minY, minZ,scale global maxX, maxY, maxZ, minX, minY, minZ,scale
#start = time.clock() #start = time.clock()
file = open(filename, "wb") file = open(filename, 'wb')
std=sys.stdout std=sys.stdout
sys.stdout=file sys.stdout=file
xfigheader() xfigheader()
figdata("yz")#yzdata() figdata(ob, 'yz')#yzdata()
sys.stdout=std sys.stdout=std
Blender.Window.DrawProgressBar(1.0, '') # clear progressbar Blender.Window.DrawProgressBar(1.0, '') # clear progressbar
file.close() file.close()
#end = time.clock() #end = time.clock()
#seconds = " in %.2f %s" % (end-start, "seconds") #seconds = " in %.2f %s" % (end-start, "seconds")
message = "Successfully exported " + Blender.sys.basename(filename)# + seconds print 'Successfully exported ', Blender.sys.basename(filename)# + seconds
print message
def writeall(filename): def writeall(ob, filename):
"""writes all 3 views """writes all 3 views
Every view is a combined object in the resulting xfig. file.""" Every view is a combined object in the resulting xfig. file."""
global maxX, maxY, maxZ, minX, minY, minZ,scale global maxX, maxY, maxZ, minX, minY, minZ,scale
#start = time.clock() #start = time.clock()
file = open(filename, "wb") file = open(filename, 'wb')
std=sys.stdout std=sys.stdout
sys.stdout=file sys.stdout=file
xfigheader() xfigheader()
print "#upper view (7)" print '#upper view (7)'
print "6 % i % i % i % i ", minX, minY, maxX, maxY print '6 % i % i % i % i ', minX, minY, maxX, maxY
figdata("xy") #xydata() figdata(ob, 'xy') #xydata()
print "-6" print '-6'
print "#bottom view (1)" print '#bottom view (1)'
print "6 %i %i %i %i", minX, -minZ+maxZ-minY +space, maxX,-maxZ+maxZ-minY +space print '6 %i %i %i %i', minX, -minZ+maxZ-minY +space, maxX,-maxZ+maxZ-minY +space
figdata ("xz") #xzdata() figdata(ob, 'xz') #xzdata()
print "-6" print '-6'
print "#right view (3)" print '#right view (3)'
print "6 %i %i %i %i", minX, minZ-maxZ-maxX-space, maxX,maxZ-maxZ-maxX-space print '6 %i %i %i %i', minX, minZ-maxZ-maxX-space, maxX,maxZ-maxZ-maxX-space
figdata ("yz") #yzdata() figdata(ob, 'yz') #yzdata()
print "-6" print '-6'
sys.stdout=std sys.stdout=std
Blender.Window.DrawProgressBar(1.0, '') # clear progressbar Blender.Window.DrawProgressBar(1.0, '') # clear progressbar
file.close() file.close()
#end = time.clock() #end = time.clock()
#seconds = " in %.2f %s" % (end-start, "seconds") #seconds = " in %.2f %s" % (end-start, "seconds")
message = "Successfully exported " + Blender.sys.basename(filename)# + seconds print 'Successfully exported ', Blender.sys.basename(filename)# + seconds
#********************************************************USER INTERFACE***************************************************** #********************************************************USER INTERFACE*****************************************************
#********************************************************USER INTERFACE***************************************************** #********************************************************USER INTERFACE*****************************************************
#********************************************************USER INTERFACE***************************************************** #********************************************************USER INTERFACE*****************************************************
def gui(): # the function to draw the screen def gui(): # the function to draw the screen
global mystring, mymsg, toggle, sel3files, scale global mystring, mymsg, toggle, sel3files, scale
global guiret1, guiret2, guiret3, guiret4, guiret5, guiret6, guiret7 global guiret1, guiret2, guiret3, guiret4, guiret5, guiret6, guiret7
global ScalePopup, SpacePopup, boolmode, guiscale,hidden_flag global ScalePopup, SpacePopup, boolmode, guiscale,hidden_flag
if len(mystring) > 90: mystring = "" if len(mystring) > 90: mystring = ''
BGL.glClearColor(0,0,1,1) # BGL.glClearColor(0,0,1,1)
BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) # BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)
BGL.glColor3f(1,1,1) BGL.glColor3f(1,1,1)
guiret2=Draw.PushButton("Cancel", 2, 10, 10, 55, 20,"Cancel") guiret2=Draw.PushButton('Cancel', 2, 10, 10, 55, 20,'Cancel')
guiret3=Draw.Toggle("1 file per view", 3, 10, 40, 110,20, sel3files, "3 files") guiret3=Draw.Toggle('1 file per view', 3, 10, 40, 110,20, sel3files, 'Export a file for each view')
guiret4=Draw.PushButton("Export", 4, 70, 10, 70, 20, "Select filename and export") guiret4=Draw.PushButton('Export', 4, 70, 10, 70, 20, 'Select filename and export')
ScalePopup=Draw.Number("Scale", 5, 10,70, 110,20, guiscale, 0.0001, 1000.1, "Scaling factor") ScalePopup=Draw.Number('Scale', 5, 10,70, 110,20, guiscale, 0.0001, 1000.1, 'Scaling factor')
SpacePopup=Draw.Number("Space", 6, 10,90, 110,20, space, 0, 10000, "Space between projections") SpacePopup=Draw.Number('Space', 6, 10,90, 110,20, space, 0, 10000, 'Space between projections')
guiret5=Draw.Toggle("cm", 7, 120,70, 40,20, boolmode, "set scale to 1 blender unit = 1 cm in xfig") guiret5=Draw.Toggle('cm', 7, 120,70, 40,20, boolmode, 'set scale to 1 blender unit = 1 cm in xfig')
guiret6=Draw.Toggle("in", 8, 162,70, 40,20, not boolmode, "set scale to 1 blender unit = 1 in in xfig") guiret6=Draw.Toggle('in', 8, 162,70, 40,20, not boolmode, 'set scale to 1 blender unit = 1 in in xfig')
# guiret7 = guiret6=Draw.Toggle("only visible", 9, 120,90, 82,20, hidden_flag, "hidden faces")
BGL.glRasterPos2i(72, 16)
BGL.glRasterPos2i(72, 16) if toggle: toggle_state = 'down'
if toggle: toggle_state = "down" else: toggle_state = 'up'
else: toggle_state = "up" #Draw.Text('The toggle button is %s.' % toggle_state, 'small')
#Draw.Text("The toggle button is %s." % toggle_state, "small") BGL.glRasterPos2i(10, 230)
BGL.glRasterPos2i(10, 230) #Draw.Text('Type letters from a to z, ESC to leave.')
#Draw.Text("Type letters from a to z, ESC to leave.") BGL.glRasterPos2i(20, 200)
BGL.glRasterPos2i(20, 200) Draw.Text(mystring)
Draw.Text(mystring) BGL.glColor3f(1,0.4,0.3)
BGL.glColor3f(1,0.4,0.3) BGL.glRasterPos2i(340, 70)
BGL.glRasterPos2i(340, 70) Draw.Text(mymsg, 'tiny')
Draw.Text(mymsg, "tiny")
def event(evt, val): # the function to handle input events def event(evt, val): # the function to handle input events
Draw.Redraw(1) Draw.Redraw(1)
import bpy
def button_event(evt): # the function to handle Draw Button events def button_event(evt): # the function to handle Draw Button events
global toggle, guiret5,scale, space, SpacePopup, boolmode, dimscale, guiscale global toggle, guiret5,scale, space, SpacePopup, boolmode, dimscale, guiscale
global hidden_flag, sel3files global hidden_flag, sel3files
if evt==1: if evt==1:
toggle = 1 - toggle toggle = 1 - toggle
Draw.Redraw(1) Draw.Redraw(1)
if evt==2: if evt==2:
Draw.Exit() Draw.Exit()
return return
if evt==3: if evt==3:
sel3files = 1-sel3files sel3files = 1-sel3files
Draw.Redraw(1) Draw.Redraw(1)
if evt==4: if evt==4:
Blender.Window.FileSelector(fs_callback, "Export fig") try: ob = bpy.data.scenes.active.objects.active
Draw.Exit() except: ob = None
return if not ob or ob.type != 'Mesh':
BPyMessages.Error_NoMeshActive()
return
Blender.Window.FileSelector(fs_callback, 'Export fig', Blender.sys.makename(ext='.fig'))
Draw.Exit()
return
if evt==5: if evt==5:
guiscale = ScalePopup.val guiscale = ScalePopup.val
scale=dimscale*guiscale scale=dimscale*guiscale
Draw.Redraw(1) Draw.Redraw(1)
if evt==6: if evt==6:
space =SpacePopup.val space =SpacePopup.val
if evt==7: if evt==7:
boolmode=1 boolmode=1
dimscale=450 #converting to cm dimscale=450 #converting to cm
@ -429,13 +373,24 @@ def button_event(evt): # the function to handle Draw Button events
Draw.Register(gui, event, button_event) # registering the 3 callbacks Draw.Register(gui, event, button_event) # registering the 3 callbacks
import BPyMessages
def fs_callback(filename): def fs_callback(filename):
if filename.find('.fig', -4) > 0: filename = filename[:-4] if filename.lower().endswith('.fig'): filename = filename[:-4]
getmaxmin()
try: ob = bpy.data.scenes.active.objects.active
except: ob = None
if not ob or ob.type != 'Mesh':
BPyMessages.Error_NoMeshActive()
return
mesh = ob.getData(mesh=1)
getmaxmin(ob, mesh)
if sel3files: if sel3files:
writexy(filename+"_XY.fig")
writexz(filename+"_XZ.fig") writexy(ob, filename + '_XY.fig')
writeyz(filename+"_YZ.fig") writexz(ob, filename + '_XZ.fig')
writeall(filename+"_ALL.fig") writeyz(ob, filename + '_YZ.fig')
writeall(ob, filename + '.fig')
print scale print scale
Draw.Exit() Draw.Exit()