mesh_skin updated to use ed.key, other minor cleanups.

updated the url in other scripts
This commit is contained in:
Campbell Barton 2006-12-25 23:14:48 +00:00
parent 576c5b85b6
commit 8f010d2a58
4 changed files with 28 additions and 43 deletions

@ -8,7 +8,7 @@ Tooltip: 'Export to 3DS file format (.3ds).'
"""
__author__ = ["Campbell Barton", "Bob Holcomb", "Richard Lärkäng", "Damien McGinnes", "Mark Stijnman"]
__url__ = ("blender", "elysiun", "http://www.gametutorials.com", "http://lib3ds.sourceforge.net/")
__url__ = ("blenderartists.org", "www.blender.org", "www.gametutorials.com", "lib3ds.sourceforge.net/")
__version__ = "0.90a"
__bpydoc__ = """\

@ -7,8 +7,8 @@ Tooltip: 'Import from 3DS file format (.3ds)'
"""
__author__= ['Bob Holcomb', 'Richard L?rk?ng', 'Damien McGinnes', 'Campbell Barton']
__url__= ('blender', 'elysiun', 'http://www.gametutorials.com')
__version__= '0.99'
__url__ = ("blenderartists.org", "www.blender.org", "www.gametutorials.com", "lib3ds.sourceforge.net/")
__version__= '0.995'
__bpydoc__= '''\
3ds Importer

@ -8,7 +8,7 @@ Tip: 'Copy local axis orientation of active object to all selected meshes (chang
"""
__author__ = "A Vanpoucke (xand)"
__url__ = ("blender", "elysiun",
__url__ = ("blenderartists.org", "www.blender.org",
"French Blender support forum, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
__version__ = "2 17/12/05"

@ -8,8 +8,8 @@ Tooltip: 'Select 2 vert loops, then run this script.'
"""
__author__ = "Campbell Barton AKA Ideasman"
__url__ = ["http://members.iinet.net.au/~cpbarton/ideasman/", "blender", "elysiun"]
__version__ = "1.0 2004/04/25"
__url__ = ["blenderartists.org", "www.blender.org"]
__version__ = "1.1 2006/12/26"
__bpydoc__ = """\
With this script vertex loops can be skinned: faces are created to connect the
@ -50,7 +50,9 @@ A pop-up will provide further options, if the results of a method are not adequa
# Made by Ideasman/Campbell 2005/06/15 - cbarton@metavr.com
import Blender
from Blender import *
from Blender import Window
from Blender.Mathutils import AngleBetweenVecs, MidpointVecs, Vector, CrossVecs
from Blender.Draw import PupMenu
BIG_NUM = 1<<30
@ -59,7 +61,7 @@ CULL_METHOD = 0
def AngleBetweenVecs(a1,a2):
try:
return Mathutils.AngleBetweenVecs(a1,a2)
return AngleBetweenVecs(a1,a2)
except:
return 180.0
@ -76,7 +78,7 @@ class edge:
self.removed = 0 # Have we been culled from the eloop
self.match = None # The other edge were making a face with
self.cent= Mathutils.MidpointVecs(co1, co2)
self.cent= MidpointVecs(co1, co2)
self.angle= 0.0
class edgeLoop:
@ -85,7 +87,7 @@ class edgeLoop:
# Get Loops centre.
fac= len(loop)
self.centre= reduce(lambda a,b: a+b.co/fac, loop, Mathutils.Vector())
self.centre= reduce(lambda a,b: a+b.co/fac, loop, Vector())
# Convert Vert loop to Edges.
self.edges = []
@ -105,9 +107,9 @@ class edgeLoop:
# GENERATE AN AVERAGE NORMAL FOR THE WHOLE LOOP.
self.normal = Mathutils.Vector()
self.normal = Vector()
for e in self.edges:
n = Mathutils.CrossVecs(self.centre-e.co1, self.centre-e.co2)
n = CrossVecs(self.centre-e.co1, self.centre-e.co2)
# Do we realy need tot normalize?
n.normalize()
self.normal += n
@ -137,7 +139,7 @@ class edgeLoop:
a = n1-n2
b = n1-n3
normal1 = Mathutils.CrossVecs(a,b)
normal1 = CrossVecs(a,b)
normal1.normalize()
n1 = e.co2
@ -147,7 +149,7 @@ class edgeLoop:
a = n1-n2
b = n1-n3
normal2 = Mathutils.CrossVecs(a,b)
normal2 = CrossVecs(a,b)
normal2.normalize()
# Reuse normal1 var
@ -173,7 +175,7 @@ class edgeLoop:
for e in self.edges:
e.normal = -e.normal
e.v1, e.v2 = e.v2, e.v1
self.normal = -self.normal
self.normal.negate()
def removeSmallest(self, cullNum, otherLoopLen):
'''
@ -244,36 +246,19 @@ def getSelectedEdges(me, ob):
elif MESH_MODE==Blender.Mesh.SelectModes.FACE:
Blender.Mesh.Mode(Blender.Mesh.SelectModes.EDGE)
def ed_key(ed):
i1= ed.v1.index
i2= ed.v2.index
if i1 > i2:
return i2, i1
else:
return i1, i2
# value is [edge, face_sel_user_in]
'''
try: # Python 2.4 only
edge_dict= dict((ed_key(ed), [ed, 0]) for ed in me.edges)
edge_dict= dict((ed.key, [ed, 0]) for ed in me.edges)
except:
'''
# Cant try 2.4 syntax because python 2.3 will complain still
edge_dict= dict([(ed_key(ed), [ed, 0]) for ed in me.edges])
edge_dict= dict([(ed.key, [ed, 0]) for ed in me.edges])
for f in me.faces:
if f.sel:
fidx= [v.index for v in f]
for i in xrange(len(fidx)):
i1= fidx[i]
i2= fidx[i-1]
if i1>i2:
i1,i2= i2,i1
# ed_data is a list of 2 ed and face user
ed_data= edge_dict[i1,i2]
ed_data[1]+=1
for edkey in f.edge_keys:
edge_dict[edkey][1] += 1
Blender.Mesh.Mode(MESH_MODE)
return [ ed_data[0] for ed_data in edge_dict.itervalues() if ed_data[1] == 1 ]
@ -441,7 +426,7 @@ def main():
is_editmode = Window.EditMode()
if is_editmode: Window.EditMode(0)
ob = Scene.GetCurrent().getActiveObject()
ob = Blender.Scene.GetCurrent().objects.active
if ob == None or ob.getType() != 'Mesh':
return
@ -451,12 +436,12 @@ def main():
vertLoops = getVertLoops(selEdges) # list of lists of edges.
if len(vertLoops) > 2:
choice = Draw.PupMenu('Loft '+str(len(vertLoops))+' edge loops%t|loop|segment')
choice = PupMenu('Loft '+str(len(vertLoops))+' edge loops%t|loop|segment')
if choice == -1:
if is_editmode: Window.EditMode(1)
return
elif len(vertLoops) < 2:
Draw.PupMenu('Error, No Vertloops found%t|if you have a valid selection, go in and out of face edit mode to update the selection state.')
PupMenu('Error%t|No Vertloops found!')
if is_editmode: Window.EditMode(1)
return
else:
@ -465,7 +450,7 @@ def main():
# The line below checks if any of the vert loops are differenyt in length.
if False in [len(v) == len(vertLoops[0]) for v in vertLoops]:
CULL_METHOD = Draw.PupMenu('Small to large edge loop distrobution method%t|remove edges evenly|remove smallest edges')
CULL_METHOD = PupMenu('Small to large edge loop distrobution method%t|remove edges evenly|remove smallest edges')
if CULL_METHOD == -1:
if is_editmode: Window.EditMode(1)
return
@ -476,7 +461,7 @@ def main():
CULL_METHOD = 1 # even
time1 = sys.time()
time1 = Blender.sys.time()
# Convert to special edge data.
edgeLoops = []
for vloop in vertLoops:
@ -528,14 +513,14 @@ def main():
if choice == 1 and len(edgeOrderedList) > 2: # Loop
skin2EdgeLoops(edgeOrderedList[0], edgeOrderedList[-1], me, ob, 0)
print '\nSkin done in %.4f sec.' % (sys.time()-time1)
# REMOVE SELECTED FACES.
faces= [ f for f in me.faces if f.sel ]
if faces:
me.faces.delete(1, faces)
print '\nSkin done in %.4f sec.' % (Blender.sys.time()-time1)
if is_editmode: Window.EditMode(1)
if __name__ == '__main__':