Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.42 KB | None | 0 0
  1. import maya.cmds as cmds
  2.  
  3. if cmds.window("MyWindow", exists=True):
  4. cmds.deleteUI("MyWindow")
  5.  
  6. if cmds.windowPref("MyWindow", exists=True):
  7. cmds.windowPref("MyWindow", remove=True)
  8.  
  9. myWin = cmds.window("MyWindow", title="Weapons", width=400, height=300, tlb=True)
  10.  
  11. cmds.showWindow("MyWindow")
  12.  
  13. mainLayout = cmds.columnLayout(parent=myWin, adj=1, cal='left', cat=('both', 5))
  14.  
  15. rigFrameLayout = cmds.frameLayout("MyRigFrameLayout", parent=mainLayout, collapse=1, label="Weapon Rig", collapsable=1, borderVisible=0)
  16.  
  17. btnMainLayout = cmds.columnLayout(p=rigFrameLayout, adj=False, cw=100, cat=('both', 1))
  18.  
  19. btnMainLoc = cmds.button("btnMainLoc_id", label="Create Main", parent=btnMainLayout, command="createWpnMainLocator()")
  20.  
  21.  
  22. wpnPartLayout = cmds.rowLayout("wpnPartLayout", parent=rigFrameLayout, numberOfColumns=2, nc=2, cw2=[200, 200],
  23. cat=[(1, 'both', 0), (2, 'both', 0)])
  24.  
  25. btnCreatePart = cmds.button("btn01_ID01", label="Create Part", parent=wpnPartLayout, command="createPartsOfWeapon()")
  26. createPartTxtField = cmds.textField("partNameID01", parent=wpnPartLayout, width=200, height=25, placeholderText="Part Name")
  27.  
  28. wpnPartChaildLayout = cmds.rowLayout("wpnPartChaildLayoutID", parent=rigFrameLayout, numberOfColumns=4,
  29. cw4=[100, 100, 100, 100], cat=[(1, 'both', 0), (2, 'left', 0)])
  30.  
  31. countPartCheckBox = cmds.checkBox(l='Count of parts', parent=wpnPartChaildLayout, onCommand="enableCountParts()", offCommand="disableCountParts()")
  32. createPartTxtField = cmds.textField("textFieldID01", editable=False, parent=wpnPartChaildLayout, width=99, height=25, placeholderText="*")
  33.  
  34. btnBldSkeletonLayout = cmds.columnLayout(p=rigFrameLayout, adj=False, cat=('both', 1), rowSpacing=10)
  35.  
  36. btnBldSkeleton = cmds.button("btnBldSkeleton_id", label="Build Skeleton", parent=btnBldSkeletonLayout, command="createWpnMainLocator()")
  37. btnBldControls = cmds.button("btnBldControls_id", label="Build Controls", parent=btnBldSkeletonLayout, command="createWpnMainLocator()")
  38.  
  39. snapFrameLayout = cmds.frameLayout("MySnapFrameLayout", parent=mainLayout, collapse=1, label="Snap Weapon", collapsable=1, borderVisible=0)
  40.  
  41. animationFrameLayout = cmds.frameLayout("MyAnimationFrameLayout", parent=mainLayout, collapse=1, label="Animation Weapon", collapsable=1, borderVisible=0)
  42.  
  43. exportFrameLayout = cmds.frameLayout("MyExportFrameLayout", parent=mainLayout, collapse=1, label="Export Animation", collapsable=1, borderVisible=0)
  44.  
  45.  
  46. def enableCountParts():
  47. cmds.textField("textFieldID01", e=True, editable=True)
  48.  
  49.  
  50. def disableCountParts():
  51. field = cmds.textField("textFieldID01", e=True, editable=False)
  52. empty = field.replace(field, "")
  53. emptyCountParts = cmds.textField("textFieldID01", e=True, text=empty)
  54.  
  55.  
  56. def createWpnMainLocator():
  57. cmds.spaceLocator(name='wpn_Main_loc')
  58. cmds.setAttr('wpn_Main_loc.rotateX', 90)
  59. cmds.setAttr('wpn_Main_loc.rotateY', 0)
  60. cmds.setAttr('wpn_Main_loc.rotateZ', 180)
  61.  
  62.  
  63. def createPartsOfWeapon():
  64.  
  65. partName = cmds.textField("partNameID01", q=True, text=True)
  66. countParts = cmds.textField("textFieldID01", q=True, text=True)
  67.  
  68. if len(partName) == 0:
  69.  
  70. cmds.warning('Enter some name of weapon part')
  71. pass
  72.  
  73. elif cmds.objExists('wpn_Main_loc'):
  74.  
  75. if countParts:
  76.  
  77. listLoc = []
  78.  
  79. for i in range(int(countParts)):
  80.  
  81. locatorParts = cmds.spaceLocator(name=partName + "_" + str(i+1) + "_loc")
  82. cmds.setAttr(partName + "_" + str(i+1) + "_loc" + '.rotateX', 90)
  83. cmds.setAttr(partName + "_" + str(i+1) + "_loc" + '.rotateY', 0)
  84. cmds.setAttr(partName + "_" + str(i+1) + "_loc" + '.rotateZ', 180)
  85.  
  86. partTX = cmds.getAttr(partName + "_" + str(i+1) + "_loc" + '.rotateX')
  87. partTY = cmds.getAttr(partName + "_" + str(i+1) + "_loc" + '.rotateY')
  88. partTZ = cmds.getAttr(partName + "_" + str(i+1) + "_loc" + '.rotateZ')
  89. mainTX = cmds.getAttr('wpn_Main_loc.translateX')
  90. mainTY = cmds.getAttr('wpn_Main_loc.translateY')
  91. mainTZ = cmds.getAttr('wpn_Main_loc.translateZ')
  92.  
  93. connectCurv = cmds.curve(d=1, p=[(mainTX, mainTY, mainTZ), (partTX, partTY, partTZ)], name=partName + "_" + str(i+1) + "_loc" + "_crv")
  94.  
  95. cmds.connectAttr(partName + "_" + str(i+1) + "_loc" + '.translate', partName + "_" + str(i+1) + "_loc" + "_crv" + '.controlPoints[0]', force=True)
  96. cmds.connectAttr('wpn_Main_loc.translate', partName + "_" + str(i+1) + "_loc" + "_crv" + '.controlPoints[1]', force=True)
  97.  
  98. listLoc.append(locatorParts)
  99.  
  100. for index, item in enumerate(listLoc[0:-1]):
  101. cmds.parent(listLoc[index+1], listLoc[index])
  102.  
  103.  
  104.  
  105. pass
  106.  
  107. else:
  108.  
  109. locatorParts = cmds.spaceLocator(name=partName + "_loc")
  110. cmds.setAttr(partName + "_loc" + '.rotateX', 90)
  111. cmds.setAttr(partName + "_loc" + '.rotateY', 0)
  112. cmds.setAttr(partName + "_loc" + '.rotateZ', 180)
  113.  
  114. partTX = cmds.getAttr(partName + "_loc" + '.rotateX')
  115. partTY = cmds.getAttr(partName + "_loc" + '.rotateY')
  116. partTZ = cmds.getAttr(partName + "_loc" + '.rotateZ')
  117. mainTX = cmds.getAttr('wpn_Main_loc.translateX')
  118. mainTY = cmds.getAttr('wpn_Main_loc.translateY')
  119. mainTZ = cmds.getAttr('wpn_Main_loc.translateZ')
  120.  
  121. connectCurv = cmds.curve(d=1, p=[(mainTX, mainTY, mainTZ), (partTX, partTY, partTZ)], name=partName + "_loc" + "_crv")
  122.  
  123. cmds.connectAttr(partName + "_loc" + '.translate', partName + "_loc" + "_crv" + '.controlPoints[0]', force=True)
  124. cmds.connectAttr('wpn_Main_loc.translate', partName + "_loc" + "_crv" + '.controlPoints[1]', force=True)
  125.  
  126. return connectCurv, locatorParts
  127.  
  128. else:
  129.  
  130. cmds.warning('no "wpn_Main_loc" exists')
  131.  
  132.  
  133. templates = createPartsOfWeapon()
  134.  
  135.  
  136. def cleanScene(tempParts):
  137. cmds.delete('wpn_Main_loc')
  138.  
  139. for t in tempParts:
  140. cmds.delete(t)
  141.  
  142.  
  143. cleanScene(templates)
  144.  
  145.  
  146. def buildSkeleton():
  147. if cmds.objExists('*_loc'):
  148.  
  149. locators = cmds.ls('*loc*', transforms=True)
  150. cmds.select(cl=True)
  151.  
  152. for l in locators:
  153. cmds.select(cl=True)
  154. locatorPosTranslation = cmds.xform(l, q=True, translation=True, ws=True)
  155. locatorPosRotation = cmds.xform(l, q=True, rotation=True, ws=True)
  156. splitLocNames = l.replace('_loc', '')
  157. rigJointNames = 'rig_bn_' + splitLocNames
  158. rigJoints = cmds.joint(radius=1, orientation=locatorPosRotation, position=locatorPosTranslation,
  159. name=rigJointNames)
  160. cmds.select(cl=True)
  161. skinJointNames = 'bn_' + splitLocNames
  162. skinJoints = cmds.joint(radius=1, orientation=locatorPosRotation, position=locatorPosTranslation,
  163. name=skinJointNames)
  164. cmds.select(cl=True)
  165. cmds.parentConstraint(rigJoints, skinJoints, mo=False)
  166.  
  167. allJoints = cmds.ls(type='joint')
  168.  
  169. listRigJoints = []
  170. listSkinJoints = []
  171.  
  172. for a in allJoints:
  173.  
  174. if not 'rig_' in a:
  175. listSkinJoints.append(a)
  176.  
  177. if 'rig_' in a:
  178. listRigJoints.append(a)
  179.  
  180. for l in listRigJoints:
  181.  
  182. if not 'wpn_Main' in l:
  183. cmds.parent(l, 'rig_bn_wpn_Main')
  184.  
  185. for l in listSkinJoints:
  186.  
  187. if not 'wpn_Main' in l:
  188. cmds.parent(l, 'bn_wpn_Main')
  189.  
  190. cleanScene(templates)
  191.  
  192.  
  193.  
  194. else:
  195. cmds.warning('no "wpn_Main_loc" exists')
  196.  
  197.  
  198. buildSkeleton()
  199.  
  200.  
  201. def buildControls():
  202. listJoints = cmds.ls('rig*')
  203.  
  204. for l in listJoints:
  205.  
  206. if 'wpn_Main' not in l:
  207.  
  208. controlName = l.replace('rig_bn_', '')
  209. partControl = cmds.curve(name=controlName + '_ctr',
  210. p=[(-1, 1, -1), (-1, 1, 1), (1, 1, 1), (1, 1, -1), (-1, 1, -1),
  211. (-1, -1, -1), (1, -1, -1), (1, 1, -1), (1, 1, 1), (1, -1, 1),
  212. (1, -1, -1), (-1, -1, -1), (-1, -1, 1), (1, -1, 1), (1, 1, 1),
  213. (-1, 1, 1), (-1, -1, 1)], d=1,
  214. k=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
  215. cmds.group(name=controlName + '_offset_grp')
  216. ctrZeroGrp = cmds.group(name=controlName + '_grp_0')
  217. snap = cmds.parentConstraint(l, ctrZeroGrp, mo=False)
  218. cmds.setAttr(controlName + '_ctr' + '.overrideEnabled', 1)
  219. cmds.setAttr(controlName + '_ctr' + '.overrideColor', 6)
  220. cmds.delete(snap)
  221. cmds.parentConstraint(partControl, l, mo=False)
  222.  
  223. if 'magazine' in partControl:
  224. cmds.addAttr(partControl, at='enum', keyable=True, en='World: wpn_Main: L_Hand: R_Hand',
  225. ln='Parent_Space')
  226.  
  227. if 'wpn_Main' in l:
  228.  
  229. controlName = l.replace('rig_bn_', '')
  230. c1 = cmds.circle(nr=[1, 0, 0], c=(0, 0, 4), r=1, d=3, s=8, ch=False)[0]
  231. c2 = cmds.circle(nr=[0, 1, 0], c=(0, 0, 4), r=1, d=3, s=8, ch=False)[0]
  232. c3 = cmds.circle(nr=[0, 0, 1], c=(0, 0, 4), r=1, d=3, s=8, ch=False)[0]
  233. n1 = cmds.curve(d=1, p=[(0, 0, 0), (0, 0, 3)])
  234. mainControl = cmds.createNode('transform', name=controlName + '_ctr')
  235.  
  236. for c in c1, c2, c3, n1:
  237. cmds.parent(cmds.listRelatives(c, s=True)[0], control, r=True, s=True)
  238. cmds.delete(c)
  239. cmds.setAttr(mainControl + '.overrideEnabled', 1)
  240. cmds.setAttr(mainControl + '.overrideColor', 17)
  241. cmds.select(clear=True)
  242. ctrMainZeroGrp = cmds.createNode('transform', name=controlName + '_grp_0')
  243. cmds.parent(mainControl, ctrMainZeroGrp)
  244. snapCtrMainZeroGrp = cmds.parentConstraint(l, ctrMainZeroGrp, mo=False)
  245. cmds.delete(snapCtrMainZeroGrp)
  246. cmds.parentConstraint(mainControl, l, mo=True)
  247.  
  248. # find wpn name
  249. nameWpnList = cmds.ls('*_wpn_geo')
  250. nameWpnGeo = ' '.join(map(str, nameWpnList))
  251. wpnName = nameWpnGeo.split('_wpn_geo')[0]
  252.  
  253. # buildControlsStructure
  254. allControlGrp = cmds.ls('*_grp_0')
  255. cmds.group(allControlGrp, name=wpnName + '_rig_grp')
  256. excludePartList = {'wpn_Main_grp_0', 'magazine_grp_0'}
  257. wpnPartCtrGrp = [_ for _ in allControlGrp if _ not in excludePartList]
  258.  
  259. for a in wpnPartCtrGrp:
  260.  
  261. if 'wpn_Main' and 'magazine' not in a:
  262. cmds.parent(a, 'wpn_Main_ctr')
  263. cmds.select(clear=True)
  264.  
  265.  
  266. buildControls()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement