def preexecute(self):

    redshiftInstallRoot = self.__RedshiftInstallRoot
    if not os.path.exists(redshiftInstallRoot):
      raise OPIException("The path\n\n%s\n\ndoes not exist." % redshiftInstallRoot)
      return

    extractTool = os.path.join(redshiftInstallRoot, 'util', 'xsiaddonExtractor.exe')
    if not os.path.exists(extractTool):
      raise OPIException("The path\n\n%s\n\ndoes not exist." % extractTool)
      return
    def executeMaya(self):
        maya = self.host.apis['maya']
        db = self.host.apis['db']
        cmds = maya.cmds
        mel = maya.mel

        # --------------------
        # Get reference file path and import
        # --------------------
        charFlav = self.args.getValue("charFlav")
        if charFlav == "- Please select -":
            raise OPIException("Please select a character from the list")
        elif charFlav in self.__flavsOne:
            charRefDir = os.path.join(self.__frittRoot, "3D", "REFERENCE",
                                      "ONE")
        elif charFlav in self.__flavsTwo:
            charRefDir = os.path.join(self.__frittRoot, "3D", "REFERENCE",
                                      "TWO")
        elif charFlav in self.__flavsThree:
            charRefDir = os.path.join(self.__frittRoot, "3D", "REFERENCE",
                                      "THREE")
        elif charFlav in self.__flavsMinis:
            charRefDir = os.path.join(self.__frittRoot, "3D", "REFERENCE",
                                      "MINIS")
        elif charFlav in self.__flavsStripper:
            charRefDir = os.path.join(self.__frittRoot, "3D", "REFERENCE",
                                      "STRIPPER")

        if charFlav.startswith("Default_"):
            charFlav, texture = charFlav.split("_")
            charRefName = charFlav + "_Clean_" + texture
        else:
            charRefName = charFlav + "_Clean"
        charRefPath = charRefName + ".mb"
        charRefPath = os.path.join(charRefDir, charRefPath)

        refNodes = cmds.file(charRefPath,
                             r=True,
                             type="mayaBinary",
                             mergeNamespacesOnClash=False,
                             namespace=charRefName,
                             returnNewNodes=True)
        refShapes = []
        for refNode in refNodes:
            if cmds.objectType(refNode) == "transform":
                refShapes += [refNode]

        # --------------------
        # Import abc cache
        # --------------------
        version = self.args.getValue("version")
        abcPath = self.__versionDict[version]
        abcImportString = "AbcImport -mode import -connect \""
        abcImportString += refShapes[0]
        if len(refShapes) > 1:
            for shape in refShapes[1:]:
                abcImportString += " " + str(shape)
        abcImportString += "\""
        abcImportString += " \"%s\"" % (abcPath.replace("\\", "/"))
        cacheNode = mel.eval(abcImportString)
Beispiel #3
0
    def executeMaya(self):

        maya = self.host.apis['maya']
        cmds = maya.cmds

        # ----
        # Check if current scene has been modified
        # ----
        currentSceneFile = cmds.file(q=True, sn=True)
        fileModified = cmds.file(q=True, modified=True)

        if fileModified:
            confirmDialog = cmds.confirmDialog(
                title='Save Changes',
                message='Save Changes to\n' + currentSceneFile,
                button=['Save', "Don't Save", 'Cancel'],
                defaultButton='Save',
                cancelButton='Cancel',
                dismissString='Cancel')
            if confirmDialog == 'Save':
                cmds.SaveScene()
            elif confirmDialog == "Don't Save":
                cmds.file(modified=False)
            else:
                raise OPIException('Canceled. Scene was not loaded.')
        # ----

        version = self.args.getValue("versionlist")
        pathToOpen = self.__versionlistCombo[str(version)][0]
        cmds.file(pathToOpen, open=True)
