Пример #1
0
    def getPref(self, pref):
        r = aToolsMod.loadInfoWithUser("userPrefs", pref)
        if r == None:
            default = self.getDefPref(pref)
            r = default

        return r
Пример #2
0
    def loadHotkeys(self, defaults=False):

        allHotkeys = hotkeys.getHotkeys()
        hotkeysDict = []

        for n, loopHotkey in enumerate(allHotkeys):
            for loopItem in loopHotkey:
                hotkeysDict.append(loopItem)

        for loopIndex, loopCommand in enumerate(hotkeysDict):

            command = loopCommand["command"]
            name = loopCommand["name"]
            key = loopCommand["hotkey"]
            alt = loopCommand["alt"]
            ctl = loopCommand["ctl"]
            toolTip = loopCommand["toolTip"]

            if not defaults:
                hotkeyData = aToolsMod.loadInfoWithUser("hotkeys", name)
                if hotkeyData != None:
                    key = hotkeyData[0]
                    alt = hotkeyData[1]
                    ctl = hotkeyData[2]

            cmds.checkBox('ctl%s' % name, edit=True, value=ctl)
            cmds.checkBox('alt%s' % name, edit=True, value=alt)
            cmds.scrollField('key%s' % name, edit=True, text=key)

            self.updateHotkeyCheck(name)
Пример #3
0
    def importSets(self, *args):
        cmds.waitCursor(state=True)

        setsData = aToolsMod.loadInfoWithUser("selectSets", "setsData")
        self.createSetsFromData(setsData)

        cmds.waitCursor(state=False)
Пример #4
0
    def removeCustomSwitch(self, switch):
        allCustomSwitch = aToolsMod.loadInfoWithUser("spaceSwitch",
                                                     "customSwitch") or []

        allCustomSwitch.remove(switch)
        aToolsMod.saveInfoWithUser("spaceSwitch", "customSwitch",
                                   allCustomSwitch)
Пример #5
0
    def __init__(self):

        if G.aToolsBar.motionTrail: return
        G.aToolsBar.motionTrail = self

        self.STORE_NODE = "specialTools"
        self.MOTION_TRAIL_ATTR = "twistIkObjs"
        self.PRE_POS_RANGE = "motionTrailPrePosRange"
        self.SIZE = "motionTrailSize"
        self.PREF_KEY = "motionTrailPrefKey"
        self.CAMERA_KEY = "motionTrailCameraRelative"
        self.mainGroupNode = "aTools_MotionTrail"
        self.queueOrder = 5
        self.prePosRanges = [3, 6, 12, 24, "Playback Range"]
        self.defaultPrePosRange = 24
        self.twistIkObjs = []
        self.constraintLocators = []
        self.firstFrame = 0
        self.lastFrame = 0
        self.nodeInfo = {}
        self.offsetCtrlsPosition = {}
        self.onOff = False
        self.blockingMode = False
        self.lastCurvesEdited = None
        cameraRelativeMode = aToolsMod.loadInfoWithUser(
            "userPrefs", self.CAMERA_KEY)
        self.cameraRelativeMode = cameraRelativeMode if cameraRelativeMode != None else True

        #MOTION TRAIL DRAW
        self.color = {
            "curr_frame": (1, 0, 0),
            "key_before": (0, 0, 1),
            "key_after": (0, 1, 0),
            "frame_before": (0, 0, 1),
            "frame_after": (0, 1, 0),
            "dirty": (1, 1, 1),
            "line": [(1, 1, 1), (1, 1, 0), (0, 1, 1), (1, 0, 1)]
        }
        self.size = {
            "curr_frame": 5,
            "key_before": 3,
            "key_after": 3,
            "frame_before": 1,
            "frame_after": 1,
            "dirty": 1,
            "line": .5
        }
        self.baseOpacity = 1
        self.customSizes = [["small", 1], ["medium", 2], ["large", 4]]
        self.defaultSize = "medium"
        self.prefKeys = ["selection", "motionTrail"]
        self.defaultPrefKey = "selection"

        self.clear()
