MetaBox/Scripts/Animation/aTools/commonMods/aToolsMod.py
2025-01-14 03:08:55 +08:00

238 lines
7.5 KiB
Python

'''
========================================================================================================================
Author: Alan Camilo
www.alancamilo.com
Requirements: aTools Package
------------------------------------------------------------------------------------------------------------------------
To install aTools, please follow the instructions in the file how_to_install.txt
------------------------------------------------------------------------------------------------------------------------
To unistall aTools, go to menu (the last button on the right), Uninstall
========================================================================================================================
'''
from maya import cmds
from maya import mel
import os
import shutil
import time
from aTools.generalTools.aToolsGlobals import aToolsGlobals as G
from aTools.commonMods import utilMod
G.A_NODE = "aTools_StoreNode"
G.USER_FOLDER = G.USER_FOLDER or mel.eval('getenv MAYA_APP_DIR') + os.sep + "aToolsSettings"
G.UM_timerMessage = ""
utilMod.makeDir(G.USER_FOLDER)
def getSceneId(forceCreate=False):
id = loadInfoWithScene("scene", "id") if not forceCreate else False
if not id:
id = time.time()
saveInfoWithScene("scene", "id", id)
return str(id)
def saveInfoWithScene(storeNode, attr, value):
with G.aToolsBar.createAToolsNode:
cmds.undoInfo(stateWithoutFlush=False)
currSel = None
if not cmds.objExists(G.A_NODE) or not cmds.objExists(storeNode): currSel = cmds.ls(selection=True)
if not cmds.objExists(G.A_NODE): cmds.createNode('mute', name=G.A_NODE)
if not cmds.objExists(storeNode): cmds.createNode('mute', name=storeNode)
if currSel: cmds.select(currSel)
if not cmds.isConnected("%s.output"%G.A_NODE, "%s.mute"%storeNode): cmds.connectAttr("%s.output"%G.A_NODE, "%s.mute"%storeNode)
if not cmds.objExists("%s.%s"%(storeNode, attr)): cmds.addAttr(storeNode, longName=attr, dataType="string", keyable=False)
cmds.setAttr("%s.%s"%(storeNode, attr), value, type="string")
cmds.undoInfo(stateWithoutFlush=True)
def loadInfoWithScene(storeNode, attr):
obj = "%s.%s"%(storeNode, attr)
if cmds.objExists(obj):
return cmds.getAttr(obj)
else:
return None
def saveFileWithUser(folder, file, value, ext=None):
filePath = getSaveFilePath("%s%s%s"%(folder, os.sep, file), ext)
folderPath = utilMod.getFolderFromFile(filePath)
if os.path.isfile(filePath): os.remove(filePath)
if not os.path.isdir(folderPath): os.makedirs(folderPath)
newFileContents = "%s"%value
utilMod.writeFile(filePath, newFileContents)
def deleteFileWithUser(folder, file, ext="aTools"):
filePath = getSaveFilePath("%s%s%s"%(folder, os.sep, file), ext)
if os.path.isfile(filePath): os.remove(filePath)
def deleteFolderWithUser(folder):
folderPath = "%s%s%s"%(G.USER_FOLDER, os.sep, folder)
if os.path.isdir(folderPath): shutil.rmtree(folderPath)
def renameFolderWithUser(oldFolder, newFolder):
oldUserFolder = "%s%s%s"%(G.USER_FOLDER, os.sep, oldFolder)
newUserFolder = "%s%s%s"%(G.USER_FOLDER, os.sep, newFolder)
if os.path.isdir(oldUserFolder): os.rename(oldUserFolder, newUserFolder)
def loadFileWithUser(folder, file, ext="aTools"):
filePath = getSaveFilePath("%s%s%s"%(folder, os.sep, file), ext)
readFileContents = utilMod.readFile(filePath)
if readFileContents != None:
return eval(readFileContents[0])
return None
def readFilesWithUser(folder, ext=None):
filePath = getSaveFilePath("%s%s%s"%(folder, os.sep, "dummy"))
folderPath = utilMod.getFolderFromFile(filePath)
if not os.path.isdir(folderPath): return []
filesInFolder = [loopFile for loopFile in os.listdir(folderPath) if ext is None or ext is True or loopFile.endswith(".%s"%ext)]
if ext is None:
for n, loopFile in enumerate(filesInFolder):
filesInFolder[n] = ".".join(loopFile.split(".")[:-1])
return filesInFolder
def readFoldersWithUser(folder):
folderPath = "%s%s%s"%(G.USER_FOLDER, os.sep, folder)
if not os.path.isdir(folderPath): return []
foldersInFolder = [loopFolder for loopFolder in os.listdir(folderPath) if os.path.isdir(folderPath) if loopFolder != ".directory"]
return foldersInFolder
def saveInfoWithUser(file, attr, value, delete=False):
filePath = getSaveFilePath(file)
newFileContents = []
writeNew = True
if isinstance(value, str): value = "\"%s\""%value
readFileContents = utilMod.readFile(filePath)
if readFileContents != None:
for loopLine in readFileContents:
if loopLine.find(attr) == 0:
if not delete:
newFileContents.append("%s = %s\n"%(attr, value))
writeNew = None
else:
if len(loopLine) > 1:
newFileContents.append(loopLine)
if writeNew:
if not delete: newFileContents.append("%s = %s\n"%(attr, value))
utilMod.writeFile(filePath, newFileContents)
def loadInfoWithUser(file, attr):
filePath = getSaveFilePath(file)
readFileContents = utilMod.readFile(filePath)
if readFileContents != None:
for loopLine in readFileContents:
if loopLine.find(attr) == 0:
value = loopLine[(loopLine.find("=")+2):]
return eval(value)
return None
def getUserPref(pref, default):
pref = loadInfoWithUser("userPrefs", pref)
if pref == None: pref = default
return pref
def setUserPref(pref, onOff):
saveInfoWithUser("userPrefs", pref, onOff)
def setPref(pref, preferences, init=False, default=False):
for loopPref in preferences:
name = loopPref["name"]
if pref == name:
if init:
onOff = getPref(pref, preferences)
elif default:
onOff = getDefPref(pref, preferences)
cmds.menuItem("%sMenu"%name, edit=True, checkBox=onOff)
saveInfoWithUser("userPrefs", name, "", True)
else:
onOff = cmds.menuItem("%sMenu"%name, query=True, checkBox=True)
saveInfoWithUser("userPrefs", pref, onOff)
def getPref(pref, preferences):
r = loadInfoWithUser("userPrefs", pref)
if r == None:
default = getDefPref(pref, preferences)
r = default
return r
def getDefPref(pref, preferences):
for loopPref in preferences:
name = loopPref["name"]
if pref == name:
default = loopPref["default"]
return default
def getaToolsPath(level=1, inScriptsFolder=True):
if inScriptsFolder:
mayaAppDir = mel.eval('getenv MAYA_APP_DIR')
scriptsDir = "%s%sscripts%s"%(mayaAppDir, os.sep, os.sep)
aToolsFolder = "%s%saTools%s"%(scriptsDir, os.sep, os.sep)
if level==1: return aToolsFolder
if level==2: return scriptsDir
return utilMod.getFolderFromFile(__file__, level)
def getSaveFilePath(saveFile, ext="aTools"):
saveFilePath = G.USER_FOLDER + os.sep + saveFile
if ext: saveFilePath += ".%s"%ext
return saveFilePath