def doIt(self, args): if args.length() < 1: raise RuntimeError("have to specify 'insert'/'remove'!") if args.asString(0) == "double": multiplier = 2.0 elif args.asString(0) == "half": multiplier = 0.5 else: raise RuntimeError("have to specify 'double'/'half'!") (dagPath, comp) = mt.selected_dagPath_component() dagPath.extendToShape() meshFn = om.MFnMesh(dagPath) nFV = om.MIntArray() F = om.MIntArray() meshFn.getVertices(nFV, F) edgeIt = om.MItMeshEdge(dagPath, comp) outMeshAttr = meshFn.attribute("outMesh") outMeshPlug = om.MPlug(dagPath.node(), outMeshAttr) plugArray = om.MPlugArray() outMeshPlug.connectedTo(plugArray, True, True) foundTCC = False for k in range(0, plugArray.length()): TCCnode = plugArray[k].node() TCCDepNode = om.MFnDependencyNode(TCCnode) if TCCDepNode.typeName() == "TCC": foundTCC = True break if not foundTCC: raise Exception('did not find TCC node') eqc = cmds.getAttr(TCCDepNode.name() + ".eqc") itv = cmds.getAttr(TCCDepNode.name() + ".itv") he = mt.halfedges(dagPath, edgeIt.index()) he = he[0] targetEqc = mt.get_halfedge_data(dagPath, eqc, he) for k in range(len(eqc)): if eqc[k] == targetEqc: itv[k] = itv[k] * multiplier cmds.setAttr(TCCDepNode.name() + ".itv", itv, type="doubleArray")
def doIt(self, args): if args.length()<1: raise RuntimeError("have to specify 'insert'/'remove'!"); if args.asString(0)=="double": multiplier = 2.0; elif args.asString(0)=="half": multiplier = 0.5; else: raise RuntimeError("have to specify 'double'/'half'!"); (dagPath, comp) = mt.selected_dagPath_component(); dagPath.extendToShape(); meshFn = om.MFnMesh(dagPath); nFV = om.MIntArray(); F = om.MIntArray(); meshFn.getVertices(nFV, F); edgeIt = om.MItMeshEdge(dagPath, comp); outMeshAttr = meshFn.attribute( "outMesh" ); outMeshPlug = om.MPlug(dagPath.node(), outMeshAttr ); plugArray = om.MPlugArray(); outMeshPlug.connectedTo(plugArray, True, True); foundTCC = False; for k in range(0, plugArray.length()): TCCnode = plugArray[k].node(); TCCDepNode = om.MFnDependencyNode( TCCnode ); if TCCDepNode.typeName() == "TCC": foundTCC = True; break; if not foundTCC: raise Exception('did not find TCC node'); eqc = cmds.getAttr(TCCDepNode.name()+".eqc"); itv = cmds.getAttr(TCCDepNode.name()+".itv"); he = mt.halfedges(dagPath, edgeIt.index()); he = he[0]; targetEqc = mt.get_halfedge_data(dagPath, eqc, he); for k in range(len(eqc)): if eqc[k]==targetEqc: itv[k] = itv[k] * multiplier; cmds.setAttr(TCCDepNode.name()+".itv", itv, type="doubleArray");
def knot_modifier(modType): (dagPath, component) = mt.selected_dagPath_component() meshFn = om.MFnMesh(dagPath) tccNode = mt.get_TCC_DGnode(dagPath) itv = cmds.getAttr(tccNode.name() + ".itv") T = cmds.getAttr(tccNode.name() + ".T") ve = build_knot_removal_data(dagPath) R = [] for (v, e) in ve.items(): (he, v) = get_CV_line(dagPath, v, e[0], e[1]) i = [] for k in range(6): i.append(mt.get_halfedge_data(dagPath, itv, he[k])) p = [] for k in range(1, 6): pk = om.MPoint() meshFn.getPoint(v[k], pk) p.append(Vec3(pk.x, pk.y, pk.z)) if modType == KnotModifier.Insert: (p2, p3, p4) = compute_knot_insertion(p, i) elif modType == KnotModifier.Remove: (p2, p3, p4) = compute_knot_removal(p, i) else: raise Exception("Unknown Modifier") R.append((v[2], p2)) R.append((v[3], p3)) R.append((v[4], p4)) return R
def knot_modifier(modType): (dagPath, component) = mt.selected_dagPath_component(); meshFn = om.MFnMesh(dagPath); tccNode = mt.get_TCC_DGnode(dagPath); itv = cmds.getAttr(tccNode.name()+".itv"); T = cmds.getAttr(tccNode.name()+".T"); ve = build_knot_removal_data(dagPath); R = []; for (v,e) in ve.items(): (he, v) = get_CV_line(dagPath, v, e[0], e[1]); i = []; for k in range(6): i.append(mt.get_halfedge_data(dagPath, itv, he[k])); p = []; for k in range(1,6): pk = om.MPoint(); meshFn.getPoint(v[k], pk); p.append(Vec3(pk.x, pk.y, pk.z)); if modType == KnotModifier.Insert: (p2, p3, p4) = compute_knot_insertion(p, i); elif modType == KnotModifier.Remove: (p2, p3, p4) = compute_knot_removal(p, i); else: raise Exception("Unknown Modifier"); R.append( (v[2], p2) ) R.append( (v[3], p3) ) R.append( (v[4], p4) ) return R;