Пример #6
0
    def getColoredKeys(self):

        if not G.TM_coloredKeys:
            r = aToolsMod.loadInfoWithUser("userPrefs", "coloredKeys")
        else:
            r = G.TM_coloredKeys

        if r == None:
            default = True
            r = default

        G.TM_coloredKeys = r

        return r
Пример #7
0
    def remapNamespaces(self, *args):
        winName = "remapNamespacesWindow"
        if cmds.window(winName, query=True, exists=True):
            cmds.deleteUI(winName)
        window = cmds.window(winName, title="Remap Namespaces")

        cmds.columnLayout(adjustableColumn=True)
        cmds.rowColumnLayout(numberOfColumns=3)

        animData = aToolsMod.loadInfoWithUser("copyPasteAnim", "animData")
        inputNameSpaces = list(
            set(utilMod.getNameSpace(animData["objects"])[0]))
        outputNameSpaces = utilMod.listAllNamespaces()

        for loopNameSpace in inputNameSpaces:

            nameSpace = loopNameSpace[:-1]

            eval(
                "cmds.text('input%s', align='right', w=150, h=26, label='%s:   ')"
                % (nameSpace, nameSpace))
            eval("cmds.textField('output%s', w=150, h=26, text='%s')" %
                 (nameSpace, nameSpace))
            eval("cmds.button('output%s', w=26, h=26, label='...')" %
                 (nameSpace))
            if outputNameSpaces:
                cmds.popupMenu(button=1)
                for loopOutput in outputNameSpaces:
                    cmds.menuItem("menu%s" % loopOutput,
                                  label=str(loopOutput),
                                  command=lambda x, loopOutput=loopOutput,
                                  nameSpace=nameSpace, *args: self.
                                  setOutputValue(loopOutput, nameSpace))

        cmds.setParent('..')

        cmds.button(label="Paste Animation in Place",
                    command=lambda *args: self.remapAndPasteAnimation(
                        animData, inputNameSpaces, pasteInPlace=True))
        cmds.button(label="Paste Original Animation",
                    command=lambda *args: self.remapAndPasteAnimation(
                        animData, inputNameSpaces, pasteInPlace=False))

        cmds.showWindow(window)
Пример #8
0
    def pasteAnimation(self,
                       animData=None,
                       pasteInPlace=True,
                       onlySelectedNodes=None,
                       *args):
        cmds.waitCursor(state=True)

        if not onlySelectedNodes:
            onlySelectedNodes = cmds.menuItem("onlySelectedNodesMenu",
                                              query=True,
                                              checkBox=True)
        if not animData:
            animData = aToolsMod.loadInfoWithUser("copyPasteAnim", "animData")
        animMod.applyAnimData(animData,
                              pasteInPlace,
                              onlySelectedNodes,
                              showProgress=True)

        cmds.waitCursor(state=False)
Пример #9
0
    def hasUpdate(self):
        return False

        response = None

        if utilMod.hasInternet(UPDATE_URL):
            try:
                response = urllib2.urlopen(UPDATE_URL, timeout=60)
            except:
                pass

        if response is None:
            message = "aTools warning: Internet connection not detected. Offline aTools.zip not detected. You are no longer up-to-date."
            offlinePath = aToolsMod.loadInfoWithUser("userPrefs",
                                                     "offlinePath")
            if not offlinePath:
                cmds.warning(message)
            else:
                offlineFolder = offlinePath[0]
                offlineFilePath = "%s%saTools.zip" % (offlineFolder, os.sep)
                if not os.path.isfile(offlineFilePath):
                    cmds.warning(message)
                    return False

                fileModTime = os.path.getmtime(offlineFilePath)
                if str(fileModTime) != str(offlinePath[1]):
                    return "offline_update"

            return False

        try:
            for line in response:
                latestVersion = line
                break

            if VERSION not in latestVersion:
                return latestVersion

        except IOError:
            pass

        return False
