def circle(self, joint):
		a = 0.25
		b = 0.3432
		
		p0 = Point(a + 0.005,0 , -a - 0.005)
		p1 = Point(b + 0.05, 0, 0)
		p2 = Point(a + 0.005, 0, a + 0.005)
		p3 = Point(0, 0, b)
		p4 = Point(-a - 0.005, 0, a + 0.005)
		p5 = Point(-b - 0.05, 0, 0)
		p6 = Point(-a - 0.005, 0, -a - 0.005)
		p7 = Point(0, 0, - b)
		
		points = [p0, p1, p2, p3, p4, p5, p6, p7, p0, p1, p2]
		pts = []
		
		for point in points:
			pts.append(point.getPoint())
		
		pm.curve(per = True, d = 3, p = pts, k = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

		pm.parent("%s" % str(pm.ls(sl = True)[0]), "%s" % str(joint), relative = True)
		pm.parent("%s" % str(pm.ls(sl = True)[0]), world = True)
		pm.makeIdentity(r = True)
		curve = "%s" % str(pm.ls(sl = True)[0])
		g = 0
		while g < 8:
			pm.moveVertexAlongDirection(curve + ".cv[" + str(g) + "]", d = [0,1,0], m = -0.08)
			g += 1
			
		group = pm.group(curve)
		
		pm.orientConstraint(curve, joint, mo = True)
		handle = joint + "IK"
		pm.pointConstraint(curve, handle, mo = True)
Example #2
0
def make_stabilized_node(nodeName=None, centered=True):
    '''
    Very simple proc to generate a Stabilized node for
    raw MoCap tracking purposes... First selected node
    is used as the Aim axis, second selected is used as this
    aim's worldUp
    '''
    RequiredMarkers = pm.ls(sl=True, l=True)
    #pos = pm.xform(WorldUpObj, q=True, ws=True, t=True)
    curve = pm.curve(ws=True, d=1, p=(0, 0, 0), k=0)
    
    if centered:
        AimAt = RequiredMarkers[0]
        WorldUpObj = RequiredMarkers[1]
        pm.pointConstraint(RequiredMarkers, curve)
    else:
        AimAt = RequiredMarkers[1]
        WorldUpObj = RequiredMarkers[2]
        pm.pointConstraint(RequiredMarkers[0], curve)

    pm.aimConstraint((AimAt, curve),
                     weight=1,
                     aimVector=(0, 0, 1),
                     upVector=(0, 1, 0),
                     worldUpType="object",
                     worldUpObject=WorldUpObj)
        
    #Snap a curveKnot to the pivot of all referenceMarkers
    for node in RequiredMarkers:
        pm.curve(curve, a=True, ws=True, p=(pm.xform(node, q=True, ws=True, t=True)))
    pm.curve(curve, a=True, ws=True, p=(pm.xform(AimAt, q=True, ws=True, t=True)))
    
    return curve
Example #3
0
 def createSrf(self):
     #calculate the witdth of the surface as a fraction of the total joint chain length
     jntChainLength = 0
     crvPoints = []
     for i in range(1,self.numJnt):
         pos1 = self.ikJntList[i-1].getTranslation(space='world')
         crvPoints.append(pos1)
         pos2 = self.ikJntList[i].getTranslation(space='world')
 
         jntChainLength += (pos2 - pos1).length()
         if i == self.numJnt - 1:
             crvPoints.append(pos2)
     
     jntChainLength = math.ceil(jntChainLength )
     self.width = jntChainLength * self.widthMult
     
     crv1 = pm.curve(n=self.name + '_crv1',d=1,p=crvPoints)
     pm.move(crv1,self.width / 2.0,0,0,r=1)
     pm.parent(crv1,self.mainGrp)
     crv2 = pm.curve(n=self.name + '_crv2',d=1,p=crvPoints)
     pm.move(crv2,self.width / -2.0,0,0,r=1)
     pm.parent(crv2,self.mainGrp)
     
     pm.select(cl=1)
     loftSrf = pm.loft(crv2,crv1,ch=1,u=1,c= 0,ar= 1,d=3,ss= 1,rn=0,po=0,rsn=1,n=self.name + "_srf")[0]
     rebuiltLoftSrf = pm.rebuildSurface(loftSrf,ch=1, rpo=1, rt=0, end=1, kr=0, kcp=0, kc=0, su=self.numCtrl-1, du=3, sv=0, dv=3, tol=0, fr=0, dir=2 )[0]
     
     
     self.srf = loftSrf 
     pm.parent(self.srf,self.mainGrp)
    def _createCurves(self, objs=None, axis=None, num=None):
        '''
        Create two curves using .getTranslation() of passed in objects
        '''
        _name = '_createCurves'
        pymelLogger.info('Started: %s' % _name)
        
        positions = []
        for obj in objs:
            loc = pm.spaceLocator()
            pm.parentConstraint(obj, loc, mo=0)
            positions.append(pm.PyNode(loc).getTranslation())
            pm.delete(loc)
        crv1 = pm.PyNode(pm.curve(p=positions, d=1))
        crv2 = pm.PyNode(pm.curve(p=positions, d=1))
        
        move = 0.05
        if axis == 1:
            pm.move(crv1, move, r=1, moveX=1)
            pm.move(crv2, -move, r=1, moveX=1)
        elif axis == 2:
            pm.move(crv1, move, r=1, moveY=1)
            pm.move(crv2, -move, r=1, moveY=1)
        elif axis == 3:
            pm.move(crv1, move, r=1, moveZ=1)
            pm.move(crv2, -move, r=1, moveZ=1)

        pm.rebuildCurve( crv1, rt=0, s=num )
        pm.rebuildCurve( crv2, rt=0, s=num )
    
        pymelLogger.info('Ended: %s' % _name)       
        return crv1, crv2
Example #5
0
    def setStyle(self, style):

        self._deleteShape()
        #Circle
        if style == Control.Circle:
            tempA = pm.circle(nr=[1, 0, 0], sw=360, r=5, d=3, ch=False)[0]
            pm.parent([tempA.getShape()], self.node, r=True, s=True)
            pm.delete([tempA])

        #Sphere
        if style == Control.Sphere:
            tempA = pm.mel.eval("curve -d 1 -p 0 5 0 -p 1.545085 4.755283 0 -p 2.938926 4.045085 0 -p 4.045085 2.938926 0 -p 4.755283 1.545085 0 -p 5 0 0 -p 4.755283 -1.545085 0 -p 4.045085 -2.938926 0 -p 2.938926 -4.045085 0 -p 1.545085 -4.755283 0 -p 0 -5 0 -p -1.545085 -4.755283 0 -p -2.938927 -4.045085 0 -p -4.045086 -2.938926 0 -p -4.755284 -1.545085 0 -p -5.000001 0 0 -p -4.755284 1.545085 0 -p -4.045086 2.938926 0 -p -2.938927 4.045085 0 -p -1.545085 4.755283 0 -p 0 5 0 -p -4.60471e-08 4.755283 1.545085 -p -8.75868e-08 4.045085 2.938926 -p -1.20553e-07 2.938926 4.045085 -p -1.41718e-07 1.545085 4.755283 -p -1.49012e-07 0 5 -p -1.545085 0 4.755283 -p -2.938927 0 4.045085 -p -4.045086 0 2.938927 -p -4.755284 0 1.545085 -p -5.000001 0 0 -p -4.755284 0 -1.545085 -p -4.045086 0 -2.938927 -p -2.938927 0 -4.045086 -p -1.545086 0 -4.755285 -p 0 0 -5.000002 -p 1.545086 0 -4.755285 -p 2.938928 0 -4.045087 -p 4.045088 0 -2.938928 -p 4.755286 0 -1.545086 -p 5 0 0 -p 4.755283 0 1.545085 -p 4.045085 0 2.938926 -p 2.938926 0 4.045085 -p 1.545085 0 4.755283 -p -1.49012e-07 0 5 -p -1.41718e-07 -1.545085 4.755283 -p -1.20553e-07 -2.938926 4.045085 -p -8.75868e-08 -4.045085 2.938926 -p -4.60471e-08 -4.755283 1.545085 -p 0 -5 0 -p 0 -4.755283 -1.545086 -p 0 -4.045085 -2.938928 -p 0 -2.938926 -4.045087 -p 0 -1.545085 -4.755285 -p 0 0 -5.000002 -p 0 1.545085 -4.755285 -p 0 2.938926 -4.045087 -p 0 4.045085 -2.938928 -p 0 4.755283 -1.545086 -p 0 5 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -k 33 -k 34 -k 35 -k 36 -k 37 -k 38 -k 39 -k 40 -k 41 -k 42 -k 43 -k 44 -k 45 -k 46 -k 47 -k 48 -k 49 -k 50 -k 51 -k 52 -k 53 -k 54 -k 55 -k 56 -k 57 -k 58 -k 59 -k 60 ;")
            pm.parent([pm.nt.Transform(tempA).getShape()], self.node, r=True, s=True)
            pm.delete(tempA)

        #Cube
        if style == Control.Cube:
            tempA = pm.mel.eval("curve -d 1 -p -5 5 5 -p 5 5 5 -p 5 -5 5 -p -5 -5 5 -p -5 5 5 -p -5 5 -5 -p 5 5 -5 -p 5 -5 -5 -p -5 -5 -5 -p -5 5 -5 -p -5 5 5 -p -5 -5 5 -p -5 -5 -5 -p 5 -5 -5 -p 5 -5 5 -p 5 5 5 -p 5 5 -5 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 ;")
            pm.parent([pm.nt.Transform(tempA).getShape()], self.node, r=True, s=True)
            pm.delete(tempA)

        #Square
        if style == Control.Square:
            tempA = pm.mel.eval("curve -d 1 -ch 0 -p 0 0 0 -p 0 15 0 -k 0 -k 1 ;")
            pm.parent([pm.nt.Transform(tempA).getShape()], self.node, r=True, s=True)
            pm.delete([tempA])

        #Handle
        if style == Control.Handle:
            tempA = pm.mel.eval("curve -d 1 -p 0 15 0 -p 1.545085 15.244717 0 -p 2.938926 15.954915 0 -p 4.045085 17.061074 0 -p 4.755283 18.454915 0 -p 5 20 0 -p 4.755283 21.545085 0 -p 4.045085 22.938926 0 -p 2.938926 24.045085 0 -p 1.545085 24.755283 0 -p 0 25 0 -p -1.545085 24.755283 0 -p -2.938927 24.045085 0 -p -4.045086 22.938926 0 -p -4.755284 21.545085 0 -p -5.000001 20 0 -p -4.755284 18.454915 0 -p -4.045086 17.061074 0 -p -2.938927 15.954915 0 -p -1.545085 15.244717 0 -p 0 15 0 -p -4.60471e-08 15.244717 1.545085 -p -8.75868e-08 15.954915 2.938926 -p -1.20553e-07 17.061074 4.045085 -p -1.41718e-07 18.454915 4.755283 -p -1.49012e-07 20 5 -p 1.545085 20 4.755283 -p 2.938926 20 4.045085 -p 4.045085 20 2.938926 -p 4.755283 20 1.545085 -p 5 20 0 -p 4.755286 20 -1.545086 -p 4.045088 20 -2.938928 -p 2.938928 20 -4.045087 -p 1.545086 20 -4.755285 -p 0 20 -5.000002 -p -1.545086 20 -4.755285 -p -2.938927 20 -4.045086 -p -4.045086 20 -2.938927 -p -4.755284 20 -1.545085 -p -5.000001 20 0 -p -4.755284 20 1.545085 -p -4.045086 20 2.938927 -p -2.938927 20 4.045085 -p -1.545085 20 4.755283 -p -1.49012e-07 20 5 -p -1.41718e-07 21.545085 4.755283 -p -1.20553e-07 22.938926 4.045085 -p -8.75868e-08 24.045085 2.938926 -p -4.60471e-08 24.755283 1.545085 -p 0 25 0 -p 0 24.755283 -1.545086 -p 0 24.045085 -2.938928 -p 0 22.938926 -4.045087 -p 0 21.545085 -4.755285 -p 0 20 -5.000002 -p 0 18.454915 -4.755285 -p 0 17.061074 -4.045087 -p 0 15.954915 -2.938928 -p 0 15.244717 -1.545086 -p 0 15 0 -p 0 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -k 33 -k 34 -k 35 -k 36 -k 37 -k 38 -k 39 -k 40 -k 41 -k 42 -k 43 -k 44 -k 45 -k 46 -k 47 -k 48 -k 49 -k 50 -k 51 -k 52 -k 53 -k 54 -k 55 -k 56 -k 57 -k 58 -k 59 -k 60 -k 61 ;")
            pm.parent(pm.nt.Transform(tempA).getShape(), self.node, r=True, s=True)
            pm.delete(tempA)

        #Arrow
        if style == Control.Arrow:
            tempA = pm.mel.eval("curve -d 1 -p 1 0 -4 -p -1 0 -4 -p -1 0 1 -p -2 0 1 -p 0 0 4 -p 2 0 1 -p 1 0 1 -p 1 0 -4 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 ;")
            pm.parent(pm.nt.Transform(tempA).getShape(), self.node, r=True, s=True)
            pm.delete(tempA)

        #Moveall
        if style == Control.MoveAll:
            tempA = pm.curve(d = 1, p = [(0, 0, -6.314364), (1.952926, 0, -4.7925),(1.05164, 0, -4.792499),
                (1.952926, 0, -1.952926), (4.7925, 0, -1.594463), (4.7925, 0, -1.952926),
                (6.725978, 0, 0), (4.7925, 0, 1.952926), (4.7925, 0, 1.594463), (1.952926, 0, 1.952926),
                (1.261715, 0, 4.699687), (1.952926, 0, 4.7925), (0, 0, 7.08783), (-1.952926, 0, 4.7925),
                (-1.261715, 0, 4.699687), (-1.952926, 0, 1.952926), (-4.7925, 0, 1.594463), (-4.7925, 0, 1.952926),
                (-6.725978, 0, 0), (-4.7925, 0, -1.952926), (-4.7925, 0, -1.594463), (-1.952926, 0, -1.952926),
                (-1.05164, 0, -4.792499), (-1.952926, 0, -4.7925), (0, 0, -6.314364)],
                k = [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],
                n = newName, ch=0)[0]
            pm.parent(tempA.getShape(), self.node, r=True, s=True)
            pm.delete(tempA)

        #Pyramid
        if style == Control.Arrow:
            tempA = pm.curve(n = name, d = 1,p = [(0,0,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,0,0.5), (0.5,0.5,-0.5), (0.5,-0.5,-0.5), (0,0,0.5), (-0.5,-0.5,-0.5)], k = [0,1,2,3,4,5,6,7,8,9,10])
            pm.parent(pm.nt.Transform(tempA).getShape(), self.node, r=True, s=True)
            pm.delete(tempA)
Example #6
0
    def bdBuildSrf(self,name):
        selected = pm.ls(sl=1)
        if selected:
            if len(selected) == 1:
                if selected[0].type() == 'joint':
                    print 'start srf'
                    self.startJnt = selected[0]
                    children = self.startJnt.getChildren(type='joint')
                    print children 
                    #need to implement a case with more joint chidren
                    #build the one degree curves for lofting
                    self.endJnt = children[0]
                    startPos1,endPos1 = self.bdGetPos(-0.05)
                    startPos2,endPos2 = self.bdGetPos( 0.05)
                    pm.spaceLocator(p=startPos1)
                    pm.spaceLocator(p=startPos2)
                    pm.spaceLocator(p=endPos1)
                    pm.spaceLocator(p=endPos2)
                    
                    dif1 = (endPos1 - startPos1) 
                    dif2 = (endPos2 - startPos2) 
                    crv1Points = []
                    crv2Points = []
                    for i in range(self.segmentsRbn):
                        pos = dif1 * (i/(self.segmentsRbn*1.0)) + startPos1
                        crv1Points.append(pos )
                        pos = dif2 * (i/(self.segmentsRbn*1.0)) + startPos2
                        crv2Points.append(pos)

                    crv1Points.append(endPos1)
                    crv2Points.append(endPos2)
                    print 'building curve'
                    tmp = pm.curve(n=name + '_crv1',d=1,p=crv1Points)
                    crv1 = pm.ls(tmp)[0]
                    print crv1
                    #crv1.setScalePivot(startPos1)
                    #crv1.setRotatePivot(startPos1)
                    crv2 = pm.curve(n=name + '_crv2',d=1,p=crv2Points)
                    #crv2.setScalePivot(startPos2)
                    #crv2.setRotatePivot(startPos2)
                    drvGrp = self.bdCreateDrvJnt(crv1,crv2)
                    
                    #loft the curves
                    loftSrf = pm.loft(crv1,crv2,ch=1,u=1,c= 0,ar= 1,d=1,ss= 1,rn=0,po=0,rsn=1,n=name + "_lft_srf")[0]
                    #loftSrf.setScalePivot(startPos2)
                    #loftSrf.setRotatePivot(startPos2)
                    rebuiltLoftSrf = pm.rebuildSurface(ch=1, rpo = 0, rt = 0, end = 1, kr=1, kcp=0,kc=0, su=0, du=3, sv=0, dv=1, fr=0, dir=2 , n=name + "_srf")[0]
                    self.rbnSrf = rebuiltLoftSrf
                    crvGrp = pm.group([crv1,crv2],name=name+'_crv_grp')
                    crvGrp.centerPivots()
                    srfGrp = pm.group([loftSrf,rebuiltLoftSrf],name=name+'_srf_grp')
                    srfGrp.centerPivots()
                    self.rbnGrp = pm.group([crvGrp,srfGrp],n=name+"_grp")
                    pm.parent(drvGrp,self.rbnGrp)
Example #7
0
def create_radian_trigger(prefix):
    prefix = ("%s_radianTrigger") %prefix

    display = pm.group(empty=True, name="%s_display" %prefix)
    display.overrideEnabled.set(1)
    display.overrideDisplayType.set(2)
        
    grp = pm.group(empty=True, name="%s_grp" %prefix)
    loc = pm.spaceLocator(name = "%s_target" %prefix)
    pm.addAttr(loc, at='double', ln="radical", k=True)
    pm.addAttr(loc, at='double', ln="angle", k=True)
    
    pos = pm.spaceLocator(name = "%s_pos" %prefix)
    
    loc.ty.set(1)
    loc.tz.set(1)
    pos.tz.set(1)    

    radical_exp = '%s.radical = rad_to_deg( atan2(  %s.translateY , %s.translateX ) )' %(loc.name(), loc.name(), loc.name())
    angle_exp = "%s.angle = rad_to_deg( acos( %s.translateZ / (sqrt( pow(%s.translateX, 2) + pow(%s.translateY, 2) + pow(%s.translateZ, 2) ) ) ) )" %(loc.name(), loc.name(), loc.name(), loc.name(), loc.name())
    pm.expression( o=loc, s= radical_exp, name="%s_radical_exp" %prefix)
    pm.expression( o=loc, s= angle_exp, name="%s_angle_exp" %prefix)
    
    planer_curve = "curve -d 1 -p 0 0 0 -p -1 0 0 -p -0.965926 0.258819 0 -p -0.765926 0.258819 0 -p -0.865926 0.258819 0 -p -0.865926 0.358819 0 -p -0.865926 0.158819 0 -p -0.865926 0.258819 0 -p -0.965926 0.258819 0 -p -0.866025 0.5 0 -p -0.707107 0.707107 0 -p -0.353553 0.353553 0 -p -0.707107 0.707107 0 -p -0.5 0.866025 0 -p -0.258819 0.965926 0 -p 0 1 0 -p 0 0.5 0 -p 0 1 0 -p 0.258819 0.965926 0 -p 0.5 0.866025 0 -p 0.707107 0.707107 0 -p 0.353553 0.353553 0 -p 0.707107 0.707107 0 -p 0.866025 0.5 0 -p 0.965926 0.258819 0 -p 1 0 0 -p 0.5 0 0 -p 1 0 0 -p 0.965926 -0.258819 0 -p 0.866025 -0.5 0 -p 0.707107 -0.707107 0 -p 0.353553 -0.353553 0 -p 0.707107 -0.707107 0 -p 0.5 -0.866025 0 -p 0.258819 -0.965926 0 -p 0 -1 0 -p 0 -0.5 0 -p 0 -1 0 -p -0.258819 -0.965926 0 -p -0.5 -0.866025 0 -p -0.707107 -0.707107 0 -p -0.353553 -0.353553 0 -p -0.707107 -0.707107 0 -p -0.866025 -0.5 0 -p -0.965926 -0.258819 0 -p -0.765926 -0.258819 0 -p -0.965926 -0.258819 0 -p -1 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -k 33 -k 34 -k 35 -k 36 -k 37 -k 38 -k 39 -k 40 -k 41 -k 42 -k 43 -k 44 -k 45 -k 46 -k 47"
    planer = pm.PyNode(pm.mel.eval(planer_curve))
    planer.rename("%s_planer" %prefix)

    arrow_curve = 'curve -d 1 -p 0 0 0 -p 0 0.377909 0 -p -0.0449662 0.378085 0 -p 0 0.460303 0 -p 0.0449662 0.378085 0 -p 0 0.377909 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 ;'
    arrow = pm.PyNode(pm.mel.eval(arrow_curve))
    pm.makeIdentity(arrow, apply=True, t=True, r=True, s=True)    
    arrow.rename("%s_arrow" %prefix)

    angle_curves = pm.circle(name="%s_angleCurve" %prefix, r=0.5)
    pm.aimConstraint(pos, angle_curves[0], mo=False, aimVector=[0,1,0], upVector=[-1,0,0], worldUpType='object', worldUpObject=loc)
    pm.parent(arrow, angle_curves)
    
    loc.angle >> angle_curves[-1].sweep

    posPointer = pm.curve(name='%s_posPointer'%prefix, d = 1, p = [(0,0,0), (0,0,1)])

    pointer = pm.curve(name='%s_targetPointer'%prefix, d = 1, p = [(0,0,0), (0,0,0)])
    pointer.inheritsTransform.set(0)
    
    cls1 = pm.cluster(pointer.cv[0], name='%s_pointerClusterStart' %prefix)
    cls2 = pm.cluster(pointer.cv[1], name='%s_pointerClusterEnd' %prefix)
    
    pm.parent(pos, planer, angle_curves[0], cls1, pointer, posPointer, display)
    pm.parent(display, loc, grp)
    pm.parent(cls2, loc, r=True)
    
    cls1[1].v.set(0)
    cls2[1].v.set(0)
    pos.v.set(0)
Example #8
0
 def _create_ribbon(self):
     """Create the ribbon spine based on the guides."""
     ribboncrv = pm.curve(p=[ctl.position() for ctl in self.guides.spine],
                          n='%s_%sRibbon_CRV' % (self.side, self.name), d=3)
     ribboncrv.listRelatives(ad=True)[0].rename('%sShape' % ribboncrv)
     crva = pm.curve(d=1, p=[ctl.position() for ctl in self.guides.spine])
     crvb = crva.duplicate()[0]
     crva.tx.set(-1)
     crvb.tx.set(1)
     nrbname = '%s_%sRibbon_NRB' % (self.side, self.name)
     loft = pm.loft(crva, crvb, n=nrbname, ch=False)[0]
     self.ribbon = pm.rebuildSurface(loft, su=0, sv=0, ch=False)
     pm.delete(crva, crvb)
Example #9
0
def createCurve(positions=[], degree=2):
    """
    @param positions: Point positions
    @param degree: The degree of the curve that should be
    @return: The curve pynode
    """
    if len(positions) < degree:
        # Force the degree to least number of points required
        degree = min(degree - 1, len(positions) - 1)
    curve = pm.curve(d=degree, p=positions[0])
    for i in range(1, len(positions)):
        pm.curve(curve, a=1, p=positions[i])
    return curve
Example #10
0
    def _setCtrlerShape(self, transformNode, shape='helper', scale=[1,1,1] ):
        curveShape = None
        if   shape=='helper': # hexagon2D    
            curveShape = pm.curve( d=1, p=[ (4.063704928114475e-17, 0.433013, 0.25), (-1.1102230246251565e-16, 0.0, 0.5), (-1.516593517436604e-16, -0.433013, 0.25), (-4.063704928114475e-17, -0.433013, -0.25), (1.1102230246251565e-16, 0.0, -0.5), (1.516593517436604e-16, 0.433013, -0.25), (4.063704928114475e-17, 0.433013, 0.25) ], k=[ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] )

        elif shape =='up': # diamond
            curveShape = pm.curve( d=1, p=[ (0.0, 0.0, 0.5), (0.5, 0.0, 0.0), (0.0, 0.0, -0.5), (-0.5, 0.0, 0.0), (0.0, 0.0, 0.5), (0.0, 0.5, 0.0), (0.0, 0.0, -0.5), (0.0, -0.5, 0.0), (0.0, 0.0, 0.5), (0.0, 0.5, 0.0), (0.5, 0.0, 0.0), (0.0, -0.5, 0.0), (-0.5, 0.0, 0.0), (0.0, 0.5, 0.0) ], k=[ 0.0, 0.707106781187, 1.41421356237, 2.12132034356, 2.82842712475, 3.53553390593, 4.24264068712, 4.94974746831, 5.65685424949, 6.36396103068, 7.07106781187, 7.77817459305, 8.48528137424, 9.19238815543 ] )

        curveShape.s.set(scale)
        pm.makeIdentity( curveShape, apply=True, t=True, r=True, s=True )

        pm.parent( curveShape.getShape(), transformNode, s=True, r=True)
        pm.delete( curveShape )
	def triangle(self, joint):
		p0 = Point(-1, 0, -0.5)
		p1 = Point(0, 0, 1)
		p2 = Point(1, 0, -0.5)
		
		points = [p0, p1, p2, p0]
		pts = []
		for point in points:
			pts.append(point.getPoint())
			
		pm.curve(per = True, d = 1, p = pts, k = [0, 1, 2, 3])
		pos = pm.PyNode("%s" % joint).getTranslation()
		pm.move(pos)
		pm.pointConstraint(pm.ls(sl = True)[0], joint)
		pm.orientConstraint("%s" % str(pm.ls(sl = True)[0]), joint)
Example #12
0
    def create(self):
        pointA = self.startObj
        pointB = self.endObj
        position = (0,0,0)

        # 커브 생성
        crv = pm.curve( d=1, p=[ position, position ], k=[0,1] )
        self.curve = crv.getShape()

        # obj에 커브 쉐입을 종속 시킴 : 커브를 선택해도 오브젝트를 선택한 효과를 줌.
        pm.parent( self.curve, pointA, r=True, s=True)
        pm.delete( crv )

        # target에 locator를 종속 시킴
        self.locator = pm.pointCurveConstraint( self.curve+'.ep[1]', ch=True)[0]
        self.locator = pm.PyNode(self.locator)
        pm.pointConstraint( pointB, self.locator )

        # 로케이서 속성 조정
        self.locator.getShape().localPosition.set(0,0,0) #이 로케이터는 보이지 않음
        self.locator.getShape().v.set(False)             #이 로케이터는 보이지 않음
        self.locator.v.set(False)                        #이 로케이터는 보이지 않음
        self.locator.setParent(pointA)
        self.locator.rename( pointB+'_CONNLOC' )

        # 커브쉐입에 어트리뷰트 추가
        self.curve.addAttr( 'curveConnectedTo',  at='message' )
        self.curve.addAttr( 'curveConnectedLOC', at='message' )

        # 어트리뷰트 연결
        pointB.message >> self.curve.curveConnectedTo
        self.locator.message >> self.curve.curveConnectedLOC
Example #13
0
def HandCrv( size=1, name='handCrv') :
	
	ctrlName =  pm.curve (d = 1 , p =   ( (-0.100562     , 1.31677  , 0 ),
											( 0.122399     , 1.31664  , 0 ),
											( 0.299532     , 1.446367 , 0 ),
											( 0.319319     , 1.568869 , 0 ),
											( 0.417828     , 1.688667 , 0 ),
											( 0.594046     , 1.669517 , 0 ),
											( 0.550214     , 1.893314 , 0 ),
											( 0.383986     , 1.878861 , 0 ),
											( 0.246061     , 1.70714  , 0 ),
											( 0.207006     , 1.724846 , 0 ),
											( 0.215157     , 1.842864 , 0 ),
											( 0.380575     , 2.182962 , 0 ),
											( 0.191945     , 2.281101 , 0 ),
											( 0.0856495    , 1.873534 , 0 ),
											( 0.00886914   , 1.874275 , 0 ),
											( 0.030434     , 2.364695 , 0 ),
											( -0.209958    , 2.343528 , 0 ),
											( -0.0939414   , 1.867589 , 0 ),
											( -0.170241    , 1.819424 , 0 ),
											( -0.349394    , 2.178222 , 0 ),
											( -0.525161    , 2.058232 , 0 ),
											( -0.293742    , 1.758312 , 0 ),
											( -0.22419     , 1.425819 , 0 ),
											( -0.100562    , 1.31677  , 0 ) ),
											k = (0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ,13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23),
											name  = name )
	ctrlName.scale.set(size,size,size)
	pm.makeIdentity (ctrlName , apply=True , s=True)
	return ctrlName
Example #14
0
def wiggleJointChain(strPnt, endPnt, side='FL', chainPos='Upper'):
    '''
    create joint chain between two points (strPnt & endPnt). require name string of strPnt & endPnt
    '''
    strPos = pm.xform( strPnt, q=True, ws=True, translation=True )
    endPos = pm.xform( endPnt, q=True, ws=True, translation=True )
    
    if side.endswith('L'):
        sideLabel = 1
    elif side.endswith('R'):
        sideLabel = 2
        
    ikSpCrv = pm.curve( degree=2, editPoint=( strPos, endPos) )
    ikSpCrv.rename( 'wiggle_%s_%s_CRV'%(side, chainPos) )
    ikSpCrvShp = ikSpCrv.listRelatives(shapes=True)[0]
    pm.select(clear=True)
    
    jnt2pos = pm.pointOnCurve( ikSpCrv, pr=0.3333, turnOnPercentage=True)
    jnt3pos = pm.pointOnCurve( ikSpCrv, pr=0.6667, turnOnPercentage=True )
    
    jntPos = ( strPos, jnt2pos, jnt3pos, endPos )
    jntList = []
    for pnt in jntPos:
        jName = 'Wiggle_%s_%s_%02d'%(side, chainPos, jntPos.index(pnt)+1)
        newJoint = pm.joint(name=jName, p=pnt)
        newJoint.side.set(sideLabel)
        newJoint.__getattr__('type').set(18)
        newJoint.otherType.set(jName)
        jntList.append(newJoint)
        
    pm.joint( jntList[0], edit=True, orientJoint='xyz', secondaryAxisOrient='xup', children=True, zeroScaleOrient=True )
    
    ikHandle = pm.ikHandle( name='Wiggle_%s_%s_ikHandle'%(side, chainPos),
                            solver='ikSplineSolver', 
                            createCurve=False, 
                            curve=ikSpCrvShp, 
                            startJoint=jntList[0].name(), 
                            endEffector=jntList[-1].name(), 
                            rootOnCurve=False, 
                            createRootAxis=True, 
                            parentCurve=False )
    
    jntGrp = jntList[0].listRelatives(parent=True)[0]
    jntGrp.rename('Wiggle_%s_%s'%(side, chainPos))
    crvInfo = pm.createNode('curveInfo', name='crvInf_wiggle_%s_%s'%(side, chainPos))
    multDiv1 = pm.createNode('multiplyDivide', name='md_wiggle_%s_%s_01'%(side, chainPos))
    multDiv2 = pm.createNode('multiplyDivide', name='md_wiggle_%s_%s_02'%(side, chainPos))
    ikSpCrvShp.worldSpace >> crvInfo.inputCurve
    arcLgt = crvInfo.arcLength.get()
    multDiv1.input2X.set(arcLgt)
    multDiv1.operation.set(2)
    spacing = jntList[1].tx.get()
    multDiv2.input2X.set(spacing)
    multDiv1.outputX >> multDiv2.input1X
    crvInfo.arcLength >> multDiv1.input1X
    
    for jnt in jntList[1:]:
        multDiv2.outputX >> jnt.tx
    
    return ikSpCrvShp, ikSpCrv, ikHandle[0], jntGrp
Example #15
0
    def drawCurve( self ):

        verticies = [ ]

        for edge in self.edges:
            
            verticies += [ edge.v1, edge.v2 ]

        curve = pm.curve( degree = 1, p = [ verticies[ 0 ], verticies[ 1 ] ] )

        for i in range( 2, len( verticies ) ):
            
            vertex = verticies[ i ]
            curve  = pm.curve( curve, p=[ vertex ], append = True )

        return curve
Example #16
0
def create_shape_box_arm(refs, geometries, epsilon=0.01, default_size=1.0):
    # TODO: Prevent crashes when there's no geometries
    ref = next(iter(refs))
    ref_tm = ref.getMatrix(worldSpace=True)
    positions = [r.getTranslation(space='world') for r in refs]

    # Resolve raycast directions
    dir_offset_tm = pymel.datatypes.Matrix(  # Remove translation from ref_tm to keep direction normalized.
        ref_tm.a00, ref_tm.a01, ref_tm.a02, ref_tm.a03,
        ref_tm.a10, ref_tm.a11, ref_tm.a12, ref_tm.a13,
        ref_tm.a20, ref_tm.a21, ref_tm.a22, ref_tm.a23,
        0,          0,          0,          1
    )
    x_pos = ref.getTranslation(space='world').x
    dirs = [
        OpenMaya.MPoint(0,-1,0) * dir_offset_tm,
        OpenMaya.MPoint(0,1,0) * dir_offset_tm,
        OpenMaya.MPoint(0,0,-1) * dir_offset_tm,
        OpenMaya.MPoint(0,0,1) * dir_offset_tm
    ]
    # HACK : Check the x_position to know in which direction we need to do the raycast
    if x_pos >= 0.0:
        dirs.append(
            OpenMaya.MPoint(1,0,0) * dir_offset_tm,
        )
    else:
        dirs.append(
            OpenMaya.MPoint(-1,0,0) * dir_offset_tm,
        )

    min_x, max_x, min_y, max_y, min_z, max_z = _get_bounds_using_raycast(positions, dirs, geometries, parent_tm=ref_tm)

    # Ensure a minimum size for the ctrl
    if (max_x - min_x) < epsilon:
        max_x = default_size
    if (max_y - min_y) < epsilon:
        min_y = -default_size * 0.5
        max_y = default_size * 0.5
    if (max_z - min_z) < epsilon:
        min_z = -default_size * 0.5
        max_z = default_size * 0.5

    # Convert our bouding box
    #min_x = 0

    pos1 = pymel.datatypes.Point(min_x, min_y, min_z)
    pos2 = pymel.datatypes.Point(min_x, min_y, max_z)
    pos3 = pymel.datatypes.Point(min_x, max_y, min_z)
    pos4 = pymel.datatypes.Point(min_x, max_y, max_z)
    pos5 = pymel.datatypes.Point(max_x, min_y, min_z)
    pos6 = pymel.datatypes.Point(max_x, min_y, max_z)
    pos7 = pymel.datatypes.Point(max_x, max_y, min_z)
    pos8 = pymel.datatypes.Point(max_x, max_y, max_z)

    node = pymel.curve(d=1, p=[pos2, pos4, pos8, pos6, pos2, pos1, pos3, pos4, pos8, pos7, pos5, pos6, pos5, pos1, pos3, pos7] )

    # Expose the rotateOrder
    node.rotateOrder.setKeyable(True)

    return node
Example #17
0
def getUpperLowerEyeCurves(crv, cornerCvIds):
    '''
    cornerCvIds = ids for in, up, out, low cvs
    '''
    # get a continuous slice of cvs first
    lowCvId = min(cornerCvIds[0], cornerCvIds[2])
    highCvId = max(cornerCvIds[0], cornerCvIds[2])
    
    # is this the upper slice or lower slice?
    if lowCvId < cornerCvIds[1] < highCvId:
        # upCV is inbetween, so must be upper slice
        sliceName = ['upper', 'lower']
    else:
        sliceName = ['lower', 'upper']
        
    # get the first slice
    firstSlice = range(lowCvId, highCvId+1)
    
    # get the second slice
    maxCvId = crv.numCVs()
    secondSlice = range(highCvId, maxCvId) + range(0, lowCvId+1)
    
    crvMap = {}
    for name, sliceCrv in zip(sliceName, [firstSlice, secondSlice]):
        # create the crv
        print sliceCrv
        cvPoss = [crv.cv[i].getPosition(space='world') for i in sliceCrv]
        newCrv = pm.curve(p=cvPoss, d=1, n=name+'_crv')
        crvMap[name] = newCrv
    
    return crvMap
    def test_ik_rig_build(self):
        pos = [(0, y, 0) for y in range(15)]
        crv = pm.curve(p=pos)
        loc = pm.spaceLocator(p=(0, 0, -1))

        reg_node = ik_rig.build('temp', crv, loc, 10, 4, 'xyz')

        # Check controls connected to reg_node
        cnts = [pm.PyNode('temp%s_ik_cnt' % (x+1)) for x in range(3)]

        for c in cnts:
            attr = getattr(reg_node, c.name())
            self.assertEqual(attr.listConnections()[0].name(), c)

        # Confirm ik joint chain root connected to reg_node
        self.assertEqual(reg_node.temp_chain_root.listConnections()[0].
                         name(), 'temp_Jnt_1')

        # Confirm heirarchy
        tn = pm.PyNode('temp_ik_rig_grp')
        cnts_grp = pm.PyNode('temp_cnts_grp')
        jnts_grp = pm.PyNode('temp_ik_skin_jnts_grp')
        dont_move = pm.PyNode('temp_dont_move_grp')
        fol_grp = pm.PyNode('temp_follicle_grp')
        self.assertTrue(pm.PyNode(tn).objExists())
        self.assertTrue(
            transforms.assertParentIs(cnts_grp, tn))
        self.assertTrue(
            transforms.assertParentIs(jnts_grp, tn))
        self.assertTrue(
            transforms.assertParentIs(dont_move, tn))
        self.assertTrue(
            transforms.assertParentIs(fol_grp, tn))
Example #19
0
def GuideCrv ( startGuider=None , endGuider=None ):

	if startGuider==None or endGuider==None:
		startGuider,endGuider = pm.ls(sl=True)
	
	pm.select(clear=True)
	
	startJnt = pm.joint ( n = startGuider.name()+"_guideCrvJnt")
	pm.parent (startJnt , startGuider)
	startJnt.translate.set (0,0,0)
	startJnt.visibility.set (0)
	pm.setAttr ( startJnt.visibility , lock=True  )
	
	
	endJnt = pm.joint (  n = endGuider.name()+"_guideCrvJnt" )
	pm.parent (endJnt , endGuider)
	endJnt.translate.set (0,0,0)
	endJnt.visibility.set (0)
	pm.setAttr ( endJnt.visibility , lock=True  )
	
	startJntPos = pm.xform ( startJnt , q=True , ws=True , t=True)
	endJntPos = pm.xform ( endJnt , q=True , ws=True , t=True)
	
	guideCrv = pm.curve ( degree=1 , p = (startJntPos ,endJntPos) , k=(1,2)  )
	
	pm.rename ( guideCrv , startGuider.name()+"_guideCrv")
	
	pm.skinCluster ( guideCrv , startJnt , endJnt  )
	
	guideCrv.inheritsTransform.set(0)
	guideCrv.template.set(1)
	
	pm.select(clear=True)
	
	return guideCrv
Example #20
0
def create_guideSurface( IdName, listOfJnts ):
    loftCurves = []
    for i in range(2):
        # duplicate and select hierarchy of joints
        listOfOffsetJnts = pm.duplicate( listOfJnts, name = 'b_' + IdName +'_offset1', parentOnly = True )
        
        # offset each joint on it's own z-axis
        for jnt in listOfOffsetJnts:
            if i == 0: pm.move(jnt, (0,0,-0.5), relative = True, objectSpace = True, preserveChildPosition = True)
            if i == 1: pm.move(jnt, (0,0,0.5), relative = True, objectSpace = True, preserveChildPosition = True)
        
        # draw loftcurves
        loftCurvePoints = []
        for each in listOfOffsetJnts:
            jntPosition = pm.xform(each, q = True, t = True, ws = True)
            loftCurvePoints.append(jntPosition)
        
        loftCurves.append( pm.curve( name = IdName + '_loftCurve' + str(i), degree = 1, point = loftCurvePoints ) ) 
        pm.delete(listOfOffsetJnts)

    # loft guideSurface
    guideSurface = pm.loft( loftCurves[0], loftCurves[1], name = IdName + '_guide_surface', ar=True, rsn=True, d=3, ss=1, object=True, ch=False, polygon=0 )
    guideSurface = pm.rebuildSurface( guideSurface ,ch=1, rpo=1, rt=0, end=1, kr=1, kcp=0, kc=0, su=0, du=3, sv=1, dv=3, tol=0.01, fr=0, dir=2 )
        
    # cleanup
    pm.delete( loftCurves )
    guideSurface[0].inheritsTransform.set(False)
    guideSurface[0].overrideEnabled.set(True)
    guideSurface[0].overrideDisplayType.set(1)
    # guideSurface[0].visibility.set(False)
    
    print('Successfully lofted guide surface. Continuing...')
    return guideSurface
Example #21
0
    def build(self):
        """builds it self
        """
        self.curve = curve(d=1, p=[(1, 0, 0), (-1, 0, 0)], k=(0, 1))
        self.corner1_locator = spaceLocator()
        self.corner2_locator = spaceLocator()
        select(self.curve)
        ClusterCurve()

        # try to find the clusterHandles
        curve_shape = curve.getShape()
        clusters = []
        handles = []
        for node in curve_shape.listHistroy():
            if isinstance(node, ClusterHandle):
                handles.append(node)
            elif isinstance(node, Cluster):
                clusters.append(node)

        self.cluster1 = clusters[0]
        self.cluster2 = clusters[0]

        self.cluster_handle1 = handles[0]
        self.cluster_handle2 = handles[1]

        # set clusters to absolute
        self.cluster1.setAttr('relative', 0)
        self.cluster2.setAttr('relative', 0)
Example #22
0
def FootCrv ( size=1, name='footCrv') :
	ctrlName = pm.curve (d = 1 , p =    (       
										(0.00443704, -0.677552, 0)
										,(0.144546, -0.530692, 0)
										,(0.352021, 0.0542797, 0)
										,(0.348132, 0.276213, 0)
										,(0.448607, 0.414713, 0)
										,(0.322616, 0.478526, 0)
										,(0.256431, 0.302266, 0)
										,(0.180984, 0.356473, 0)
										,(0.32057, 0.570811, 0)
										,(0.17346, 0.659144, 0)
										,(0.0855168, 0.404945, 0)
										,(0.0139709, 0.433904, 0)
										,(0.106305, 0.743462, 0)
										,(-0.107758, 0.761677, 0)
										,(-0.0858926, 0.450201, 0)
										,(-0.16749, 0.440366, 0)
										,(-0.230299, 0.787238, 0)
										,(-0.496683, 0.690941, 0)
										,(-0.336863, 0.360119, 0)
										,(-0.394508, 0.133506, 0)
										,(-0.159134, -0.138775, 0)
										,(-0.28817, -0.523902, 0)
										,(-0.195119, -0.663426, 0)
										,(0.00443704, -0.677552, 0)
										),
	
								k =     (0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23) , name = name)

	ctrlName.scale.set(size,size,size)
	pm.makeIdentity (ctrlName , apply=True , s=True)
	
	return ctrlName
Example #23
0
    def box(name, radius, normal, color):
        r = radius
        points = [(-1*r, -1*r,-1*r),
                  (-1*r, -1*r, 1*r),
                  ( 1*r, -1*r, 1*r),
                  ( 1*r, -1*r,-1*r),
                  (-1*r, -1*r,-1*r),
                  (-1*r,  1*r,-1*r),
                  (-1*r,  1*r, 1*r),
                  (-1*r, -1*r, 1*r),
                  (-1*r,  1*r, 1*r),
                  ( 1*r,  1*r, 1*r),
                  ( 1*r, -1*r, 1*r),
                  ( 1*r,  1*r, 1*r),
                  ( 1*r,  1*r,-1*r),
                  ( 1*r, -1*r,-1*r),
                  ( 1*r,  1*r,-1*r),
                  (-1*r,  1*r,-1*r)]

        b = pm.curve(
                point=points,
                name=name,
                degree=1,
                worldSpace=True)
        u.aimNormal(b, normal=normal)
        pm.makeIdentity(b,apply=True)
        b.getShape().overrideEnabled.set(True)
        b.getShape().overrideColor.set(color)
        return b
    def test_ik_rig_build_errors(self):
        self.assertRaises(errors.InputError,
                          ik_rig.build)
        self.assertRaises(errors.InputError,
                          ik_rig.build,
                          'curve', 'loc', 'num')

        pos = [(0, y, 0) for y in range(15)]
        crv = pm.curve(p=pos)
        loc = pm.spaceLocator()

        self.assertRaises(errors.InputError,
                          ik_rig.build,
                          crv, 'loc', 'num_jnts', 'num_cnts')
        self.assertRaises(errors.InputError,
                          ik_rig.build,
                          crv, loc, 'num_jnts', 'num_cnts')
        self.assertRaises(errors.InputError,
                          ik_rig.build,
                          crv, 'loc', 5, 'num_cnts')
        self.assertRaises(errors.InputError,
                          ik_rig.build,
                          crv, loc, 5, 1, 'xyz')
        self.assertRaises(errors.InputError,
                          ik_rig.build,
                          crv, 'loc', 5, 2, 'xyz')
        self.assertRaises(errors.InputError,
                          ik_rig.build,
                          crv, loc, 5, 2, 'xya')
Example #25
0
 def fourSidedArrowCtrl(cls, name=''):
     node = pm.curve(
         per=True, d=1,
         p=[(-0.31907, 1.758567, 0),
            (-0.31907, 0.272474, 0),
            (-1.758567, 0.272474, 0),
            (-1.758567, 1.172378, 0),
            (-2.930946, 0, 0),
            (-1.758567, -1.172378, 0),
            (-1.758567, -0.272474, 0),
            (-0.31907, -0.272474, 0),
            (-0.31907, -1.758567, 0),
            (-1.172378, -1.758567, 0),
            (0, -2.930946, 0),
            (1.172378, -1.758567, 0),
            (0.31907, -1.758567, 0),
            (0.31907, -0.272474, 0),
            (1.758567, -0.272474, 0),
            (1.758567, -1.172378, 0),
            (2.930946, 0, 0),
            (1.758567, 1.172378, 0),
            (1.7585607, 0.272474, 0),
            (0.31907, 0.272474, 0),
            ( 0.31907, 1.758567, 0),
            (1.172378, 1.758567, 0),
            (0, 2.930946, 0),
            (-1.172378, 1.758567, 0),
            (-0.31907, 1.758567, 0)
         ],
         k=([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])
     )
     cls.rename(node, name)
     return node
Example #26
0
def build_upper_halfbox(type, label=[], connections=True):
    if not pm.objExists(type + "_Prnt"):
        mainDict = {}

        squareShape = [[-1.0, 1.0, 0.0],
                       [-1.0, 0.0043876273513161479, 0.0],
                       [1.0, 0.0043876273513161479, 0.0],
                       [1.0, 1.0, 0.0],
                       [-1.0, 1.0, 0.0]]

        box = pm.curve(d=1, p=squareShape, n=type + "_Prnt")
        boxShape = box.getShape()
        boxShape.overrideEnabled.set(1)
        boxShape.overrideDisplayType.set(1)
        ctrl = pm.circle(nr=[0, 0, 0], r=0.2, ch=0, n=type + "_Ctrl")[0]
        pm.parent(ctrl, box)
        pm.transformLimits(ctrl, tx=[-1, 1], etx=[1, 1], ety=[1, 1], ty=[0, 1])
        libUtilities.lockAttr(str(ctrl), ["tz", "rx", "ry", "rz", "sx", "sy", "sz", "v"])

        mainDict["border"] = box
        mainDict["ctrl"] = ctrl

        if connections:
            connect_dict = {}
            connect_dict["TopLeftCorner"] = build_left_top_corner(type, ctrl)
            connect_dict["TopRightCorner"] = build_right_top_corner(type, ctrl)
            mainDict["connections"] = connect_dict

        if label:
            mainDict["label"] = build_label(label, box)

        return mainDict
    else:
        raise Exception(type + " setup already exists")
Example #27
0
    def arrows4(name, radius, normal, color):
        r = radius
        points = [(0.25*r, 0*r, 0.75*r),
                  (0*r, 0*r, 1*r),
                  (-.25*r, 0*r, 0.75*r),
                  (0.25*r, 0*r, 0.75*r),
                  (0*r, 0*r, 1*r),
                  (0*r, 0*r, -1*r),
                  (0.25*r, 0*r, -.75*r),
                  (-.25*r, 0*r, -.75*r),
                  (0*r, 0*r, -1*r),
                  (0*r, 0*r, 0*r),
                  (-1*r, 0*r, 0*r),
                  (-.75*r, 0*r, 0.25*r),
                  (-.75*r, 0*r, -.25*r),
                  (-1*r, 0*r, 0*r),
                  (1*r, 0*r, 0*r),
                  (0.75*r, 0*r, -.25*r),
                  (0.75*r, 0*r, 0.25*r),
                  (1*r, 0*r, 0)]

        a = pm.curve(point=points, name=name, degree=1, worldSpace=True)
        u.aimNormal(a, normal=normal)
        pm.makeIdentity(a,apply=True)
        a.getShape().overrideEnabled.set(True)
        a.getShape().overrideColor.set(color)
        return a
Example #28
0
def alignVertexLoopWithCurve():
    '''
    select loop of verts
    curve is created to sculpt verts
    '''
    verts = pm.ls(os=True, fl=True)
    sv = mesh.SortedVertices(verts)
    
    # use first and last verts to create 1-span curve
    firstVert = sv.verts[0]
    lastVert = sv.verts[-1]
    firstPos = firstVert.getPosition()
    lastPos = lastVert.getPosition()
    crv = pm.curve(ep=(firstPos, lastPos), d=3)
    endParam = crv.getParamAtPoint(lastPos) * 0.99
    
    # place verts along curve
    totalVerts = len(sv.verts)
    params = [endParam/(totalVerts-1)*vertId for vertId in range(totalVerts)]
    print params
    
    for vert, param in zip(sv.verts, params):
        print vert, param
        pos = crv.getPointAtParam(param)
        vert.setPosition(pos)
        
    # make wire deformer to sculpt verts
    wire = pm.wire(sv.verts, w=crv)
Example #29
0
def build_y_halfbox(type, label=[]):
    if not pm.objExists(type + "_Prnt"):
        mainDict = {}

        squareShape = [[-0.112423266524, 1.0, 0.0],
                       [-0.112423266524, -1.0, 0.0],
                       [0.112423266524, -1.0, 0.0],
                       [0.112, 1.0, 0.0],
                       [-0.112423266524, 1.0, 0.0]]

        box = pm.curve(d=1, p=squareShape, n=type + "_Prnt")
        boxShape = box.getShape()
        boxShape.overrideEnabled.set(1)
        boxShape.overrideDisplayType.set(1)

        ctrl = pm.circle(nr=[0, 0, 0], r=0.2, ch=0, n=type + "_Ctrl")[0]
        pm.parent(ctrl, box)
        pm.transformLimits(ctrl, tx=[0, 0], etx=[1, 1], ety=[1, 1], ty=[-1, 1])
        libUtilities.lockAttr(str(ctrl), ["tz", "tx", "rx", "ry", "rz", "sx", "sy", "sz", "v"])

        mainDict["border"] = box
        mainDict["ctrl"] = ctrl

        if label:
            mainDict["label"] = build_label(label, box)

        return mainDict

    else:
        raise Exception(type + " setup already exists")
def FTV_createMainFluidTextViewControl( inputsGrp , fluidSpaceTransform):
	''' creation of the main control for the viewer'''
	circle = pm.circle( n='fluidTextureViewerCtrl#', c=(0,0,0), nr=(0,1,0), sw=360, r=1, ut=False,s=8, ch=False )
	pm.parent(circle[0],fluidSpaceTransform,r=True)

	size = 0.5
	ptList = [(-size,-size,-size), (size,-size,-size), (size,-size,size), (-size,-size,size), (-size,-size,-size), (-size,size,-size), (size,size,-size), (size,size,size), (-size,size,size), (-size,size,-size), (size,size,-size),(size,-size,-size),(size,-size,size),(size,size,size),(-size,size,size),(-size,-size,size)]
	cube = pm.curve( p = ptList, d=1, n='tempNameCubeNurbs#')

	grpDummyTransform = pm.group(em=True,n='dummyFluidSizeToMatrix#')

	pm.connectAttr( inputsGrp+'.dimensionsW', grpDummyTransform+'.scaleX')
	pm.connectAttr( inputsGrp+'.dimensionsH', grpDummyTransform+'.scaleY')
	pm.connectAttr( inputsGrp+'.dimensionsD', grpDummyTransform+'.scaleZ')
	FTV_lockAndHide( grpDummyTransform, ['tx','ty','tz','rx','ry','rz','sx','sy','sz','v'])

	circleShape = FTV_createTransformedGeometry(circle,'local', 'create',grpDummyTransform)
	cubeShape = FTV_createTransformedGeometry(cube,'local', 'create',grpDummyTransform)
	pm.setAttr(cubeShape+'.template',True)
	allCubeShapes = pm.listRelatives(cube,s=True)
	parentShapeRes = pm.parent(allCubeShapes, circle, add=True, s=True)

	pm.delete(cube)
	pm.rename( parentShapeRes[0],'BBFluidShapeSrc#' )
	retShape = pm.rename( parentShapeRes[1],'BBFluidShape#' )

	FTV_lockAndHide(circle[0], ['rx','ry','rz','sx','sy','sz','v'])

	# attributes connections
	addMainAttributesToObject(circle[0],True)
	FTV_multiConnectAutoKeyableNonLocked( circle[0], inputsGrp, ['translateX','translateY','translateZ'])

	pm.parent(grpDummyTransform,fluidSpaceTransform,r=True)

	return circle[0], retShape
Example #31
0
def createCurveFromPoints(vert1,vert2):
    startFrame = pm.intSliderGrp('startFrameSlider',q=1,v=1)
    endFrame  = pm.intSliderGrp('endFrameSlider',q=1,v=1)
    
    points = []
    tempPos = [0,0,0]
    sample = pm.floatSliderGrp('sampleSlider',q=1,v=1)
    for f in drange(startFrame,endFrame+1,sample):
        pm.currentTime(f)
        pos = getMidPointPos(vert1, vert2)
        if pos != tempPos:
            points.append(pos)
        tempPos = pos
    
    crvName = vert1.name().split('.')[0] + '_trail_crv'
    crv = pm.curve(name = crvName, ep=points)
    pm.currentTime(startFrame)
    return crv
Example #32
0
    def create_ik_spline(self):
        points = []
        for jnt in self.ik_joints:
            pos = jnt.getTranslation(space='world')
            points.append(pos)

        self.ik_crv = pm.curve(n='spine_ikSpline_crv', d=1, p=points)
        self.ik_crv.attr('v').set(0)
        self.ik_spline = pm.ikHandle(sj=self.ik_joints[0],
                                     ee=self.ik_joints[-1],
                                     c=self.ik_crv,
                                     ccv=False,
                                     sol='ikSplineSolver',
                                     name='spine_ikSpline')[0]
        self.ik_spline.attr('v').set(0)

        pm.parent(self.ik_crv, self.rig_grp)
        pm.parent(self.ik_spline, self.rig_grp)
Example #33
0
def generateCubeFromVector(start_pt, end_pt, origin):

    matrix = origin.worldMatrix.get().inverse()
    start_pt = start_pt * matrix
    end_pt = end_pt * matrix

    x_vec = start_pt - end_pt
    y_vec = dt.Vector([0, 1, 0])
    y_vec = y_vec.rotateBy(x_vec, math.pi / 4)
    z_vec = dt.Vector([0, 0, 1])
    z_vec = z_vec.rotateBy(x_vec, math.pi / 4)

    # NOTE 计算8个顶点坐标位置
    distant = 3
    start_corner_1 = (start_pt + y_vec * distant)
    start_corner_2 = (start_pt - y_vec * distant)
    start_corner_3 = (start_pt + z_vec * distant)
    start_corner_4 = (start_pt - z_vec * distant)

    end_corner_1 = (end_pt + y_vec * distant)
    end_corner_2 = (end_pt - y_vec * distant)
    end_corner_3 = (end_pt + z_vec * distant)
    end_corner_4 = (end_pt - z_vec * distant)

    # NOTE 生成方块曲线
    return pm.curve(d=1,
                    p=[
                        start_corner_1,
                        start_corner_3,
                        start_corner_2,
                        start_corner_4,
                        start_corner_1,
                        end_corner_1,
                        end_corner_3,
                        end_corner_2,
                        end_corner_4,
                        end_corner_1,
                        end_corner_4,
                        start_corner_4,
                        start_corner_2,
                        end_corner_2,
                        end_corner_3,
                        start_corner_3,
                    ])
Example #34
0
def Circle3ArrowCrv(size=1, name='circle3ArrowCrv'):
    size /= 2.0
    ctrlName = pm.curve(
        d=1,
        p=((-0.006446, 0, 0), (0.012892, 0.196348, 0), (0.070165, 0.38515, 0),
           (0.163171, 0.559152, 0), (0.288335, 0.711665, 0),
           (0.440848, 0.836829, 0), (0.61485, 0.929835, 0), (0.803652,
                                                             0.987108, 0),
           (0.803456, 1.261041, 0), (0.606912, 1.261041, 0), (1, 1.654129, 0),
           (1.393088, 1.261041, 0), (1.196544, 1.261041,
                                     0), (1.196348, 0.987108,
                                          0), (1.38515, 0.929835, 0),
           (1.559152, 0.836829,
            0), (1.711665, 0.711665,
                 0), (1.836829, 0.559152,
                      0), (1.929835, 0.38515, 0), (1.987108, 0.196348,
                                                   0), (2.261041, 0.196544, 0),
           (2.261041, 0.393088, 0), (2.654129, 0, 0), (2.261041, -0.393088, 0),
           (2.261041, -0.196544, 0), (1.987108, -0.196348,
                                      0), (1.929835, -0.38515,
                                           0), (1.836829, -0.559152,
                                                0), (1.711665, -0.711665, 0),
           (1.559152, -0.836829, 0), (1.38515, -0.929835,
                                      0), (1.196348, -0.987108,
                                           0), (1.196544, -1.261041,
                                                0), (1.393088, -1.261041, 0),
           (1, -1.654129, 0), (0.606912, -1.261041,
                               0), (0.803456, -1.261041,
                                    0), (0.803652, -0.987108,
                                         0), (0.61485, -0.929835, 0),
           (0.440848, -0.836829, 0), (0.288335, -0.711665,
                                      0), (0.163171, -0.559152,
                                           0), (0.070165, -0.38515,
                                                0), (0.012892, -0.196348,
                                                     0), (-0.006446, 0, 0)),
        k=(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),
        name=name)

    ctrlName.scale.set(size, size, size)
    pm.makeIdentity(ctrlName, apply=True, s=True)

    return ctrlName
Example #35
0
def generateCubeFromVector(start_pt, end_pt, distant=3, angle=45):
    x_vec = start_pt - end_pt

    y_vec = start_pt.cross(end_pt)
    if angle:
        # NOTE 角度转弧度
        angle = angle * math.pi / 180
        y_vec = y_vec.rotateBy(x_vec, angle)
    y_vec.normalize()

    z_vec = x_vec.cross(y_vec)
    z_vec.normalize()

    # NOTE 计算8个顶点坐标位置
    start_corner_1 = start_pt + y_vec * distant
    start_corner_2 = start_pt - y_vec * distant
    start_corner_3 = start_pt + z_vec * distant
    start_corner_4 = start_pt - z_vec * distant

    end_corner_1 = end_pt + y_vec * distant
    end_corner_2 = end_pt - y_vec * distant
    end_corner_3 = end_pt + z_vec * distant
    end_corner_4 = end_pt - z_vec * distant

    # NOTE 生成方块曲线
    return pm.curve(d=1,
                    p=[
                        start_corner_1,
                        start_corner_3,
                        start_corner_2,
                        start_corner_4,
                        start_corner_1,
                        end_corner_1,
                        end_corner_3,
                        end_corner_2,
                        end_corner_4,
                        end_corner_1,
                        end_corner_4,
                        start_corner_4,
                        start_corner_2,
                        end_corner_2,
                        end_corner_3,
                        start_corner_3,
                    ])
Example #36
0
def build():
    '''
    It takes extra work to draw circle with a single line.  This is accomplished
    by having the terminal point exactly where the curve must pass through
    and points very near it to give it the (almost) correct bend.
    
    This is repeated 3x, then that same technique is used to make a quarter
    arc, then an additional hoop.  The first 3 hoops and transition are
    made vertical, which puts the transition ending back on the ground plane,
    where the 4th hoop remains.
    '''
    ctrl = sphere(ax=[0, 1, 0], ssw=0, esw=360, r=0.49 * 0.9, d=3, s=6,
                  nsp=4)[0]

    major = util.CirclePoints.major
    minor = util.CirclePoints.minor
    body = util.CirclePoints.body
    terminal = util.CirclePoints.terminal

    s = [-minor, 0, -major]
    e = [minor, 0, -major]

    hoop = [terminal, s, s] + body + [e, e, terminal]
    count = len(hoop)

    transArc = [terminal] + \
        [[-minor, 0, -major]] * 2 + \
        [body[0]] + \
        [[-major, 0, -minor]] * 2 + \
        [[-.5 * 0.9, 0, 0]]

    line = curve(p=hoop * 3 + transArc + hoop, d=3)

    rotate(line.cv[:count * 3 + len(transArc) - 1], [90, 0, 0])
    rotate(line.cv[count:count * 2], [0, 60, 0])
    rotate(line.cv[count * 2:count * 3], [0, -60, 0])
    rotate(line.cv[count * 3 + len(transArc):], [0, 90, 0])

    line.rename('outline')
    line.getShape().setParent(ctrl, add=True, shape=True)

    delete(line)

    return ctrl
Example #37
0
    def createRbnSrf(self):
        startJntVec = om.MVector(self.start[0], self.start[1], self.start[2])
        endJntVec = om.MVector(self.end[0], self.end[1], self.end[2])
        diffVec = endJntVec - startJntVec

        # calculate the witdth of the surface as a fraction of the total joint chain length
        jntChainLength = diffVec.length()
        self.width = jntChainLength * self.widthMult

        crvPoints = []

        for i in range(self.numCtrl):
            vec = startJntVec + diffVec * (i * 1.0 / (self.numCtrl - 1))
            crvPoints.append([vec.x, vec.y, vec.z])

        tmp = pm.curve(n=self.name + '_crv1', d=1, p=crvPoints)
        crv1 = pm.ls(tmp)[0]
        crv1.setPivots(self.start)
        crv2 = pm.duplicate(crv1)[0]

        self.offsetCrv(crv1, -1.0 * self.width / 2)
        self.offsetCrv(crv2, 1.0 * self.width / 2)

        tmpLoftSrf = pm.loft(crv1,
                             crv2,
                             ch=0,
                             u=1,
                             c=0,
                             ar=1,
                             d=3,
                             ss=1,
                             rn=0,
                             po=0,
                             rsn=1,
                             n=self.name + "_tmp")[0]
        rebuiltLoftSrf = \
        pm.rebuildSurface(ch=0, rpo=0, rt=0, end=1, kr=0, kcp=0, kc=0, su=0, du=3, sv=0, dv=1, fr=0, dir=2,
                          n=self.name + "_srf")[0]
        rebuiltLoftSrf.setPivots(rebuiltLoftSrf.c.get())
        self.rbnSrf = rebuiltLoftSrf
        pm.delete(self.rbnSrf, ch=1)

        pm.delete([crv1, crv2, tmpLoftSrf])
        pm.parent(self.rbnSrf, self.mainGrp)
Example #38
0
def createBoundingBox(x1, y1, z1, x2, y2, z2):
    curve1 = pm.curve(degree=1,
                      p=[(x1, y1, z1), (x1, y1, z2), (x2, y1, z2),
                         (x2, y1, z1), (x1, y1, z1)])
    curve2 = pm.curve(degree=1,
                      p=[(x1, y2, z1), (x1, y2, z2), (x2, y2, z2),
                         (x2, y2, z1), (x1, y2, z1)])
    curve3 = pm.curve(degree=1, p=[(x1, y1, z1), (x1, y2, z1)])
    curve4 = pm.curve(degree=1, p=[(x1, y2, z2), (x1, y1, z2)])
    curve5 = pm.curve(degree=1, p=[(x2, y2, z2), (x2, y1, z2)])
    curve6 = pm.curve(degree=1, p=[(x2, y2, z1), (x2, y1, z1)])

    pm.group(curve1, curve2, curve3, curve4, curve5, curve6, n='Bounding Box')
Example #39
0
    def makeCube(self, nameOverride='newProxy'):
        currentScale = self.obj.scale.get()
        currentTrans = self.obj.translate.get()
        currentRotate = self.obj.rotate.get()
        # set object transforms to init
        self.obj.scale.set((1, 1, 1))
        self.obj.rotate.set((0, 0, 0))
        self.obj.translate.set((0, 0, 0))

        boundingBox = pm.exactWorldBoundingBox(self.obj)

        # return object to where it was
        self.obj.scale.set(currentScale)
        self.obj.rotate.set(currentRotate)
        self.obj.translate.set(currentTrans)

        height = (boundingBox[4] - boundingBox[1])
        cube = pm.polyCube(width=(boundingBox[3] - boundingBox[0]),
                           height=height,
                           depth=(boundingBox[5] - boundingBox[2]),
                           name=nameOverride + '_box')[0]

        cube.translate.set(0, height / 2, 0)
        # freeze cube transforms
        pm.makeIdentity(cube, a=1, t=1)

        # create an arrow showing the direction of
        # front rotation
        arrow = pm.curve(d=1,
                         p=[(-2, 0, 0), (-2, 0, 6), (-4, 0, 6), (0, 0, 10),
                            (4, 0, 6), (2, 0, 6), (2, 0, 0)],
                         k=[0, 1, 2, 3, 4, 5, 6],
                         n=nameOverride)
        pm.parent(cube, arrow)
        # add the cube to display layer
        self.addToDisplayLayer(cube)

        arrow.rotate.set(currentRotate)
        arrow.scale.set(currentScale)
        arrow.translate.set(currentTrans)

        # parent the cube to the arrow

        return (arrow, arrow.name())
Example #40
0
    def createLink(self, guide1, guide2):
        clusters = []
        guide1Pos = guide1.getTranslation(space='world')
        guide2Pos = guide2.getTranslation(space='world')
        linkCrv = pm.curve(n=guide2 + '_crvlink', d=1, p=[guide1Pos, guide2Pos])
        numCvs = linkCrv.numCVs()

        for i in range(numCvs):
            linkCls = pm.cluster(linkCrv.name() + '.cv[' + str(i) + ']', name=linkCrv.name() + '_cls_' + str(i))[1]
            linkCls.visibility.set(0)
            pm.parent(linkCls, self.bpTopGrp)
            clusters.append(linkCls)

        pm.pointConstraint(guide1, clusters[0], mo=1)
        pm.pointConstraint(guide2, clusters[1], mo=1)
        linkCrv.inheritsTransform.set(0)
        linkCrv.overrideEnabled.set(1)
        linkCrv.overrideDisplayType.set(1)
        pm.parent(linkCrv, self.bpTopGrp)
Example #41
0
 def RMCreateCubeLine(self,
                      height,
                      length,
                      width,
                      centered=False,
                      offsetX=float(0.0),
                      offsetY=float(0.0),
                      offsetZ=float(0.0),
                      name=""):
     if centered:
         offsetX = offsetX - float(height) / 2.0
     if name == "":
         defaultName = "CubeLine"
     else:
         defaultName = name
     CubeCurve = []
     pointArray = [
         [0 + offsetX, -length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [0 + offsetX, -length / 2.0 + offsetY, -width / 2.0 + offsetZ],
         [
             height + offsetX, -length / 2.0 + offsetY,
             -width / 2.0 + offsetZ
         ],
         [height + offsetX, length / 2.0 + offsetY, -width / 2.0 + offsetZ],
         [height + offsetX, length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [0 + offsetX, length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [0 + offsetX, length / 2.0 + offsetY, -width / 2.0 + offsetZ],
         [height + offsetX, length / 2.0 + offsetY, -width / 2.0 + offsetZ],
         [
             height + offsetX, -length / 2.0 + offsetY,
             -width / 2.0 + offsetZ
         ],
         [height + offsetX, -length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [height + offsetX, length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [height + offsetX, -length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [0 + offsetX, -length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [0 + offsetX, length / 2.0 + offsetY, width / 2.0 + offsetZ],
         [0 + offsetX, length / 2.0 + offsetY, -width / 2.0 + offsetZ],
         [0 + offsetX, -length / 2.0 + offsetY, -width / 2.0 + offsetZ]
     ]
     curve = pm.curve(d=1, p=pointArray, name=defaultName)
     # return CubeCurve[0]
     return curve
Example #42
0
def convert_to_curve(sellist, name='converted_curve', smoothness=1):
    '''
    Connect object in list with a Nurbs Curve
    '''
    # print sellist
    if any([
            get_type(ob) == typ for ob in sellist
            for typ in ['transform', 'joint', 'mesh','nurbsCurve']]):
        # print sellist
        cvpMatrix = [ob.getTranslation('world') for ob in sellist if hasattr(ob, 'getTranslation')]
    if any([get_type(cpn) == 'vertex' for cpn in sellist]):
        cvpMatrix = [get_closest_info(cpn.getPosition('world'), cpn.node())['Closest Point'] for cpn in sellist]
    if any([get_type(cpn) == 'edge' for cpn in sellist]):
        cvpMatrix = [get_closest_info(pm.dt.center(*[cpn.getPoint(i,'world') for i in range(2)]), cpn.node())['Closest Mid Edge'] for cpn in sellist]
    if any([get_type(cpn) == 'face' for cpn in sellist]):
        flist = []
        for mfn in sellist:
            for mfid in mfn.indices():
                mf = mfn.node().f[mfid]
                if mf not in flist:
                    flist.append(mf)
        cvpMatrix = [
            get_closest_info(pm.dt.center(*[mf.getPoint(i,'world') for i in range(4)]), mf.node())['Closest Point']
            for mf in flist
        ]
    assert 'cvpMatrix' in locals(), 'Cannot create curve for input {}'.format(sellist)
    # cvpMatrix.sort()
    # temp_list = [cvpMatrix[0]]
    # id = 0
    # while id<(len(cvpMatrix)-1):
    #     distancelist = [(ncvp, cvpMatrix[id].distanceTo(ncvp)) for ncvp in cvpMatrix]
    #     distancelist.sort(key=lambda x:x[1])
    #     shortest = distancelist[0][0] if distancelist[0][0]!=temp_list[-1] else distancelist[1][0]
    #     cvpMatrix.remove(shortest)
    #     temp_list.append(shortest)
    #     id += 1
    # cvpMatrix = temp_list
    if smoothness > 1:
        cvpMatrix = [cvpMatrix[0]]+cvpMatrix+[cvpMatrix[-1]]
    key = range(len(cvpMatrix)+smoothness-1)
    crv = pm.curve(d=smoothness, p=cvpMatrix, k=key)
    crv.rename(name)
    return crv
Example #43
0
def create_shape_attrholder(size=1.0, **kwargs):
    s1 = size
    s2 = s1 * 0.7
    node = pymel.curve(d=1,
                       p=[(0, 0, s1), (0, s2, s2), (0, s1, 0), (0, s2, -s2),
                          (0, 0, -s1), (0, -s2, -s2),
                          (0, -s1, 0), (0, -s2, s2), (0, 0, s1), (-s2, 0, s2),
                          (-s1, 0, 0), (-s2, s2, 0), (0, s1, 0), (s2, s2, 0),
                          (s1, 0, 0), (s2, 0, -s2), (0, 0, -s1), (-s2, 0, -s2),
                          (-s1, 0, 0), (-s2, -s2, 0), (0, -s1, 0),
                          (s2, -s2, 0), (s1, 0, 0), (s2, 0, s2), (0, 0, s1),
                          (-s2, 0, s2)],
                       k=range(26),
                       *kwargs)

    # Expose the rotateOrder
    node.rotateOrder.setKeyable(True)

    return node
Example #44
0
	def createFootIkSplineCurveAndBindIt(self):
		
		pm.select(cl = True)
		
		#create foot_splineIk_curve
		self.foot_splineIk_curve = pm.curve( p = self.footIkJointsPositionList, ws = True, d = 2 , n = self.prefix + '_foot_splineIk_curve')
		pm.select(cl = True)
		
		#create foot_splineIk_curve_grp
		self.foot_splineIk_curve_grp = pm.group(n = self.prefix + '_foot_splineIk_curve_grp')
		pm.select(cl = True)
		#parent
		pm.parent(self.foot_splineIk_curve, self.foot_splineIk_curve_grp)
		pm.select(cl = True)
		
		
		#smoothbind splineIk curve to curve bound joints
		self.foot_splineIk_skincluster = pm.skinCluster( self.curve_bound_j_base , self.curve_bound_j_tip , self.foot_splineIk_curve , tsb=True, n = self.prefix + '_splineIk_skincluster', rui = False, ih = True)
		pm.select(cl = True)
Example #45
0
	def pinCnt(self):
		'''
		This procedure creates a pin control
		'''
		
		self.__buildName()
		if not self.controlName:
			return
		line = pm.curve( d = 1 , p = [ ( 0 , 0 , 0 ) , ( 0.8 , 0 , 0 ) ] , k = [ 0 , 1 ] , n = self.controlName)
		circle = pm.circle( ch = 1 , o = True , nr = ( 0 , 1 , 0 ) , r = 0.1 ) [ 0 ]
		
		pm.move( 0.9 , 0 , 0 ,circle.getShape().cv , r = 1 )
		pm.parent( circle.getShape() , line , shape = 1 , add = 1 )
		
		pm.delete(circle)
		pm.select(cl = 1 )
		self.control = line
		
		self.__finalizeCnt()
Example #46
0
def boxCtrl(size=20.0, name=''):
    '''
    Creates a box shaped nurbs curve

    '''
    pos = size * 0.5
    neg = pos * -1
    points = [
        (neg, pos, neg), (neg, neg, neg), (neg, neg, pos), (neg, pos, pos),
        (neg, pos, neg), (pos, pos, neg), (pos, neg, neg), (neg, neg, neg),
        (neg, neg, pos), (pos, neg, pos), (pos, neg, neg), (pos, pos, neg),
        (pos, pos, pos), (neg, pos, pos), (pos, pos, pos), (pos, neg, pos)
    ]

    knots = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

    ctrl = pmc.curve(degree=1, p=points, k=knots, name=name)

    return ctrl
Example #47
0
def hairDeformer_createCurve(*args):
    hfCount = 0
    hfArr = []
    degree = 3
    # Get the selection, which should be the joint chain
    jointChain = getSelected()
    # assemble the joints to an array and get the coordinates of each
    for i in jointChain:
        jointTrans = pm.xform(i, q=True, t=True, worldSpace=True)
        tempX = jointTrans[0]
        tempY = jointTrans[1]
        tempZ = jointTrans[2]
        # Store the values in a base array
        hfArr.append((tempX, tempY, tempZ))
        hfCount = hfCount + 1
    # Number of knots
    # = numPoints + degree (default of 3) - 1
    knotCount = degree + len(hfArr) - 1
    knots = []
    i = 0
    while i < knotCount:
        knots.append(i)
        i = i + 1
    # assemble the statement now
    print "Output is"
    print "pm.curve(p=" + str(hfArr) + ", k=" + str(knots) + ", d=" + str(
        degree) + ")"
    hairCurve = pm.curve(p=hfArr, k=knots, d=degree)
    print mel.eval("makeCurvesDynamic 2 { \"1\", \"0\", \"1\", \"1\", \"0\"};")
    # toggle the point lock to just the base
    # assumed the hair system is "hairSystem1"
    # going off from default follicle design
    pm.setAttr("follicleShape1.pointLock", 1)
    # Take the established joint chain and unparent temporarily
    parentJoints = cmds.listRelatives(jointChain, parent=True)
    # separate the joint from the parent
    baseJoint = jointChain[0]
    endJoint = jointChain[len(jointChain) - 1]
    print "Base joint:" + baseJoint
    print "End Joint:" + endJoint
    # Create spline handle on these joints now
    pm.ikHandle(sj=baseJoint, ee=endJoint, c=hairCurve)
    print "Hair system connection complete"
Example #48
0
def generateCubeFromVector(start_pt, end_pt):
    x_vec = start_pt - end_pt

    y_vec = start_pt.cross(end_pt)
    # NOTE 旋转45度
    y_vec = y_vec.rotateBy(x_vec, math.pi / 4)
    y_vec.normalize()

    z_vec = x_vec.cross(y_vec)
    z_vec.normalize()

    # NOTE 计算8个顶点坐标位置
    distant = 3
    start_corner_1 = start_pt + y_vec * distant
    start_corner_2 = start_pt - y_vec * distant
    start_corner_3 = start_pt + z_vec * distant
    start_corner_4 = start_pt - z_vec * distant

    end_corner_1 = end_pt + y_vec * distant
    end_corner_2 = end_pt - y_vec * distant
    end_corner_3 = end_pt + z_vec * distant
    end_corner_4 = end_pt - z_vec * distant

    # NOTE 生成方块曲线
    return pm.curve(d=1,
                    p=[
                        start_corner_1,
                        start_corner_3,
                        start_corner_2,
                        start_corner_4,
                        start_corner_1,
                        end_corner_1,
                        end_corner_3,
                        end_corner_2,
                        end_corner_4,
                        end_corner_1,
                        end_corner_4,
                        start_corner_4,
                        start_corner_2,
                        end_corner_2,
                        end_corner_3,
                        start_corner_3,
                    ])
Example #49
0
    def drawConnectionTo(self, toGuide):
        pm.select(cl=1)
        conMainGrp = pm.group(n=self.name + '_line_grp')
        conMainGrp.overrideEnabled.set(1)
        conMainGrp.overrideColor.set(18)
        pos1 = self.getPos()
        pos2 = toGuide.getPos()
        connectionCrv = pm.curve(d=1,
                                 p=[pos1, pos2],
                                 k=[0, 1],
                                 name=self.name + '_line')
        pm.parent(connectionCrv, conMainGrp)
        pm.skinCluster(self.transform, toGuide.transform, connectionCrv)

        self.lineConnections[connectionCrv.name()] = [
            self.transform.name(),
            toGuide.transform.name()
        ]
        return conMainGrp
Example #50
0
	def createCompleteSwingManip(self):
		
		pm.select(cl = True)
		
		#create CompleteSwingManip
		self.completeSwingManip = pm.curve( p=[(-1, 1, 0), (-1, 3, 0), (-2, 3, 0), (0, 5, 0),(2, 3, 0),(1, 3, 0),(1, 1, 0), (-1, 1, 0)], ws = True, d = 1, name = self.prefix + '_complete_swing_manip' )
		pm.select(cl = True)
		
		#completeSwingManipAimGrp
		self.completeSwingManipAimGrp = pm.group( n = self.prefix + '_complete_swing_manip_aim_grp')
		pm.select(cl = True)
		pm.parent(self.completeSwingManip, self.completeSwingManipAimGrp)
		pm.select(cl = True)
		
		#completeSwingManipGrp
		self.completeSwingManipGrp = pm.group( n = self.prefix + '_complete_swing_manip_grp')
		pm.select(cl = True)
		pm.parent(self.completeSwingManipAimGrp, self.completeSwingManipGrp)
		pm.select(cl = True)
Example #51
0
def hexCtrl(radius=20.0, name='', axis='z'):
    '''
    creates a circular nurbs curve of degree 1 with a raised section front and rear to indicate orientation

    '''

    points = [(0, 0.2, 1.217186), (0.309017, 0.2, 0.951057),
              (0.309017, 0.2, 0.951057), (0.382683, 0, 0.92388),
              (0.382683, 0, 0.92388), (0.707107, 0, 0.707107),
              (0.92388, 0, 0.382683), (1, 0, 0), (0.92388, 0, -0.382683),
              (0.707107, 0, -0.707107), (0.382683, 0, -0.92388),
              (0.382683, 0, -0.92388), (0.309017, 0.2, -0.951057),
              (0.309017, 0.2, -0.951057), (0, 0.2, -1),
              (-0.309017, 0.2, -0.951057), (-0.309017, 0.2, -0.951057),
              (-0.382683, 0, -0.92388), (-0.382683, 0, -0.92388),
              (-0.707107, 0, -0.707107), (-0.92388, 0, -0.382683), (-1, 0, 0),
              (-0.92388, 0, 0.382683), (-0.707107, 0, 0.707107),
              (-0.382683, 0, 0.92388), (-0.382683, 0, 0.92388),
              (-0.309017, 0.2, 0.951057), (-0.309017, 0.2, 0.951057),
              (0, 0.2, 1.217186)]

    knots = [
        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, 26, 26
    ]

    ctrl = pmc.curve(name=name,
                     d=3,
                     p=[(point[0] * radius, point[1] * radius,
                         point[2] * radius) for point in points],
                     k=knots)

    shape = coreUtils.getShape(ctrl)
    shape.rename(ctrl.name() + 'Shape')

    if '-' in axis:
        pmc.select('%s.cv[*]' % shape)
        pmc.rotate(180, rotateZ=True)

    if axis != 'z':
        orientCtrl(ctrl=ctrl, axis=axis)
    return ctrl
Example #52
0
def creatSoftModCtrl(vtx):
        
    for i in vtx:
        a = str(type(i))
        if a == "<class 'pymel.core.general.MeshVertex'>":
            name = (str(i))
            ModifiedName = re.sub(r'[^\w]', '_', name)    
            print (ModifiedName)
        else:
            print('Wrong Selection, Only select verticies')
            break
        pos = pm.pointPosition(i)
        
        name = (str(i))
        ModifiedName = re.sub(r'[^\w]', '_', name)    
        ctl = pm.curve(n = ModifiedName +'_SoftMod_Handle_Ctrl' ,d=1, 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)], k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
            
        pm.addAttr(ctl , ln = 'fallOff', at = 'double', dv = 20) 
        pm.setAttr(ctl.fallOff, k=1)
        pm.addAttr(ctl , ln = 'fallOffMode', at = 'enum', en = 'volume:surface') 
        pm.setAttr(ctl.fallOffMode, k=1)    
        pm.addAttr(ctl , ln = 'globalScale', at = 'double', dv = 1) 
        pm.setAttr(ctl.globalScale, k=1)   
        grp = pm.createNode('transform',n = ModifiedName + '_ctrl_grp' )
        loc = pm.spaceLocator(n = ModifiedName+'_SoftMod_Ctrl') 
        pm.select(cl=1)
        pm.parent(loc,grp)
        pm.parent(ctl,loc)
        grp.translate.set(pos)
        mesh = pm.listTransforms(i.split('.')[0])[0]
        pm.select(mesh)
        sfMod = cmds.softMod(wn = (str(mesh),str(mesh)))
        pm.select(cl=1)
        cmds.softMod(sfMod[0],e=1,wn = (str(ctl),str(ctl)))
        pm.setAttr(sfMod[0]+'.falloffAroundSelection',0)
        pm.connectAttr(loc.worldPosition[0],sfMod[0]+'.falloffCenter')
        mdl = pm.createNode('multDoubleLinear',n = ModifiedName+'_MDL')
        pm.connectAttr(ctl.fallOffMode,sfMod[0]+'.falloffMode')
        ctl.fallOff>>mdl.input1
        ctl.globalScale>>mdl.input2
        pm.connectAttr(mdl.output,sfMod[0]+'.falloffRadius')
        pm.connectAttr(loc.worldInverseMatrix[0],str(sfMod[0])+'.bindPreMatrix')
Example #53
0
    def bdImportCon(con):
        xmlPath = 'c:\\Users\\bogdan_d\\Documents\\bdPyScripts\\controllers\\'
        #xmlFile = 'facial_ctrl.xml'
        dom = parse(xmlPath + con)
        controllerNode = dom.getElementsByTagName('controller')
        for node in controllerNode:
            conName = node.getAttribute('name')
            shapeNodes = node.getElementsByTagName('shape')
            curvesToParent = []
            for s in shapeNodes:
                shapeName = s.getAttribute('name')
                print shapeName
                shapeCvs = s.getAttribute('cvs')
                pos = [
                    float(pos.strip('[](),')) for pos in shapeCvs.split(" ")
                ]
                reconstructedPos = [(pos[i], pos[i + 1], pos[i + 2])
                                    for i in range(0, len(pos), 3)]

                shapeKnots = s.getAttribute('knots')
                knots = [
                    float(k.strip('[](),')) for k in shapeKnots.split(" ")
                ]
                reconstructedKnots = [k for k in knots]

                shapeDegree = int(s.getAttribute('degree'))
                shapePeriodic = int(s.getAttribute('periodic'))

                curve = pm.curve(p=reconstructedPos,
                                 k=reconstructedKnots,
                                 d=shapeDegree,
                                 per=shapePeriodic)
                curve.rename(shapeName.replace('Shape', ''))
                curvesToParent.append(curve)

            parentCurve = curvesToParent[0]
            for curve in curvesToParent[1:]:
                pm.parent(curve.getShape(), parentCurve, r=1, shape=1)
                pm.delete(curve)

            pm.select(cl=1)
            parentCurve.centerPivots()
Example #54
0
    def __init__(self,
                 name='control',
                 shape='circle',
                 size=1,
                 line_width=user.prefs['default-line-width'],
                 offsets=user.prefs['num-offset-ctrls'],
                 colour='dark-blue'):
        """
		Create controller and offset groups
		:param name: (string) Name of controller
		:param shape: (string) Controller shape
		:param size: (float, int) Scale factor of control
		:param line_width: (float, int) line width
		:param offsets: amount of offset locators to make
		"""

        self.name = utils.makeNameUnique(name,
                                         '_%s' % user.prefs['ctrl-suffix'])

        self.ctrl = \
         pm.curve(
          d=1,
          p=data.controllerShapes[shape],
          n=(self.name + '_' + user.prefs['ctrl-suffix']))

        utils.setOverrideColour(self.ctrl, c=colour)

        utils.scaleCtrlShapes(self.ctrl,
                              scale_mult=size,
                              line_width=line_width)

        self.null = pm.group(n=self.ctrl + '_null', em=True)

        self.offsets = []
        for i in range(offsets):
            num = '{:02d}'.format(i + 1) if offsets > 1 else ''
            self.offsets.append(
                pm.spaceLocator(n=self.ctrl + '_offset%s_loc' % num))

            utils.setOverrideColour(self.offsets, 'purple')

        utils.parentByList([self.ctrl, self.offsets, self.null])
    def buildPath(self):
        # After the user is done adding positions, they wil call the buildPath() method
        # it creates a curve with the list of positions as points.
        myPath = pm.curve(d=1, p=self.Points)
        # Now we'll constrain the car's root to the path and create a motion path animation
        motionPath = pm.pathAnimation(self.root,
                                      fractionMode=False,
                                      c=myPath,
                                      followAxis='z',
                                      upAxis='y',
                                      startTimeU=self.Times[0],
                                      endTimeU=self.Times[-1])

        # go through all the positions and set keys in the motion path
        for k in self.Times:  # reminder to self: k is the value, and not the index of the list
            # I will ask Python what is the index of that value and store it in a variable...
            n = self.Times.index(k)
            pm.setKeyframe(
                motionPath + '.uValue', v=n, t=k
            )  # 'n' is the Uvalue position that the motionPath should be keyed at
Example #56
0
def squareChamferCtrl(size=20.0, name='', axis='y'):
    '''
    creates a square nurbs curve

    '''
    points = [(-1, 0, -3), (-1, 0, -4), (1, 0, -4), (1, 0, -3), (3, 0, -1),
              (4, 0, -1), (4, 0, 1), (3, 0, 1), (1, 0, 3), (1, 0, 4),
              (-1, 0, 4), (-1, 0, 3), (-3, 0, 1), (-4, 0, 1), (-4, 0, -1),
              (-3, 0, -1), (-1, 0, -3)]

    knots = [i for i in range(len(points))]

    ctrl = pmc.curve(degree=1, p=points, k=knots, name=name)
    shape = coreUtils.getShape(ctrl)
    pmc.select('%s.cv[ * ]' % shape)
    pmc.rotate(45, rotateY=True)
    pmc.scale(size * .25, size * .25, size * .25)
    if axis != 'z':
        orientCtrl(ctrl=ctrl, axis=axis)
    return ctrl
Example #57
0
def bdBuildSquareController(target, ctrlName, scale, pivotOfset=0.5):
    defaultPointsList = [(-1, 1, 0), (1, 1, 0), (1, -1, 0), (-1, -1, 0)]
    pointsList = []
    targetPos = pm.xform(target, q=True, ws=True, t=True)
    for p in defaultPointsList:
        pointsList.append((p[0] * scale, p[1] * scale, p[2] * scale))

    curvePoints = [
        pointsList[0], pointsList[1], pointsList[2], pointsList[3],
        pointsList[0]
    ]

    ctrl = pm.curve(d=1, p=curvePoints)
    ctrl.rename(ctrlName)
    ctrlGrp = pm.group(ctrl, n=ctrlName.replace("anim", "anim_CON"))
    pm.move(targetPos[0], targetPos[1], targetPos[2], ctrlGrp, ws=True)
    ctrl.translateZ.set(pivotOfset)
    pm.makeIdentity(ctrl, apply=True, translate=True, rotate=True, scale=True)
    ctrl.setPivots([0, 0, 0])
    return [ctrl, ctrlGrp]
Example #58
0
def makeVector(
        vecs,   # 先の絶対位置ではなく、始点に対する相対位置。
        sources = [0.0, 0.0, 0.0],
        name = "tempvec") :
    #print test
    vec     = pm.dt.Vector([vecs[0], vecs[1], vecs[2]])
    source  = pm.dt.Point([sources[0], sources[1], sources[2]])
    target  = source + vec
    atom    = vec / 6
    opt     = pm.dt.Vector([0.0, 0.0, 1.0])
    unit    = vec.cross(opt)
    unit    = unit * atom.length() / unit.length()
    p1      = target - atom + unit
    p2      = target - atom - unit 
    cvList  = [source, target, p1, target, p2]
    cv      = [ [i[0],i[1],i[2]] for i in cvList]
    #print test
    cur     = pm.curve( p = cv, n=name, d = 1 )   
    
    return cur
Example #59
0
    def square_ctrl(self):
        points = [(-1, 1, 0), (1, 1, 0), (1, -1, 0), (-1, -1, 0)]

        for i in range(len(points)):
            scaled_pos = (points[i][0] * self.scale,
                          points[i][1] * self.scale,
                          points[i][2] * self.scale)
            points[i] = scaled_pos

        crv_points = [points[0], points[1], points[2], points[3], points[0]]

        ctrl = pm.curve(d=1, p=crv_points)
        ctrl.rename(self.name)
        ctrl_grp = pm.group(ctrl, n=self.name + '_grp')

        pm.addAttr(ctrl, ln='parent', at='message')
        pm.connectAttr(ctrl_grp.name() + '.message', ctrl.name() + '.parent')
        
        self.ctrl = ctrl
        self.ctrl_grp = ctrl_grp
Example #60
0
def create_square(size=1.0, width=None, height=None, **kwargs):
    if width is None:
        width = 1.0
    if height is None:
        height = 1.0
    width *= size
    height *= size

    pos1 = pymel.datatypes.Point(-height, -width, 0)
    pos2 = pymel.datatypes.Point(-height, width, 0)
    pos3 = pymel.datatypes.Point(height, width, 0)
    pos4 = pymel.datatypes.Point(height, -width, 0)
    pos5 = pymel.datatypes.Point(-height, -width, 0)

    node = pymel.curve(d=1, p=[pos1, pos2, pos3, pos4, pos5])

    # Expose the rotateOrder
    node.rotateOrder.setKeyable(True)

    return node