本文整理汇总了Python中BPyMesh.meshWeight2List方法的典型用法代码示例。如果您正苦于以下问题:Python BPyMesh.meshWeight2List方法的具体用法?Python BPyMesh.meshWeight2List怎么用?Python BPyMesh.meshWeight2List使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BPyMesh
的用法示例。
在下文中一共展示了BPyMesh.meshWeight2List方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: meshNormalizedWeights
# 需要导入模块: import BPyMesh [as 别名]
# 或者: from BPyMesh import meshWeight2List [as 别名]
def meshNormalizedWeights(mesh):
try:
groupNames, vWeightList = BPyMesh.meshWeight2List(mesh)
except:
return [],[]
if not groupNames:
return [],[]
for i, vWeights in enumerate(vWeightList):
tot = 0.0
for w in vWeights:
tot+=w
#print 'i:%d tot:%f' % (i, tot)
if tot:
for j, w in enumerate(vWeights):
vWeights[j] = w/tot
#if w/tot > 0:
#print 'i:%d j:%d w:%f w/tot:%f' % (i, j, w, vWeights[j])
return groupNames, vWeightList
示例2: redux
# 需要导入模块: import BPyMesh [as 别名]
# 或者: from BPyMesh import meshWeight2List [as 别名]
#.........这里部分代码省略.........
if new_loc_smart.x != new_loc_smart.x: # NAN LOCATION, revert to between
new_loc_smart= None
return new_loc_smart, between, v1co*0.99999 + v2co*0.00001, v1co*0.00001 + v2co*0.99999
class collapseFace(object):
__slots__ = 'verts', 'normal', 'area', 'index', 'orig_uv', 'orig_col', 'uv', 'col' # , 'collapse_edge_count'
def __init__(self, f):
self.init_from_face(f)
def init_from_face(self, f):
self.verts= f.v
self.normal= f.no
self.area= f.area
self.index= f.index
if DO_UV:
self.orig_uv= [uv_key(uv) for uv in f.uv]
self.uv= f.uv
if DO_VCOL:
self.orig_col= [col_key(col) for col in f.col]
self.col= f.col
collapse_edges= collapse_faces= None
# So meshCalcNormals can avoid making a new list all the time.
reuse_vertNormals= [ Vector() for v in xrange(len(me.verts)) ]
while target_face_count <= len(me.faces):
BPyMesh.meshCalcNormals(me, reuse_vertNormals)
if DO_WEIGHTS:
#groupNames, vWeightDict= BPyMesh.meshWeight2Dict(me)
groupNames, vWeightList= BPyMesh.meshWeight2List(me)
# THIS CRASHES? Not anymore.
verts= list(me.verts)
edges= list(me.edges)
faces= list(me.faces)
# THIS WORKS
#verts= me.verts
#edges= me.edges
#faces= me.faces
# if DEBUG: DOUBLE_CHECK= [0]*len(verts)
me.sel= False
if not collapse_faces: # Initialize the list.
collapse_faces= [collapseFace(f) for f in faces]
collapse_edges= [collapseEdge(ed) for ed in edges]
else:
for i, ed in enumerate(edges):
collapse_edges[i].init_from_edge(ed)
# Strip the unneeded end off the list
collapse_edges[i+1:]= []
for i, f in enumerate(faces):
collapse_faces[i].init_from_face(f)
# Strip the unneeded end off the list
collapse_faces[i+1:]= []
collapse_edges_dict= dict( [(ced.key, ced) for ced in collapse_edges] )
示例3: env_from_group
# 需要导入模块: import BPyMesh [as 别名]
# 或者: from BPyMesh import meshWeight2List [as 别名]
def env_from_group(ob_act, grp, PREF_UPDATE_ACT=True):
me = ob_act.getData(mesh=1)
if PREF_UPDATE_ACT:
act_group = me.activeGroup
if act_group == None:
Draw.PupMenu('Error%t|No active vertex group.')
return
try:
ob = Object.Get(act_group)
except:
Draw.PupMenu('Error%t|No object named "'+ act_group +'".')
return
group_isect = intersection_data(ob)
else:
# get intersection data
# group_isect_data = [intersection_data(ob) for ob in group.objects]
group_isect_data = []
for ob in grp.objects:
if ob != ob_act: # in case we're in the group.
gid = intersection_data(ob)
if gid[1]: # has some triangles?
group_isect_data.append( gid )
# we only need 1 for the active group
if PREF_UPDATE_ACT:
break
# sort by name
group_isect_data.sort()
if PREF_UPDATE_ACT:
group_names, vweight_list = BPyMesh.meshWeight2List(me)
group_index = group_names.index(act_group)
else:
group_names = [gid[0] for gid in group_isect_data]
vweight_list= [[0.0]* len(group_names) for i in xrange(len(me.verts))]
ob_act_mat = ob_act.matrixWorld
for vi, v in enumerate(me.verts):
# Get all the groups for this vert
co = v.co * ob_act_mat
if PREF_UPDATE_ACT:
# only update existing
if point_in_data(co, group_isect): w = 1.0
else: w = 0.0
vweight_list[vi][group_index] = w
else:
# generate new vgroup weights.
for group_index, group_isect in enumerate(group_isect_data):
if point_in_data(co, group_isect):
vweight_list[vi][group_index] = 1.0
BPyMesh.list2MeshWeight(me, group_names, vweight_list)