Пример #10
0
    def checkUpdates(self, gui, layout, *args):

        if self.tryUpdate():

            if not G.GT_wasUpdated:
                hasUpdate = self.hasUpdate()
                if hasUpdate != False:
                    cmds.iconTextButton(label="Updating...",
                                        style='textOnly',
                                        h=gui.hb,
                                        parent=layout)
                    cmds.progressBar("aToolsProgressBar",
                                     maxValue=100,
                                     width=50,
                                     parent=layout)

                    if hasUpdate == "offline_update":
                        offlinePath = aToolsMod.loadInfoWithUser(
                            "userPrefs", "offlinePath")
                        offlineFolder = offlinePath[0]
                        offlineFilePath = "%s%saTools.zip" % (offlineFolder,
                                                              os.sep)
                        downloadUrl = "file:///%s%saTools.zip" % (
                            offlineFolder, os.sep)
                        fileModTime = os.path.getmtime(offlineFilePath)
                        offline = [offlineFilePath, fileModTime]
                    else:
                        downloadUrl = DOWNLOAD_URL
                        offline = None

                    function = lambda *args: self.updateaTools(
                        downloadUrl, offline)
                    G.deferredManager.sendToQueue(function, 1, "checkUpdates")
                    return

        self.warnUpdate()
Пример #11
0
    def openGui(self, *args):

        winName = "commandsWindow"
        height = 26
        commands = []
        names = []
        hotkeysDict = [[]]
        allHotkeys = hotkeys.getHotkeys()
        totalItems = sum(len(x) for x in allHotkeys)
        itemsCount = 0
        aB = 0
        totalColums = 2

        for n, loopHotkey in enumerate(allHotkeys):
            if itemsCount > (totalItems / totalColums) * (aB + 1):
                aB += 1
                hotkeysDict.append([])
            itemsCount += len(loopHotkey)
            for loopItem in loopHotkey:
                hotkeysDict[aB].append(loopItem)
                hotkeysDict[aB][-1]["colorValue"] = self.colorValues[
                    self.allColors[n]]

        if cmds.window(winName, query=True, exists=True):
            cmds.deleteUI(winName)

        window = cmds.window(winName, title="Commands and Hotkeys")
        mainLayout = cmds.columnLayout(adjustableColumn=True)
        columnsLayout = cmds.rowColumnLayout(numberOfColumns=totalColums)

        for loopColumn in xrange(totalColums):

            parent = cmds.rowColumnLayout(numberOfColumns=7,
                                          columnSpacing=([2, 5], [3,
                                                                  3], [4, 3],
                                                         [5, 1], [6,
                                                                  5], [7, 5]),
                                          parent=columnsLayout)

            cmds.text(label='Command', h=height)
            cmds.text(label='Ctl', h=height)
            cmds.text(label='Alt', h=height)
            cmds.text(label='Key', h=height)
            cmds.text(label='', h=height)
            cmds.text(label='Set Hotkey', h=height)
            cmds.text(label='Assigned to', align="left", h=height)

            for loopIndex, loopCommand in enumerate(hotkeysDict[loopColumn]):

                command = loopCommand["command"]
                name = loopCommand["name"]
                key = loopCommand["hotkey"]
                alt = loopCommand["alt"]
                ctl = loopCommand["ctl"]
                toolTip = loopCommand["toolTip"]
                color = loopCommand["colorValue"]

                hotkeyData = aToolsMod.loadInfoWithUser("hotkeys", name)
                if hotkeyData != None:
                    key = hotkeyData[0]
                    alt = hotkeyData[1]
                    ctl = hotkeyData[2]

                cmds.button("command%s" % name,
                            label=utilMod.toTitle(name),
                            command=command,
                            annotation=toolTip,
                            h=height,
                            bgc=color,
                            parent=parent)
                cmds.checkBox('ctl%s' % name,
                              label='',
                              value=ctl,
                              changeCommand=lambda x, name=name, *args: self.
                              updateHotkeyCheck(name),
                              h=height,
                              parent=parent)
                cmds.checkBox('alt%s' % name,
                              label='',
                              value=alt,
                              changeCommand=lambda x, name=name, *args: self.
                              updateHotkeyCheck(name),
                              h=height,
                              parent=parent)
                cmds.scrollField('key%s' % name,
                                 w=80,
                                 text=key,
                                 keyPressCommand=lambda x, name=name, *args:
                                 self.updateHotkeyCheck(name),
                                 h=height,
                                 parent=parent)
                cmds.button(label=" ", h=height, parent=parent)
                self.popSpecialHotkeys(name)
                cmds.button(
                    label='>',
                    command=lambda x, name=name, command=command, *args: self.
                    setHotkey(self.getHotkeyDict([name], [command])),
                    h=height,
                    parent=parent)
                cmds.text("query%s" % name,
                          align="left",
                          label=self.hotkeyCheck(key, ctl, alt),
                          font="plainLabelFont",
                          h=height,
                          parent=parent)

                commands.append(command)
                names.append(name)

                #cmds.button(label="Set Hotkey", command=lambda *args: getHotkeyDict([name], [command], [key], [alt], [ctl], [cmd]))
                self.updateHotkeyCheck(name)

        #cmds.rowLayout(numberOfColumns=2, columnAttach=([1, 'left', 0],[2, 'right', 0]), adjustableColumn=2)
        cmds.button(label="Load Defaults",
                    command=lambda *args: self.loadHotkeys(True),
                    parent=mainLayout)
        cmds.button(label="Set All Hotkeys",
                    command=lambda *args: self.setHotkey(
                        self.getHotkeyDict(names, commands)),
                    parent=mainLayout)

        cmds.showWindow(window)
