def createAssetPrompt(self): code = '' proj = database.getProjectDict() if self.type == 'asset': code = "%04d" % proj['nextAsset'] elif self.type == 'shot': code = "%04d" % proj['nextShot'] form = pm.setParent(q=True) f = pm.formLayout(form, e=True, width=150) row = pm.rowLayout(nc=2, adj=2) pm.picture(image='sphere.png', w=50, h=50) col = pm.columnLayout(adjustableColumn=True) nameField = pm.textFieldGrp('CrAsset_nameField', label='Name', cw=(1, 70), text='', adj=2, cat=[(1, 'left', 5), (2, 'left', 5)], editable=True) codeField = pm.textFieldGrp('CrAsset_codeField', label='Code', cw=(1, 70), text=code, adj=2, cat=[(1, 'left', 5), (2, 'left', 5)], editable=True) workflow = pm.optionMenuGrp('CrAsset_workflowOpt', label='Workflow', cw=(1, 70), cat=[(1, 'left', 5), (2, 'left', 5)]) proj = database.getProjectDict() for key in proj['workflow']: context = set([ proj['workflow'][key][x]['type'] for x in proj['workflow'][key] ]) if self.type in context: pm.menuItem(label=key) b1 = pm.button(p=f, l='Cancel', c=self.abortCreateCallback) b2 = pm.button(p=f, l='OK', c=self.createAssetCallBack) spacer = 5 top = 5 edge = 5 pm.formLayout(form, edit=True, attachForm=[(row, 'right', edge), (row, 'top', top), (row, 'left', edge), (row, 'right', edge), (b1, 'right', edge), (b1, 'bottom', edge), (b2, 'left', edge), (b2, 'bottom', edge)], attachNone=[], attachControl=[], attachPosition=[(b1, 'right', spacer, 90), (b2, 'left', spacer, 10)])
def getFolderTree(self, fromDb=True): if fromDb: proj = database.getProjectDict() self.projectName = proj['projectName'] self.folderTreeDict = proj[self.type + 'Folders'] allKeys = self.folderTreeDict.keys() parentList = [x for x in self.folderTreeDict if self.folderTreeDict[x]['parent'] == ''] parentList.sort() pm.treeView(self.widgetName, e=True, ra=True) for item in parentList: pm.treeView(self.widgetName, e=True, addItem=(item, ''), ei=(item, False)) pm.treeView(self.widgetName, e=True, displayLabel=(item, item.split('_')[-1])) count = 0 while allKeys: allKeys = [x for x in allKeys if not x in parentList] parentList = [x for x in self.folderTreeDict if self.folderTreeDict[x]['parent'] in parentList] parentList.sort() for item in parentList: pm.treeView(self.widgetName, e=True, addItem=(item, self.folderTreeDict[item]['parent']), ei=(item, False)) pm.treeView(self.widgetName, e=True, displayLabel=(item, item.split('_')[-1])) count += 1 if count > 1000: break
def okCallback(self, *args): self.putProjectSettings() projName = self.projDict['projectName'] if self.new: if not projName: print 'Please choose a name for the project!!' return existName = database.getProjectDict(projName) if existName: print 'This Name exists. Please choose another name' return print 'create project' print self.projDict database.addProject(**self.projDict) pm.deleteUI(self.parentWidget.projPopUp) self.parentWidget.makePopup() self.parentWidget.changeProjectCallBack(projName) else: print 'edit project' database.putProjectDict(self.projDict, projName) pm.deleteUI(self.win)
def getPath(self, dirLocation='workLocation', ext='ma'): """ Return object respective diretory and file name, based on dirLocation parameter and extention parameter. Valid values for diLocation are: "workLocation","publishLocation", "cacheLocation", "imagesWorkLocation", "imagesPublishLocation" Extension parameter typically take maya file extensions, "ma", "abc" or image file extensions, "jpg", "gif", etc :param dirLocation: string :param ext: string (no point) :return: list [ dirPath, filename] """ project = database.getProjectDict(self.projectName) location = project[dirLocation] taskFolder = self.task folderPath = os.path.join(*self.path) phase = project['workflow'][self.workflow][self.task]['phase'] filename = self.filename proxyMode = self.proxyMode if ext: ext = '.' + ext else: ext = '' dirPath = os.path.join(location, phase, taskFolder, folderPath, filename, proxyMode) filename = filename + ext return dirPath, filename
def __init__(self): self.parentWidget = None self.widgetName = None self.folderTreeWidget = None self.infoWidget = None self.itemList = [] self.selectedItem = None self.type = None self.task = None self.path = None self.viewOption = 1 proj = database.getProjectDict() self.projectName = proj['projectName']
def getPath(self, dirLocation='workLocation', ext='ma'): project = database.getProjectDict(self.projectName) location = project[dirLocation] taskFolder = self.task folderPath = os.path.join(*self.path) phase = project['workflow'][self.workflow][self.task]['phase'] filename = self.filename proxyMode = self.proxyMode if ext: ext = '.' + ext else: ext = '' dirPath = os.path.join(location, phase, taskFolder, folderPath, filename, proxyMode) filename = filename + ext return dirPath, filename
def getCachePublishPath(self, make=False): """ Return the path where to publish the alembic cache for this camera If make it true, create the folder if needed :param make: boolean :return: str """ proj = database.getProjectDict() path = self.parent.getPath(dirLocation='cacheLocation', ext='') cachePath = os.path.join(*path) if make: if not os.path.exists(cachePath): os.makedirs(cachePath) ver = 'v%03d_' % self.parent.caches['cam']['cacheVer'] cacheName = database.templateName(self.getDataDict(), proj['cacheNameTemplate']) + '_' + self.ns cacheFileName = ver + cacheName + '.abc' return os.path.join(cachePath, cacheFileName)
def getPublishPath(self, make=False): """ Return the publish path for this component If make is true create the folder if needed :param make: boolean :return: str """ proj = database.getProjectDict() sourceItem = self.getSourceItem() path = sourceItem.getPath(dirLocation='cacheLocation', ext='') cachePath = os.path.join(*path) if make: if not os.path.exists(cachePath): os.makedirs(cachePath) ver = 'v%03d_' % self.cacheVer cacheName = database.templateName( self.getDataDict(), proj['cacheNameTemplate']) + '_' + self.ns cacheFileName = ver + cacheName + '.abc' return os.path.join(cachePath, cacheFileName)
def okCallback(self, *args): self.putProjectSettings() projName = self.projDict['projectName'] if self.new: if not projName: pm.confirmDialog( title='error', ma='center', message='Please choose a name for the project!!', button=['OK'], defaultButton='OK', dismissString='OK') return existName = database.getProjectDict(projName) if existName: pm.confirmDialog( title='error', ma='center', message='This Name exists. Please choose another name', button=['OK'], defaultButton='OK', dismissString='OK') return database.addProject(**self.projDict) pm.deleteUI(self.parentWidget.projPopUp) self.parentWidget.makePopup() self.parentWidget.changeProjectCallBack(projName) else: database.putProjectDict(self.projDict, projName) pm.deleteUI(self.win)
def refreshList(self, path=None, task=None, code=None, itemMData=None): color = (0, 0, 0) x = None itemListProj = database.getProjectDict() if itemMData: self.path = itemMData['path'] self.task = itemMData['task'] self.type = itemMData['type'] else: self.path = path self.task = task self.type = database.getTaskType(task[0]) logger.debug('task %s, type %s' % (task[0], self.type)) collection = database.getCollection(self.type) if code: result = collection.find({'path': self.path, 'code': code}) else: if self.task == ['asset']: result = collection.find({'path': self.path, 'task': 'model'}) elif self.task == ['shot']: result = collection.find({'path': self.path, 'task': 'layout'}) else: result = collection.find({ 'path': self.path, 'task': { '$in': self.task } }) flowChilds = pm.flowLayout(self.widgetName, q=True, ca=True) if flowChilds: for i in flowChilds: pm.deleteUI(i) self.itemList = [] self.selectedItem = None for itemMData in result: logger.debug(itemMData) if not code and (task == 'asset' or task == 'shot'): templateToUse = [ x for x in itemListProj['assetNameTemplate'] if x != '$task' ] name = database.templateName(itemMData, template=templateToUse) taskLabel = task.upper() createdColor = (0, .2, .50) notCreatedColor = (0, .2, .50) else: name = database.templateName(itemMData) taskLabel = itemMData['task'].upper() notCreatedColor = (.2, .2, .2) createdColor = (1, .8, .20) status = itemMData['status'] if status == 'notCreated': color = notCreatedColor elif status == 'created': color = createdColor thumbPath = version.getThumb(itemMData) x = ItemBase(name=name, itemName=itemMData['name'], imgPath=thumbPath, label=taskLabel, status=itemMData['status'], parentWidget=self, color=color) x.infoWidget = self.infoWidget if code: x.task = itemMData['task'] x.workVer = itemMData['workVer'] x.publishVer = itemMData['publishVer'] else: x.task = itemMData['task'] x.workVer = 0 x.publishVer = 0 x.code = itemMData['code'] self.itemList.append(x) x.addToLayout(self.viewOption)
def createProjectSettingsWidget(self): if not self.projectName: self.projDict = database.getDefaultDict() else: self.projDict = database.getProjectDict(self.projectName) self.win = pm.window(w=800, h=600) col = pm.columnLayout( adjustableColumn=True, columnAlign='left', ) self.projNameTxt = pm.textFieldGrp(label='ProjectName', text=self.projDict['projectName'], cat=(1, 'left', 20), adj=2, editable=False) self.prefixTxt = pm.textFieldGrp(label='Prefix', text=self.projDict['prefix'], cat=(1, 'left', 20), adj=2, editable=False) self.statusOpt = pm.optionMenuGrp(l='Status', cat=(1, 'left', 20)) pm.menuItem(label='inative') pm.menuItem(label='active') pm.menuItem(label='current') pm.optionMenuGrp(self.statusOpt, e=True, v=self.projDict['status']) self.workLocTxt = pm.textFieldButtonGrp( label='Work Location', text=self.projDict['workLocation'], buttonLabel='...', adj=2, cat=(1, 'left', 20), bc=lambda: self.browseCallback(1)) self.publishLocTxt = pm.textFieldButtonGrp( label='Publish Location', text=self.projDict['publishLocation'], buttonLabel='...', adj=2, cat=(1, 'left', 20), bc=lambda: self.browseCallback(2)) self.imgWorkLocTxt = pm.textFieldButtonGrp( label='Images Work Location', text=self.projDict['imagesWorkLocation'], buttonLabel='...', adj=2, cat=(1, 'left', 20), bc=lambda: self.browseCallback(3)) self.imgPublishLocTxt = pm.textFieldButtonGrp( label='Images Publish Location', text=self.projDict['imagesPublishLocation'], buttonLabel='...', adj=2, cat=(1, 'left', 20), bc=lambda: self.browseCallback(4)) self.cacheLocTxt = pm.textFieldButtonGrp( label='Cache Location', text=self.projDict['cacheLocation'], buttonLabel='...', adj=2, cat=(1, 'left', 20), bc=lambda: self.browseCallback(5)) self.assetCollTxt = pm.textFieldGrp( label='Asset Collection', text=self.projDict['assetCollection'], adj=2, cat=(1, 'left', 20), editable=False) self.shotCollTxt = pm.textFieldGrp( label='Shot Collection', text=self.projDict['shotCollection'], adj=2, cat=(1, 'left', 20), editable=False) self.nameTemplTxt = pm.textFieldGrp( label='Asset Name Template', text=','.join(self.projDict['assetNameTemplate']), adj=2, cat=(1, 'left', 20)) self.cacheTemplTxt = pm.textFieldGrp( label='Cache Name Template', text=','.join(self.projDict['cacheNameTemplate']), adj=2, cat=(1, 'left', 20)) self.fpsTxt = pm.textFieldGrp(label='Project Frame Rate', text=self.projDict['fps'], adj=2, cat=(1, 'left', 20)) self.mayaVersionOpt = pm.optionMenuGrp(label='Maya Version', cat=(1, 'left', 20)) pm.menuItem(label='2015') pm.menuItem(label='2016') pm.menuItem(label='2017') pm.menuItem(label='2016') pm.optionMenuGrp(self.mayaVersionOpt, e=True, v=self.projDict['mayaVersion']) self.rendererOpt = pm.optionMenuGrp(label='Renderer', cat=(1, 'left', 20)) pm.menuItem(label='vray') pm.menuItem(label='arnold') pm.menuItem(label='mental ray') pm.menuItem(label='red shift') pm.optionMenuGrp(self.rendererOpt, e=True, v=self.projDict['renderer']) self.resolutionOpt = pm.optionMenuGrp(l='Resolution', cat=(1, 'left', 20)) pm.menuItem(label='1920x1080') pm.menuItem(label='2048x1780') pm.optionMenuGrp( self.resolutionOpt, e=True, v='%sx%s' % (self.projDict['resolution'][0], self.projDict['resolution'][1])) pm.text(p=col, l='FOLDERS') pane = pm.paneLayout(p=col, cn='vertical2', h=150) self.assetTreeView = FolderTreeEditableWidget('asset') self.assetTreeView.createFolderTree(pane) self.assetTreeView.getFolderTree() self.assetTreeView.createMenus() self.shotTreeView = FolderTreeEditableWidget('shot') self.shotTreeView.createFolderTree(pane) self.shotTreeView.getFolderTree() self.shotTreeView.createMenus() pm.text(p=col, l='WORKFLOWS') pane = pm.paneLayout(p=col, cn='vertical2', h=100) self.workflowScrll = pm.textScrollList(parent=pane) for workflow in self.projDict['workflow']: pm.textScrollList(self.workflowScrll, e=True, append=' ' + workflow) pm.rowLayout(p=col, nc=3, adj=1) pm.text(l='') pm.button(l='OK', w=50, h=50, c=self.okCallback) pm.button(l='Cancel', w=50, h=50, c=self.cancelCallback) pm.showWindow()
def getProject(self): shortName = pm.layout(self.widgetName, q=True, ca=True)[1] fullName = pm.layout(shortName, q=True, fpn=True) projName = pm.textField(fullName, q=True, text=True) proj = database.getProjectDict(projName) return proj