169 lines
4.4 KiB
Python
169 lines
4.4 KiB
Python
import maya.api.OpenMaya as om
|
|
import maya.cmds as cmds
|
|
import maya.mel as mel
|
|
|
|
import re
|
|
|
|
import mocaphelperutility
|
|
|
|
|
|
def retestlist(strlist,exp,casecheck = False):
|
|
matchlist = []
|
|
pyVersion = mocaphelperutility.getPythonVersion()
|
|
if pyVersion < 3:
|
|
|
|
if (type(exp)== unicode ):
|
|
raw_exp = repr(exp)[2:-1]
|
|
elif (type(exp)== str ):
|
|
raw_exp = exp
|
|
else:
|
|
raise Exception("unidentified string format input!")
|
|
|
|
else:
|
|
raw_exp = exp
|
|
|
|
print("convert---"+exp+"---to---"+raw_exp)
|
|
for longname in strlist:
|
|
shortname = longname2shortname(longname)[0]
|
|
print("checking:---exp---"+raw_exp+"---objname---"+shortname)
|
|
if casecheck == False:
|
|
if re.search(raw_exp,shortname,re.I) != None:
|
|
matchlist.append(longname)
|
|
print("succeed")
|
|
else:
|
|
print("failed")
|
|
continue
|
|
else:
|
|
if re.search(raw_exp,shortname) != None:
|
|
matchlist.append(longname)
|
|
print("succeed")
|
|
else:
|
|
print("failed")
|
|
continue
|
|
|
|
if len(matchlist) == 0:
|
|
print("no obj match expression!")
|
|
return None
|
|
else:
|
|
return matchlist
|
|
|
|
|
|
|
|
def expCreateDisplayLayer(exp,name,prefix = "",casecheck = False,childcheck = True,nodetype = "all"):
|
|
selected = mocaphelperutility.getSelectedNodes()
|
|
if childcheck:
|
|
|
|
untestlist = mocaphelperutility.getChildNodes(selected,nodetype=nodetype)
|
|
else:
|
|
untestlist = selected
|
|
combinelist = []
|
|
#check for multiple exp exist
|
|
if exp.find(";") != -1 or name.find(";") != -1:
|
|
splitedexplist = exp.split(";")
|
|
splitednamelist = name.split(";")
|
|
if len(splitedexplist) != len(splitednamelist):
|
|
raise Exception("name and exp count not match!")
|
|
else:
|
|
for i in range(len(splitedexplist)):
|
|
combinelist.append([splitedexplist[i],splitednamelist[i]])
|
|
else:
|
|
combinelist =[[exp,name]]
|
|
|
|
for combine in combinelist:
|
|
|
|
matchlist = retestlist(untestlist,combine[0],casecheck)
|
|
print("matchlist:",matchlist)
|
|
|
|
createDisplayLayer(prefix+combine[1],matchlist)
|
|
|
|
|
|
def createDisplayLayer(name,objlist):
|
|
cmds.createDisplayLayer(n= name,nr = True,empty = True)
|
|
cmds.editDisplayLayerMembers(name,objlist,nr = True)
|
|
|
|
|
|
|
|
def extractLayerInfo(ui):
|
|
name = cmds.editDisplayLayerGlobals( query=True, cdl=True )
|
|
members =cmds.editDisplayLayerMembers( name, query=True )
|
|
exp = ""
|
|
for member in members:
|
|
noPrefixMember = deleteRigPrefix(member)
|
|
if noPrefixMember[1] == True:
|
|
exp = exp+"."+ noPrefixMember[0] +"|"
|
|
else:
|
|
exp = exp+ noPrefixMember[0] +"|"
|
|
# remove last "|",cause it will match all name str.
|
|
exp = exp[0:-1]
|
|
ui.ui.re_layerNameEdit.setText(name)
|
|
ui.ui.re_expEdit.setText(exp)
|
|
return
|
|
|
|
def selMainCtrl():
|
|
# main name:
|
|
# ".MainExtra2" ".wenchangtai" ".Main_all"
|
|
curves = cmds.ls(type = "dagNode")
|
|
curves = mocaphelperutility.filterCertainTypeInList(curves,type = "nurbsCurve")
|
|
matchlist = []
|
|
a = retestlist(curves,".MainExtra2$|.wenchangtai$|.Main_all$")
|
|
if a != None:
|
|
matchlist += a
|
|
cmds.select(cl = True)
|
|
cmds.select(matchlist)
|
|
|
|
|
|
def longname2shortname(name):
|
|
id = name.rfind("|")
|
|
if id == -1:
|
|
return name,False
|
|
else:
|
|
return name[id+1:],True
|
|
|
|
def deleteRigPrefix(name):
|
|
id = name.rfind(":")
|
|
if id == -1:
|
|
return name,False
|
|
else:
|
|
return name[id:],True
|
|
|
|
|
|
|
|
def presetfileRebuild(filepath,backupfilepath):
|
|
backupstr = presetFileRead(backupfilepath)
|
|
presetFileWrite(filepath,backupstr)
|
|
|
|
|
|
|
|
def rawStrBuild(rawstr):
|
|
split = rawstr.split("\n")
|
|
newlist = []
|
|
for i in range(int(len(split)/2)):
|
|
name = split[2*i]
|
|
exp = split[2*i+1]
|
|
newlist.append([name,exp])
|
|
if len(newlist) == 0:
|
|
raise Exception("split list is empty!")
|
|
else:
|
|
return newlist
|
|
|
|
def strAppend(oristr,line1,line2):
|
|
newstr = oristr+"\n"+str(line1)+"\n"+str(line2)
|
|
return newstr
|
|
|
|
|
|
def presetFileRead(filepath):
|
|
file = open(filepath,mode ="r+")
|
|
file.seek(0,0)
|
|
raw = file.read()
|
|
file.close()
|
|
return raw
|
|
|
|
|
|
def presetFileWrite(filepath,str):
|
|
print("writing file:\n"+str)
|
|
file = open(filepath,mode ="w+")
|
|
file.seek(0,0)
|
|
file.write(str)
|
|
file.close()
|
|
|