Пример #12
0
    def populateMenu(self, menu, *args):

        uiMod.clearMenuItems(menu)

        tokenCustomDivider = False
        selObjects = cmds.ls(selection=True)

        if not selObjects: return

        channels = animMod.getAllChannels()
        channelList = {}
        tokenList = []

        for n, loopObjectChannel in enumerate(channels):
            obj = selObjects[n]
            if loopObjectChannel:
                for loopChannel in loopObjectChannel:
                    tokens = animMod.getTokens(obj, loopChannel)
                    if tokens and len(tokens) > 1:
                        if not channelList.has_key(loopChannel):
                            channelList[loopChannel] = {
                                "objects": [],
                                "tokens": []
                            }
                        channelList[loopChannel]["objects"].append(obj)
                        channelList[loopChannel]["tokens"].append(tokens)

        for loopChannelList in channelList:
            newMenu = cmds.menuItem(subMenu=True,
                                    label=utilMod.toTitle(loopChannelList),
                                    parent=menu)
            objects = channelList[loopChannelList]["objects"]
            tokens = channelList[loopChannelList]["tokens"]
            mergedTokens = utilMod.mergeLists(tokens)
            tokenDict = []

            for loopMergedTokens in mergedTokens:
                tokenDict.append({"token": loopMergedTokens, "objects": []})
                for n, loopObject in enumerate(objects):
                    t = tokens[n]
                    if loopMergedTokens in t:
                        tokenDict[-1]["objects"].append(loopObject)

            cmds.radioMenuItemCollection(parent=menu)

            for n, loopTokenDict in enumerate(tokenDict):
                tokenCustomDivider = True
                token = loopTokenDict["token"]
                objects = loopTokenDict["objects"]
                selectedList = [
                    cmds.getAttr("%s.%s" % (loopObj, loopChannelList))
                    for loopObj in objects
                ]
                radioSelected = False

                if len(set(selectedList)) == 1:
                    if selectedList[0] == n:
                        radioSelected = True

                cmds.menuItem(label=utilMod.toTitle(token),
                              radioButton=radioSelected,
                              parent=newMenu,
                              command=lambda x, objects=objects, channel=
                              loopChannelList, token=token, *args: self.
                              spaceSwitch([objects, channel, token]))

            #ALL KEYS
            cmds.menuItem(divider=True, parent=newMenu)
            newMenu = cmds.menuItem(subMenu=True,
                                    label='All Keys',
                                    parent=newMenu)

            cmds.radioMenuItemCollection(parent=newMenu)

            for n, loopTokenDict in enumerate(tokenDict):
                token = loopTokenDict["token"]
                objects = loopTokenDict["objects"]
                selectedList = [
                    cmds.getAttr("%s.%s" % (loopObj, loopChannelList))
                    for loopObj in objects
                ]
                radioSelected = False

                if len(set(selectedList)) == 1:
                    if selectedList[0] == n:
                        radioSelected = True

                cmds.menuItem(label=utilMod.toTitle(token),
                              radioButton=radioSelected,
                              parent=newMenu,
                              command=lambda x, objects=objects, channel=
                              loopChannelList, token=token, *args: self.
                              spaceSwitch([objects, channel, token], all=True))

        # CUSTOM SWITCH
        allCustomSwitch = aToolsMod.loadInfoWithUser("spaceSwitch",
                                                     "customSwitch") or []
        channelboxSelObjs = animMod.channelBoxSel()

        if channelboxSelObjs:
            obj = ".".join(channelboxSelObjs[0].split(".")[:-1])
            selectedSwitch = [
                loopAttr.split(".")[-1] for loopAttr in channelboxSelObjs
                if utilMod.isDynamic(obj,
                                     loopAttr.split(".")[-1])
            ]
            if len(selectedSwitch
                   ) > 0 and selectedSwitch not in allCustomSwitch:
                allCustomSwitch.append(selectedSwitch)
                aToolsMod.saveInfoWithUser("spaceSwitch", "customSwitch",
                                           allCustomSwitch)

        # populate menu
        if len(allCustomSwitch) > 0:

            divider = False
            customSwitchesAdded = []
            customSwitchesMenu = []

            for loopObj in selObjects:

                for loopCustomSwitch in sorted(allCustomSwitch,
                                               key=len,
                                               reverse=True):

                    if len(loopCustomSwitch) == 0: continue

                    switchName = utilMod.getNameSpace([loopObj
                                                       ])[1][0].split(".")[0]
                    exit = False

                    for loopAttr in loopCustomSwitch:
                        objAttr = "%s.%s" % (loopObj, loopAttr)
                        if not cmds.objExists(objAttr):
                            exit = True
                            break

                    if exit: continue

                    customSwitchesMenu.append({
                        "objects": [loopObj],
                        "switches": loopCustomSwitch
                    })

                    for loopMenu in customSwitchesMenu[:-1]:
                        if loopObj in loopMenu["objects"] and len(
                                loopCustomSwitch) < len(
                                    loopMenu["switches"]
                                ) and utilMod.listIntersection(
                                    loopMenu["switches"],
                                    loopCustomSwitch) == loopCustomSwitch:
                            customSwitchesMenu.pop()
                            break
                        if loopCustomSwitch == loopMenu["switches"]:
                            loopMenu["objects"].append(loopObj)
                            customSwitchesMenu.pop()
                            break

            for loopSwitchMenu in customSwitchesMenu:

                objects = loopSwitchMenu["objects"]
                switches = loopSwitchMenu["switches"]
                switchName = ", ".join(
                    list(set(utilMod.getNameSpace(objects)[1])))

                if not divider and tokenCustomDivider:
                    divider = cmds.menuItem(divider=True, parent=menu)

                cmds.radioMenuItemCollection(parent=menu)

                newMenu = cmds.menuItem(subMenu=True,
                                        label=switchName,
                                        parent=menu)
                radioSelected = []

                for loopCustomSwitchAttr in switches:
                    switchAttr = loopCustomSwitchAttr.split(".")[-1]
                    objAttr = "%s.%s" % (objects[0], switchAttr)
                    minValue = cmds.addAttr(objAttr, query=True, minValue=True)
                    maxValue = cmds.addAttr(objAttr, query=True, maxValue=True)
                    currValue = cmds.getAttr(objAttr)
                    radioSelected.append((currValue == maxValue))

                    cmds.menuItem(
                        label=switchAttr,
                        radioButton=radioSelected[-1],
                        parent=newMenu,
                        command=lambda x, objects=objects, switchAttr=
                        switchAttr, switches=switches, *args: self.spaceSwitch(
                            [objects, switchAttr, switches], mode="custom"))

                switchAttr = "message"
                radioSelected = (list(set(radioSelected)) == [False])
                cmds.menuItem(
                    label="None",
                    radioButton=radioSelected,
                    parent=newMenu,
                    command=lambda x, objects=objects, switchAttr=switchAttr,
                    switches=switches, *args: self.spaceSwitch(
                        [objects, switchAttr, switches], mode="custom"))

                #ALL KEYS

                cmds.menuItem(divider=True, parent=newMenu)
                allMenu = cmds.menuItem(subMenu=True,
                                        label='All Keys',
                                        parent=newMenu)
                radioSelected = []
                cmds.radioMenuItemCollection(parent=menu)

                for loopCustomSwitchAttr in switches:
                    switchAttr = loopCustomSwitchAttr.split(".")[-1]
                    objAttr = "%s.%s" % (objects[0], switchAttr)
                    minValue = cmds.addAttr(objAttr, query=True, minValue=True)
                    maxValue = cmds.addAttr(objAttr, query=True, maxValue=True)
                    currValue = cmds.getAttr(objAttr)
                    radioSelected.append((currValue == maxValue))
                    cmds.menuItem(label=switchAttr,
                                  radioButton=radioSelected[-1],
                                  parent=allMenu,
                                  command=lambda x, objects=objects, switchAttr
                                  =switchAttr, switches=switches, *args: self.
                                  spaceSwitch([objects, switchAttr, switches],
                                              all=True,
                                              mode="custom"))

                switchAttr = "message"
                radioSelected = (list(set(radioSelected)) == [False])
                cmds.menuItem(label="None",
                              radioButton=radioSelected,
                              parent=allMenu,
                              command=lambda x, objects=objects, switchAttr=
                              switchAttr, switches=switches, *args: self.
                              spaceSwitch([objects, switchAttr, switches],
                                          all=True,
                                          mode="custom"))

                #DELETE

                cmds.menuItem(label="Remove",
                              parent=newMenu,
                              command=lambda x, switches=switches, *args: self.
                              removeCustomSwitch(switches))
