def replaceRefUI(): createdRefs, savedSources = replaceRefs() if (createdRefs is None) and (savedSources is None): log.logShow() return pathsToReload = set() rhToReload = [] for rh in getActiveRefHandles(): path = rh.getRefFilename() if path in pathsToReload: rhToReload.append(rh) continue if expandPath(path) in savedSources: pathsToReload.add(path) rhToReload.append(rh) for refHandle in rhToReload: refHandle.deactivate() maintenanceProcedure() rhToReload.extend(createdRefs) for refHandle in rhToReload: refHandle.activate() m.select([rh.refLocator.transform for rh in createdRefs], r=True) log.logShow()
def retargetRefs(refHandles, targetDir): refFilenamesToRetarget = set([os.path.basename(rh.getRefFilename()).lower() for rh in refHandles]) duplicatesInTargetDir = set() targetsDb = {} for root, directories, files in os.walk(targetDir): for f in files: lowCaseFilename = f.lower() if lowCaseFilename not in refFilenamesToRetarget: continue fullPath = cleanupPath(os.path.join(root, f)) if lowCaseFilename in targetsDb: duplicatesInTargetDir.add(f) else: targetsDb[lowCaseFilename] = fullPath notFoundInTargetDir = set() rhToRetarget = [] for rh in refHandles: basename = os.path.basename(rh.getRefFilename()) basenameLower = basename.lower() if basenameLower in notFoundInTargetDir: continue if basenameLower not in targetsDb: notFoundInTargetDir.add(basename) continue rhToRetarget.append((rh, getRelativePath(targetsDb[basenameLower]))) saveSelection() activeRefHandles = [rh for rh, target in rhToRetarget if rh.active] # see activateRefs() for explanation why deactivate is not in activate() method for refHandle, target in rhToRetarget: refHandle.deactivate() for refHandle, target in rhToRetarget: refHandle.setRefFilename(target) for refHandle in activeRefHandles: refHandle.activate() maintenanceProcedure() restoreSelection() if duplicatesInTargetDir: log.logAppend('Duplicates found in target directory tree for following reference(s) (retargeted to first occurence):') log.logAppend(sorted(duplicatesInTargetDir)) if notFoundInTargetDir: log.logAppend('') log.logAppend('Following reference(s) was not found in target directory tree (leaved intact):') log.logAppend(sorted(notFoundInTargetDir)) log.logShow()
def retargetRefs(refHandles, targetDir): refFilenamesToRetarget = set( [os.path.basename(rh.getRefFilename()).lower() for rh in refHandles]) duplicatesInTargetDir = set() targetsDb = {} for root, directories, files in os.walk(targetDir): for f in files: lowCaseFilename = f.lower() if lowCaseFilename not in refFilenamesToRetarget: continue fullPath = cleanupPath(os.path.join(root, f)) if lowCaseFilename in targetsDb: duplicatesInTargetDir.add(f) else: targetsDb[lowCaseFilename] = fullPath notFoundInTargetDir = set() rhToRetarget = [] for rh in refHandles: basename = os.path.basename(rh.getRefFilename()) basenameLower = basename.lower() if basenameLower in notFoundInTargetDir: continue if basenameLower not in targetsDb: notFoundInTargetDir.add(basename) continue rhToRetarget.append((rh, getRelativePath(targetsDb[basenameLower]))) saveSelection() activeRefHandles = [rh for rh, target in rhToRetarget if rh.active] # see activateRefs() for explanation why deactivate is not in activate() method for refHandle, target in rhToRetarget: refHandle.deactivate() for refHandle, target in rhToRetarget: refHandle.setRefFilename(target) for refHandle in activeRefHandles: refHandle.activate() maintenanceProcedure() restoreSelection() if duplicatesInTargetDir: log.logAppend( 'Duplicates found in target directory tree for following reference(s) (retargeted to first occurence):' ) log.logAppend(sorted(duplicatesInTargetDir)) if notFoundInTargetDir: log.logAppend('') log.logAppend( 'Following reference(s) was not found in target directory tree (leaved intact):' ) log.logAppend(sorted(notFoundInTargetDir)) log.logShow()