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
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)