コード例 #1
0
ファイル: Desenrrollable.py プロジェクト: rendermotion/RMPY
def SpiralOfPointsStraight(initRadius, endRadius, numberOfPoints, startPoint, endPoint):
	RigTools   = RMRigTools.RMRigTools()
	ShapeCntrl = RMRigShapeControls.RMRigShapeControls()
	distancia  = RMRigTools.RMPointDistance(startPoint,endPoint)
	minLength  = math.sin(math.pi  / (numberOfPoints + 1)) * initRadius #initRadiusdistancia/numberOfPoints/10
	
	print "minLength:%s" % minLength

	if minLength * numberOfPoints < distancia:
		#Locators = RigTools.RMCreateNLocatorsBetweenObjects( startPoint, endPoint, numberOfPoints )
		Locators = RigTools.RMCreateBiasedLocatorsBetweenObjects( startPoint, endPoint , numberOfPoints, minLength)
		Locators.insert(0,startPoint)
		Locators.insert(len(Locators),endPoint)
		parentJoint, jointArray = RigTools.RMCreateBonesAtPoints( Locators )
		resetPnt, control = ShapeCntrl.RMCircularControl(startPoint,radius = initRadius)
		cmds.addAttr (control, longName = "unfold", keyable = True, hasMinValue = True, hasMaxValue = True, maxValue = 10,minValue = -10)
		unfoldStep = 10.0 / float(numberOfPoints+1)
		currentStep = 10.0
		index = 0
		deltaRadius = (initRadius - endRadius) / numberOfPoints
		currentRadius = initRadius
		#jointArray.reverse()
		angle=20
		for joints in jointArray[:-1]:
			#angle = 180 - SegmentAngleInCircle(currentRadius, RMRigTools.lenght_of_bone(joints) )
			
			if index > 0:
				angle = getAngle (currentRadius ,joints,jointArray[index-1])
			else: 
				angle = getAngle (currentRadius ,joints,None)

			#angle = SpiralFunction (index, numberOfPoints, initRadius, endRadius, distancia)
			#angle = SpiralFunctionBiasedPoints (index, numberOfPoints, initRadius, endRadius, distancia, minLength)
			RMRigTools.connectWithLimits ( control + ".unfold", joints + ".rotateY", [[-currentStep, angle], [-(currentStep-unfoldStep), 0], [currentStep-unfoldStep, 0], [currentStep, -angle]])
			currentStep = currentStep - unfoldStep
			print currentRadius
			currentRadius = currentRadius - deltaRadius
			index+=1
