コード例 #1
0
	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')
コード例 #2
0
	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()
コード例 #3
0
	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())
コード例 #4
0
	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))
コード例 #5
0
	def setCmbbxGroups(self):
		
		#clear
		self.cmbbxGroups.clear()
		
		#Get list of Databases in dbDir
		fileList = DbFunctions.getDatabases(self.dbDir)
					
		#Add fileList
		self.cmbbxGroups.addItems(fileList)
コード例 #6
0
	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())))
コード例 #7
0
	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)
コード例 #8
0
	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')
コード例 #9
0
	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)		
コード例 #10
0
	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')