Beispiel #4
0
    def preexecute(self):
        maya = self.host.apis['maya']
        cmds = maya.cmds

        # Get framerange from playback range
        self.args.get("rangeStart").value = cmds.playbackOptions(q=True,
                                                                 minTime=True)
        self.args.get("rangeEnd").value = cmds.playbackOptions(q=True,
                                                               maxTime=True)
        # Get framerange from animation range
        # self.args.get("rangeStart").value = cmds.playbackOptions( q=True, animationStartTime=True )
        # self.args.get("rangeEnd").value = cmds.playbackOptions( q=True, animationEndTime=True )

        if len(cmds.ls(selection=True)) == 0:
            raise OPIException(
                "Nothing selected. Please select objects/sets and retry")
    def preexecute(self, **args):

        db = self.host.apis['db']
        maya = self.host.apis['maya']
        cmds = maya.cmds
        mel = maya.mel

        # ----
        # get current scene data and set default values
        # ----
        self.__filepath = cmds.file(q=True, sn=True)
        self.__filename = os.path.split(self.__filepath)[1]
        self.__scenename = self.__filename.rsplit(".", 1)[0]
        rangeIn = cmds.getAttr("defaultRenderGlobals.startFrame")
        rangeOut = cmds.getAttr("defaultRenderGlobals.endFrame")
        self.args.setValue("in", rangeIn)
        self.args.setValue("out", rangeOut)
        padding = cmds.getAttr("defaultRenderGlobals.extensionPadding")
        if 1 <= padding <= 5:
            self.args.setValue("padding", padding)
        else:
            self.args.setValue("padding", 5)
            self.args.setValue("changePadding", True)
            self.args.get("padding").enabled = True
        resolutionX = cmds.getAttr("defaultResolution.width")
        resolutionY = cmds.getAttr("defaultResolution.height")
        self.args.setValue("resX", resolutionX)
        self.args.setValue("resY", resolutionY)
        renderEngine = cmds.getAttr('defaultRenderGlobals.ren')
        self.__versionFromPrefix = "01"
        # ----

        # check current render engine
        if renderEngine == "redshift":
            self.__isRedshift = True
            if not cmds.window(
                    "unifiedRenderGlobalsWindow",
                    exists=True) or not cmds.objExists("redshiftOptions"):
                mel.eval('unifiedRenderGlobalsWindow;')
                mel.eval('fillSelectedTabForCurrentRenderer;')
                cmds.evalDeferred("pass")
                # cmds.workspaceControl("unifiedRenderGlobalsWindow", e=True, visible=False)
                cmds.layout("unifiedRenderGlobalsWindow",
                            e=True,
                            visible=False)
            skipExisting = cmds.getAttr("redshiftOptions.skipExistingFrames")
            self.args.setValue("skipExisting", skipExisting)
        else:
            self.__isRedshift = False

        # # check the project name
        # # if it is not specified, set it based on the project
        # try:
        #   project = db.queryFromPath('Project', self.__filepath)
        #   if not project:
        #     raise OPIException('The scene is not in a valid project!')
        # except:
        #   raise OPIException('The current scene is not part of a project.')
        # projectname = project.name

        project = cmds.workspace(q=True, sn=True)
        projectname = os.path.split(project)[1]
        self.args.setValue('projectname', projectname)

        # ----
        # check and read saved renderOutputInfo
        # ----

        def checkVersionFolder(path):
            pathHead, pathTail = os.path.split(path)
            if re.match("[vV][0-9]+", pathTail):
                self.__versionFromPrefix = pathTail[1:]
                return True
            elif pathTail.lower() == "<scene>":
                self.args.setValue("usescenetoken", True)
                self.args.get("rendername").enabled = False
                self.args.get("version").enabled = False
                return True
            else:
                return False

        def checkCameraFolder(path):
            pathHead, pathTail = os.path.split(path)
            if pathTail.lower() == "<camera>":
                return True
            else:
                return False

        def checkRenderLayerFolder(path):
            pathHead, pathTail = os.path.split(path)
            if pathTail.lower() == "<renderlayer>":
                return True
            else:
                return False

        def checkSceneFolder(path):
            pathHead, pathTail = os.path.split(path)
            if pathTail.lower() == "<scene>":
                return True
            else:
                return False

        renderPrefix = str(
            cmds.getAttr("defaultRenderGlobals.imageFilePrefix"))
        renderPrefix = renderPrefix.replace("/", "\\")
        projectPath = cmds.workspace(q=True, rootDirectory=True)

        scenename = self.__scenename
        if scenename:
            while scenename[-1].isdigit() or scenename[-1] == "_":
                scenename = scenename[:-1]
            if scenename[-2:] == "_v" or scenename[-2:] == "_V":
                scenename = scenename[:-2]
        self.__scenename = scenename

        # if len(renderPrefix) == 0 or renderPrefix == "None":
        #   renderpath = os.path.join(projectPath, "Render")
        #   renderfolder = ""
        #   self.__versionFromPrefix = "01" # default
        #   self.args.setValue("rendername", scenename)

        if len(renderPrefix) == 0 or renderPrefix == "None":
            renderPrefix = os.path.join(projectPath, "Render", "<Scene>",
                                        "<RenderLayer>",
                                        "<Scene>__<RenderLayer>")
            cmds.setAttr("defaultRenderGlobals.imageFilePrefix",
                         renderPrefix,
                         type="string")

        # else:
        renderpath, rendername = os.path.split(
            renderPrefix)  # rip off filename

        rendernameparts = [x for x in rendername.split("_") if x]
        if "<RenderLayer>" in rendernameparts:
            rendernameparts.remove("<RenderLayer>")
        for rendernamepart in rendernameparts:
            if re.match("[vV][0-9]+", rendernamepart):
                rendernameparts.remove(rendernamepart)
        rendername = "_".join(rendernameparts)
        if rendername:
            self.args.setValue("rendername", rendername)
        else:
            self.args.setValue("rendername", scenename)

        # check for renderlayer subfolder
        if checkRenderLayerFolder(renderpath):
            renderpath = os.path.split(renderpath)[0]
            self.args.setValue("renderlayerSubfolder", True)

        # check if folder at end is a version or camera folder
        if checkVersionFolder(renderpath):
            renderpath = os.path.split(renderpath)[0]
            if checkCameraFolder(renderpath):
                renderpath = os.path.split(renderpath)[0]
                self.args.setValue("camsubfolderBefore", True)
        elif checkCameraFolder(renderpath):
            renderpath = os.path.split(renderpath)[0]
            self.args.setValue("camsubfolderAfter", True)
            if checkVersionFolder(renderpath):
                renderpath = os.path.split(renderpath)[0]

        if renderPrefix[1] == ":":
            renderfolder = renderpath.split("Render\\")[-1]
            if renderpath == renderfolder:
                renderfolder = ""
        else:
            renderfolder = renderpath
            if len(renderpath) == 0:
                renderpath = os.path.join(projectPath, "Render")
            else:
                renderpath = os.path.join(projectPath, "Render", renderpath)

        self.args.setValue('version', self.__versionFromPrefix)
        self.args.setValue("renderpath", renderpath)
        self.__prevRenderpath = renderpath
        self.args.setValue("renderfolder", renderfolder)

        # self.__readJson()
        # ----

        # ----
        # Get Scene Cameras and fill UI Combo box
        # ----
        cameraList = cmds.ls(cameras=True)
        if "frontShape" in cameraList:
            cameraList.remove("frontShape")
        if "sideShape" in cameraList:
            cameraList.remove("sideShape")
        if "topShape" in cameraList:
            cameraList.remove("topShape")
        if "leftShape" in cameraList:
            cameraList.remove("leftShape")
        if len(cameraList) < 1:
            raise OPIException("No renderable Camera found")

        self.__cameraComboDict = {}
        cameraDict = self.__cameraComboDict
        renderableCams = 0
        for cam in cameraList:
            camName = cam.replace("Shape", "")
            cameraDict[camName] = cam
            if cmds.getAttr(cam + ".renderable") == 1:
                renderableCam = camName
                renderableCams += 1

        sortedCameraKeys = sorted(cameraDict.keys())

        if renderableCams == 1:
            self.args.get("camera")._setCombo(sortedCameraKeys, renderableCam)
        else:
            # self.args.setValue("changeCamera", True)
            # self.args.get("changeCamera").enabled = False
            # self.args.get("camera").enabled = True
            self.args.get("camera")._setCombo(sortedCameraKeys,
                                              sortedCameraKeys[0])
