There might already be one, anyway I've cobbled up a quick maxscript (won't work as expected if there are any shared verts, obviously):
struct edgeVec
(
obj, pts, pos, vec,
fn setEdge len =
(
polyOp.setVert obj pts[1] (pos - len * vec)
polyOp.setVert obj pts[2] (pos + len * vec)
)
)
fn averageEdgeLengths obj =
(
local edges = polyOp.getEdgeSelection obj
local verts = polyOp.getVertsUsingEdge obj edges
local totalLength = 0
local edgeVecs = for e in edges collect
(
local verts = polyOp.getEdgeVerts obj e
local v1 = polyOp.getVert obj verts[1]
local v2 = polyOp.getVert obj verts[2]
local vec = v2 - v1
totalLength += length vec
edgeVec obj:obj pts:verts pos:(v1 + vec/2) vec:(normalize vec)
)
local len = totalLength / edges.numberSet / 2
for e in edgeVecs do e.setEdge len
)
if isKindOf selection[1] Editable_Poly do
averageEdgeLengths selection[1]
Replies
struct edgeVec ( obj, pts, pos, vec, fn setEdge len = ( polyOp.setVert obj pts[1] (pos - len * vec) polyOp.setVert obj pts[2] (pos + len * vec) ) ) fn averageEdgeLengths obj = ( local edges = polyOp.getEdgeSelection obj local verts = polyOp.getVertsUsingEdge obj edges local totalLength = 0 local edgeVecs = for e in edges collect ( local verts = polyOp.getEdgeVerts obj e local v1 = polyOp.getVert obj verts[1] local v2 = polyOp.getVert obj verts[2] local vec = v2 - v1 totalLength += length vec edgeVec obj:obj pts:verts pos:(v1 + vec/2) vec:(normalize vec) ) local len = totalLength / edges.numberSet / 2 for e in edgeVecs do e.setEdge len ) if isKindOf selection[1] Editable_Poly do averageEdgeLengths selection[1]I have made Set Edge Length a whyle ago - watch[ame="
I have to update it when I have spare time.
import maya.cmds as cmds from pymel.core.datatypes import Vector class edgeVec: def __init__(self, pts, pos, vec): self.pts, self.pos, self.vec = pts, pos, vec def setEdge(self, length): move = lambda vert, pos: cmds.move(pos[0], pos[1], pos[2], vert, ws=True, a=True) move(self.pts[0], self.pos - length * self.vec) move(self.pts[1], self.pos + length * self.vec) def getEdgeVerts(edge): return cmds.ls(cmds.polyListComponentConversion(edge, toVertex=True), flatten=True) def getEdgeVertsPos(edge): verts = cmds.xform(edge, query=True, translation=True, ws=True) return (Vector(verts[0:3]), Vector(verts[3:6])) def averageEdgeLengths(): edges = cmds.filterExpand(expand=1, selectionMask=32) totalLength = 0. edgeVecs = [] for e in edges: verts = getEdgeVerts(e) v1, v2 = getEdgeVertsPos(e) vec = v2 - v1 length = vec.length() totalLength += length edgeVecs.append(edgeVec(verts, v1 + vec/2, vec/length)) length = totalLength / len(edges) / 2 for e in edgeVecs: e.setEdge(length) averageEdgeLengths()Swordslayer:
The 3dsMax and Maya Script work like a charme.
Miauu:
I take a look to your scripts pack, the ability to setup a lenght greatly interested me.
To me the perfect stitching and strap from my retopo !