""" Package :- Free Script Module :- Free Script Description :- Help to stop the animation sliding. Usage :- Copy the script to maya script editor in python tab YouTube : - https://www.youtube.com/watch?v=TeKAB70WJE0 Creator :- Sanjeev Dhama """ import maya.cmds as cmds class snapper(): def __init__(self,*arg): self.myLoc = '' self.trg = '' self.locList = [] if cmds.window('AnimSnapper',exists=1): cmds.deleteUI('AnimSnapper') cmds.window('AnimSnapper',t='AnimSnapper', iconName='AnimSnapper', widthHeight=(250,120)) self.framelayout = cmds.frameLayout(lv =0) self.formlayout = cmds.formLayout(nd=100,p = self.framelayout) self.locBtn = cmds.button(label='Create Locator',bgc = (.4,.7,.6),c = self.loc) self.chBox = cmds.checkBox(l = '',cc = self.fieldVis) self.startFrameTxt = cmds.text(l = 'Start Frame') self.startField = cmds.intField(v = 0, w = 40,ed=0) self.endFrameTxt = cmds.text(l = 'End Frame') self.endField = cmds.intField(v = 0 ,w = 40,ed=0) self.snapBtn = cmds.button(label='Snap',bgc = (.3,.6,.6),c = self.snap) self.delBtn = cmds.button(label='Delete Locator',bgc = (.3,.5,.6), c = self.deleteLoc) cmds.formLayout(self.formlayout,e=1,af=[(self.locBtn,'top',05),(self.locBtn,'left',0),(self.locBtn,'right',0)]) cmds.formLayout(self.formlayout,e=1,af=[(self.chBox,'top',35),(self.chBox,'left',10)]) cmds.formLayout(self.formlayout,e=1,af=[(self.startFrameTxt,'top',34),(self.startFrameTxt,'left',45)]) cmds.formLayout(self.formlayout,e=1,af=[(self.startField,'top',32),(self.startField,'left',105)]) cmds.formLayout(self.formlayout,e=1,af=[(self.endFrameTxt,'top',34),(self.endFrameTxt,'left',154)]) cmds.formLayout(self.formlayout,e=1,af=[(self.endField,'top',32),(self.endField,'left',210)]) cmds.formLayout(self.formlayout,e=1,af=[(self.snapBtn,'top',55),(self.snapBtn,'left',0),(self.snapBtn,'right',0)]) cmds.formLayout(self.formlayout,e=1,af=[(self.delBtn,'top',85),(self.delBtn,'left',0),(self.delBtn,'right',0)]) cmds.showWindow('AnimSnapper') def loc(self,*arg): try: self.trg = cmds.ls(sl=1)[0] except: cmds.confirmDialog(title='Error dialog', message='You need to select a target', messageAlign='left', button='Ok', defaultButton='Ok', dismissString='Ok', icon='warning') if self.trg: self.myLoc = cmds.spaceLocator(n = 'animSnapperLoc')[0] self.locList.append(self.myLoc) cmds.delete(cmds.parentConstraint(self.trg,self.myLoc,mo=0)) def fieldVis(self,*arg): chValue = cmds.checkBox(self.chBox,q=1,v=1) print chValue if chValue: cmds.intField(self.startField,e=1,ed=1) cmds.intField(self.endField,e=1,ed=1) else: cmds.intField(self.startField,e=1,ed=0) cmds.intField(self.endField,e=1,ed=0) def snap(self,*arg): self.startValue = cmds.intField(self.startField,q=1,v=1) self.endValue = cmds.intField(self.endField,q=1,v=1) chValue = cmds.checkBox(self.chBox,q=1,v=1) if chValue: if self.startValue < self.endValue: cmds.currentTime(self.startValue,e=1) for s in range(self.startValue, self.endValue+1): pConstraint = cmds.parentConstraint(self.myLoc,self.trg ,n='SnapperConstraint_Parent',mo=0) currentFrame = cmds.currentTime(query=1) cmds.setKeyframe (self.trg) cmds.currentTime(currentFrame+1 , edit = 1) cmds.delete(pConstraint) else: cmds.confirmDialog(t='Error dialog', message='Start frame should be less then end frame', messageAlign='left', button='Ok', defaultButton='Ok', dismissString='Ok', icon='warning') else: pConstraint = cmds.parentConstraint(self.myLoc,self.trg ,n='SnapperConstraint_Parent',mo=0) currentFrame = cmds.currentTime(query=1) cmds.setKeyframe (self.trg) cmds.currentTime(currentFrame+1 , edit = 1) cmds.delete(pConstraint) def deleteLoc(self,*arg): if cmds.objExists(self.myLoc): print self.locList cmds.delete(self.locList) snapping = snapper()