Beispiel #6
0
    def preexecute(self):
        db = self.host.apis['db']
        maya = self.host.apis['maya']
        cmds = maya.cmds

        # --------------------
        # check selection
        # --------------------
        sel = cmds.ls(selection=True)
        if len(sel) == 0:
            raise OPIException(
                "Nothing selected. Please select a character and retry")
        else:
            sel = sel[0]

            # check for "gChar" group for the character
            if "gChar" not in sel:
                par = cmds.listRelatives(sel, parent=True)
                while par is not None:
                    sel = par[0]
                    if "gChar" in sel:
                        cmds.select(sel)
                        break
                    par = cmds.listRelatives(sel, parent=True)
                else:
                    raise OPIException(
                        "Couldn't find the character's top group \"gChar\" in selection"
                    )
            # get flavor from selection
            for flav in self.__flavsList:
                if flav in sel:
                    self.__flavor = flav
                    break
                elif cmds.referenceQuery(sel, isNodeReferenced=True):
                    refPath = cmds.referenceQuery(sel, filename=True)
                    refFile = os.path.split(refPath)[1]
                    if flav in refFile:
                        self.__flavor = flav
                        break
            else:
                self.__flavor = None
            # get namespace from selection
            self.__ns = cmds.ls(sel, sns=True)[1]
            # check if selection is a child reference of another reference
            if cmds.referenceQuery(sel, isNodeReferenced=True):
                refNode = cmds.referenceQuery(sel, referenceNode=True)
                refPar = cmds.referenceQuery(refNode,
                                             referenceNode=True,
                                             parent=True)
                if refPar is not None:
                    raise OPIException(
                        "The selected object is a child of another reference. The export won't work"
                    )

        # --------------------
        # Get film from scene path
        # --------------------
        ws = cmds.workspace(q=True, sn=True)
        wsFilm = os.path.split(ws)[1]
        frittFilms = [
            "- Please select -"
        ]  #, "Frittmania", "Wettkauen" , "Lecker", "SuperStattSuess", "StripeClub"
        opiProjects = os.getenv("OPI_DATABASE_SUBFOLDERS").split(";")
        for opiProject in opiProjects:
            if opiProject.startswith("FRI_Fritt"):
                frittFilms += [opiProject.replace("FRI_Fritt_", "")]
        self.__currentScene = currentScene = cmds.file(q=True, sceneName=True)
        self.__currentSceneExt = currentSceneExt = os.path.splitext(
            currentScene)[1][1:]
        self.__currentSceneFolder = currentSceneFolder = os.path.split(
            currentScene)[0]
        for frittFilm in frittFilms:
            if frittFilm in wsFilm:
                film = frittFilm
                break
        else:
            film = frittFilms[0]

        self.args.get("film")._setCombo(frittFilms, film)

        # --------------------
        # Fill defaults for shot and name list
        # --------------------
        self.fillShotList(film)
        shot = self.args.getValue("shot")
        self.fillNameList(film, shot)
