def main(): if "spec" not in options: print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(options["spec"]) edit = ueEdit.getBuild(spec) if options["assets"]: if options["print"]: for sequence in sorted(edit): print "-> %s" % sequence for shot in sorted(edit[sequence]): print "---> %s" % shot elif options["create"]: # Get the group and check agains the data in the edit file to see if anything has changed spec = ueSpec.Spec(proj=os.getenv("PROJ")) for sequence in sorted(edit): print "-> Creating sequence %s ..." % sequence spec.grp = sequence ueCreate.createGroup(spec, "lib") for shot in sorted(edit[sequence]): if shot not in ["black", "white"]: print "---> Creating shot %s ..." % shot spec.asst = shot ueCreate.createAsset(spec, "lib", dbMeta=edit[sequence][shot])
def addGizmosFromAsset(asst): gizmos = False a = ueAssetUtils.getElements(ueSpec.Spec(asst[0], asst[1], asst[2])) if "giz" in a: for n in a["giz"]: for p in a["giz"][n]: spec = ueSpec.Spec(asst[0], asst[1], asst[2], "giz", n, p) versions = ueAssetUtils.getVersions(spec) version = versions[len(versions) - 1] menu = "%s:%s:%s/%s/%s" % (spec.proj, spec.grp, spec.asst, n, p) # Add a 'ueGizVers' knob to hold the version of the gizmo # we're bringing in. This can be used for version control later. # When you add a custom knob, Nuke makes the User tab active, # so a hack around that is to add the node with the prefs panel # disabled, add the custom knobs, then show the prefs. command = str('n = nuke.createNode("' + version["file_name"] + '", \ "name ' + p + '", inpanel=False); \ n.addKnob(nuke.Int_Knob("ueGizmoVers", "gizmo version")); \ n.knob("ueGizmoVers").setValue(' + str(len(versions)) + '); \ n.showControlPanel()') nuke.toolbar("Nodes").addCommand("ueTools/" + menu, command) nuke.menu("Nuke").addCommand("ueTools/gizmos/" + menu, command) gizmos = True if gizmos: nuke.toolbar("Nodes").addCommand("ueTools/-", "")
def updateVersInfo(self): try: ver = self.versions[int(vers)-1] spec = ueSpec.Spec(proj, grp, asst, elclass, eltype, elname, vers, elpass) self.verCreatedBy.setText(ver["created_by"]) self.verCreatedAt.setText(ueCore.formatDatetime(ver["created_at"])) files = glob.glob(os.path.join(ver["path"], ver["file_name"]+"*")) self.verFilesList.clear() for f in sorted(files): self.verFilesList.addItem(QtGui.QListWidgetItem(os.path.basename(f))) if "comment" in ver: self.verComment.setText(ver["comment"]) else: self.verComment.setText("N/A") if "thumbnail" in ver: spec = ueSpec.Spec(proj, grp, asst, elclass, eltype, elname, vers) f = ueAssetUtils.getThumbnailPath(spec) img = QtGui.QImage(f) imgs = img.scaled(200, 80, aspectRatioMode=QtCore.Qt.KeepAspectRatio) self.verThumb.setPixmap(QtGui.QPixmap.fromImage(imgs)) else: img = QtGui.QImage(os.path.join(os.getenv("UE_PATH"), "lib", "placeholders", "thumbnail.png")) imgs = img.scaled(200, 80, aspectRatioMode=QtCore.Qt.KeepAspectRatio) self.verThumb.setPixmap(QtGui.QPixmap.fromImage(imgs)) except IndexError: pass
def main(): spec = ueSpec.Spec(options["spec"]) edit = ueEdit.getEdit(spec) if options["assets"]: if options["print"]: for sequence in edit["sequences"]: print "-> %s" % sequence for shot in edit[sequence]["shots"]: print "---> %s" % shot elif options["create"]: # Get the group and check agains the data in the edit file to see if anything has changed spec = ueSpec.Spec(proj=os.getenv("PROJ")) for sequence in edit["sequences"]: print "-> Creating sequence %s ..." % sequence spec.grp = sequence ueCreate.createGroup(spec, "default") for shot in edit[sequence]["shots"]: if shot not in excludedShotNames: print "---> Creating shot %s ..." % shot spec.asst = shot ueCreate.createAsset(spec, "default", dbMeta=edit[sequence][shot]) elif options["play"]: shots = [] for sequence in edit: spec.grp = sequence for shot in edit[sequence]: spec.asst = shot spec.eltype = "storyboard" spec.elname = "master" spec.elclass = "sb" versions = ueAssetUtils.getVersions(spec) if len(versions) == 0: print "Nothing" shots.append(os.path.join(os.getenv("UE_PATH"), "lib", "placeholders", "edit.1-24.png")) else: print "Something" shots.append(os.path.join(versions[-1]["path"], "edit.1-24.png")) arguments = "" for path in shots: arguments += " %s" % (path) print arguments os.system("rv %s" % arguments)
def getValues(): dbMeta = {} if not comment == None: dbMeta["comment"] = comment if not thumbnail == None: dbMeta["thumbnail"] = thumbnail return ueSpec.Spec(proj, grp, asst, elclass, eltype, elname), dbMeta
def loadElements(self): global asst, elements asst = str(self.asstMenu.currentText()) elements = ueAssetUtils.getElements(ueSpec.Spec(proj, grp, asst)) self.animationTab.reload() self.backgroundTab.reload() self.renderTab.reload()
def loadElements(self): global asst asst = str(self.asstMenu.currentText()) spec = ueSpec.Spec(proj, grp, asst) self.elements = ueAssetUtils.getElements(spec) # self.eltypeList.clear() self.loadTypes()
def getUeConstant(): n = nuke.thisNode() spec = ueSpec.Spec( n.knob("proj").value(), n.knob("grp").value(), n.knob("asst").value(), n.knob("elclass").value(), n.knob("eltype").value(), n.knob("elname").value(), n.knob("vers").value()) if not spec.proj == "" and not spec.grp == "" and \ not spec.asst == "" and not spec.elclass == "" and \ not spec.eltype == "" and not spec.elname == "" and \ not spec.vers == "": versions = ueAssetUtils.getVersions(spec) if int(spec.vers) > len(versions): return v = versions[int(spec.vers) - 1] if v: layerFile = os.path.join(v["path"], "%s.col" % v["file_path"]) if os.path.exists(layerFile): f = open(layerFile) palette = json.loads(layerfile.read()) f.close() if spec.elname in palette: colour.knob("color").setValue(palette[spec.elname][0], 0) colour.knob("color").setValue(palette[spec.elname][1], 1) colour.knob("color").setValue(palette[spec.elname][2], 2) colour.knob("color").setValue(1.0, 3)
def destroyAsset(): if asset == "": print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(asset) ueDestroy.destroyAsset(spec)
def destroyElement(): if element == "": print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(element) ueDestroy.destroyElement(spec)
def createProject(): if "name" not in project: print "ERROR: Project name not set" sys.exit(2) spec = ueSpec.Spec(project["name"]) ueCreate.createProject(spec, dbMeta=project["dbMeta"])
def destroyGroup(): if group == "": print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(group) ueDestroy.destroyGroup(spec)
def deleteProject(): if project == "": print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(project) ueDestroy.destroyProject(spec)
def destroyVersion(): if version == "": print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(version) ueDestroy.destroyVersion(spec)
def loadGizmosFromAsset(asst): path = [] a = ueAssetUtils.getElements(ueSpec.Spec(asst[0], asst[1], asst[2])) if "giz" in a: for n in a["giz"]: for p in a["giz"][n]: path.append(a["giz"][n][p]["path"]) return path
def loadLayerLists(self): elements = ueAssetUtils.getElements(ueSpec.Spec(proj, grp, asst)) self.layerListPickerBox.clear() if __layerClass__ in elements: if __layerType__ in elements[__layerClass__]: for layerList in sorted( elements[__layerClass__][__layerType__]): self.layerListPickerBox.addItem(layerList)
def __init__(self, editType, spec=ueSpec.Spec(os.getenv("PROJ"), "edt", "master"), parent=None): QtGui.QDockWidget.__init__(self, parent) self.parent = parent self.spec = spec self.spec.elclass = "edt" self.spec.eltype = editType self.shotWidget = ueAssetWidgets.QUeShotMenuWidget(spec) self.editMenu = QtGui.QComboBox() self.editVersionsMenu = QtGui.QComboBox() self.newEdit = QtGui.QLineEdit() self.addNewEdit = QtGui.QPushButton("Add") self.editTree = QtGui.QTreeWidget() self.addGroup = QtGui.QPushButton("Add Group") self.addAsset = QtGui.QPushButton("Add Asset") self.update = QtGui.QPushButton("Edit") self.importEdit = QtGui.QPushButton("Import Edit") self.createAllButton = QtGui.QPushButton("Create/Update All") self.createSelectedButton = QtGui.QPushButton("Create/Update Selected") self.saveEditButton = QtGui.QPushButton("Save Edit") editWidget = QtGui.QWidget() editWidget.setLayout(QtGui.QHBoxLayout()) editWidget.layout().addWidget(self.editMenu) editWidget.layout().addWidget(self.editVersionsMenu) editWidget.layout().addWidget(self.newEdit) editWidget.layout().addWidget(self.addNewEdit) editAssetsWidget = QtGui.QWidget() editAssetsWidget.setLayout(QtGui.QHBoxLayout()) editAssetsWidget.layout().addWidget(self.addGroup) editAssetsWidget.layout().addWidget(self.addAsset) editAssetsWidget.layout().addWidget(self.update) editAssetsWidget.layout().addWidget(self.importEdit) editAssetsWidget.layout().addWidget(self.saveEditButton) buttonWidget = QtGui.QWidget() buttonWidget.setLayout(QtGui.QHBoxLayout()) buttonWidget.layout().addWidget(self.createAllButton) buttonWidget.layout().addWidget(self.createSelectedButton) self.mainWidget = QtGui.QWidget() self.mainWidget.setLayout(QtGui.QVBoxLayout()) self.mainWidget.layout().addWidget(self.shotWidget) self.mainWidget.layout().addWidget(editWidget) self.mainWidget.layout().addWidget(self.editTree) self.mainWidget.layout().addWidget(editAssetsWidget) self.mainWidget.layout().addWidget(buttonWidget) self.setWidget(self.mainWidget) self.setWindowTitle("Edit (sequence)") self.loadEdits()
def loadAssets(self): global grp grp = str(self.grpMenu.currentText()) spec = ueSpec.Spec(proj, grp) al = sorted(ueAssetUtils.getAssetsList(spec)) self.asstMenu.clear() for a in al: self.asstMenu.addItem(a) self.loadElements()
def loadGroups(self): global proj proj = str(self.projMenu.currentText()) spec = ueSpec.Spec(proj) gl = sorted(ueAssetUtils.getGroupsList(spec)) self.grpMenu.clear() for g in gl: self.grpMenu.addItem(g) self.loadAssets()
def loadElements(self): global asst asst = str(self.asstMenu.currentText()) spec = ueSpec.Spec(proj, grp, asst) self.elements = ueAssetUtils.getElements(spec) if elclass in self.elements: self.loadTypes() else: self.eltypeMenu.clear() self.elnameMenu.clear()
def loadVersions(self): self.elname = str(self.backgroundList.currentItem().text()) self.versList.clear() spec = ueSpec.Spec(proj, grp, asst, __bgClass__, __bgType__, self.elname) vers = ueAssetUtils.getVersions(spec) for v in sorted(range(len(vers)), reverse=True): item = QtGui.QListWidgetItem("%04d" % int(v + 1)) self.versList.addItem(item) self.versList.setCurrentItem(self.versList.item(0))
def ueSaveVers(): if maya.cmds.file(q=True, sn=True) == "": ueSaveAs() return fi = ueMaya.parseFileInfo(maya.cmds.fileInfo(query=True)) spec = ueSpec.Spec(fi["ueproj"], fi["uegrp"], fi["ueasst"], fi["ueclass"], fi["uetype"], fi["uename"]) ueMayaUtils.saveUtility(spec)
def load(self): nodes = [] for sequence in self.parent.edit["sequences"]: for shot in self.parent.edit[sequence]["shots"]: editShot = self.parent.edit[sequence][shot] storyboard = [] animatic = [] spec = ueSpec.Spec(os.getenv("PROJ"), sequence, shot, "sb", "storyboard", "master") storyboard = ueAssetUtils.getVersions(spec) if storyboard: path = os.path.join(storyboard[-1]["path"], storyboard[-1]["file_name"] + ".jpg") spec.eltype = "animatic" spec.elclass = "an" animatic = ueAssetUtils.getVersions(spec) if animatic: path = os.path.join( animatic[-1]["path"], animatic[-1]["file_name"] + ".####.jpeg") elif shot == "black": path = os.path.join(os.getenv("UE_PATH"), "lib", "placeholders", "black.png") elif shot == "white": path = os.path.join(os.getenv("UE_PATH"), "lib", "placeholders", "white.png") else: path = os.path.join(os.getenv("UE_PATH"), "lib", "placeholders", "nuke.png") commands.addSource(path, None) sourceNode = commands.nodesOfType("RVSourceGroup")[-1] if storyboard and not animatic: retimeNode = commands.newNode( "RVRetimeGroup", "%s_%sRetime" % (sequence, shot)) commands.setNodeInputs(retimeNode, [sourceNode]) time = float(editShot["endFrame"]) - float( editShot["startFrame"]) + 1 commands.setFloatProperty( "%s_retime.visual.scale" % retimeNode, [float(time)], False) node = retimeNode else: node = sourceNode nodes.append(node) commands.setNodeInputs("defaultSequence", nodes) commands.setViewNode("defaultSequence")
def listElements(): elements = ueAssetUtils.getElements(settings["spec"]) for e in sorted(elements): for t in sorted(elements[e]): for n in sorted(elements[e][t]): a = ueSpec.Spec(settings["spec"].proj, settings["spec"].grp, settings["spec"].asst, e, t, n) element = str(a) if "paths" in settings: element = "%s -> %s" % (element, n["path"]) print element
def createGroup(): if "name" not in group: print "ERROR: Group name not set" sys.exit(2) if "spec" not in group: print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(group["spec"], group["name"]) ueCreate.createGroup(spec, group["type"], dbMeta=group["dbMeta"])
def loadVersions(self): self.elname = str(self.nameList.currentItem().text()) spec = ueSpec.Spec(proj, grp, asst, self.elclass, self.eltype, self.elname) self.versList.clear() vers = ueAssetUtils.getVersions(spec) if vers: for v in sorted(range(len(vers)), reverse=True): item = QtGui.QListWidgetItem("%04d" % int(v + 1)) self.versList.addItem(item) self.versList.setCurrentItem(self.versList.item(0)) self.loadPasses()
def getReadPath(): n = nuke.thisNode() elpass = n.knob("elpass").value() if elpass == "": elpass = None spec = ueSpec.Spec( n.knob("proj").value(), n.knob("grp").value(), n.knob("asst").value(), n.knob("elclass").value(), n.knob("eltype").value(), n.knob("elname").value(), n.knob("vers").value(), elpass) p = os.path.join(os.getenv("UE_PATH"), "lib", "placeholders", "nuke.png") if not spec.proj == "" and not spec.grp == "" and \ not spec.asst == "" and not spec.elclass == "" and \ not spec.eltype == "" and not spec.elname == "" and \ not spec.vers == "": versions = ueAssetUtils.getVersions(spec) if int(spec.vers) > len(versions): return p v = versions[int(spec.vers) - 1] if v: elpassDir = "" elpassFile = "" if not spec.elpass == None: elpassDir = spec.elpass elpassFile = "_" + spec.elpass files = glob.glob( os.path.join(v["path"], elpassDir, v["file_name"] + elpassFile + "*")) if len(files) > 0: ext = files[0].split(".")[-1] if len(files) == 1: p = os.path.join(v["path"], elpassDir, v["file_name"] + elpassFile + "." + ext) else: p = os.path.join( v["path"], elpassDir, v["file_name"] + elpassFile + ".%04d." + ext) nuke.thisNode().knob("first").setValue(1) nuke.thisNode().knob("last").setValue(len(files)) nuke.thisNode().knob("origfirst").setValue(1) nuke.thisNode().knob("origlast").setValue(len(files)) return p
def getLayers(self): layer = str(self.layerListPickerBox.currentText()) element = ueAssetUtils.getVersions( ueSpec.Spec(proj, grp, asst, __layerClass__, __layerType__, layer)) fileName = os.path.join(element[-1]["path"], "%s.lay" % element[-1]["file_name"]) if os.path.exists(fileName): f = open(fileName) layers = json.loads(f.read()) f.close() else: layers = {} return layers
def printInfo(): if "spec" not in info: print "ERROR: Spec not set" sys.exit(2) spec = ueSpec.Spec(info["spec"]) if spec.grp == None: # Project info assetType = "project" assetInfo = ueAssetUtils.getProject(spec) elif spec.asst == None: # Group info assetType = "group" assetInfo = ueAssetUtils.getGroup(spec) elif spec.elclass == None and \ spec.eltype == None and \ spec.elname == None: # Asset info assetType = "asset" assetInfo = ueAssetUtils.getAsset(spec) elif spec.vers == None: # Element info assetType = "element" assetInfo = ueAssetUtils.getElement(spec) assetInfo = assetInfo[spec.elclass][spec.eltype][spec.elname] elif spec.elpass == None: # Version info assetType = "version" assetInfo = ueAssetUtils.getVersions(spec)[int(spec.vers) - 1] else: print "ERROR: Could not identify spec as a valid element" sys.exit(2) print "Information on %s:\n%s\n" % (assetType, str(info["spec"])) for a in sorted(assetInfo): # Get a padding value so the key/value columns will be neatly aligned spacePadding = 28 - len(a) # Parse the version and datetime info correctly if a == "versions": assetInfo[a] = len(assetInfo[a]) elif a in ["created_at", "updated_at"]: assetInfo[a] = ueCore.formatDatetime(str(assetInfo[a])) # Get rid of the keys with _id because they're database stuff if not re.match(".*_id$", a): print "%s:%s%s" % (a, " " * spacePadding, str(assetInfo[a])) print ""
def loadVers(self): global elname, vers elname = str(self.elnameList.currentItem().text()) spec = ueSpec.Spec(proj, grp, asst, elclass, eltype, elname) self.versions = ueAssetUtils.getVersions(spec) self.versList.clear() if len(self.versions) > 0: for v in sorted(range(len(self.versions)), reverse=True): self.versList.addItem(QtGui.QListWidgetItem("%04d" % int(v+1))) self.versList.setCurrentItem(self.versList.item(0)) vers = str(self.versList.currentItem().text()) else: vers = None self.loadPasses() self.updateElInfo()