import sys
import os
import errno
import json
import re
import maya.cmds as cmd
import maya.mel as mel
def rivet(name=''):
if not name:
name = "rivet1"
parts = []
list = []
size = 0
list = cmd.filterExpand(sm=32)
if list:
size = len(list)
if size > 0:
if size != 2:
cmd.error("No two edges selected")
return ""
nameObject = ''
e1 = 0
e2 = 0
if list[0].split("."):
nameObject = list[0].split(".")[0]
e1Str = re.search(r"\[([A-Za-z0-9_]+)\]", list[0])
e1 = int(e1Str.group(1))
e2Str = re.search(r"\[([A-Za-z0-9_]+)\]", list[1])
e2 = int(e2Str.group(1))
nameCFME1 = cmd.createNode("curveFromMeshEdge", n="{}_rivetCurveFromMeshEdge1".format(name))
cmd.setAttr("{}.ihi".format(nameCFME1), 1)
cmd.setAttr("{}.ei[0]".format(nameCFME1), e1)
nameCFME2 = cmd.createNode("curveFromMeshEdge", n="{}_rivetCurveFromMeshEdge2".format(name))
cmd.setAttr("{}.ihi".format(nameCFME2), 1)
cmd.setAttr("{}.ei[0]".format(nameCFME2), e2)
nameLoft = cmd.createNode("loft", n="{}_rivetLoft1".format(name))
cmd.setAttr("{}.ic".format(nameLoft), s=2)
cmd.setAttr("{}.u".format(nameLoft), 1)
cmd.setAttr("{}.rsn".format(nameLoft), 1)
namePOSI = cmd.createNode("pointOnSurfaceInfo", n="{}_rivetPointOnSurfaceInfo1".format(name))
cmd.setAttr("{}.turnOnPercentage".format(namePOSI), 1)
cmd.setAttr("{}.parameterU".format(namePOSI), 0.5)
cmd.setAttr("{}.parameterV".format(namePOSI), 0.5)
cmd.connectAttr((nameLoft + ".os"), (namePOSI + ".is"), f=True)
cmd.connectAttr((nameCFME1 + ".oc"), (nameLoft + ".ic[0]"))
cmd.connectAttr((nameCFME2 + ".oc"), (nameLoft + ".ic[1]"))
cmd.connectAttr((nameObject + ".w"), (nameCFME1 + ".im"))
cmd.connectAttr((nameObject + ".w"), (nameCFME2 + ".im"))
else:
list = cmd.filterExpand(sm=41)
if list:
size = len(list)
if size > 0:
if size != 1:
cmd.error("No one point selected")
return ""
nameObject = ''
u = 0.0
v = 0.0
if list[0].split("."):
nameObject = list[0].split(".")[0]
if len(list[0].split(".uv")) > 1:
uv = list[0].split(".uv")[1].split('][')
u = float(uv[0].replace("[",""))
v = float(uv[1].replace("]",""))
namePOSI = cmd.createNode("pointOnSurfaceInfo", n="{}_rivetPointOnSurfaceInfo1".format(name))
cmd.setAttr("{}.turnOnPercentage".format(namePOSI), 0)
cmd.setAttr("{}.parameterU".format(namePOSI), u)
cmd.setAttr("{}.parameterV".format(namePOSI), v)
cmd.connectAttr((nameObject + ".ws"), (namePOSI + ".is"), f=True)
else:
cmd.error("No edges or point selected")
return ""
nameLocator = cmd.createNode("transform", n=name)
cmd.createNode("locator", n=(nameLocator + "Shape"), p=nameLocator)
nameAC = cmd.createNode("aimConstraint", p=nameLocator, n=(nameLocator + "_rivetAimConstraint1"))
cmd.setAttr("{}.tg[0].tw".format(nameAC), 1)
cmd.setAttr("{}.a".format(nameAC), 0, 1, 0, type="double3")
cmd.setAttr("{}.u".format(nameAC), 0, 0, 1, type="double3")
cmd.setAttr("{}.v".format(nameAC), k=0)
cmd.setAttr("{}.tx".format(nameAC), k=0)
cmd.setAttr("{}.ty".format(nameAC), k=0)
cmd.setAttr("{}.tz".format(nameAC), k=0)
cmd.setAttr("{}.rx".format(nameAC), k=0)
cmd.setAttr("{}.ry".format(nameAC), k=0)
cmd.setAttr("{}.rz".format(nameAC), k=0)
cmd.setAttr("{}.sx".format(nameAC), k=0)
cmd.setAttr("{}.sy".format(nameAC), k=0)
cmd.setAttr("{}.sz".format(nameAC), k=0)
cmd.connectAttr((namePOSI + ".position"), (nameLocator + ".translate"))
cmd.connectAttr((namePOSI + ".n"), (nameAC + ".tg[0].tt"))
cmd.connectAttr((namePOSI + ".tv"), (nameAC + ".wu"))
cmd.connectAttr((nameAC + ".crx"), (nameLocator + ".rx"))
cmd.connectAttr((nameAC + ".cry"), (nameLocator + ".ry"))
cmd.connectAttr((nameAC + ".crz"), (nameLocator + ".rz"))
cmd.select(nameLocator, r=True)
return nameLocator
Categories:
Tags:
Comments are closed