def doReplacement(replaceDB): notExistingSources = set() createdRefs = [] for tr, path in replaceDB.items(): if path in notExistingSources: continue if not os.path.exists(os.path.expandvars(path)): notExistingSources.add(path) log.logAppend('Path does not exists: {}. Replacement skipped.'.format(path)) continue refHandle = RefHandle() refHandle.createNew(path) createdRefs.append(refHandle) worldRP = m.xform(tr, q=True, rotatePivot=True, worldSpace=True) m.xform(refHandle.refLocator.transform, translation=worldRP, absolute=True, worldSpace=True) transformParent = getParent(tr) if transformParent: newRefLocTransform = getLongName(m.parent(refHandle.refLocator.transform, transformParent)[0]) refHandle.setRefLocator(TransformHandle(transform=newRefLocTransform)) rotation = m.xform(tr, q=True, rotation=True, objectSpace=True) scale = m.xform(tr, q=True, scale=True, objectSpace=True, relative=True) shear = m.xform(tr, q=True, shear=True, objectSpace=True, relative=True) m.xform(refHandle.refLocator.transform, rotation=rotation, scale=scale, shear=shear) if m.objExists(tr): m.delete(tr) return createdRefs
def getAnnotationTransformHandle(self): if self.isValid(): annotationShapes = self.refLocator.getChildren(allDescendants=True, typ='annotationShape') if len(annotationShapes) == 1: return TransformHandle(shape=annotationShapes[0]) else: return None
def loadFromRefLocatorShape(self, refLocatorShape): self.refFilename = cleanupPath(m.getAttr('{}.{}'.format(refLocatorShape, ATTR_REF_FILENAME))) self.idString = self.generateIdString(self.refFilename) self.refShortName = self.generateShortName(self.refFilename) self.refLocator = TransformHandle(shape=refLocatorShape) self.setAnnotation(self.refShortName) self.refNode = self.idString + REF_NODE_SUFFIX self.instanceSource = '|{}|{}'.format(INSTANCES_SOURCE_GROUP, self.idString) self.importSource = '|{}|{}'.format(IMPORT_SOURCE_GROUP, self.idString) self.active = self.getActiveStateFromMaya()
def createAnnotation(self): if not self.isValid(): return annotationShapes = self.refLocator.getChildren(allDescendants=True, typ='annotationShape') for s in annotationShapes: m.delete(getParent(s)) annotationSh = m.annotate(self.refLocator.transform, p=(0, -0.5, 0)) annotationTr = getParent(annotationSh) annotationTr = m.parent(annotationTr, self.refLocator.transform, relative=True)[0] lockTransformations(annotationTr) self.annotation = TransformHandle(transform=getLongName(annotationTr)) m.setAttr(self.annotation.shape + '.displayArrow', False) m.setAttr(self.annotation.transform + '.overrideEnabled', True) m.setAttr(self.annotation.transform + '.overrideDisplayType', 2)