Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import maya.cmds as cmds
- if cmds.window("MyWindow", exists=True):
- cmds.deleteUI("MyWindow")
- if cmds.windowPref("MyWindow", exists=True):
- cmds.windowPref("MyWindow", remove=True)
- myWin = cmds.window("MyWindow", title="Weapons", width=400, height=300, tlb=True)
- cmds.showWindow("MyWindow")
- mainLayout = cmds.columnLayout(parent=myWin, adj=1, cal='left', cat=('both', 5))
- rigFrameLayout = cmds.frameLayout("MyRigFrameLayout", parent=mainLayout, collapse=1, label="Weapon Rig", collapsable=1, borderVisible=0)
- btnMainLayout = cmds.columnLayout(p=rigFrameLayout, adj=False, cw=100, cat=('both', 1))
- btnMainLoc = cmds.button("btnMainLoc_id", label="Create Main", parent=btnMainLayout, command="createWpnMainLocator()")
- wpnPartLayout = cmds.rowLayout("wpnPartLayout", parent=rigFrameLayout, numberOfColumns=2, nc=2, cw2=[200, 200],
- cat=[(1, 'both', 0), (2, 'both', 0)])
- btnCreatePart = cmds.button("btn01_ID01", label="Create Part", parent=wpnPartLayout, command="createPartsOfWeapon()")
- createPartTxtField = cmds.textField("partNameID01", parent=wpnPartLayout, width=200, height=25, placeholderText="Part Name")
- wpnPartChaildLayout = cmds.rowLayout("wpnPartChaildLayoutID", parent=rigFrameLayout, numberOfColumns=4,
- cw4=[100, 100, 100, 100], cat=[(1, 'both', 0), (2, 'left', 0)])
- countPartCheckBox = cmds.checkBox(l='Count of parts', parent=wpnPartChaildLayout, onCommand="enableCountParts()", offCommand="disableCountParts()")
- createPartTxtField = cmds.textField("textFieldID01", editable=False, parent=wpnPartChaildLayout, width=99, height=25, placeholderText="*")
- btnBldSkeletonLayout = cmds.columnLayout(p=rigFrameLayout, adj=False, cat=('both', 1), rowSpacing=10)
- btnBldSkeleton = cmds.button("btnBldSkeleton_id", label="Build Skeleton", parent=btnBldSkeletonLayout, command="createWpnMainLocator()")
- btnBldControls = cmds.button("btnBldControls_id", label="Build Controls", parent=btnBldSkeletonLayout, command="createWpnMainLocator()")
- snapFrameLayout = cmds.frameLayout("MySnapFrameLayout", parent=mainLayout, collapse=1, label="Snap Weapon", collapsable=1, borderVisible=0)
- animationFrameLayout = cmds.frameLayout("MyAnimationFrameLayout", parent=mainLayout, collapse=1, label="Animation Weapon", collapsable=1, borderVisible=0)
- exportFrameLayout = cmds.frameLayout("MyExportFrameLayout", parent=mainLayout, collapse=1, label="Export Animation", collapsable=1, borderVisible=0)
- def enableCountParts():
- cmds.textField("textFieldID01", e=True, editable=True)
- def disableCountParts():
- field = cmds.textField("textFieldID01", e=True, editable=False)
- empty = field.replace(field, "")
- emptyCountParts = cmds.textField("textFieldID01", e=True, text=empty)
- def createWpnMainLocator():
- cmds.spaceLocator(name='wpn_Main_loc')
- cmds.setAttr('wpn_Main_loc.rotateX', 90)
- cmds.setAttr('wpn_Main_loc.rotateY', 0)
- cmds.setAttr('wpn_Main_loc.rotateZ', 180)
- def createPartsOfWeapon():
- partName = cmds.textField("partNameID01", q=True, text=True)
- countParts = cmds.textField("textFieldID01", q=True, text=True)
- if len(partName) == 0:
- cmds.warning('Enter some name of weapon part')
- pass
- elif cmds.objExists('wpn_Main_loc'):
- if countParts:
- listLoc = []
- for i in range(int(countParts)):
- locatorParts = cmds.spaceLocator(name=partName + "_" + str(i+1) + "_loc")
- cmds.setAttr(partName + "_" + str(i+1) + "_loc" + '.rotateX', 90)
- cmds.setAttr(partName + "_" + str(i+1) + "_loc" + '.rotateY', 0)
- cmds.setAttr(partName + "_" + str(i+1) + "_loc" + '.rotateZ', 180)
- '''
- partTX = cmds.getAttr(partName + "_" + str(i+1) + "_loc" + '.rotateX')
- partTY = cmds.getAttr(partName + "_" + str(i+1) + "_loc" + '.rotateY')
- partTZ = cmds.getAttr(partName + "_" + str(i+1) + "_loc" + '.rotateZ')
- mainTX = cmds.getAttr('wpn_Main_loc.translateX')
- mainTY = cmds.getAttr('wpn_Main_loc.translateY')
- mainTZ = cmds.getAttr('wpn_Main_loc.translateZ')
- connectCurv = cmds.curve(d=1, p=[(mainTX, mainTY, mainTZ), (partTX, partTY, partTZ)], name=partName + "_" + str(i+1) + "_loc" + "_crv")
- cmds.connectAttr(partName + "_" + str(i+1) + "_loc" + '.translate', partName + "_" + str(i+1) + "_loc" + "_crv" + '.controlPoints[0]', force=True)
- cmds.connectAttr('wpn_Main_loc.translate', partName + "_" + str(i+1) + "_loc" + "_crv" + '.controlPoints[1]', force=True)
- '''
- listLoc.append(locatorParts)
- for i, obj in enumerate(listLoc):
- parentObj = obj
- childObj = "parentObj" + str(i+1)
- cmds.parent((i+1) + "_loc", partName + "_" + str(i) + "_loc")
- pass
- else:
- locatorParts = cmds.spaceLocator(name=partName + "_loc")
- cmds.setAttr(partName + "_loc" + '.rotateX', 90)
- cmds.setAttr(partName + "_loc" + '.rotateY', 0)
- cmds.setAttr(partName + "_loc" + '.rotateZ', 180)
- partTX = cmds.getAttr(partName + "_loc" + '.rotateX')
- partTY = cmds.getAttr(partName + "_loc" + '.rotateY')
- partTZ = cmds.getAttr(partName + "_loc" + '.rotateZ')
- mainTX = cmds.getAttr('wpn_Main_loc.translateX')
- mainTY = cmds.getAttr('wpn_Main_loc.translateY')
- mainTZ = cmds.getAttr('wpn_Main_loc.translateZ')
- connectCurv = cmds.curve(d=1, p=[(mainTX, mainTY, mainTZ), (partTX, partTY, partTZ)], name=partName + "_loc" + "_crv")
- cmds.connectAttr(partName + "_loc" + '.translate', partName + "_loc" + "_crv" + '.controlPoints[0]', force=True)
- cmds.connectAttr('wpn_Main_loc.translate', partName + "_loc" + "_crv" + '.controlPoints[1]', force=True)
- return connectCurv, locatorParts
- else:
- cmds.warning('no "wpn_Main_loc" exists')
- templates = createPartsOfWeapon()
- def cleanScene(tempParts):
- cmds.delete('wpn_Main_loc')
- for t in tempParts:
- cmds.delete(t)
- cleanScene(templates)
- def buildSkeleton():
- if cmds.objExists('*_loc'):
- locators = cmds.ls('*loc*', transforms=True)
- cmds.select(cl=True)
- for l in locators:
- cmds.select(cl=True)
- locatorPosTranslation = cmds.xform(l, q=True, translation=True, ws=True)
- locatorPosRotation = cmds.xform(l, q=True, rotation=True, ws=True)
- splitLocNames = l.replace('_loc', '')
- rigJointNames = 'rig_bn_' + splitLocNames
- rigJoints = cmds.joint(radius=1, orientation=locatorPosRotation, position=locatorPosTranslation,
- name=rigJointNames)
- cmds.select(cl=True)
- skinJointNames = 'bn_' + splitLocNames
- skinJoints = cmds.joint(radius=1, orientation=locatorPosRotation, position=locatorPosTranslation,
- name=skinJointNames)
- cmds.select(cl=True)
- cmds.parentConstraint(rigJoints, skinJoints, mo=False)
- allJoints = cmds.ls(type='joint')
- listRigJoints = []
- listSkinJoints = []
- for a in allJoints:
- if not 'rig_' in a:
- listSkinJoints.append(a)
- if 'rig_' in a:
- listRigJoints.append(a)
- for l in listRigJoints:
- if not 'wpn_Main' in l:
- cmds.parent(l, 'rig_bn_wpn_Main')
- for l in listSkinJoints:
- if not 'wpn_Main' in l:
- cmds.parent(l, 'bn_wpn_Main')
- cleanScene(templates)
- else:
- cmds.warning('no "wpn_Main_loc" exists')
- buildSkeleton()
- def buildControls():
- listJoints = cmds.ls('rig*')
- for l in listJoints:
- if 'wpn_Main' not in l:
- controlName = l.replace('rig_bn_', '')
- partControl = cmds.curve(name=controlName + '_ctr',
- p=[(-1, 1, -1), (-1, 1, 1), (1, 1, 1), (1, 1, -1), (-1, 1, -1),
- (-1, -1, -1), (1, -1, -1), (1, 1, -1), (1, 1, 1), (1, -1, 1),
- (1, -1, -1), (-1, -1, -1), (-1, -1, 1), (1, -1, 1), (1, 1, 1),
- (-1, 1, 1), (-1, -1, 1)], d=1,
- k=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
- cmds.group(name=controlName + '_offset_grp')
- ctrZeroGrp = cmds.group(name=controlName + '_grp_0')
- snap = cmds.parentConstraint(l, ctrZeroGrp, mo=False)
- cmds.setAttr(controlName + '_ctr' + '.overrideEnabled', 1)
- cmds.setAttr(controlName + '_ctr' + '.overrideColor', 6)
- cmds.delete(snap)
- cmds.parentConstraint(partControl, l, mo=False)
- if 'magazine' in partControl:
- cmds.addAttr(partControl, at='enum', keyable=True, en='World: wpn_Main: L_Hand: R_Hand',
- ln='Parent_Space')
- if 'wpn_Main' in l:
- controlName = l.replace('rig_bn_', '')
- c1 = cmds.circle(nr=[1, 0, 0], c=(0, 0, 4), r=1, d=3, s=8, ch=False)[0]
- c2 = cmds.circle(nr=[0, 1, 0], c=(0, 0, 4), r=1, d=3, s=8, ch=False)[0]
- c3 = cmds.circle(nr=[0, 0, 1], c=(0, 0, 4), r=1, d=3, s=8, ch=False)[0]
- n1 = cmds.curve(d=1, p=[(0, 0, 0), (0, 0, 3)])
- mainControl = cmds.createNode('transform', name=controlName + '_ctr')
- for c in c1, c2, c3, n1:
- cmds.parent(cmds.listRelatives(c, s=True)[0], control, r=True, s=True)
- cmds.delete(c)
- cmds.setAttr(mainControl + '.overrideEnabled', 1)
- cmds.setAttr(mainControl + '.overrideColor', 17)
- cmds.select(clear=True)
- ctrMainZeroGrp = cmds.createNode('transform', name=controlName + '_grp_0')
- cmds.parent(mainControl, ctrMainZeroGrp)
- snapCtrMainZeroGrp = cmds.parentConstraint(l, ctrMainZeroGrp, mo=False)
- cmds.delete(snapCtrMainZeroGrp)
- cmds.parentConstraint(mainControl, l, mo=True)
- # find wpn name
- nameWpnList = cmds.ls('*_wpn_geo')
- nameWpnGeo = ' '.join(map(str, nameWpnList))
- wpnName = nameWpnGeo.split('_wpn_geo')[0]
- # buildControlsStructure
- allControlGrp = cmds.ls('*_grp_0')
- cmds.group(allControlGrp, name=wpnName + '_rig_grp')
- excludePartList = {'wpn_Main_grp_0', 'magazine_grp_0'}
- wpnPartCtrGrp = [_ for _ in allControlGrp if _ not in excludePartList]
- for a in wpnPartCtrGrp:
- if 'wpn_Main' and 'magazine' not in a:
- cmds.parent(a, 'wpn_Main_ctr')
- cmds.select(clear=True)
- buildControls()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement