def __init__(self, curve_sel, vertex_list, chain_geo): self.curve_sel = curve_sel self.verts = vertex_list self.chain_geo = chain_geo self.find_length = Find_Out() self.link_length = self.find_length.edge_length(self.verts) self.chain_length = self.find_length.curve_length(self.curve_sel) self.link_total = int(self.chain_length/self.link_length) self.motion_path_name = str(self.chain_geo) + '_Path' cmds.pathAnimation(self.chain_geo, name = self.motion_path_name, fractionMode = True, follow= True, followAxis = 'x', upAxis = 'y', worldUpType = 'object', startTimeU = 1, endTimeU = self.link_total, c = self.curve_sel) cmds.setKeyframe(self.motion_path_name + '.frontTwist', v = 0.0, t = 1 ) cmds.setKeyframe(self.motion_path_name + '.frontTwist', v = 60.0*self.link_total, t = self.link_total ) cmds.keyTangent(self.motion_path_name + '.uValue', itt = 'linear', ott = 'linear' ) cmds.keyTangent(self.motion_path_name + '.frontTwist', itt = 'linear', ott = 'linear') cmds.snapshot( self.chain_geo, constructionHistory=True, startTime=1, endTime = self.link_total, increment=1, update = 'animCurve', name = str(self.chain_geo) + '_snapShot' ) self.chain_group = cmds.group( em=True, name=str(self.chain_geo) + '_geo_grp' ) self.chain_list = cmds.listRelatives(str(self.chain_geo + '_snapShotGroup')) for dummy_geo in self.chain_list: cmds.delete(icn = True, ch = True) cmds.parent(dummy_geo, self.chain_group)
def sweepPipe(circle, pipeCurve): numberOfCVs = cmds.getAttr('%s.cp' % pipeCurve[0], size=1) motionPath = cmds.pathAnimation("%s" % circle[0], curve=pipeCurve[0], follow=True, startTimeU=1, endTimeU=numberOfCVs) cmds.selectKey("%s.uValue" % motionPath) cmds.keyTangent( itt="linear", ott="linear") pipeSweep = cmds.snapshot(circle, startTime=1, endTime=numberOfCVs) return pipeSweep
def doReplicate(): the_name = cmd.textFieldGrp("name", query=True, text=True) the_incr = cmd.floatSliderGrp("incr", query=True, value=True) selection = cmd.ls(selection=True, long=True) element = selection[0] curve = selection[1] # Build motion path the_motion_path = cmd.pathAnimation(element, curve=curve, fractionMode=True, follow=True, followAxis="z", upAxis="y", startTimeU=1, endTimeU=100) # Flat animation curves cmd.keyTangent(the_motion_path, inTangentType="linear", outTangentType="linear") # Create animation snapshot the_snapshot = cmd.snapshot(element, name=the_name, endTime=100, increment=the_incr)
def snapshot(model, time): cm.currentTime(time) snap_node = cm.snapshot(model, st=time, et=time, ch=0) snap = cm.listRelatives(snap_node, c=1)[0] snap = cm.parent(snap, w=1) cm.delete(snap_node) return snap
def motionPathTool(self, status): if status == 'On': for i in x: a = cmds.snapshot ( i, motionTrail = 1, increment = 1, startTime = cmds.playbackOptions( query = 1, minTime = 1 ), endTime = cmds.playbackOptions( query = 1, maxTime = 1 ) ) cmds.setAttr( str(a[0]) + '.showFrames', 1) if status == 'Off': print 'need to fix'
def update(self, *args): # Update locators for item in cmds.textScrollList(self.objectUI, q=True, ai=True): try: pc = cmds.listRelatives(item, type='parentConstraint')[0] target = cmds.parentConstraint(pc, q=True, tl=True)[0] cmds.parentConstraint(target, pc, e=True, mo=True, ) except: print 'Unable to update "{}". Skipped.'.format(item) # Update Motion Paths for item in cmds.textScrollList(self.motionTrailUI, q=True, ai=True): try: cmds.snapshot(cmds.listConnections(item, type='motionTrail')[0], e=True, st=cmds.playbackOptions(q=True, min=True), et=cmds.playbackOptions(q=True, max=True)) except: print 'Unable to update "{}". Skipped.'.format(item) return
def addCurrentSelection(): global allSelections global currentSelection global trailName global trailNamesAll global keyAttribs global dictCheck #allSelections = {} #trailNamesAll = [] #dictCheck = {} currentSelection = cmds.ls(sl=True) #if currentSelection in allSelections.keys(): #print "already in all selections list" #print "this is where to toggle vis" #else: if checkIfRedo() == False: print "adding the new selection to all selections list" allKeys = cmds.keyframe(currentSelection, attribute=keyAttribs, query=True) amountKeys = len(allKeys) nameKey = ''.join(currentSelection) allSelections[nameKey] = amountKeys startFrame = allKeys[0] endFrame = allKeys[-1] cmds.snapshot(currentSelection, constructionHistory=True, startTime=startFrame, endTime=endFrame, increment=1, u="animCurve", mt=True) print allSelections else: print "that item has not been changed" visTrailName = cmds.listConnections(currentSelection, t="motionTrail") visTrailNameHandle = cmds.listConnections(visTrailName[0], t="shape") print visTrailNameHandle[0] if cmds.getAttr(visTrailNameHandle[0] + ".visibility") == 0: cmds.setAttr(visTrailNameHandle[0] + ".visibility", 1) elif cmds.getAttr(visTrailNameHandle[0] + ".visibility") == 1: cmds.setAttr(visTrailNameHandle[0] + ".visibility", 0)
def createTrails(sel=None): '''Creates motion trails on selected nodes''' if not sel: #get selected nodes sel = cmds.ls(sl=True) #delete existing motion trails deleteTrails(sel) #see if time range has been selected playBackSlider = mel.eval('$tmpVar=$gPlayBackSlider') start, end = cmds.timeControl(playBackSlider, q=True, rangeArray=True) if (end-start!=1): sTime = start eTime = end else: #no selection done, get min and max playback values sTime = cmds.playbackOptions(q=True, min=True) eTime = cmds.playbackOptions(q=True, max=True) #create new trails cmds.snapshot(motionTrail=True, increment=1, startTime=sTime, endTime=eTime)
def motionPathTool(self, status): if status == 'On': for i in x: a = cmds.snapshot(i, motionTrail=1, increment=1, startTime=cmds.playbackOptions(query=1, minTime=1), endTime=cmds.playbackOptions(query=1, maxTime=1)) cmds.setAttr(str(a[0]) + '.showFrames', 1) if status == 'Off': print 'need to fix'
def convertMotionToCurve(target,start=False,end=False,accuracy=100,increment=1): if not start: start = cmds.playbackOptions(q=1,min=1) if not end: end = cmds.playbackOptions(q=1,max=1) cmds.select(target) motionTrail = cmds.snapshot(motionTrail=1,startTime=start,endTime=end,increment=increment,update='animCurve') # motionTrail[0] = shape, [1] = xform pts = cmds.getAttr(motionTrail[0]+'.pts') ptsFix = [f[:-1] for f in pts] # make duplicate curve newCurve = cmds.curve(d=1,ws=1,p=ptsFix) cmds.rebuildCurve(newCurve,rt=0,s=accuracy,kr=0) cmds.delete(motionTrail) return newCurve
def CreateAni(self, *args): offtX = float( mc.textField('offsetX', query=True, text=True, alwaysInvokeEnterCommandOnReturn=True)) offtY = float( mc.textField('offsetY', query=True, text=True, alwaysInvokeEnterCommandOnReturn=True)) offtZ = float( mc.textField('offsetZ', query=True, text=True, alwaysInvokeEnterCommandOnReturn=True)) checkHi = int(mc.checkBox("setZero", query=True, v=True)) #创建cube if mc.objExists("myAniCube"): mc.delete("myAniCube") self._myCube = mc.polyCube(n="myAniCube")[0] f = open(self._dateFileName) # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 FrameValue = 0 SecTime = 0 rotaFV = "" while line: #print line # 后面跟 ',' 将忽略换行符 # print(line, end = '') # 在 Python 3中使用 if line.find("Index") >= 0: #读取帧数,并设置帧数 FrameFL = re.findall(r"Index:(.+?),", line) if FrameFL: FrameNum = int(FrameFL[0]) if FrameNum % 4 == 0: FrameValue += 1 mc.currentTime(FrameValue, u=False) #读取旋转值,并旋转 rotaFV = re.findall(r"\((.+?)\)", line) if rotaFV: rotaFL = rotaFV[0].split(",") mc.rotate((float(rotaFL[0]) + offtX) * checkHi, -float(rotaFL[1]) + offtY, float(rotaFL[2]) + offtZ, self._myCube, a=True) #加偏移值,设置x轴 mc.setKeyframe("%s.rotate" % self._myCube) #设置位置值 if self._tranDVBG: mc.move(0, 0, self._TranValue * self._tranDVBG[FrameValue - 1], self._myCube, r=True, os=True, wd=True) else: mc.move(0, 0, self._TranValue, self._myCube, r=True, os=True, wd=True) mc.setKeyframe("%s.t" % self._myCube) elif line.find("save") >= 0: SecTime += 1 # print SecTime else: pass line = f.readline() f.close() tmpSnap = [] tmpSnapShape = "" if FrameValue >= 1: mc.playbackOptions(min=1, ast=1, max=FrameValue, aet=FrameValue) tmpSnap = mc.snapshot(self._myCube, mt=True, startTime=0, endTime=FrameValue, increment=1) tmpSnapShape = mc.listRelatives(tmpSnap[0])[0] print tmpSnapShape mc.setAttr("%s.showFrames" % tmpSnapShape, 1) mc.currentTime(1, u=True) mc.textField('startFrame', edit=True, text="1", alwaysInvokeEnterCommandOnReturn=True) #设置界面起始帧 mc.textField('endFrame', edit=True, text=FrameValue, alwaysInvokeEnterCommandOnReturn=True) #设置界面结束帧
def CreateAni(self, *args): #创建cube if mc.objExists("myAniCube"): mc.delete("myAniCube") self._myCube = mc.polyCube(n="myAniCube")[0] f = open(self._dateFileName) # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 FrameValue = 0 SecTime = 0 rotaFV = "" while line: #print line # 后面跟 ',' 将忽略换行符 # print(line, end = '') # 在 Python 3中使用 if line.find("Index") >= 0: #读取帧数,并设置帧数 FrameFL = re.findall(r"Index:(.+?),", line) if FrameFL: FrameNum = int(FrameFL[0]) if FrameNum % 4 == 0: FrameValue += 1 mc.currentTime(FrameValue, u=False) #读取旋转值,并旋转 rotaFV = re.findall(r"\((.+?)\)", line) if rotaFV: rotaFL = rotaFV[0].split(",") mc.rotate(rotaFL[0], -float(rotaFL[1]), rotaFL[2], self._myCube, a=True) mc.setKeyframe("%s.rotate" % self._myCube) #设置位置值 if self._tranDVBG: mc.move(0, 0, self._TranValue * self._tranDVBG[FrameValue - 1], self._myCube, r=True, os=True, wd=True) else: mc.move(0, 0, self._TranValue, self._myCube, r=True, os=True, wd=True) mc.setKeyframe("%s.t" % self._myCube) elif line.find("save") >= 0: SecTime += 1 # print SecTime else: pass line = f.readline() f.close() tmpSnap = [] tmpSnapShape = "" if FrameValue >= 1: mc.playbackOptions(min=1, ast=1, max=FrameValue, aet=FrameValue) tmpSnap = mc.snapshot(self._myCube, mt=True, startTime=0, endTime=FrameValue, increment=1) tmpSnapShape = mc.listRelatives(tmpSnap[0])[0] print tmpSnapShape mc.setAttr("%s.showFrames" % tmpSnapShape, 1) mc.currentTime(1, u=True)
def makeTreadObj(*args): """This function makes a tread out of the selected object""" usePreMade = cmds.radioButton("premadeGeo", query=True, select=True) if usePreMade: renamePreMade() return useProxy = cmds.checkBox("useProxy", query=True, value=True) if useProxy: if cmds.objExists("TreadProxyGeo"): userObj = "TreadProxyGeo" else: userObj = makeProxyGeo() else: userObj = cmds.textFieldButtonGrp("treadName", query=True, text=True) if not userObj: cmds.confirmDialog(t="Select a piece", m="Please choose a piece to build a tread or tick proxy option") return cmds.select(userObj, replace=True) # Verify if we want to use the actual measures of the object useBbox = cmds.checkBox("bboxCheck", q=True, v=True) if useBbox: bbox = cmds.exactWorldBoundingBox(userObj) radius = data.curveRadius perimeter = 2*3.14159*radius bboxDistance = abs(bbox[2]-bbox[-1]) bboxDistance*=.85 amount = round(perimeter / bboxDistance) else: amount = cmds.intSliderGrp("treadAmount", q=True, v=True) cmds.select(data.treadCircle, add=True) pathAnimation = cmds.pathAnimation(fm=True, f=True, fa="z", ua="y", stu=1, etu=amount, wu=(0,1,0), iu=False) # Adjust animCurve cmds.selectKey("{}_uValue".format(pathAnimation), time=(1,amount)) cmds.keyTangent(itt="linear", ott="linear") #Creating snapshot cmds.snapshot(n="TreadSnapShot", ch=False, i=1, st=1, et=amount, update="animCurve") cmds.DeleteMotionPaths() cmds.select("TreadSnapShotGroup", r=True) if not amount == 1: data.treadMesh = cmds.polyUnite(n="TreadMesh", ch=False)[0] data.treadMesh = checkDuplicatedName(data.treadMesh) else: piece = cmds.listRelatives(cmds.ls(selection=True))[0] cmds.select(piece) cmds.parent(world=True) piece = cmds.rename("TreadMesh") cmds.DeleteHistory() cmds.delete("TreadSnapShotGroup") cmds.select(data.treadMesh, r=True) cmds.CenterPivot() # Hide original geo cmds.setAttr("%s.visibility"%userObj, False) # Delete Proxy geo if used if cmds.objExists("TreadProxyGeo"): cmds.delete("TreadProxyGeo")
def createMotionTrail(obj, typ): camera = None motionTrail = None pivot = None # Query Time Range playStart = cmds.playbackOptions(query=True, min=True) playEnd = cmds.playbackOptions(query=True, max=True) # Master Motion Trail Group mtGrp = createMasterGroup() # Get Camera focus = cmds.getPanel(wf=True) if cmds.getPanel(to=focus) == component.modelPanel: focusCam = cmds.modelPanel(focus, q=True, cam=True) focusCamShape = cmds.listRelatives(focusCam, shapes=True)[0] if cmds.objectType(focusCamShape) == component.camera: camera = focusCam # Create Motion Trail if typ == component.motionObject or typ == component.motionCamera: # Create Pivot if not queryPivot(obj): pivot = createPivot('{}_pivot#'.format(obj)) cmds.parent(pivot, mtGrp) cmds.parentConstraint(obj, pivot, mo=False) else: pivot = obj # Motion Camera if typ == component.motionCamera: if camera: motionTrail = cmds.snapshot(pivot, camera, n='{}_motionTrail0'.format(pivot), mt=True, i=1, startTime=playStart, endTime=playEnd, anchorTransform=True, ) # Motion Object elif typ == component.motionObject: motionTrail = cmds.snapshot(pivot, n='{}_motionTrail0'.format(pivot), mt=True, i=1, startTime=playStart, endTime=playEnd, ch=True, ) if motionTrail: motionTrailShape = cmds.listRelatives(motionTrail[0], shapes=True)[0] motionTrailMainNode = motionTrail[1] # Set Handle Attrs cmds.setAttr('{}.trailDrawMode'.format(motionTrailShape), 1) cmds.setAttr('{}.overrideEnabled'.format(motionTrailShape), 1) cmds.setAttr('{}.overrideDisplayType'.format(motionTrailShape), 2) # Create Ghost elif type == component.ghost: if cmds.objectType(cmds.listRelatives(obj, shapes=True)[0]) == 'mesh': motionTrail = cmds.snapshot(obj, n=obj + '_ghost_#', i=1, startTime=playStart, endTime=playEnd, ch=True, u='always') motionTrailShape = motionTrail[0] motionTrailMainNode = motionTrail[1] cmds.parent(motionTrailShape, mtGrp) # Set Ghost Attrs cmds.setAttr('{}.overrideEnabled'.format(motionTrailShape), 1) cmds.setAttr('{}.overrideDisplayType'.format(motionTrailShape), 1) if motionTrail: cmds.parent(motionTrail[0], mtGrp) return [pivot, motionTrail]
def motionTrail(self, *args): # Get Vars getType = cmds.radioCollection(self.mtType, q=True, sl=True) selected = cmds.ls(sl=True) objList = [] camList = [] playStart = cmds.playbackOptions(query=True, min=True) playEnd = cmds.playbackOptions(query=True, max=True) if selected: # Master Motion Trail Group mtGrp = 'bboy_motionTrail_grp' if not cmds.objExists(mtGrp): cmds.group(n=mtGrp, em=True) # Create Lists for obj in selected: objShape = cmds.listRelatives(obj, s=True)[0] if cmds.objectType(objShape) == 'camera': camList.append(obj) else: objList.append(obj) if not camList: focus = cmds.getPanel(wf=True) if cmds.getPanel(to=focus) == 'modelPanel': focusCam = cmds.modelPanel(focus, q=True, cam=True) focusCamShape = cmds.listRelatives(focusCam, shapes=True)[0] if cmds.objectType(focusCamShape) == 'camera': camList.append(focusCam) # print camList # print objList if camList: for obj in objList: if 'motion' in getType: print 'motion' allItems = cmds.textScrollList(self.mt1TextScroll, q=True, ai=True) if allItems and obj in allItems: loc = obj else: if 'mt_pivot' not in obj: loc = cmds.spaceLocator(n=obj + '_mt_pivot_#')[0] cmds.parent(loc, mtGrp) cmds.parentConstraint(obj, loc, mo=False) cmds.setAttr(loc + '.v', 0) cmds.textScrollList(self.mt1TextScroll, e=True, append=str(loc)) if 'camera' in getType: # print 'camera' mt = cmds.snapshot(loc, camList[0], n=loc + '_motionTrail_#', mt=True, i=1, startTime=playStart, endTime=playEnd, anchorTransform=True) elif 'object' in getType: # print 'object' mt = cmds.snapshot(loc, n=loc + '_motionTrail_#', mt=True, i=1, startTime=playStart, endTime=playEnd, ch=True) mtShape = cmds.listRelatives(mt[0], shapes=True)[0] mtMainNode = mt[1] # Set Handle Attrs cmds.setAttr(mtShape + '.trailDrawMode', 1) cmds.setAttr(mtShape + '.overrideEnabled', 1) cmds.setAttr(mtShape + '.overrideDisplayType', 2) cmds.textScrollList(self.mt2TextScroll, e=True, append=str(mtShape)) elif 'ghost' in getType: if cmds.objectType( cmds.listRelatives(obj, shapes=True)[0]) == 'mesh': mt = cmds.snapshot(obj, n=obj + '_ghost_#', i=1, startTime=playStart, endTime=playEnd, ch=True, u='always') mtShape = mt[0] mtMainNode = mt[1] cmds.parent(mtShape, mtGrp) # Set Ghost Attrs cmds.setAttr(mt[0] + '.overrideEnabled', 1) cmds.setAttr(mt[0] + '.overrideDisplayType', 1) # Update UI cmds.textScrollList(self.mt1TextScroll, e=True, append=str(obj)) cmds.textScrollList(self.mt2TextScroll, e=True, append=str(mtShape)) # Clean Up cmds.select(d=True)
def snapshot(*args, **kwargs): res = cmds.snapshot(*args, **kwargs) if not kwargs.get('query', kwargs.get('q', False)): res = _factories.maybeConvert(res, _general.PyNode) return res
def updateMotionTrail(self, var, *args): if var == 'update': # Update locators try: for item in cmds.textScrollList(self.mt1TextScroll, q=True, ai=True): pc = cmds.listRelatives(item, type='parentConstraint')[0] target = cmds.parentConstraint(pc, q=True, tl=True)[0] cmds.parentConstraint( target, pc, e=True, mo=True, ) except: pass # Update Motion Paths try: for item in cmds.textScrollList(self.mt2TextScroll, q=True, ai=True): cmds.snapshot(cmds.listConnections(item, type='motionTrail')[0], e=True, st=cmds.playbackOptions(q=True, min=True), et=cmds.playbackOptions(q=True, max=True)) except: pass elif var == 'delete': masterGrp = 'bboy_motionTrail_grp' deleteList = [] if cmds.objExists(masterGrp): for obj in cmds.listRelatives(masterGrp, ad=True): print obj x = cmds.listConnections(obj, type='motionTrail') if x: for y in x: print ' ' + y if y not in deleteList: deleteList.append(y) z = cmds.listConnections( y, type='motionTrailShape')[0] if z not in deleteList: deleteList.append(z) for obj in deleteList: try: cmds.delete(obj) except: pass try: cmds.delete('bboy_motionTrail_grp') except: pass cmds.textScrollList(self.mt1TextScroll, e=True, ra=True) cmds.textScrollList(self.mt2TextScroll, e=True, ra=True) elif var == 'deleteMotionTrail': try: selected = cmds.textScrollList(self.mt2TextScroll, q=True, si=True) cmds.delete(cmds.listRelatives(selected, p=True)) cmds.textScrollList(self.mt2TextScroll, e=True, ri=selected) except: pass
def process_keyframe_animation_btn(*args): # 377 reinit_vars() # with Undo(): for selected in cm.ls(sl=1): if check_model(selected): self.static_base_meshes.append(selected) # >>>> added by Hiura bCanceled = False if len(self.static_base_meshes) > 0: for one_mesh in self.static_base_meshes: time = 0 tmp_node = cm.snapshot(one_mesh, st=time, et=time, ch=0) tmp_snap = cm.listRelatives(tmp_node, c=1)[0] tmp_snap = cm.parent(tmp_snap, w=1) cm.polySoftEdge(tmp_snap, a=180, ch=0) cm.polyTriangulate(tmp_snap, ch=0) org_num = get_vert_count(one_mesh) new_num = get_vert_count(tmp_snap) if org_num != new_num: buf = 'Warning! Vertex Number Change.\n original=' + str( org_num ) + ' new=' + str( new_num ) + '\n\nMaybe not working properly.\nContinue?' ret = cm.confirmDialog(title='Confirm', message=buf, button=['Yes', 'No'], defaultButton='Yes', cancelButton='No', dismissString='No') if ret != 'Yes': bCanceled = True cm.delete(tmp_snap) cm.delete(tmp_node) # <<<< added by Hiura if not bCanceled: if len(self.static_base_meshes) > 0: # >>>> added by Hiura gMainProgressBar = mel.eval('$tmp = $gMainProgressBar') cm.progressBar(gMainProgressBar, edit=True, beginProgress=True, isInterruptable=False, status='"VAT Converting ...', minValue=0, maxValue=100) # <<<< added by Hiura make_merge_snapshots(self.static_base_meshes) cm.progressBar(gMainProgressBar, edit=True, step=5) # added by Hiura # smooth_copy(self.morph_array[0][0], gMainProgressBar, 15) smooth_copy(self.morph_array[0], gMainProgressBar, 15) # modified by Hiura pack_vert_uvs(self.original_mesh, gMainProgressBar, 30) populate_morph_arrays(gMainProgressBar, 50) remove_meshes() cm.progressBar(gMainProgressBar, edit=True, endProgress=True) # added by Hiura render_out_textures() #.. else: cm.warning("No applicable meshes selected")
def createMT(): sTime = int(cmds.playbackOptions(q=True, min=True)) eTime = int(cmds.playbackOptions(q=True, max=True)) #sel = cmds.ls(sl=True) cmds.snapshot(tCams, st=sTime, et=eTime, mt=True, n='MotionTrail_#') cmds.editRenderLayerMembers('Perspective', 'MotionTrail*')