def deleteCurrentDb(self): #check if currentDb == dbStandard dbName = self.getCurrentDb() if not(dbName == self.dbStandard): #clearButtonsFromLayout before, because otherwise btns would remain self.clearButtonsFromLayout() #clearBtnImages from current db poseNameList = DbFunctions.getObjectNames(self.dbDir, dbName) for poseName in poseNameList: #Remove screenshot try: #get complete filepath completeFilePath = os.path.join(os.path.dirname(__file__), 'media\\images\\') completeFilePath += dbName completeFilePath += poseName completeFilePath += '.jpg' MayaFunctionality.removeScreenshot(completeFilePath) except: self.setStatus('Pose %s didnt have screenshot, no screen removed' % (poseName)) #remove current db DbFunctions.removeDb(self.dbDir, dbName) #Update cmbbx self.setCmbbxGroups() #else setStatus: standard db cannot be deleted else: self.setStatus('Standard DB cannot be deleted')
def __init__(self, parent = getMayaQMainWindow()): super(poseCritter, self).__init__(parent) #Instance Vars self.flowLayout = FlowLayout.FlowLayout() self.dbDir = os.path.join(os.path.dirname(__file__), 'database\\') self.dbStandard = 'poses' self.dockIt = True self.dockArea = 'left' self.version = 1 self.label = 'poseCritter RC' #Startup Routine #------------------------------------------------------------------ #setupUi self.setupUi(self) #Set flowLayout self.scrlAreaPoseButtonsWidget.setLayout(self.flowLayout) #ConnectUi self.connectUi() #Set QValidators for lineInputs self.setPoseNameValidator() self.setTagValidator() self.setGroupNameValidator() #If not existing create dbPose if not(DbFunctions.checkIfDbExists(self.dbDir, self.dbStandard)): DbFunctions.createDb(self.dbDir, self.dbStandard) #Set cmbbxGroups to already existing databases in the db folder self.setCmbbxGroups() #Create Initial Buttons from db self.createButtonsFromDb() #setNamespacesCombobox self.setNamespacesCombobox() #setLabelAuthor self.setLabelAuthor('poseCritter RC.' +str(self.version) +' by Timm Wagener / timmwagener.com') #makeDockable if(self.dockIt): windowWidth = self.geometry().width() MayaFunctionality.makeDockable(self, self.dockArea, windowWidth, self.label + ' ' + str(self.version)) #show Ui self.show()
def setPose(self, poseName): #Retrieve poseDictStr from DB for poseName dbName = self.getCurrentDb() poseDictStr = DbFunctions.getPoseSettings(self.dbDir, dbName, poseName) #Unpickle poseDictStr to dict poseDict = DbFunctions.convertDbStringToDict(poseDictStr) #Print selectedItemsDict #MayaFunctionality.printSelectedItemsDictionary(poseDict) #Set pose MayaFunctionality.setPose(poseDict, self.getNamespace())
def createButtonsFromDb(self): #Check if number of Groups is 0 and if so pass if(self.cmbbxGroups.count() == 0): pass #else rebuild buttons from cmbbx items else: #Clear lyt self.clearButtonsFromLayout() #Get current db dbName = self.getCurrentDb() #getObjectNames from Db objectNamesDb = DbFunctions.getObjectNames(self.dbDir, dbName) #Iterate through objectNamesFromDb and generate poseButton for each for name in objectNamesDb: #Create poseBtn Instance, connect Signals and add to FLyt #------------------------------------------------------------------ btn = PoseButton.PoseButton(name, dbName, self.getPoseButtonSize()) self.flowLayout.addWidget(btn) btn.poseBtn.clicked.connect(functools.partial(self.setPose, name)) btn.delPoseBtn.clicked.connect(functools.partial(self.removePoseButton, btn))
def setCmbbxGroups(self): #clear self.cmbbxGroups.clear() #Get list of Databases in dbDir fileList = DbFunctions.getDatabases(self.dbDir) #Add fileList self.cmbbxGroups.addItems(fileList)
def removePoseButton(self, btn): #Remove Widget btn.setParent(None) #Remove db entry dbName = self.getCurrentDb() DbFunctions.removePose(self.dbDir, dbName, str(btn.getPoseName())) #Remove screenshot try: #get complete filepath completeFilePath = os.path.join(os.path.dirname(__file__), 'media\\images\\') completeFilePath += dbName completeFilePath += str(btn.getPoseName()) completeFilePath += '.jpg' MayaFunctionality.removeScreenshot(completeFilePath) except: self.setStatus('Pose %s didnt have screenshot, no screen removed' % (str(btn.getPoseName())))
def removeAll(self): #getObjectNames from Db dbName = self.getCurrentDb() objectNamesDb = DbFunctions.getObjectNames(self.dbDir, dbName) #Iterate through objectNamesFromDb for name in objectNamesDb: #Iterate objects in flowlyt itemList for QListWidget in self.flowLayout.itemList: #QListWidget > poseBtn widget poseBtn = QListWidget.widget() #If poseBtn.poseName == name if(str(poseBtn.getPoseName()) == name): #Remove screenshot try: #get complete filepath completeFilePath = os.path.join(os.path.dirname(__file__), 'media\\images\\') completeFilePath += dbName completeFilePath += str(poseBtn.getPoseName()) completeFilePath += '.jpg' MayaFunctionality.removeScreenshot(completeFilePath) except: self.setStatus('Pose %s didnt have screenshot, no screen removed' % (str(poseBtn.getPoseName()))) #Remove Widget poseBtn.setParent(None) #Remove db entries DbFunctions.removeAll(self.dbDir, dbName)
def addDb(self): #Check if leGroupName is empty if not (self.getDbName() == ''): #Get dbName dbName = self.getDbName() #Check if db already exists if not (DbFunctions.checkIfDbExists(self.dbDir, dbName)): #Create dB DbFunctions.createDb(self.dbDir, dbName) #Update cmbbx self.setCmbbxGroups() #else status: dbName already exists else: self.setStatus('Db %s already exists' % (dbName)) #else status: dbName empty else: self.setStatus('Db Name empty')
def clearButtonsFromLayout(self): #get List of all databases dbList = DbFunctions.getDatabases(self.dbDir) #for each db get all objectnames for dbName in dbList: #all objectnames for dbName objectNamesDb = DbFunctions.getObjectNames(self.dbDir, dbName) #Iterate through objectNamesFromDb for name in objectNamesDb: #Iterate objects in flowlyt itemList for QListWidget in self.flowLayout.itemList: #QListWidget > poseBtn widget poseBtn = QListWidget.widget() #If poseBtn.poseName == name if(str(poseBtn.getPoseName()) == name): #Remove Widget poseBtn.setParent(None)
def addPoseButton(self): #ADD POSE BY SELECTION #------------------------------------------------------------------ if not(self.chkbxAddByTag.isChecked()): #check if there are selected objects if(len(MayaFunctionality.getSelectedList())): #Check if posename is set if not(self.getPoseName() == ''): #check against objectName list to avoid two equal names if not(self.getPoseName() in self.getItemListObjectNames()): #Create poseBtn Instance, connect Signals and add to FLyt #------------------------------------------------------------------ #Create Screenshot for poseBtn try: imagePath = os.path.join(os.path.dirname(__file__), 'media/images/') imageSize = int(self.sldButtonSize.maximum()) MayaFunctionality.takeScreenshotForPoseBtnApi(imagePath, self.getPoseName(), self.getCurrentDb(), imageSize, imageSize ) except: self.setStatus('Error taking screenshot for %s' % (self.getPoseName())) #Create PoseButton instance btn = PoseButton.PoseButton(self.getPoseName(), self.getCurrentDb(), self.getPoseButtonSize()) self.flowLayout.addWidget(btn) #Connect PoseBtn Instance btn.poseBtn.clicked.connect(functools.partial(self.setPose, self.getPoseName())) btn.delPoseBtn.clicked.connect(functools.partial(self.removePoseButton, btn)) #Add pose to db #------------------------------------------------------------------ #Get List of selected objects selectedObjList = MayaFunctionality.getSelectedList() #Convert obj list to poseDict poseDict = MayaFunctionality.buildSelectedItemsDictionary(selectedObjList) #Convert pose Dict to pickled dbString dbString = DbFunctions.convertDictToDbString(poseDict) #add poseName and dbString to DB dbName = self.getCurrentDb() DbFunctions.insertPose(self.dbDir, dbName, self.getPoseName(), dbString) #Else if posename twice else: self.setStatus('Pose already exists') #Else if no Posename is set else: self.setStatus('No Pose name entered') #Else if no objects are selected else: self.setStatus('No objects selected') #ADD POSE BY TAG #------------------------------------------------------------------ else: #Check if tag is empty if not(self.getTag() == ''): #Get tag list tagList = self.getListFromTag() #Check if tag items valid if(MayaFunctionality.checkTag(tagList)): #Check if posename is set if not(self.getPoseName() == ''): #check against objectName list to avoid two equal names if not(self.getPoseName() in self.getItemListObjectNames()): #Create poseBtn Instance, connect Signals and add to FLyt #------------------------------------------------------------------ #Create Screenshot for poseBtn try: imagePath = os.path.join(os.path.dirname(__file__), 'media/images/') imageSize = int(self.sldButtonSize.maximum()) MayaFunctionality.takeScreenshotForPoseBtnApi(imagePath, self.getPoseName(), self.getCurrentDb(), imageSize, imageSize ) except: self.setStatus('Error taking screenshot for %s' % (self.getPoseName())) #Create PoseButton instance btn = PoseButton.PoseButton(self.getPoseName(), self.getCurrentDb(), self.getPoseButtonSize()) self.flowLayout.addWidget(btn) #Connect PoseBtn Instance btn.poseBtn.clicked.connect(functools.partial(self.setPose, self.getPoseName())) btn.delPoseBtn.clicked.connect(functools.partial(self.removePoseButton, btn)) #Add pose to db #------------------------------------------------------------------ #Get List of selected objects selectedObjList = MayaFunctionality.getSelectedObjectsFromTagList(tagList) #Convert obj list to poseDict poseDict = MayaFunctionality.buildSelectedItemsDictionary(selectedObjList) #Convert pose Dict to pickled dbString dbString = DbFunctions.convertDictToDbString(poseDict) #add poseName and dbString to DB dbName = self.getCurrentDb() DbFunctions.insertPose(self.dbDir, dbName, self.getPoseName(), dbString) #Else if posename twice else: self.setStatus('Pose already exists') #Else if no Posename is set else: self.setStatus('No Pose name entered') #Else if tagSelectedListWrong else: self.setStatus('Tag check failed - Check tag for writing errors') #Else if no Tag entered else: self.setStatus('No Tag entered')