Beispiel #7
0
    def executeMaya(self):
        maya = self.host.apis['maya']
        db = self.host.apis['db']
        cmds = maya.cmds

        # --------------------
        # collect values and variables
        # --------------------
        frittRoot = self.__frittRoot
        dbRoot = self.__dbRoot
        charOrAss = self.args.getValue("object")
        if charOrAss == "Character":
            charOrAss = "Char"
        if self.__newName:
            exportName = self.args.getValue("newName")
        else:
            exportName = self.args.getValue("name")
        shot = self.args.getValue("shot")
        film = self.args.getValue("film")
        localAppData = os.getenv("LOCALAPPDATA")

        if exportName == "- Please select -":
            raise OPIException("Please give your export a name")
        if film == "- Please select -":
            raise OPIException("Please select a film from the list")
        if shot == "- Please select -":
            raise OPIException("Please select a shot from the list")

        currentSceneExt = self.__currentSceneExt
        if currentSceneExt == "mb":
            currentSceneType = "mayaBinary"
        elif currentSceneExt == "ma":
            currentSceneType = "mayaAscii"

        # --------------------
        # export selection
        # --------------------

        # exportDir = os.path.join(frittRoot, "3D", "Film_" + film, shot, "Cache", exportName)
        # exportDir = os.path.join(dbRoot, "FRI_Fritt_" + film, "3D", shot, "Cache", exportName)
        exportDir = os.path.join(dbRoot, "FRI_Fritt_" + film, "Cache", shot,
                                 exportName)
        exportFileName = "_".join([charOrAss, shot, exportName, film])
        exportPath = os.path.join(exportDir,
                                  exportFileName + "." + currentSceneExt)
        force = not self.__newName
        if not os.path.exists(exportDir):
            os.makedirs(exportDir)
        exportFile = cmds.file(exportPath,
                               force=force,
                               exportSelected=True,
                               constraints=True,
                               constructionHistory=True,
                               expressions=True,
                               channels=True,
                               shader=True,
                               preserveReferences=True,
                               type=currentSceneType)
        db.getOrCreateNew("fritt_export",
                          object=charOrAss,
                          shot=shot,
                          name=exportName,
                          film=film,
                          fileext=currentSceneExt,
                          createEmptyFile=False)

        print "# INFO: exported   \"%s\"" % (exportFile)

        # --------------------
        # write info json file
        # --------------------
        jsonFile = os.path.join(exportDir, exportFileName + ".json")
        flavor = self.__flavor
        ns = self.__ns
        charInfo = {}
        charInfo["flavor"] = flavor
        charInfo["namespace"] = ns
        with open(jsonFile, "w") as t:
            json.dump(charInfo, t, indent=4)

        # --------------------
        # write log file
        # --------------------
        logFile = os.path.join(exportDir, exportFileName + ".log")
        wTime = datetime.now().strftime("[%Y-%m-%d %H:%M]")
        wScene = cmds.file(q=True, sceneName=True, shortName=True)
        wUser = getpass.getuser()
        if os.path.exists(logFile):
            wBeginning = "\n"
        else:
            wBeginning = "Log\n"
        wLine = "%s%s   \"exported Character\"   %s   %s" % (wBeginning, wTime,
                                                             wScene, wUser)
        with open(logFile, "a") as t:
            t.write(wLine)

        # --------------------
        # write Deadline Info File
        # --------------------
        sceneName = cmds.file(q=True, sceneName=True,
                              shortName=True).rsplit(".")[0]
        wContent = "Plugin=MayaBatch\n\
Comment=" + exportName + "\n\
Priority=90\n\
Department=FRI_Fritt_TV\n\
Frames=1\n\
BatchName=Fritt_Cache_Export\n\
Name=" + sceneName + " [Script Job]"

        wPath = os.path.join(localAppData, "Thinkbox", "Deadline10", "temp",
                             "maya_deadline_info.job")
        with open(wPath, "w") as infoFile:
            infoFile.write(wContent)

        dlInfoFile = wPath

        # --------------------
        # write Deadline Plugin File
        # --------------------
        wContent = "ScriptJob=True\n\
Version=2018\n\
Build=64bit\n\
ProjectPath=E:/PROJECTS/FRI_Fritt_TV\n\
ScriptFilename=autoExportCache.py\n\
SceneFile=%s" % (os.path.normpath(exportFile).replace("\\", "/"))

        wPath = os.path.join(localAppData, "Thinkbox", "Deadline10", "temp",
                             "maya_deadline_job.job")
        with open(wPath, "w") as pluginFile:
            pluginFile.write(wContent)

        dlPluginFile = wPath

        # --------------------
        # write Maya Deadline Submission File
        # --------------------
        exportCachePy = "E:/PROJECTS/FRI_Fritt_TV/Scripts/autoExportCache.py"
        wContent = dlInfoFile + "\n" + dlPluginFile
        wContent += "\n" + str(exportCachePy)

        wPath = os.path.join(localAppData, "Thinkbox", "Deadline10", "temp",
                             "maya_submission.txt")
        with open(wPath, "w") as dlPluginFile:
            dlPluginFile.write(wContent)

        dlSubmissionFile = wPath

        # --------------------
        # submit to deadline
        # --------------------
        dlcExe = "C:/Program Files/Thinkbox/Deadline10/bin/deadlinecommand.exe"
        dlcArgs = dlSubmissionFile
        o = subprocess.Popen([dlcExe, dlcArgs], stdout=subprocess.PIPE)
        print o.communicate()[0]