def draw(self): circle1 = cmds.circle( nr=(1, 0, 0), c=(0, 0, 0), sw=self.sweep, r=self.start_radius ) circle2 = cmds.circle( nr=(1, 0, 0), c=(0, 0, 0), sw=self.sweep, r=self.end_radius ) l1 = cmds.loft(circle1, circle2) # curves crv = cmds.curve(p=[(0, self.start_radius, 0), (0, self.end_radius, 0)], degree=1) crv2 = cmds.duplicate(crv) cmds.rotate(str(self.sweep) + 'deg', 0, 0, r=True) extrusions = [] for e in [circle1, circle2, crv, crv2]: extrusions.append(cmds.extrude(e, et=0, d=(1,0,0), l=self.height)) cmds.delete(e) pieces = extrusions + [l1] group = cmds.group(*[e[0] for e in pieces]) cmds.move(0,0,0, group+".scalePivot",group+".rotatePivot", absolute=True) cmds.setKeyframe(group, attribute='rotateX', t='0sec', value=self.rotation) return (pieces, group)
def create(self, shape): """create a curve with a specific shape""" finalName = '' if shape == "arrow": finalName = mc.curve( d =1, p = [( 0, 0.6724194, 0.4034517 ),( 0, 0, 0.4034517 ),( 0, 0, 0.6724194 ),( 0, -0.4034517, 0 ),( 0, 0, -0.6724194 ),( 0, 0, -0.4034517 ),( 0, 0.6724194, -0.4034517 ),( 0, 0.6724194, 0.4034517 )] ,k=[ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ],n = self.name ) elif shape == "cross": finalName = mc.curve( d =1, p = [( 1, 0, -1 ),( 2, 0, -1 ),( 2, 0, 1 ),( 1, 0, 1 ),( 1, 0, 2 ),( -1, 0, 2 ),( -1, 0, 1 ),( -2, 0, 1 ),( -2, 0, -1 ),( -1, 0, -1 ),( -1, 0, -2 ),( 1, 0, -2 ),( 1, 0, -1 )] , k=[ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ] ,n = self.name ) elif shape == "square": finalName = mc.curve( d =1, p = [( -1, 0, 1 ),( 1, 0, 1 ),( 1, 0, -1 ),( -1, 0, -1 ),( -1, 0, 1 )] ,k = [ 0 , 1 , 2 , 3 , 4 ],n = self.name ) elif shape == "cube": finalName = mc.curve( d =1, p = [( -0.5, 0.5, 0.5 ),( 0.5, 0.5, 0.5 ),( 0.5, 0.5, -0.5 ),( -0.5, 0.5, -0.5 ),( -0.5, 0.5, 0.5 ),( -0.5, -0.5, 0.5 ),( -0.5, -0.5, -0.5 ),( 0.5, -0.5, -0.5 ),( 0.5, -0.5, 0.5 ),( -0.5, -0.5, 0.5 ),( 0.5, -0.5, 0.5 ),( 0.5, 0.5, 0.5 ),( 0.5, 0.5, -0.5 ),( 0.5, -0.5, -0.5 ),( -0.5, -0.5, -0.5 ),( -0.5, 0.5, -0.5 )] , k = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] ,n = self.name) elif shape == "orient": finalName = mc.curve( d =3, p = [( 0.0959835, 0.604001, -0.0987656 ),( 0.500783, 0.500458, -0.0987656 ),( 0.751175, 0.327886, -0.0987656 ),( 0.751175, 0.327886, -0.0987656 ),( 0.751175, 0.327886, -0.336638 ),( 0.751175, 0.327886, -0.336638 ),( 1.001567, 0, 0 ),( 1.001567, 0, 0 ),( 0.751175, 0.327886, 0.336638 ),( 0.751175, 0.327886, 0.336638 ),( 0.751175, 0.327886, 0.0987656 ),( 0.751175, 0.327886, 0.0987656 ),( 0.500783, 0.500458, 0.0987656 ),( 0.0959835, 0.604001, 0.0987656 ),( 0.0959835, 0.604001, 0.0987656 ),( 0.0959835, 0.500458, 0.500783 ),( 0.0959835, 0.327886, 0.751175 ),( 0.0959835, 0.327886, 0.751175 ),( 0.336638, 0.327886, 0.751175 ),( 0.336638, 0.327886, 0.751175 ),( 0, 0, 1.001567 ),( 0, 0, 1.001567 ),( -0.336638, 0.327886, 0.751175 ),( -0.336638, 0.327886, 0.751175 ),( -0.0959835, 0.327886, 0.751175 ),( -0.0959835, 0.327886, 0.751175 ),( -0.0959835, 0.500458, 0.500783 ),( -0.0959835, 0.604001, 0.0987656 ),( -0.0959835, 0.604001, 0.0987656 ),( -0.500783, 0.500458, 0.0987656 ),( -0.751175, 0.327886, 0.0987656 ),( -0.751175, 0.327886, 0.0987656 ),( -0.751175, 0.327886, 0.336638 ),( -0.751175, 0.327886, 0.336638 ),( -1.001567, 0, 0 ),( -1.001567, 0, 0 ),( -0.751175, 0.327886, -0.336638 ),( -0.751175, 0.327886, -0.336638 ),( -0.751175, 0.327886, -0.0987656 ),( -0.751175, 0.327886, -0.0987656 ),( -0.500783, 0.500458, -0.0987656 ),( -0.0959835, 0.604001, -0.0987656 ),( -0.0959835, 0.604001, -0.0987656 ),( -0.0959835, 0.500458, -0.500783 ),( -0.0959835, 0.327886, -0.751175 ),( -0.0959835, 0.327886, -0.751175 ),( -0.336638, 0.327886, -0.751175 ),( -0.336638, 0.327886, -0.751175 ),( 0, 0, -1.001567 ),( 0, 0, -1.001567 ),( 0.336638, 0.327886, -0.751175 ),( 0.336638, 0.327886, -0.751175 ),( 0.0959835, 0.327886, -0.751175 ),( 0.0959835, 0.327886, -0.751175 ),( 0.0959835, 0.500458, -0.500783 ),( 0.0959835, 0.604001, -0.0987656 )] , k = [ 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 53 , 53 ],n = self.name ) elif shape == "circleY": finalName = mc.circle( c = ( 0, 0, 0 ) ,nr = ( 0, 1, 0 ), sw= 360, r= 1, d =3, ut= 0, tol= 0.01, s= 8, ch= 1, n = self.name ) finalName = finalName[0] elif shape == "circleZ": finalName = mc.circle( c = ( 0, 0, 0 ) ,nr = ( 0, 0, 1 ), sw= 360, r= 1, d =3, ut= 0, tol= 0.01, s= 8, ch= 1, n = self.name ) finalName = finalName[0] elif shape == "circleX": finalName = mc.circle( c = ( 0, 0, 0 ) ,nr = ( 1, 0, 0 ), sw= 360, r= 1, d =3, ut= 0, tol= 0.01, s= 8, ch= 1, n = self.name ) finalName = finalName[0] elif shape == "sphere": finalName = mc.curve( d = 1 , p =[ ( 0, 3, 0 ),( 0, 2, -2 ),( 0, 0, -3 ),( 0, -2, -2 ),( 0, -3, 0 ),( 0, -2, 2 ),( 0, 0, 3 ),( 0, 2, 2 ),( 0, 3, 0 ),( 2, 2, 0 ),( 3, 0, 0 ),( 2, -2, 0 ),( 0, -3, 0 ),( -2, -2, 0 ),( -3, 0, 0 ),( -2, 2, 0 ),( 0, 3, 0 )], k = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ] ,n = self.name ) elif shape == "plus": finalName = mc.curve( d = 1 , p = [( 0, 1, 0 ),( 0, -1, 0 ),( 0, 0, 0 ),( -1, 0, 0 ),( 1, 0, 0 ),( 0, 0, 0 ),( 0, 0, 1 ),( 0, 0, -1 )], k = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ,n = self.name ) else: print "THERE IS NO CURVE FOR THE SHAPE THAT YOU WANT!" self._name = finalName return Curve( finalName )
def createCOG(*args): cmds.circle(nr=(0,1,0),s=16, r=2) cmds.scale(0.177161, 0.177161, 0.177161,'.cv[15]','.cv[13]','.cv[11]','.cv[9]','.cv[7]', '.cv[5]','.cv[3]','.cv[1]',r=True) cmds.scale(1.848257, 1.848257, 1.848257, r=True) cmds.select(cl=True) print 'Created a COG'
def cvSmile(ctrlName, r=1): """Create and return a cvSmile curve to be usually used in the face_Ctrl. """ # create circles to get the shapes: face = cmds.circle(n=ctrlName+"_Face", ch=False, o=True, nr=(0, 0, 1), d=3, s=8, radius=r) lEye = cmds.circle(n=ctrlName+"_L_Eye", ch=False, o=True, nr=(0, 0, 1), d=3, s=8, radius=r*0.3) rEye = cmds.circle(n=ctrlName+"_R_Eye", ch=False, o=True, nr=(0, 0, 1), d=3, s=8, radius=r*0.3) mouth = cmds.circle(n=ctrlName+"_Mouth", ch=False, o=True, nr=(0, 0, 1), d=3, s=8, radius=r*0.5) # change circle shapes: cmds.setAttr(lEye[0]+".translateX", 0.4) cmds.setAttr(lEye[0]+".translateY", 0.3) cmds.setAttr(rEye[0]+".translateX", -0.4) cmds.setAttr(rEye[0]+".translateY", 0.3) cmds.setAttr(mouth[0]+".translateY", -0.3) cmds.makeIdentity(lEye[0], apply=True) cmds.makeIdentity(rEye[0], apply=True) cmds.makeIdentity(mouth[0], apply=True) cmds.move(-0.6, -0.4, 0, mouth[0]+"Shape.cv[3]") cmds.move(0.6, -0.4, 0, mouth[0]+"Shape.cv[7]") cmds.move(0.325, -0.225, 0, mouth[0]+"Shape.cv[0]") cmds.move(-0.325, -0.225, 0, mouth[0]+"Shape.cv[2]") cmds.move(0, -0.55, 0, mouth[0]+"Shape.cv[1]") # parent shapes to transform: smileCtrl = cmds.group(name=ctrlName, empty=True) cmds.parent( cmds.listRelatives(face, shapes=True, children=True)[0], smileCtrl, relative=True, shape=True) cmds.parent( cmds.listRelatives(lEye, shapes=True, children=True)[0], smileCtrl, relative=True, shape=True) cmds.parent( cmds.listRelatives(rEye, shapes=True, children=True)[0], smileCtrl, relative=True, shape=True) cmds.parent( cmds.listRelatives(mouth, shapes=True, children=True)[0], smileCtrl, relative=True, shape=True) # delete old x, y and z transforms: cmds.delete(face, lEye, rEye, mouth) cmds.select(clear=True) return smileCtrl
def cvBaseGuide(ctrlName, r=1): """Create a control to be used as a Base Guide control. Returns the main control (circle) and the radius control in a list. """ # get radius by checking linear unit r = dpCheckLinearUnit(r) # create a simple circle curve: circle = cmds.circle(n=ctrlName, ch=True, o=True, nr=(0, 0, 1), d=3, s=8, radius=r)[0] radiusCtrl = cmds.circle(n=ctrlName+"_RadiusCtrl", ch=True, o=True, nr=(0, 1, 0), d=3, s=8, radius=(r/4.0))[0] # rename curveShape: renameShape([circle, radiusCtrl]) # configure system of limits and radius: cmds.setAttr(radiusCtrl+".translateX", r) cmds.parent(radiusCtrl, circle, relative=True) cmds.transformLimits(radiusCtrl, tx=(0.01, 1), etx=(True, False)) setLockHide([radiusCtrl], ['ty', 'tz', 'rx', 'ry', 'rz', 'sx', 'sy', 'sz']) # find makeNurbCircle history of the circles: historyList = findHistory([circle, radiusCtrl], 'makeNurbCircle') circleHistory = historyList[0] radiusCtrlHistory = historyList[1] # rename and make a connection for circle: circleHistory = cmds.rename(circleHistory, circle+"_makeNurbCircle") cmds.connectAttr(radiusCtrl+".tx", circleHistory+".radius", force=True) radiusCtrlHistory = cmds.rename(radiusCtrlHistory, radiusCtrl+"_makeNurbCircle") # create a mutiplyDivide in order to automatisation the radius of the radiusCtrl: radiusCtrlMD = cmds.createNode('multiplyDivide', name=radiusCtrl+'_MD') cmds.connectAttr(radiusCtrl+'.translateX', radiusCtrlMD+'.input1X', force=True) cmds.setAttr(radiusCtrlMD+'.input2X', 0.15) cmds.connectAttr(radiusCtrlMD+".outputX", radiusCtrlHistory+".radius", force=True) # colorize curveShapes: colorShape([circle, radiusCtrl], 'yellow') cmds.select(clear=True) return [circle, radiusCtrl]
def createControlInJointLine( topJnt ): jnts = cmds.listRelatives( topJnt, c=1, ad=1, type='joint' ) jnts.append( topJnt ) jnts.reverse() topCtl = cmds.circle()[0] sgFunctionSet.goToObject( topCtl, jnts[0] ) pTopCtl = sgFunctionDag.makeParent( topCtl ) sgRigConnection.constraint( jnts[0], pTopCtl ) for i in range( 0, len( jnts )-2, 2 ): first = jnts[i] second = jnts[i+2] middle = jnts[i+1] middleObj = cmds.createNode( 'transform' ) sgFunctionSet.goToObject( middleObj, middle ) ctl = cmds.circle()[0] sgFunctionSet.goToObject( ctl, second ) pCtl = sgFunctionDag.makeParent( ctl ) sgRigConnection.constraint( second, pCtl ) cmds.select( first, second, middleObj ) firstChildren, secondChildren = sgRigConnection.mc_connectBlendTwoMatrix_keepPositionAndSkipSecondTrans()
def RMCircularControl (self, Obj, radius = 1, axis = "X", name = ""): if name == '': defaultName = "circularControl" else : defaultName = name if axis in "yY": Ctrl, Shape = cmds.circle( normal = [0,1,0],radius=radius, name = defaultName) elif axis in "zZ": Ctrl, Shape = cmds.circle( normal = [0,0,1],radius=radius, name = defaultName) elif axis in "xX": Ctrl, Shape = cmds.circle( normal = [1,0,0],radius=radius, name = defaultName) if name == '' and self.NameConv.RMIsNameInFormat( Obj): Ctrl = self.NameConv.RMRenameBasedOnBaseName( Obj, Ctrl) else: Ctrl = self.NameConv.RMRenameBasedOnBaseName( Obj, Ctrl, NewName = Ctrl) Ctrl = self.NameConv.RMRenameSetFromName (Ctrl,"control","Type") RMRigTools.RMAlign(Obj,Ctrl,3) ResetGroup = RMRigTools.RMCreateGroupOnObj(Ctrl) return ResetGroup , Ctrl
def sliderA(prefix): cmds.undoInfo(openChunk=True) #create nodes grp=cmds.group(empty=True,n=(prefix+'_grp')) cnt=cmds.circle(r=0.1,ch=False,n=(prefix+'_cnt')) shp=cmds.circle(o=True,r=1,ch=False,d=1,s=4,n=(prefix+'_shp')) #setup shp cmds.move(-1,0,0,'%s.cv[0]' % shp[0],r=True,os=True) cmds.move(-1,0,0,'%s.cv[4]' % shp[0],r=True,os=True) cmds.move(0,-1,0,'%s.cv[1]' % shp[0],r=True,os=True) cmds.move(1,0,0,'%s.cv[2]' % shp[0],r=True,os=True) cmds.move(0,1,0,'%s.cv[3]' % shp[0],r=True,os=True) cmds.parent(shp,grp) cmds.setAttr('%s.overrideEnabled' % shp[0],1) cmds.setAttr('%s.overrideDisplayType' % shp[0],2) #setup cnt cmds.parent(cnt,shp) cmds.setAttr('%s.overrideEnabled' % cnt[0],1) cmds.transformLimits(cnt,tx=(-1,1),etx=(1,1)) cmds.transformLimits(cnt,ty=(-1,1),ety=(1,1)) setupAttrs(prefix,cnt[0]) return grp cmds.undoInfo(closeChunk=True)
def createPointer(*args): cmds.circle(nr=(0,1,0),s=8,r=2) cmds.move(0,0,3.740932,'.cv[5]', r=True) cmds.scale(0.523749,1,1,'.cv[4]','.cv[6]', p=(0,0,1.567223),r=True) cmds.scale(0.786803,1,1,'.cv[3]','.cv[7]',p=(0,0,0), r=True) cmds.scale(0.382332, 0.382332, 0.382332, r=True) cmds.select(cl=True) print 'Created a Nurbs Pointer'
def createRig(self): # Create a Cube for test cases mc.polySphere(name='mySphere') objCenter = mc.objectCenter('mySphere', l=True) # Get the bounding box for the selected ojbject XYZ = mc.xform('mySphere', bb=True, q=True) rad = XYZ[3] / 2 * self.settings.radius strltPos = self.settings.lightPos lightP = 0.0 if strltPos == "High": lightP = 5.0 elif strltPos == "Low": lightP = -5.0 else: lightP = 0.0 # Create a circle to place three point lights mc.circle(n='curveLights', nr=(0, 1, 0), c=(0, 0, 0), sections=9, radius=rad) # Create lights in three positions on the curve loc = mc.pointOnCurve('curveLights', pr=0.0, p=True) #_item = mc.spotLight(name='FillLight', coneAngle=45) _item = self.createLight(self.fillLight, "FillLight") mc.move(loc[0], loc[1]+lightP, loc[2], _item, ls=True) loc = mc.pointOnCurve('curveLights', pr=3.0, p=True) #_item = mc.spotLight(name='KeyLight', coneAngle=45) _item = self.createLight(self.keyLight, "KeyLight") mc.move(loc[0], loc[1]+lightP, loc[2], _item, ls=True) loc = mc.pointOnCurve('curveLights', pr=6.0, p=True) #_item = mc.spotLight(name='RimLight', coneAngle=45) _item = self.createLight(self.rimLight, "RimLight") mc.move(loc[0], loc[1]+lightP, loc[2], _item, ls=True) # Create space locator and aimConstraints mc.spaceLocator(n='fillLocator', p=(objCenter[0], objCenter[1], objCenter[2])) mc.aimConstraint('fillLocator', 'FillLight', aimVector=(0.0, 0.0, -1.0)) mc.parent('fillLocator', 'curveLights', relative=True) mc.spaceLocator(n='keyLocator', p=(objCenter[0], objCenter[1], objCenter[2])) mc.aimConstraint('keyLocator', 'KeyLight', aimVector=(0.0, 0.0, -1.0)) mc.parent('keyLocator', 'curveLights', relative=True) mc.spaceLocator(n='rimLocator', p=(objCenter[0], objCenter[1], objCenter[2])) mc.aimConstraint('rimLocator', 'RimLight', aimVector=(0.0, 0.0, -1.0)) mc.parent('rimLocator', 'curveLights', relative=True) # Create lights main locator mc.spaceLocator(n='lightsMainLocator', p=(objCenter[0], objCenter[1], objCenter[2])) mc.parent('FillLight', 'lightsMainLocator', relative=True) mc.parent('KeyLight', 'lightsMainLocator', relative=True) mc.parent('RimLight', 'lightsMainLocator', relative=True) # Create Main Group for the entire light rig mc.group('curveLights', 'lightsMainLocator', n='LightRigGroup')
def WW_Arm_Controls(self): # create an IK / FK switch switchCtl = [] switchName = "IkFk_switch" cmds.circle(n=switchName)
def finger_controller(fingerControllerName, xyPosition, controllerSize): cmds.circle(c=(0, 0, 0), nr=(0, 1, 0), n=fingerControllerName) cmds.scale(controllerSize, 0, controllerSize, fingerControllerName) cmds.move(xyPosition[0], xyPosition[1] + 1, -1, fingerControllerName) cmds.addAttr( fingerControllerName, longName="finger_action", at="double", defaultValue=0.0, minValue=0.0, maxValue=10 ) cmds.setAttr(fingerControllerName + ".finger_action", keyable=True)
def make(self, _make, **kwargs): """Can make a node in maya using this command. Valid things to make are, group, circle, scriptNode, customCurve. If customcurve, format type is sObjName..make(what = 'customCurve', curveType = 'validCurveType', orientation = 'Y') The list of valid types: triangle worldMove angledCompass worldRotate straightCompass twoDirRotate square fourDirRotate sphere moveRotate plus worldMove02 halfDiamond toe cube spineType01 cross jawEgg bulb hand star foot eyes """ if cmds.objExists(self.name): raise Exception, 'Object with name already exists in scene, you can not have duplicate names in scenes.' else: if _make == 'group': #print 'Making group %s now.' % self.name objects = kwargs.get('objects') if objects: cmds.group(objects, name = self.name, em = False) else: cmds.group(name = self.name, em = True) elif _make == 'locator': #print 'Building spacelocator %s now' % self.name cmds.spaceLocator(n = self.name, **kwargs) elif _make == 'circle': cmds.circle(n = self.name, **kwargs) self.name = '%s_ctrl' % self.name elif _make == 'scriptNode': cmds.scriptNode(n = self.name, **kwargs) elif _make == 'customCurve': ## Curve options are ### curveType = 'circle', snapTo = False, cstTo = False, orientation = 'Y', grouped = False, scaleFactor = 1, color = 15, boundingBox = True, dest = '', suffix = True, addGeoShowHide = True myNewCurve = BD_CurveBuilder.buildControlCurve(curveName = self.name, **kwargs) if kwargs.get('suffix'): self.name = '%s_ctrl' % myNewCurve else: self.name = '%s' % myNewCurve elif _make == 'nurbsPlane': cmds.nurbsPlane(n = '%s' % self.name, **kwargs) elif _make == 'camera': cmds.camera() cmds.rename('camera1', '%s' % self.name)
def bdBuildSphereController(target,ctrlName,scale): circleA = cmds.circle(n = ctrlName + 'A',nr=(0, 1, 0), c=(0, 0, 0),radius=scale ) circleB = cmds.circle(n = ctrlName + 'B',nr=(1, 0, 0), c=(0, 0, 0), radius=scale ) circleBShape = cmds.listRelatives(circleB[0],c=True) circleC = cmds.circle(n = ctrlName + 'C',nr=(0, 0, 1), c=(0, 0, 0),radius=scale ) circleCShape = cmds.listRelatives(circleC[0],c=True) cmds.parent(circleBShape[0],circleA[0],r=True,s=True) cmds.parent(circleCShape[0],circleA[0],r=True,s=True) cmds.delete(circleB,circleC) ctrl = cmds.rename(circleA[0],ctrlName) ctrlGrp = cmds.group(ctrl,n=ctrlName.replace("anim","anim_CON")) targetPos = cmds.xform(target,q=True,ws=True,t=True) targetRot = cmds.xform(target,q=True,ws=True,ro=True) cmds.move(targetPos[0],targetPos[1],targetPos[2],ctrlGrp) cmds.rotate(targetRot[0],targetRot[1],targetRot[2],ctrlGrp)
def makeObj(name, objType, place, rotX, rotY, rotZ): if objType == "transform": thisObj = cmds.createNode(objType, n=name) elif objType == "pvArrow": thisObj = ctrls.jpmCreatePVArrow(name) elif objType == "pivot": thisObj = ctrls.jpmCreatePivotCTRLShape(name) elif objType == "topTrans": thisObj = ctrls.jpmCreateTopTransCTRLShape(name) elif objType == "cubeTwo": thisObj = ctrls.jpmCreateCubeTwoCTRLShape(name) elif objType == "straightCompass": thisObj = ctrls.jpmCreateStraightCompass(name) elif objType == "angledCompass": thisObj = ctrls.jpmCreateAngledCompass(name) elif objType == "cirlce": thisObj = cmds.circle(c=(0, 0, 0), nr=(0, 1, 0), sw=360, r=1, d=1, ut=0, tol=0.01, s=16, ch=1, n=(name + "_CTRL")) elif objType == "triangle": thisObj = ctrls.jpmCreateTriangle(name) elif objType == "locator": thisObj = cmds.spaceLocator(n=name) if place != "origin": cmds.xform(thisObj, t=(getPositions(place)), a=True, ws=True) cmds.rotate(rotX, rotY, rotZ, thisObj, r=True, os=True) cmds.makeIdentity(thisObj, apply=True, t=1, r=1, s=1, n=2) return thisObj
def geoCrowd() : # Import referenced characters # select geometries then run script sels = mc.ls( sl=True ) ctrls = [] for sel in sels : ns = sel.split( ':' )[0] if not ns in ctrls : ctrl = mc.circle( nr=(0,1,0) , ch=False )[0] grp = mc.group( ctrl ) root = '%s:Root_Ctrl' % ns mc.delete( mc.parentConstraint( root , grp ) ) ctrl = mc.rename( ctrl , ns ) mc.rename( grp , '%s_grp' % ns ) ctrls.append( ns ) attrs = ('tx','ty','tz','rx','ry','rz','sx','sy','sz') for attr in attrs : if mc.getAttr( '%s.%s' % ( sel , attr ) , l=True ) : mc.setAttr( '%s.%s' % ( sel , attr ) , l=False ) mc.select( sel , r=True ) mc.duplicate( sel , rr=True ) geo = mc.ls( sl=True , l=True )[0] mc.parent( geo , ctrl )
def createShape(prefix='', scale=1.0): """ create a unit slider for blend operation :param prefix: str, prefix of the control :param scale: float, scale of the control :return: str, ctrlBox of the unitSliderControl """ Ctrl = cmds.circle(radius=0.2, nr=(1, 0, 0), n=prefix + '_Ctrl')[0] cmds.transformLimits(Ctrl, tx=(0, 0), ty=(0, 1), tz=(0, 0), etx=(1, 1), ety=(1, 1), etz=(1, 1)) CtrlBox = cmds.curve(d=1, p=[(0, 0, 0), (0, 1, 0)], k=[0, 1], n=prefix + '_CtrlBox') parentCrvShape = cmds.listRelatives(CtrlBox, s=1) cmds.setAttr(parentCrvShape[0] + '.template', 1) cmds.parent(Ctrl, CtrlBox) cmds.setAttr(CtrlBox + '.s', scale, scale, scale) cmds.makeIdentity(CtrlBox, apply=1, t=1, r=1, s=1, n=0) cmds.select(cl=1) return CtrlBox
def ProxyBase(self, name): first = cmds.circle(c=(0, 0, 0), nr=(0, 1, 0), sw=360, r=0.25, d=3, ut=0, tol=0.01, s=8, ch=1) cmds.rename(first[0], name) scend = cmds.duplicate(rr=True) cmds.rename(scend[0], "%sB" % name) cmds.setAttr("%sB.rx" % name, 90) cmds.makeIdentity("%sB" % name, apply=True, t=1, r=1, s=1) third = cmds.duplicate(rr=True) cmds.rename(third[0], "%sC" % name) cmds.setAttr("%sC.ry" % name, 90) cmds.makeIdentity("%sC" % name, apply=True, t=1, r=1, s=1) Loc = cmds.spaceLocator() cmds.rename(Loc[0], "%sSnap" % name) cmds.setAttr("%sSnapShape.localScaleZ" % name, 0.25) cmds.setAttr("%sSnapShape.localScaleX" % name, 0.25) cmds.setAttr("%sSnapShape.localScaleY" % name, 0.25) cmds.parent("%sBShape" % name, "%sCShape" % name, "%sSnapShape" % name, name, r=True, s=True) cmds.delete("%sB" % name, "%sC" % name, "%sSnap" % name) cmds.select(name) cmds.makeIdentity(name, apply=True, t=1, r=1, s=1) cmds.delete(name, ch=True)
def CreateObjects(objectlist,*args): selCVs = cmds.ls(sl=True) selCVs_pos = cmds.filterExpand(ex=True,sm=28) cmds.select(cl=True) ObjName = cmds.optionMenu(objectlist,query=True,value=True) for num in selCVs_pos: position = cmds.pointPosition(num,w=True) pos_x = position[0] pos_y = position[1] pos_z = position[2] if(ObjName == "Cube"): make_obj = cmds.nurbsCube(); cmds.setAttr(make_obj[0] + ".tx",pos_x) cmds.setAttr(make_obj[0] + ".ty",pos_y) cmds.setAttr(make_obj[0] + ".tz",pos_z) if(ObjName == "Circle"): make_obj = cmds.circle(); cmds.setAttr(make_obj[0] + ".tx",pos_x) cmds.setAttr(make_obj[0] + ".ty",pos_y) cmds.setAttr(make_obj[0] + ".tz",pos_z) if(ObjName == "Joint"): make_obj = cmds.joint() cmds.setAttr(make_obj + ".tx",pos_x) cmds.setAttr(make_obj + ".ty",pos_y) cmds.setAttr(make_obj + ".tz",pos_z)
def createCircleControl(name=None, x=1, y=1, z=1, radius=1, color=None, type='strip', heightRatio=0.007): if not name: name = 'circle_CTRL' xform = cmds.group(name=name, em=1) circleShapes = [] circleTransforms = [] vectors = getAxisWorldVectors(xform) xyz = [x,y,z] for i in range(0, len(xyz)): if xyz[i]: circ = None if type == 'curve': circ = cmds.circle(radius=radius, name='jointMoverAxisCtrl', normal=vectors[i], sections=1, ch=0) if color: cmds.color(circ, ud=color) if type == 'strip' or type == 'toroid': circ = None if type == 'strip': circ = cmds.cylinder(radius=radius, name='jointMoverAxisCtrl', axis=vectors[i], sections=7, ch=0, heightRatio=heightRatio) elif type == 'toroid': circ = cmds.torus(radius=radius, name='jointMoverAxisCtrl', axis=vectors[i], sections=7, ch=0, heightRatio=heightRatio) if color: if color == 'xyz': if i == 0: colorControl(circ, name='red_m', color=(1,0,0)) if i == 1: colorControl(circ, name='green_m', color=(0,1,0)) if i == 2: colorControl(circ, name='blue_m', color=(0,0,1)) else: if len(color) == 3: colorControl(circ, color=color) circleShapes.append(cmds.listRelatives(circ[0], fullPath=1, shapes=1)[0]) circleTransforms.append(circ[0]) cmds.parent(circleShapes, xform, r=1, s=1) cmds.delete(circleTransforms) return xform
def Tongue_Control(*args,**kwargs): tongueJoints = ["First_Tongue_Jt","Second_Tongue_Jt","Third_Tongue_Jt","Fourth_Tongue_Jt","Fifth_Tongue_Jt"] for tongueRing in range(len(tongueJoints)): controls = [mc.circle(name = "Tongue_Ctrl_"+str(tongueRing)), mc.scale(0.5,0.3,0.5), mc.setAttr("Tongue_Ctrl_"+str(tongueRing)+".overrideColor",18), mc.setAttr("Tongue_Ctrl_"+str(tongueRing)+".overrideEnabled",1)] #xform translation valPos = mc.xform(tongueJoints[tongueRing],query=True,ws=True,translation=True) mc.xform(controls[tongueRing-1],ws=1,t=(valPos[0],valPos[1],valPos[2])) #xform rotation valRot = mc.xform(tongueJoints[tongueRing],query=True,ws=True,rotation=True) mc.xform(controls[tongueRing-1],ws=1,ro=(valRot[0],valRot[1]-90,valRot[2]-15)) mc.makeIdentity("Tongue_Ctrl_"+str(tongueRing),a=True,r=True,t=True,s=True) #mc.group("Tail_Ctrl_"+str(tailRing), name="GRP_Tail_Ctrl_"+str(tailRing)) #mc.parent("Tail_Ctrl_"+str(tailRing),"GRP_Tail_Ctrl_"+str(tailRing)) orient = mc.orientConstraint("Tongue_Ctrl_"+str(tongueRing), tongueJoints[tongueRing], maintainOffset=True) mc.parent("Tongue_Ctrl_4","Tongue_Ctrl_3") mc.parent("Tongue_Ctrl_3","Tongue_Ctrl_2") mc.parent("Tongue_Ctrl_2","Tongue_Ctrl_1") mc.parent("Tongue_Ctrl_1","Tongue_Ctrl_0") mc.parent("Tongue_Ctrl_0","Jaw_Ctrl") #Lock attributes for Tongue rig for lock in range(len(tongueJoints)): mc.setAttr("Tongue_Ctrl_"+str(lock)+".scale",lock=True), mc.setAttr("Tongue_Ctrl_"+str(lock)+".translate",lock=True)
def createFKControl(): joint1= mc.ls(sl = True)[0] joint2 = mc.listRelatives(joint1, children = True)[0] joint3 = mc.listRelatives(joint2, children = True)[0] FKControls = [] FKControlGroups = [] for joint in [joint1, joint2, joint3]: controlObject = mc.circle( nr=(1, 0, 0), c=(0, 0, 0), r = 1)[0] controlName = joint.rpartition("_")[0] + "_CTL" FKControlObject = mc.rename(controlObject, controlName) FKControls.append(FKControlObject) mc.setAttr(FKControlObject+'.translateX', mc.xform(joint, query = True, worldSpace = True, translation = True)[0]) mc.setAttr(FKControlObject+'.translateY', mc.xform(joint, query = True, worldSpace = True, translation = True)[1]) mc.setAttr(FKControlObject+'.translateZ', mc.xform(joint, query = True, worldSpace = True, translation = True)[2]) FKControlObjectShape = mc.listRelatives(FKControlObject, children = True) mc.setAttr(FKControlObjectShape[0]+".overrideEnabled", 1) mc.setAttr(FKControlObjectShape[0]+".overrideColor", 13) groupName = mc.group(FKControlObject, n = joint.rpartition("_")[0] + "_GRP") mc.parent(groupName, joint) mc.makeIdentity(groupName, apply=True, t=1, r=1, s=1, n=0) mc.parent(groupName, world = True) controlParent = mc.listRelatives(FKControlObject, parent = True)[0] mc.parentConstraint(FKControlObject, joint) FKControlGroups.append(groupName) #if controlParent != None: #mc.parent(groupTrueName, FKControlObject) mc.parent(FKControlGroups[2], FKControls[1]) mc.parent(FKControlGroups[1], FKControls[0])
def creatJntCtr(self, jntName): print "im in creatJntCtr" cmds.undoInfo(openChunk=True) cmds.select(cl=True) try: jnt = cmds.joint(name=jntName) shape = cmds.circle(c=(0, 0, 0), nr=(1, 0, 0), sw=360, r=1, d=3, ut=0, tol=0.00155, s=8, ch=0, n=jnt + "_Con") print jnt, shape[0] self.Align(shape[0], jnt) cmds.parent(jnt, shape[0]) grp = cmds.group(shape[0], r=True, n=shape[0] + "Grp") print grp return grp except Exception as e: print 'creatJntCtr something wrong...' cmds.undoInfo(closeChunk=True)
def fk_chain(): JointChain = cmds.ls(selection=True) JointRel = cmds.listRelatives(JointChain, ad=True) JointRel.reverse() JointHr = JointChain + JointRel ctrlGrpList = [] ctrlList = [] for i in JointHr: name = i.replace('_Joint', '') ctrl = cmds.circle(n=(name + '_Ctrl'), ch=0) cmds.delete(cmds.parentConstraint(i, ctrl)) cmds.parentConstraint(ctrl, i) groupOffset = cmds.group(ctrl, n=(name + '_Offset')) groupExtra = cmds.group(groupOffset, n=(name + '_Extra')) ctrlList.append(ctrl[0]) ctrlGrpList.append(groupExtra) #st=cmds.ls('*_Ctrl',) #ctrlList=cmds.ls('*_Ctrl', p=1) josh sobel noofjnts = len(groupExtra) for i in range(0, noofjnts): cmds.parent(ctrlGrpList[i + 1], ctrlList[i])
def control(sels=[]): #'circle' is the default value. if not sels: sels = cmds.ls(sl=True) n_ctrls = [] for sel in sels: pos = cmds.xform(sel, q=True, ws=True, translation=True) orient = cmds.xform(sel, q=True, ws=True, rotation=True) size = cmds.xform(sel, q=True, ws=True, scale=True) ctrl = cmds.circle(c=[0, 0, 0], nr=[0, 1, 0], sw=360, r=2, d=3, ut=0, tol=0.01, s=8, ch=1)[0] cmds.xform(ctrl, ws=True, translation=pos) cmds.xform(ctrl, ws=True, rotation=orient) cmds.xform(ctrl, ws=True, scale=size) name = sel.rpartition( '_' ) #rpartition moves right to left, instead of partition's left to right. name = name[0] + name[1] + 'Ctrl' ctrl = cmds.rename(ctrl, name) n_ctrls.append(ctrl) group(n_ctrls) cmds.select(n_ctrls, r=True)
def createNeck(self, *args): #### Creates neck control based off neck joint #### neckPos = cmds.xform(cmds.ls(self.prefix + "_Neck_Jnt"), q=True, t=True, ws=True) neck = cmds.circle(nr=(0, 1, 0), c=(0, 0, 0), radius=self.conRadius, degree=3, name=self.prefix + "_Neck_Con") cmds.move(neckPos[0], neckPos[1] + 0.03, neckPos[2] + 0.02, neck) cmds.rotate(23, 0, 0, neck) cmds.scale(0.07, 0.1, 0.1, neck) #### Sets pivot of control to be on joint, freezes transforms and parents control to chest control #### cmds.move(neckPos[0], neckPos[1], neckPos[2], self.prefix + "_Neck_Con" + '.scalePivot', self.prefix + "_Neck_Con" + '.rotatePivot', absolute=True) cmds.parent(neck, self.prefix + "_Chest_Con") cmds.makeIdentity(neck, apply=True, t=1, r=1, s=1)
def create_orb(sca=[1.0, 1.0, 1.0], name='empty', *args): ctrl_shape = mc.circle(nr=[0, 1, 0])[0] circle_list = list() circle_list.append(mc.duplicate(rr=True)[0]) mc.xform(ro=[90, 0, 0]) circle_list.append(mc.duplicate(rr=True)[0]) mc.xform(ro=[90, 90, 0]) circle_list.append(mc.duplicate(rr=True)[0]) mc.xform(ro=[90, 45, 0]) circle_list.append(mc.duplicate(rr=True)[0]) mc.xform(ro=[90, -45, 0]) mc.select(circle_list) mc.makeIdentity(apply=True, t=True, r=True, s=True) mc.pickWalk(d='down') mc.select(ctrl_shape, tgl=True) mc.parent(r=True, s=True) mc.delete(circle_list) mc.xform(ctrl_shape, cp=True) if name != 'empty': ctrl_shape = mc.rename(ctrl_shape, name) mc.xform(ctrl_shape, s=sca) mc.makeIdentity(apply=True, s=True) return ctrl_shape
def create_control(type, name, scale): '''Creates a control of specified type''' #generate generic name if none provided if name == '': name = 'Generic' name = '%s' % name #create an additional variable for the control ctrl = '' #create specified control type if type == 'circle': ctrl = cmds.circle(c=[0,0,0] nr=[0,1,0], sw=360, r=1, d=3, ut=0, tol=.01, s=8, ch=True)[0] elif type == 'square': pass elif type == 'cube': pass #scale the object cmds.scale(scale_val, scale_val, scale_val, ctrl, r=True) #rename control and delete history ctrl = cmds.rename(ctrl, name) cmds.delete(ctrl, ch=True) #return control name return ctrl
def createCircleControl(self, name='', radius=1, sections=8): circleControl = cmds.circle(name=name, radius=radius, sections=sections) cmds.delete(circleControl, constructionHistory=1) circleControl = circleControl[0] return circleControl
def main(): if mc.objExists("*horizonLine*"): mc.delete("*horizonLine*") # Delete existing "horizonLine" return active3dViewCamShape, active3dViewCamTrans = getActive3dViewCam() horizonLineTrans = mc.circle(name='horizonLine', radius=2, normal=(0, 1, 0), sections=32)[0] horizonLineShape = mc.listRelatives(horizonLineTrans, shapes=True, fullPath=True)[0] mc.expression(s=""" {0}.sx = {1}.nearClipPlane; {0}.sy = {1}.nearClipPlane; {0}.sz = {1}.nearClipPlane; """.format(horizonLineTrans, active3dViewCamShape), object=horizonLineTrans) mc.setAttr(horizonLineShape + '.overrideEnabled', 1) mc.setAttr(horizonLineShape + '.overrideColor', 14) mc.pointConstraint(active3dViewCamTrans, horizonLineTrans, maintainOffset=False) mc.select(clear=True)
def createCircleAtJnt(jnt, color, prefix): cmds.select([]) position = cmds.xform(jnt, query = True, worldSpace = True, matrix = True) control = cmds.circle(name = prefix + "temp_shape_" + jnt, normal = [-1, 0, 0])[0] cmds.select([]) cmds.xform(control, matrix = position, worldSpace = True) return control
def make_fk_control(self, joints, color): # create fk chain for obj in joints: obj_control = cmds.circle(n=obj + '_Ctl', nr=[1, 0, 0], r=5) cmds.setAttr(obj_control[0] + '.lineWidth', 2) self.override_colors(obj_control[0], color) obj_control_group = cmds.group(obj_control, n=obj + '_Ctl_Null') cmds.matchTransform(obj_control_group, obj, pos=True, rot=True) cmds.orientConstraint(obj_control, obj) cmds.parent(obj_control_group, 'controls') parentOBJ = cmds.pickWalk(obj, direction='up') if parentOBJ[0] == obj: pass else: cmds.parentConstraint(parentOBJ, obj_control_group, mo=True) #hide controls if its ik mode condition = cmds.shadingNode('condition', asUtility=True, n='condition_node' + obj_control[0]) cmds.connectAttr(self.ik_fk_control + '.ikfk', condition + '.firstTerm') cmds.connectAttr(condition + '.outColorR', obj_control[0] + '.visibility') self.controls.append(obj_control_group)
def CreateCircleCTRL(CTRL_name, CTRL_list, prntJnt, norm, rad, offset): #create CTRL and offset grp CTRL = cmds.circle(n=str(CTRL_name), nr=norm, c=(0, 0, 0), r=rad) offset_GRP = pm.group(em=True, name=str(CTRL_name) + '_offset_GRP') pm.parent(CTRL[0], offset_GRP) # clear history for both objects CleanHist(CTRL[0]) CleanHist(offset_GRP) # temp parentconstr GRP to move to pos (with rot) tempConst = pm.parentConstraint(prntJnt, str(offset_GRP), mo=False) pm.delete(tempConst) # rotate curve CVs curveCVs = cmds.ls('{0}.cv[:]'.format(CTRL[0]), fl=True) pm.rotate(curveCVs, offset) # parent const to joint pm.parentConstraint(str(CTRL_name), str(prntJnt), mo=False, w=1) # recolor CTRL and add to list RecolourObj(CTRL_name, 'nurbsCurve') CTRL_list.append(offset_GRP)
def createControllerOnTarget( target, pivotCtlOn=True ): import sgBFunction_connection import sgBFunction_dag import sgBModel_data targetPos = cmds.getAttr( target+'.wm' ) targetP = cmds.listRelatives( target, p=1, f=1 )[0] targetName = target.split( '|' )[-1] ctl = cmds.circle( n='CTL_' + targetName )[0] ctlChild = cmds.createNode( 'transform', n='CTLChild_'+targetName );ctlChild = cmds.parent( ctlChild, ctl )[0] pivCtl = cmds.createNode( 'transform', n='PivCTL_'+targetName ); cmds.setAttr( pivCtl+'.dh', 1 ) cmds.setAttr( pivCtl+'.overrideEnabled', 1 ) cmds.setAttr( pivCtl+'.overrideColor', 18 ) ctlP = cmds.group( ctl, n='P'+ctl ) ctlPPiv = cmds.group( ctlP, pivCtl, n='Piv' + ctlP ) cmds.xform( ctlPPiv, ws=1, matrix=targetPos ) cloneObject = sgBFunction_dag.getConstrainedObject( targetP ) ctlPPiv = cmds.parent( ctlPPiv, cloneObject )[0] cmds.xform( pivCtl, os=1, matrix= sgBModel_data.getDefaultMatrix() ) ctl = cmds.listRelatives( ctlP, c=1, f=1 )[0] sgBFunction_connection.getSourceConnection( target, ctlPPiv ) for attr in [ 't', 'tx', 'ty', 'tz', 'r', 'rx', 'ry', 'rz', 's', 'sx', 'sy', 'sz', 'sh' ]: cons = cmds.listConnections( target+'.'+attr, s=1, d=0, p=1, c=1 ) if not cons: continue for i in range( 0, len( cons ), 2 ): cmds.disconnectAttr( cons[i+1], cons[i] ) sgBFunction_connection.constraintAll( ctlChild, target ) cmds.connectAttr( pivCtl+'.t', ctlP+'.t' ) cmds.connectAttr( pivCtl+'.r', ctlP+'.r' ) cmds.connectAttr( pivCtl+'.s', ctlP+'.s' ) cmds.connectAttr( pivCtl+'.sh', ctlP+'.sh' ) mmdcCtlChild = cmds.createNode( 'multMatrixDecompose' ) cmds.connectAttr( ctlPPiv+'.wm', mmdcCtlChild+'.i[0]' ) cmds.connectAttr( pivCtl+'.wim', mmdcCtlChild+'.i[1]' ) cmds.connectAttr( mmdcCtlChild+'.ot', ctlChild+'.t' ) cmds.connectAttr( mmdcCtlChild+'.or', ctlChild+'.r' ) cmds.connectAttr( mmdcCtlChild+'.os', ctlChild+'.s' ) cmds.connectAttr( mmdcCtlChild+'.osh', ctlChild+'.sh' ) ctlShape = sgBFunction_dag.getShape( ctl ) circleNode = cmds.listConnections( ctlShape+'.create', s=1, d=0 )[0] mm = cmds.createNode( 'multMatrix' ) trGeo = cmds.createNode( 'transformGeometry' ) cmds.connectAttr( ctlPPiv+'.wm', mm+'.i[0]' ) cmds.connectAttr( pivCtl+'.wim', mm+'.i[1]' ) cmds.connectAttr( circleNode+'.outputCurve', trGeo+'.inputGeometry' ) cmds.connectAttr( mm+'.matrixSum', trGeo+'.transform' ) cmds.connectAttr( trGeo+'.outputGeometry', ctlShape+'.create', f=1 ) return ctl
def createTentIk(tentGrpName, tentGrp, parJnt): ik = cmds.ikHandle( \ n = tentGrpName.replace('Geo', '_ikHdl'), \ sj = tentGrp[1] + '_jnt', ee = parJnt, \ sol = 'ikSplineSolver', \ shf=True, sticky='sticky', ccv=True, \ roc=True, tws='easeInOut', \ pcv=False, ns=3) ikGrp = cmds.group(n= ik[0] + '_grp') crv = cmds.rename(ik[2], str(ik[0]).replace('ikHdl', 'ikCrv')) #cluster time crvCVs = cmds.ls('{}.cv[:]'.format(crv), fl=True) clusterGrps = [] i=0 for cv in crvCVs: clstr = cmds.cluster(cv) #create controllers ctl = cmds.circle(n=tentGrpName.replace('Geo', '_ikCtl{}'.format(i)), nr = [1,0,0]) grp = cmds.group(n=ctl[0] + '_grp') cnst = cmds.parentConstraint(clstr, grp) cmds.delete(cnst) cmds.parent(clstr, ctl) clusterGrps.append(grp) i+=1 clusterGrp = cmds.group(clusterGrps, n=tentGrpName.replace('Geo', 'Cluster_grp')) cmds.group(clusterGrp, ikGrp, crv, n=tentGrpName.replace('Geo', '_ik_grp'))
def cvBall(ctrlName, r=1): """Create and return a cvBall curve to be usually used in the ribbonSystem and the clusterHandle to shapeSize.. """ # create circles to get the shapes: ballX = cmds.circle(n=ctrlName+"_x", ch=False, o=True, nr=(1, 0, 0), d=3, s=8, radius=r) ballY = cmds.circle(n=ctrlName+"_y", ch=False, o=True, nr=(0, 1, 0), d=3, s=8, radius=r) ballZ = cmds.circle(n=ctrlName+"_z", ch=False, o=True, nr=(0, 0, 1), d=3, s=8, radius=r) # parent shapes to transform: ballCtrl = cmds.group(name=ctrlName, empty=True) cmds.parent( cmds.listRelatives(ballX, shapes=True, children=True)[0], ballCtrl, relative=True, shape=True) cmds.parent( cmds.listRelatives(ballY, shapes=True, children=True)[0], ballCtrl, relative=True, shape=True) cmds.parent( cmds.listRelatives(ballZ, shapes=True, children=True)[0], ballCtrl, relative=True, shape=True) # delete old x, y and z transforms: cmds.delete(ballX, ballY, ballZ) cmds.select(clear=True) return ballCtrl
def createBodyCtrl(self, grpFKConsts, ctrlFKJnts, fkJnts, spineIKs, crvSpine, hdlSpine, jntArray, *args): # Create body control ctrlBody = mc.circle(nr=(1, 0, 0), r=45, n="CTRL_body", degree=1, sections=4)[0] cvsToMove = mc.select(ctrlBody + ".cv[:]") mc.rotate(45, cvsToMove, x=True) mc.select(cl=True) toDelete = mc.parentConstraint(jntArray[0], ctrlBody, mo=False) mc.delete(toDelete) mc.setAttr('{0}.overrideEnabled'.format(ctrlBody), 1) mc.setAttr("{0}.overrideColor".format(ctrlBody), 13) mc.makeIdentity(ctrlBody, apply=True, t=True, r=True, s=True) CRU.changeRotateOrder([ctrlBody], "ZXY") grpTorsoName = "GRP_torso" grpTorso = mc.group(n=grpTorsoName, em=True, w=True) mc.parent(fkJnts[0], jntArray[0], grpFKConsts, crvSpine, hdlSpine, spineIKs, grpTorsoName) mc.parentConstraint(ctrlBody, grpTorso, mo=True) grpDNT = mc.group(n="GRP_DO_NOT_TOUCH_torso", em=True, w=True) mc.parent(grpDNT, grpTorso) mc.parent(spineIKs, crvSpine, hdlSpine, jntArray[0], grpDNT) mc.setAttr("{0}.inheritsTransform".format(crvSpine), False) return ctrlBody, grpTorso
def extrude(self,caps=True): """ extrudes a tube along the NURBS curve """ self.curve2 = mc.duplicate(self.origCurve, name=self.origCurve+"_copy")[0] # select the first CV of the path (curve) mc.select("%s.cv[0]"%self.curve2,replace=True) # figure out where to put the circle and which way to point it circleCenter = mc.xform(q=True,ws=True,t=True) circleNormal = mc.pointOnCurve(self.curve2, parameter=0, tangent=True) # create a circle to use for extrusion circle = mc.circle(radius=self.radius, center=circleCenter, normal=circleNormal)[0] # extrude! extrusion = mc.extrude( circle, self.curve2, n="nurbsTubeTrace", extrudeType=2, range=True )[0] self.traceBits = [extrusion, self.curve2, self.origCurve, circle] if caps: # select the first isoparm mc.select(extrusion+".v[%f]"%cu.findParamAtArcPercent( self.origCurve, 0.0)) # create planar surface begCap = mc.planarSrf(n="cap1")[0] # select the last isoparm mc.select(extrusion+".v[%f]"%cu.findParamAtArcPercent( self.origCurve, 1.0)) # create planar surface endCap = mc.planarSrf(n="cap2")[0] mc.setKeyframe( endCap+".visibility", t=self.timeSpan[1]-1, v=0.0 ) mc.setKeyframe( endCap+".visibility", t=self.timeSpan[1], v=1.0 ) # add the caps to the traceBits list self.traceBits.extend([begCap,endCap]) return extrusion
def CreateFootControl(self, prefix, mirrored=False, originalPrefix=""): targetBall = self.ballJnt if mirrored: targetBall = originalPrefix + self.LEG_JNT_NAMES[3] + "_JNT" #create circle on the ball joint, normal as x+ of the joint #scale the control as a base to cover ball to toe shapeScale = cmds.xform(self.toeJnt, q=1, ws=0, t=1)[0] shape = cmds.circle(constructionHistory=False, object=True, normal=[0, 0, 1], radius=shapeScale)[0] control = cmds.rename(shape, prefix + "foot" + "_CTL") offGrp = cmds.group(control, n=(prefix + "footCTL" + "Offset_GRP")) parCon = cmds.parentConstraint(targetBall, offGrp, mo=0) cmds.delete(parCon) if mirrored: tempGrp = cmds.group(em=True, n="tempFlipFoot") cmds.parent(offGrp, tempGrp) cmds.xform(tempGrp, s=[-1, 1, 1]) cmds.parent(offGrp, world=True) cmds.delete(tempGrp) #cleanup cmds.parent(prefix + "leg_IKH", self.revAnkleJnt) cmds.parent(self.revCBankJnt, control) self.footControl = control self.footControlOffsetGrp = offGrp cmds.select(clear=True)
def circleH(name, position, size=1): j=cmds.circle(c=[0,0,0], nr=[0,1,0], sw=360, r=size, d=3, ut=0, tol=0.01, s=8, ch=1, n=name) i=cmds.pointConstraint(position, j) # deletes constraint nad freezes transforms cmds.delete(i) cmds.makeIdentity(apply=True, t=1, r=1, s=1, n=1) return j
def createSphere(): i = 0 lastName = 'tes' while i < 3: ctrlName = 'sp0' + str(i) + 'cir' tempName = cmds.circle(c=(0, 0, 0), nr=(0, 1, 0), sw=360, r=50, d=3, ut=False, s=8, ch=True) renameAndColor(tempName[0], ctrlName, 22) if i == 0: lastName = ctrlName cmds.rotate(0, 0, 0) elif i == 1: cmds.rotate(0, 0, 90) elif i == 2: cmds.rotate(90, 0, 90) else: pass freezeAndDeletehistory() if i > 0: cmds.select(ctrlName + 'Shape') cmds.select(lastName, add=True) cmds.parent(r=True, s=True) cmds.delete(ctrlName) i += 1 return lastName
def rig_addMovablePivot(transformNode, drivenNode): offGrp = mc.createNode('transform', n=(transformNode + 'Offset')) parConst = mc.parentConstraint(transformNode, offGrp) mc.delete(parConst) parentNode = mc.listRelatives(transformNode, p=True) pivotCtl = mc.circle(n=(transformNode + 'Pivot')) parentLocator = mc.spaceLocator(n=(transformNode + 'ParentLoc')) parConst = mc.parentConstraint(transformNode, pivotCtl[0]) mc.delete(parConst) parConst = mc.parentConstraint(transformNode, parentLocator[0]) mc.parent(transformNode, pivotCtl[0]) mc.parent(pivotCtl[0], offGrp) mc.parent(parentLocator[0], offGrp) if parentNode: mc.parent(offGrp, parentNode) decMatrix = mc.shadingNode('decomposeMatrix', asShader=True, n=(transformNode + 'DecMatrix')) mc.connectAttr((pivotCtl[0] + '.inverseMatrix'), (decMatrix + '.inputMatrix')) mc.connectAttr((decMatrix + '.outputRotate'), (parConst[0] + '.target[0].targetOffsetRotate')) mc.connectAttr((decMatrix + '.outputTranslate'), (parConst[0] + '.target[0].targetOffsetTranslate')) mc.parentConstraint(parentLocator[0], drivenNode)
def jointStuff_standard(): l_joints = mc.ls(sl=1) for jnt in l_joints: #Validation loop before doing stuff... if not mc.objectType(jnt) == 'joint': raise ValueError, "Not a joint: {0}".format(jnt) for i, jnt in enumerate(l_joints): #First we're gonna create a curve at each joint. Name, parent and snap it ... jnt = mc.rename(jnt, "ourChain_{0}_jnt".format( i)) #...gotta catch stuff when you rename it str_crv = mc.circle(normal=[1, 0, 0], ch=0)[0] str_crv = mc.parent(str_crv, jnt)[0] #...gotta catch stuff when you parent it str_crv = mc.rename(str_crv, '{0}_crv'.format(jnt)) #...everytime it changes mc.delete(mc.parentConstraint(jnt, str_crv, maintainOffset=False)) #Now we wanna add a locator at each joint - matching, position,orientation,rotation order loc = mc.spaceLocator(n="{0}_loc".format(jnt))[0] ro = mc.getAttr('{0}.rotateOrder'.format(jnt)) mc.setAttr('{0}.rotateOrder'.format(loc), ro) mc.delete(mc.parentConstraint(jnt, loc, maintainOffset=False)) #Now if we wanna store data on each object one to another... mc.addAttr(jnt, ln='curveObject', at='message') mc.connectAttr((str_crv + ".message"), (jnt + '.curveObject')) mc.addAttr(str_crv, ln='targetJoint', at='message') mc.connectAttr((jnt + ".message"), (str_crv + '.targetJoint')) mc.addAttr(loc, ln='source', at='message') mc.connectAttr((jnt + ".message"), (loc + '.source'))
def test_init(self): con = control.Control(name="testControl") self.assertEquals(con.colour, (0, 0, 0)) self.assertEquals(con.name, "testControl") curve = cmds.circle(ch=False)[0] con = control.Control(node=nodes.asMObject(curve)) self.assertTrue(cmds.objExists(con.dagPath.fullPathName()))
def FKcontrolMaker(self): sel = cmds.ls(sl=True) fkController = [] fkNullGroup = [] print self.temp_CON for i in sel: jointName = i if len(self.temp_CON) == 1: Control = cmds.duplicate(self.temp_CON, n=jointName.replace( jointName.split('_')[-1], 'CON')) print Control else: Control = cmds.circle(nr=(1, 0, 0), c=(0, 0, 0), r=1, n=jointName.replace( jointName.split('_')[-1], 'CON')) cmds.DeleteHistory(Control[0]) print Control cmds.setAttr("%sShape.overrideEnabled" % Control[0], 1) cmds.setAttr("%sShape.overrideColor" % Control[0], 17) cmds.DeleteHistory(Control[0]) cmds.group(Control[0]) nullGroup = (cmds.rename( jointName.replace(jointName.split('_')[-1], 'NUL'))) fkController.append("%s" % Control[0]) fkNullGroup.append("%s" % nullGroup) cmds.delete(cmds.parentConstraint(jointName, nullGroup, w=True)) for x in range(len(sel) - 1): q = -1 - x k = -2 - x cmds.parent(fkNullGroup[q], fkController[k]) for y in range(len(sel)): cmds.parentConstraint(fkController[y], sel[y], mo=1, w=1)
def subCon(base, f): if f == "L_": sweep = -180 centerX = 0.2 else: sweep = 180 centerX = -0.2 cir = cmds.circle(r=1.5,nr=(0,0,1), sw=sweep, cx=centerX, n=f+"Hand_sub_ctrl")[0] grp = cmds.group(em=True, n=f+"Hand_sub_ctrl_grp") cmds.parent(cir, grp) z = cmds.getAttr("Hand_World.scaleX") cmds.scale(2.5*z,1*z,1*z, grp) cmds.DeleteHistory(cir) c = f+"Hand_sub_ctrl_grp" base = base+1 for x in range(2, base): cmds.orientConstraint(f+"finger_"+str(x)+"_1", c, mo=False, n="sub"+str(x)) cmds.parentConstraint(f+"Hand", c, n="sub") cmds.delete("sub*") coloring(c,17) for n in range(1, base): cmds.addAttr(f+"Hand_sub_ctrl", ln="finger_"+str(n), at="float", dv=0, max=10, min=-5, k=True)
def Circle(name='circle_cnt',group=False,size=1.0): ''' Creates a circle shape. If group is True, will group control and return a list [group,control]. ''' #creating the curve curve=cmds.circle(radius=1,constructionHistory=False) #transform to standard cmds.rotate(0,90,0,curve) cmds.makeIdentity(curve,apply=True, t=1, r=1, s=1, n=0) #naming control node=cmds.rename(curve,name) #sizing cmds.scale(size,size,size,node) cmds.FreezeTransformations(node) #grouping control if group==True: grp=cmds.group(node,n=name+'_grp') return [grp,node] #return return node
def createBakaukeShape(): tempName = cmds.circle(c=(0, 0, 0), nr=(0, 1, 0), sw=360, r=1, d=3, ut=False, s=8, ch=True) cmds.setAttr(tempName[0] + '.cv[0].xValue', -0.6) cmds.setAttr(tempName[0] + '.cv[0].yValue', 1.7) cmds.setAttr(tempName[0] + '.cv[0].zValue', 1.25) cmds.setAttr(tempName[0] + '.cv[1].yValue', 2) cmds.setAttr(tempName[0] + '.cv[1].zValue', 1.4) cmds.setAttr(tempName[0] + '.cv[2].xValue', 0.6) cmds.setAttr(tempName[0] + '.cv[2].yValue', 1.7) cmds.setAttr(tempName[0] + '.cv[2].zValue', 1.25) cmds.setAttr(tempName[0] + '.cv[3].xValue', 0.8) cmds.setAttr(tempName[0] + '.cv[3].yValue', 1) cmds.setAttr(tempName[0] + '.cv[3].zValue', 0.6) cmds.setAttr(tempName[0] + '.cv[4].xValue', 0.6) cmds.setAttr(tempName[0] + '.cv[4].yValue', 0.3) cmds.setAttr(tempName[0] + '.cv[4].zValue', -0.3) cmds.setAttr(tempName[0] + '.cv[5].zValue', -0.8) cmds.setAttr(tempName[0] + '.cv[6].xValue', -0.6) cmds.setAttr(tempName[0] + '.cv[6].yValue', 0.3) cmds.setAttr(tempName[0] + '.cv[6].zValue', -0.3) cmds.setAttr(tempName[0] + '.cv[7].xValue', -0.8) cmds.setAttr(tempName[0] + '.cv[7].yValue', 1) cmds.setAttr(tempName[0] + '.cv[7].zValue', 0.6) return tempName[0]
def createBrowCtl(self, jntNum, orderJnts): """ create extra controllor for the panel """ ctlP = "browDetailCtrl0" kids = cmds.listRelatives (ctlP, ad=True, type ='transform') if kids: cmds.delete (kids) attTemp = ['scaleX','scaleY','scaleZ', 'rotateX','rotateY', 'tz', 'visibility' ] index = 0 for jnt in orderJnts: detailCtl = cmds.circle ( n = 'browDetail' + str(index+1).zfill(2), ch=False, o =True, nr = ( 0, 0, 1), r = 0.2 ) detailPlane = cmds.nurbsPlane ( ax = ( 0, 0, 1 ), w = 0.1, lengthRatio = 10, degree = 3, ch=False, n = 'browDetail'+ str(index+1).zfill(2) + 'P' ) increment = 2.0/(jntNum-1) cmds.parent (detailCtl[0], detailPlane[0], relative=True ) cmds.parent (detailPlane[0], ctlP, relative=True ) cmds.setAttr (detailPlane[0] + '.tx', -2 + increment*index*2 ) cmds.xform ( detailCtl[0], r =True, s = (0.2, 0.2, 0.2)) cmds.setAttr (detailCtl[0] +".overrideEnabled", 1) cmds.setAttr (detailCtl[0] +"Shape.overrideEnabled", 1) cmds.setAttr( detailCtl[0]+"Shape.overrideColor", 20) cmds.transformLimits ( detailCtl[0] , tx = ( -.4, .4), etx=( True, True) ) cmds.transformLimits ( detailCtl[0], ty = ( -.8, .8), ety=( True, True) ) for att in attTemp: cmds.setAttr (detailCtl[0] +"."+ att, lock = True, keyable = False, channelBox =False) index = index + 1
def setupFK(self, fkChain): self.fkCtrls = [] for i in range(0, len(fkChain)): ctrl = cmd.circle(n='ctrl_' + self.names[i], radius=1) self.fkCtrls.append(ctrl) print self.fkCtrls
def makePipeJoints(): #track selection order must be on for this to work joints = [] sel = cmd.ls(os=True) obj = cmd.ls(sl=True, o=True) name = obj[0].rsplit('_', 1)[0] for one in sel: strip = re.search(r"\[([0-9]+)\]", one) num = strip.group(1) cmd.select(one) cmd.polySelect(el=int(num)) clust = cmd.cluster(n = 'poo#') posi = cmd.getAttr(clust[0]+'HandleShape.origin') cmd.delete (clust[0]) size = len(joints) joints.append(cmd.joint(n='%s_%s_JNT' %(name, size+1),p = posi[0])) if size > 0: cmd.parent(joints[size], joints[size-1]) cmd.joint(joints[size-1], e=True, oj = 'xyz', sao = 'yup') circle = cmd.circle(nr = [1, 0, 0], n='%s_%s_CTL' %(name, size)) group = cmd.group(n = '%s_GP' %(circle[0])) jntCTL(joints[size-1], circle[0], group) if size > 1: cmd.parentConstraint(joints[size-2], group, mo =1) cmd.select(joints, obj[0]) cmd.skinCluster(mi=4)
def Circle(name='circle_cnt', group=False, size=1.0): ''' Creates a circle shape. If group is True, will group control and return a list [group,control]. ''' #creating the curve curve = cmds.circle(radius=1, constructionHistory=False) #transform to standard cmds.rotate(0, 90, 0, curve) cmds.makeIdentity(curve, apply=True, t=1, r=1, s=1, n=0) #naming control node = cmds.rename(curve, name) #sizing cmds.scale(size, size, size, node) cmds.FreezeTransformations(node) #grouping control if group == True: grp = cmds.group(node, n=name + '_grp') return [grp, node] #return return node
def CntlCreate(): sels = cm.ls(sl=True) for i in sels: cntl = cm.circle(nr=(0, 0, 1), c=(0, 0, 0)) cm.matchTransform(cntl, i)
def sample(self, *args): # Build joint chain cmds.select(cl=True) chain1_jnt = cmds.joint(n='chain1_jnt', p=[0, 6, 0]) cmds.joint(n='chain2_jnt', p=[0, 3, 1]) chain3_jnt = cmds.joint(n='chain3_jnt', p=[0, 0, 0]) # Build ikHandle chain_ikHandle = cmds.ikHandle(n='chain_ikHandle', startJoint=chain1_jnt, endEffector=chain3_jnt, sol='ikRPsolver')[0] # Build pole vector pole_vector_loc = cmds.spaceLocator(n='pole_vector_loc')[0] cmds.setAttr('{0}.translateY'.format(pole_vector_loc), 3) cmds.setAttr('{0}.translateZ'.format(pole_vector_loc), 2) cmds.poleVectorConstraint(pole_vector_loc, chain_ikHandle) # Build controller controller = cmds.circle(nr=[0, 1, 0], r=1)[0] cmds.pointConstraint(controller, chain_ikHandle) # Run Standalone code No_Flip_Pole_Vector().build(root_joint=chain1_jnt, controller=controller, pole_vector=pole_vector_loc, name='example')
def creatSphere(*args): circleSel = mc.ls(sl=1)[0] radiusCircle = mc.circle(circleSel, q=1, r=1) radiusSpere = radiusCircle*.75 particleSphere = mc.polySphere(n='%s_Sphere'%circleSel, r=radiusSpere, sx=float(radiusSpere), sy=float(radiusSpere), ax=[0, 1, 0])[0] mc.parentConstraint(circleSel, particleSphere, mo=0, w=1) #mc.parent(particleSphere, circleSel) mc.setAttr('%s.tx'%particleSphere, 0) mc.setAttr('%s.ty'%particleSphere, 0) mc.setAttr('%s.tz'%particleSphere, 0) mc.setAttr('%s.rx'%particleSphere, 0) mc.setAttr('%s.ry'%particleSphere, 0) mc.setAttr('%s.rz'%particleSphere, 0) mc.setAttr('%s.v'%particleSphere, 0) mc.select(particleSphere, r=1) mc.emitter(type='surface', r=4, dx=1, dy=0, dz=0, n='%s_emitter'%circleSel ) mc.particle( n='%s_Particles'%circleSel ) mc.connectDynamic( '%s_Particles'%circleSel, em='%s_emitter'%circleSel ) particlesShape = mc.listRelatives('%s_Particles'%circleSel, s=1)[0] mc.setAttr('%s.lifespanMode'%particlesShape, 1) mc.setAttr('%s.lifespan'%particlesShape, 0.4) mc.setAttr('%s.startFrame'%particlesShape, 1001) mc.connectControl( 'numText', '%s.rate'%('%s_emitter'%circleSel) ) mc.shadingNode('blinn', n='%s_blinn'%circleSel, asShader=1) mc.sets( n='%s_blinnSG'%circleSel, renderable=True, noSurfaceShader=True, empty=1) mc.connectAttr('%s.outColor'%('%s_blinn'%circleSel), '%s.surfaceShader'%('%s_blinnSG'%circleSel)) mc.connectControl( 'myColorIndex', '%s.color'%('%s_blinn'%circleSel) ) mc.connectControl( 'lifeText', '%s.lifespan'%particlesShape ) mc.sets('%s_Particles'%circleSel, e=1, forceElement='%s'%('%s_blinnSG'%circleSel))
def setSpring(self,*args): self.springName="spring" #create a set to put all of the spring elements inside self.springSetName="spring_SET" if mc.objExists(self.springSetName): print (self.springSetName + " exists.") else: mc.sets(name=self.springSetName) #create guides self.set_connector(self.springName) #create radius circle self.radCntrl=mc.circle(name="radius_CTRL",c=(0,0,0), nr=(0,1,0), sw=360, r=3, d=3, ut=0, tol=0.01, s=8, ch=1) #create springRadius attribute mc.addAttr(self.radCntrl, sn="sr", ln="springRadius", k=1, defaultValue=3.0, min=0.1, max=15) #connect the springRadius attribute to the circle mc.connectAttr("radius_CTRL.springRadius", "{0}.radius".format(self.radCntrl[1])) #position radCntrl between locators and aim mc.pointConstraint(self.baseLoc, self.topLoc,self.radCntrl[0]) mc.aimConstraint(self.topLoc,self.radCntrl[0],aimVector=(0,1,0)) self.lockHide(self.radCntrl[0]) #create tmp group for easy deletion mc.select(self.baseLoc,self.topLoc,self.conCurve,self.radCntrl) self.selSpringObjs=mc.ls(sl=True,type="transform") self.createTmp(self.selSpringObjs)
def genCall(pCamNameExists, *args): """Generate a camera stack based on one or more selected cameras, using original properties for the rest of the stack.""" selectedCam = cmds.ls(selection=True) if selectedCam is not None: camList = [] for cams in selectedCam: if cmds.listRelatives( cams, shapes=True, type='camera' ) is not None: camList.append(cams) else: continue if camList != []: for item in camList: fL = '.focalLength' hFA = '.horizontalFilmAperture' vFA = '.verticalFilmAperture' camFocLen = cmds.getAttr(item + fL) camHoFiAp = cmds.getAttr(item + hFA) camVeFiAp = cmds.getAttr(item + vFA) print( 'Focal length: %s\n' 'Horizontal Film Aperture: %s\n' 'Vertical Film Aperture: %s' ) % (camFocLen, camHoFiAp,camVeFiAp) # Main mover camMover = cmds.circle( name=item + '_cam_move_all', normal=[0, 1, 0], center=[0, 0, 0], radius=1.5, sweep=360, sections=8 ) # Beauty cam - basic camera moves mainCam = item cmds.select(mainCam) mainCam = cmds.rename(item + '_main') cmds.parent(mainCam, camMover) # Generate child cameras and connections subCam(mainCam, item) cmds.select(mainCam, replace=True) destroyWindow() else: cmds.warning("Please select your camera(s) and generate again.") else: cmds.warning("Please select your camera(s) and generate again.")
def snapToMeshTest(): inMeshT = cmds.polySphere() inMesh = cmds.listRelatives(inMeshT[0], fullPath = True, shapes = True) print inMesh outObj = cmds.polySphere(radius = 0.1) ctrl = cmds.circle(r=0.5, n="cn_arm_fk_ctrl"); cmds.move(1,0,0,ctrl) snapToMesh(inMesh = inMesh[0], outObj = outObj[0], ctrlObj=ctrl[0])
def bdCreateFingerIKAnim(finger): fingerEnd = cmds.ls(finger + 'jnt_end') animCtrl = cmds.circle(n = finger + 'ik_anim',nr=(0, 1, 0), c=(0, 0, 0) ) cmds.delete(animCtrl[0], constructionHistory=True) animGroup = cmds.group(n = finger + 'ik_anim_grp') cmds.select(clear=True) pc = cmds.parentConstraint(fingerEnd,animGroup) cmds.delete(pc)