本文整理汇总了Python中BPyMesh.ngon方法的典型用法代码示例。如果您正苦于以下问题:Python BPyMesh.ngon方法的具体用法?Python BPyMesh.ngon怎么用?Python BPyMesh.ngon使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BPyMesh
的用法示例。
在下文中一共展示了BPyMesh.ngon方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: create_mesh
# 需要导入模块: import BPyMesh [as 别名]
# 或者: from BPyMesh import ngon [as 别名]
def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc, verts_tex, faces, unique_materials, unique_material_images, unique_smooth_groups, dataname):
'''
Takes all the data gathered and generates a mesh, adding the new object to new_objects
deals with fgons, sharp edges and assigning materials
'''
if not has_ngons:
CREATE_FGONS= False
if unique_smooth_groups:
sharp_edges= {}
smooth_group_users= dict([ (context_smooth_group, {}) for context_smooth_group in unique_smooth_groups.iterkeys() ])
context_smooth_group_old= -1
# Split fgons into tri's
fgon_edges= {} # Used for storing fgon keys
if CREATE_EDGES:
edges= []
context_object= None
# reverse loop through face indicies
for f_idx in xrange(len(faces)-1, -1, -1):
face_vert_loc_indicies,\
face_vert_tex_indicies,\
context_material,\
context_smooth_group,\
context_object= faces[f_idx]
len_face_vert_loc_indicies = len(face_vert_loc_indicies)
if len_face_vert_loc_indicies==1:
faces.pop(f_idx)# cant add single vert faces
elif not face_vert_tex_indicies or len_face_vert_loc_indicies == 2: # faces that have no texture coords are lines
if CREATE_EDGES:
# generators are better in python 2.4+ but can't be used in 2.3
# edges.extend( (face_vert_loc_indicies[i], face_vert_loc_indicies[i+1]) for i in xrange(len_face_vert_loc_indicies-1) )
edges.extend( [(face_vert_loc_indicies[i], face_vert_loc_indicies[i+1]) for i in xrange(len_face_vert_loc_indicies-1)] )
faces.pop(f_idx)
else:
# Smooth Group
if unique_smooth_groups and context_smooth_group:
# Is a part of of a smooth group and is a face
if context_smooth_group_old is not context_smooth_group:
edge_dict= smooth_group_users[context_smooth_group]
context_smooth_group_old= context_smooth_group
for i in xrange(len_face_vert_loc_indicies):
i1= face_vert_loc_indicies[i]
i2= face_vert_loc_indicies[i-1]
if i1>i2: i1,i2= i2,i1
try:
edge_dict[i1,i2]+= 1
except KeyError:
edge_dict[i1,i2]= 1
# FGons into triangles
if has_ngons and len_face_vert_loc_indicies > 4:
ngon_face_indices= BPyMesh.ngon(verts_loc, face_vert_loc_indicies)
faces.extend(\
[(\
[face_vert_loc_indicies[ngon[0]], face_vert_loc_indicies[ngon[1]], face_vert_loc_indicies[ngon[2]] ],\
[face_vert_tex_indicies[ngon[0]], face_vert_tex_indicies[ngon[1]], face_vert_tex_indicies[ngon[2]] ],\
context_material,\
context_smooth_group,\
context_object)\
for ngon in ngon_face_indices]\
)
# edges to make fgons
if CREATE_FGONS:
edge_users= {}
for ngon in ngon_face_indices:
for i in (0,1,2):
i1= face_vert_loc_indicies[ngon[i ]]
i2= face_vert_loc_indicies[ngon[i-1]]
if i1>i2: i1,i2= i2,i1
try:
edge_users[i1,i2]+=1
except KeyError:
edge_users[i1,i2]= 1
for key, users in edge_users.iteritems():
if users>1:
fgon_edges[key]= None
# remove all after 3, means we dont have to pop this one.
faces.pop(f_idx)
# Build sharp edges
if unique_smooth_groups:
for edge_dict in smooth_group_users.itervalues():
for key, users in edge_dict.iteritems():
#.........这里部分代码省略.........
示例2: processBuilding
# 需要导入模块: import BPyMesh [as 别名]
# 或者: from BPyMesh import ngon [as 别名]
def processBuilding(building, groups, ids,path):
#
global zzMesh
if zzMesh==None:
zzMesh=bpy.data.meshes.new('zz')
#
o=open(os.sep.join([path,'building_%i.bld'%building]),'w')
# Compute building position!
avgX=0.0
avgY=0.0
minX=9999.0
maxX=-9999.0
minY=9999.0
maxY=-9999.0
count=0
for id in groups[building]:
for (x,y,z) in ids[id][Attributes.GEOM]:
avgX+=x
avgY+=y
count+=1
if x>maxX: maxX=x
if x<minX: minX=x
if y>maxY: maxY=y
if y<minY: minY=y
icountf=1.0/float(count)
avgX*=icountf
avgY*=icountf
print >>o, '{'
print >>o, ' "origin":(%f,%f),'%(avgX,avgY)
print >>o, ' "bounds":((%f,%f),(%f,%f)),'%(minX,minY,maxX,maxY)
print >>o, ' "parts":{'
# Convert geometry to meters
angleToDistance=111226.3
yFactor=math.cos(avgY*0.017453292519943295769236907684886)
baseindex=0
for id in groups[building]:
print >>o, ' %i:{'%id
# First, base geometry
l=len(ids[id][Attributes.GEOM])
for i in xrange(0,l):
(x,y,z)=ids[id][Attributes.GEOM][i]
ids[id][Attributes.GEOM][i]=[(x-avgX)*angleToDistance*yFactor, (y-avgY)*angleToDistance, z]
baseindex+=1
basegeom=ids[id][Attributes.GEOM]
faces=BPyMesh.ngon(basegeom[::-1], range(0,len(basegeom)))
zzMesh.verts.delete(zzMesh.verts)
zzMesh.verts.extend(basegeom[::-1])
zzMesh.faces.extend(faces)
zzMesh.calcNormals()
print >>o, ' "base":{'
outputMesh(o,zzMesh,4)
print >>o, ' },'
# Then, roofs
topgeom=[]
if ids[id].has_key(Attributes.ROOF):
print >>o, ' "roofs":['
l=len(ids[id][Attributes.ROOF])
for i in xrange(0,l):
ll=len(ids[id][Attributes.ROOF][i])
for j in xrange(0,ll):
(x,y,z)=ids[id][Attributes.ROOF][i][j]
ids[id][Attributes.ROOF][i][j]=[(x-avgX)*angleToDistance*yFactor, (y-avgY)*angleToDistance, z]
rgeom=ids[id][Attributes.ROOF][i]
topgeom.extend(rgeom)
faces=BPyMesh.ngon(rgeom, range(0,len(rgeom)))
zzMesh.verts.delete(zzMesh.verts)
zzMesh.verts.extend(rgeom)
zzMesh.faces.extend(faces)
zzMesh.calcNormals()
#
print >>o, ' {'
outputMesh(o,zzMesh,5)
print >>o, ' },'
print >>o, ' ],'
# Last, pediments
if ids[id].has_key(Attributes.PEDIMENT):
print >>o, ' "pediments":['
l=len(ids[id][Attributes.PEDIMENT])
for i in xrange(0,l):
ll=len(ids[id][Attributes.PEDIMENT][i])
for j in xrange(0,ll):
(x,y,z)=ids[id][Attributes.PEDIMENT][i][j]
ids[id][Attributes.PEDIMENT][i][j]=[(x-avgX)*angleToDistance*yFactor, (y-avgY)*angleToDistance, z]
pgeom=ids[id][Attributes.PEDIMENT][i]
topgeom.extend(pgeom)
faces=BPyMesh.ngon(pgeom, range(0,len(pgeom)))
zzMesh.verts.delete(zzMesh.verts)
zzMesh.verts.extend(pgeom)
zzMesh.faces.extend(faces)
zzMesh.calcNormals()
#
print >>o, ' {'
outputMesh(o,zzMesh,5)
print >>o, ' },'
print >>o, ' ],'
# And while we're here, construct some walls...
upper=[]
for (x,y,z) in basegeom:
minz=99999.0
for (rx,ry,rz) in topgeom:
#.........这里部分代码省略.........