コード例 #2
0
    def CreateBookRig(self, AffectedObject):

        affected = AffectedObject
        self.widthValue = RMRigTools.RMPointDistance(self.width, self.origin)
        self.heightValue = RMRigTools.RMPointDistance(self.height, self.origin)

        parentGroup = cmds.group(empty=True, name="BookRig")
        self.NameConv.default_names["System"] = parentGroup
        RMRigTools.RMAlign(self.origin, parentGroup, 3)

        cmds.select(affected)
        self.flare2, self.flareHandle2 = cmds.nonLinear(type='flare', lowBound=0, highBound=self.widthValue,
                                                        name="FlareLeafsThick")
        self.flare2 = self.NameConv.rename_name_in_format(self.flare2)
        self.flareHandle2 = self.NameConv.rename_name_in_format(self.flareHandle2)

        RMRigTools.RMAlign(self.origin, self.flareHandle2, 3)
        cmds.xform(self.flareHandle2, objectSpace=True, rotation=[180, 0, 90])
        cmds.setAttr(self.flareHandle2 + ".scale", 1, 1, 1)

        cmds.select(affected)
        self.flare, self.flareHandle = cmds.nonLinear(type='flare', lowBound=0, highBound=self.heightValue,
                                                      name="FlareBorderRefinement")  # endFlareX
        self.flare = self.NameConv.rename_name_in_format(self.flare)
        self.flareHandle = self.NameConv.rename_name_in_format(self.flareHandle)
        RMRigTools.RMAlign(self.origin, self.flareHandle, 3)
        cmds.setAttr(self.flareHandle + ".scale", 1, 1, 1)
        cmds.xform(self.flareHandle, objectSpace=True, translation=[self.widthValue / 2, 0, 0])

        cmds.select(affected)
        self.bendSpread, self.bendHandleSpread = cmds.nonLinear(type='bend', lowBound=-self.widthValue,
                                                                highBound=self.widthValue, curvature=0,
                                                                name="bendSpread")  # curvature
        self.bendSpread = self.NameConv.rename_name_in_format(self.bendSpread)
        self.bendHandleSpread = self.NameConv.rename_name_in_format(self.bendHandleSpread)
        RMRigTools.RMAlign(self.origin, self.bendHandleSpread, 3)
        cmds.xform(self.bendHandleSpread, objectSpace=True, rotation=[0, 0, 90])
        cmds.setAttr(self.bendHandleSpread + ".scale", 1, 1, 1)

        cmds.select(affected)
        # self.bendMidle, self.bendHandleMiddle = cmds.nonLinear(type = 'bend', lowBound = 0 , highBound = self.heightValue / 2 , curvature = 0,name = "bendCenter")#curvature Hight Bound
        self.bendMidle, self.bendHandleMiddle = cmds.nonLinear(type='bend', lowBound=0, highBound=1, curvature=0,
                                                               name="bendCenter")  # curvature Hight Bound
        self.bendMidle = self.NameConv.rename_name_in_format(self.bendMidle)
        self.bendHandleMiddle = self.NameConv.rename_name_in_format(self.bendHandleMiddle)
        RMRigTools.RMAlign(self.origin, self.bendHandleMiddle, 3)
        cmds.setAttr(self.bendHandleMiddle + ".scale", 1, 1, 1)
        cmds.xform(self.bendHandleMiddle, objectSpace=True, translation=[0, self.heightValue / 2, 0])

        cmds.select(affected)
        # self.bendOpen, self.bendHandleOpen = cmds.nonLinear(type = 'bend', lowBound = 0 , highBound = self.heightValue / 2 , curvature = 0,name = "bendOpen")#curvature Hight Bound
        self.bendOpen, self.bendHandleOpen = cmds.nonLinear(type='bend', lowBound=0, highBound=1, curvature=0,
                                                            name="bendOpen")  # curvature Hight Bound
        self.bendOpen = self.NameConv.rename_name_in_format(self.bendOpen)
        self.bendHandleOpen = self.NameConv.rename_name_in_format(self.bendHandleOpen)
        RMRigTools.RMAlign(self.origin, self.bendHandleOpen, 3)
        cmds.setAttr(self.bendHandleOpen + ".scale", 1, 1, 1)

        cmds.select(affected)
        # self.bendOpen, self.bendHandleOpen = cmds.nonLinear(type = 'bend', lowBound = 0 , highBound = self.heightValue / 2 , curvature = 0,name = "bendOpen")#curvature Hight Bound
        # self.bendOpenOposit, self.bendHandleOpenOposit = cmds.nonLinear(type = 'bend', lowBound = 0 , highBound = 1 , curvature = 0,name = "bendOpenOposit")#curvature Hight Bound
        # self.bendOpenOposit = self.NameConv.RMRenameNameInFormat(self.bendOpenOposit)
        # self.bendHandleOpenOposit = self.NameConv.RMRenameNameInFormat(self.bendHandleOpenOposit)

        # RMRigTools.RMAlign(self.origin, self.bendHandleOpenOposit,3)
        # cmds.setAttr(self.bendHandleOpenOposit + ".scale", 1 , 1 , 1)

        self.centerBendLocator = cmds.spaceLocator(name="centerBend")[0]
        self.centerBendLocator = self.NameConv.rename_name_in_format(self.centerBendLocator)

        RMRigTools.RMAlign(self.bendHandleMiddle, self.centerBendLocator, 3)
        cmds.parent(self.bendHandleMiddle, self.centerBendLocator)

        cmds.parent(self.centerBendLocator, parentGroup)

        # cmds.xform( self.bendHandleOpen , objectSpace = True, translation = [self.widthValue,0,0])
        # cmds.xform( self.bendHandleOpenOposit , objectSpace = True, translation = [-self.widthValue,0,0])
        cmds.connectAttr(self.bendHandleOpen + ".scaleX", self.centerBendLocator + ".translateY")
        # cmds.connectAttr(self.bendHandleOpen+".scale",self.bendHandleOpenOposit+".scale")


        cmds.parent(self.bendHandleOpen, parentGroup)
        # cmds.parent( self.bendHandleOpenOposit, parentGroup )
        cmds.parent(self.flareHandle, parentGroup)
        cmds.parent(self.bendHandleSpread, parentGroup)
        cmds.parent(self.flareHandle2, parentGroup)

        ControlResetPoint, Control = RMRigShapeControls.RMCircularControl(self.origin, NameConv=self.NameConv)
        self.AddAttributes(Control)
        self.LinkAttributes(Control)