def createControl( si, shape = 'circleX', childsAlso = True, par = None, lastAlso = False, constraint = True, connect = False, offsetGroup = True ): if not lastAlso and not si.children: return if shape == 'joint': mc.select( cl = True ) curv = mn.Node( mc.joint( n = si.name + "_jnt" ) ) elif shape == 'locator': curv = mn.Node( mc.spaceLocator( n = si.name + '_loc' )[0] ) else: curv = crv.Curve( si.name + "_ctl" ) curv = curv.create( shape ) if offsetGroup: grp = mn.createNode( "transform", ss = True ) grp.name = si.name + "_grp" trf.snap( si, grp ) curv.parent = grp curv.a.t.v = [0]*3 curv.a.r.v = [0]*3 if par: grp.parent = par else: trf.snap( si, curv ) curv.freeze() if constraint: mc.parentConstraint( curv, si, mo = True ) mc.scaleConstraint( curv, si, mo = True ) if connect: curv.a.t >> si.a.t curv.a.r >> si.a.r curv.a.s >> si.a.s if childsAlso and si.children: for c in si.children: c = mn.Node( c.name.split( '|' )[-1] ) createControl( c, shape, True, curv, lastAlso, constraint, connect, offsetGroup )
def create(self): """create Control system 1- Create Joint on position 2- Create Muscle Constraint 3- Create Curve Control 4- Make Connections """ self.rivet = self._createConstraint() self._createJoint() control = self._createControl() trf.snap( self.rivet.name , control.name ) nullTrf = mn.createNode( 'transform' ) nullTrf.name = self.name + '_baseControl' trf.snap( self.rivet.name , nullTrf.name ) nullTrf.parent = self.rivet control.parent = nullTrf #make connections multi = mn.createNode( 'multiplyDivide' ) multi.name = self.name + '_multi' multi.a.input2.v = [-1,-1,-1] multi.a.output >> nullTrf.a.translate control.a.t >> multi.a.input1 control.a.t >> self.skinJoint.a.t control.a.r >> self.skinJoint.a.r control.a.s >> self.skinJoint.a.s