Пример #13
0
 def getPrefSize(self):
     size = aToolsMod.loadInfoWithUser("userPrefs", self.SIZE)
     if not size: size = self.defaultSize
     return size
Пример #14
0
 def getPrePosRange(self):
     range = aToolsMod.loadInfoWithUser("userPrefs", self.PRE_POS_RANGE)
     if not range: range = self.defaultPrePosRange
     return range
Пример #15
0
 def getPrefKey(self):
     prefKey = aToolsMod.loadInfoWithUser("userPrefs", self.PREF_KEY)
     if not prefKey: prefKey = self.defaultPrefKey
     return prefKey
Пример #16
0
versionInfoPath = "%sversion_info.txt" % aToolsMod.getaToolsPath(
    inScriptsFolder=False)
versionInfoContents = utilMod.readFile(versionInfoPath)
VERSION = versionInfoContents[0].split(" ")[-1].replace("\n", "")
WHATISNEW = "".join(versionInfoContents[1:])
KEYSLIST = [
    "Up", "Down", "Left", "Right", "", "Page_Up", "Page_Down", "Home", "End",
    "Insert", "", "Return", "Space", "", "F1", "F2", "F3", "F4", "F5", "F6",
    "F7", "F8", "F9", "F10", "F11", "F12"
]
SITE_URL = "http://camiloalan.wix.com/atoolswebsite"
ATOOLS_FOLDER = "http://www.trickorscript.com/aTools/"
UPDATE_URL = "%slatest_version.txt" % ATOOLS_FOLDER
DOWNLOAD_URL = "%saTools.zip" % ATOOLS_FOLDER
lastUsedVersion = aToolsMod.loadInfoWithUser("userPrefs", "lastUsedVersion")
HELP_URL = "http://camiloalan.wix.com/atoolswebsite#!help/cjg9"
DONATE_URL = "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5RQLT89A239K6"

PREFS = [{
    "name": "tumbleOnObjects",
    "command": "tumbleOnObjects.switch(onOff)",
    "default": True
}, {
    "name": "autoFramePlaybackRange",
    "command": "framePlaybackRange.toggleframePlaybackRange(onOff)",
    "default": False
}, {
    "name": "autoJumpToSelectedKey",
    "command": "jumpToSelectedKey.togglejumpToSelectedKey(onOff)",
    "default": False
Пример #17
0
    def getMultiplier(self):
        name = aToolsMod.loadInfoWithUser("userPrefs", "microTransform")
        if name == None: name = self.defaultMultiplier

        return name