| Code: |
|
def test_mesh(self, meshname): object = Blender.getObject(meshname) mesh = Blender.getMesh(object.data) # mesh.enterEditMode() n_vtx = len(mesh.vertices) index = 0 for v in mesh.vertices: for vj in self.joinvtxs: if (self.is_dist_lt_tol(v, vj)): mesh.vertices[index] = tuple([[vj[0], vj[1], vj[2]]]) #mesh.setVertexCoordinates(index, ([vj[0], vj[1], vj[2])) #v[0] = vj[0] #v[1] = vj[1] #v[2] = vj[2] print "%d : (%1.3f,%1.3f,%1.3f)" % (index, v[0], v[1], v[2]) index = index + 1 # mesh.leaveEditMode() |
| Quote: |
|
AttributeError: nmesh vertices must be NMverts |
| Code: |
|
object = Blender.Object.Get(meshname) mesh = Blender.NMesh.GetRaw(object.data.name) n_vtx = len(mesh.verts) index = 0 for v in mesh.verts: for vj in self.joinvtxs: if (self.is_dist_lt_tol(v, vj)): mesh.verts[index] = tuple([[vj[0], vj[1], vj[2]]]) print "%d : (%1.3f,%1.3f,%1.3f)" % (index, v[0], v[1], v[2]) index = index + 1 Blender.NMesh.PutRaw(mesh, object.data.name) |
| Code: |
|
# this script is for exactly aligning the edges of multiple meshes import Blender from Blender import NMesh import math #import string import sys class MeshEdgeAlign: def __init__(self, joinmesh,tolerance): self.joinmesh = joinmesh self.joinvtxs = [] self.tolerance = tolerance self.scene = None self.meshesused = [] def use_mesh_series(self, meshroot, meshindices): for n in meshindices: meshname = "%s.%03i" % (meshroot,n) print "using %s" % meshname self.meshesused.append(meshname) # self.meshname = meshname # self.writeVertexes(meshname) def list_meshes_used(self): for n in self.meshesused: print "used %s" % n def test_all_meshes(self): object = Blender.Object.Get(self.joinmesh) mesh = Blender.NMesh.GetRaw(object.data.name) n_vtx = len(mesh.verts) for v in mesh.verts: self.joinvtxs.append([v.co[0],v.co[1],0.0000]) # v.co[2] replaced with literal 0 (because my edge happens to be on the z=0 plane) for n in self.meshesused: print "testing %s" % n self.test_mesh( n ) def test_mesh(self, meshname): object = Blender.Object.Get(meshname) mesh = Blender.NMesh.GetRaw(object.data.name) n_vtx = len(mesh.verts) index = 0 for v in mesh.verts: for vj in self.joinvtxs: if (self.is_dist_lt_tol(tuple([v.co[0], v.co[1], v.co[2]]), vj)): #mesh.verts[index] = tuple([[vj[0], vj[1], vj[2]]]) print "%d : (%1.3f,%1.3f,%1.3f)" % (index, v[0], v[1], v[2]) v.co[0] = vj[0] v.co[1] = vj[1] v.co[2] = vj[2] index = index + 1 mesh.update() #Blender.NMesh.PutRaw(mesh, object.data.name, 0) def is_dist_lt_tol(self, v, vj): dx = v[0] - vj[0] dy = v[1] - vj[1] dz = v[2] - vj[2] d = math.sqrt( (dx * dx) + (dy * dy) + (dz * dz) ) return (d < self.tolerance) # perform alignment on my meshes ( adjust these manually until interactive version written) align = MeshEdgeAlign("Join_Face",0.16) # initialise class with ME:Join_Face as the template and 0.16 as the tolerance scene = Blender.Scene.GetCurrent() align.use_mesh_series("LowerFace",range(1,9)) # add Me:LowerFace.001 to ME:LowerFace.008 to list align.use_mesh_series("Forehead",range(1,4)) # add ME:ForeHead.001 to ME:ForeHead.003 to list align.list_meshes_used() # debugging sanity check, lists to console align.test_all_meshes() # performs alignment |