def assignUv(self, uvMap=None): if not uvMap: uvMap = defaultUvMap o = self.obj # create a new UV map if necessary if not uvMap in o: o.data.uv_textures.new(uvMap) bm = getBmesh(o) # the inital loop _loop = self.getInitialLoop(bm) # find the open end if the finish sequence isn't a closed sequence loop = _loop vert = loop.vert while True: if len(vert.link_loops) == 1: # found the open end _loop = loop break loop = (vert.link_loops[1] if vert.link_loops[0] == loop else vert.link_loops[0]).link_loop_prev vert = loop.vert if loop == _loop: break # finally, assign UV coordinates layer = bm.loops.layers.uv[uvMap] # the layer for vertex groups groupLayer = bm.verts.layers.deform[0] h = getLevelHeight(self.context, o) offsetU = 0. loop = _loop vert = loop.vert e1 = getControlEmptyFromLoop(loop, groupLayer, o) while True: # remember the base loop _vert = vert # remember, we are dealing with rectangles # left bottom loop[layer].uv = (offsetU, 0.) # left top loop.link_loop_prev[layer].uv = (offsetU, h) # right bottom loop = loop.link_loop_next e2 = getControlEmptyFromLoop(loop, groupLayer, o) offsetU += (e2.location - e1.location).length loop[layer].uv = (offsetU, 0.) # right top loop.link_loop_next[layer].uv = (offsetU, h) # the step below isn't necessary, we already came to the required loop #loop = loop.link_loop_next vert = loop.vert if len(vert.link_loops) == 1: # reached the opposite end (end if the finish sequence isn't a closed sequence) break loop = vert.link_loops[1] if vert.link_loops[0] == loop else vert.link_loops[0] if loop == _loop: break e1 = e2 setBmesh(o, bm)
def getControls(self): """ Returns an ordered list of EMPTYs controlling the vertices of the area """ bm = getBmesh(self.obj) bm.verts.ensure_lookup_table() # All vertex groups are in the deform layer. # There can be only one deform layer layer = bm.verts.layers.deform[0] # building a list of control EMPTYs controls = [] start = bm.verts[0].link_loops[0] loop = start while True: controls.append( getControlEmptyFromLoop(loop, layer, self.obj) ) loop = loop.link_loop_next if loop == start: break bm.free() return controls
def assignUv(self, uvMap=None): if not uvMap: uvMap = defaultUvMap o = self.obj # create a new UV map if necessary if not uvMap in o: o.data.uv_textures.new(uvMap) bm = getBmesh(o) # the inital loop _loop = self.getInitialLoop(bm) # find the open end if the finish sequence isn't a closed sequence loop = _loop vert = loop.vert while True: if len(vert.link_loops) == 1: # found the open end _loop = loop break loop = (vert.link_loops[1] if vert.link_loops[0] == loop else vert.link_loops[0]).link_loop_prev vert = loop.vert if loop == _loop: break # finally, assign UV coordinates layer = bm.loops.layers.uv[uvMap] # the layer for vertex groups groupLayer = bm.verts.layers.deform[0] h = getLevelHeight(self.context, o) offsetU = 0. loop = _loop vert = loop.vert e1 = getControlEmptyFromLoop(loop, groupLayer, o) while True: # remember the base loop _vert = vert # remember, we are dealing with rectangles # left bottom loop[layer].uv = (offsetU, 0.) # left top loop.link_loop_prev[layer].uv = (offsetU, h) # right bottom loop = loop.link_loop_next e2 = getControlEmptyFromLoop(loop, groupLayer, o) offsetU += (e2.location - e1.location).length loop[layer].uv = (offsetU, 0.) # right top loop.link_loop_next[layer].uv = (offsetU, h) # the step below isn't necessary, we already came to the required loop #loop = loop.link_loop_next vert = loop.vert if len(vert.link_loops) == 1: # reached the opposite end (end if the finish sequence isn't a closed sequence) break loop = vert.link_loops[1] if vert.link_loops[ 0] == loop else vert.link_loops[0] if loop == _loop: break e1 = e2 setBmesh(o, bm)