Example #1
0
def os_fileCompare(file1, file2, openDiff=False):
    '''
    Pass in 2 files for diffComparision. If files are identical, ie there are no
    differences then the code returns 0

    :param file1: first file to compare with second file
    :param file2: second file to compare against the first
    :param openDiff: if a difference was found then boot Diffmerge UI, highlighting the diff

    .. note::

        This is a stub function that requires Diffmerge.exe, you can download from
        https://sourcegear.com/diffmerge/.
        Once downloaded drop it here Red9/pakcages/diffMerge.exe
    '''
    outputDir = tempfile.gettempdir()
    diffmerge = os.path.join(r9Setup.red9ModulePath(), 'packages',
                             'diffMerge.exe')
    if not os.path.exists(diffmerge):
        diffmerge = os.path.join(r9Setup.red9ModulePath(), 'packages',
                                 'DiffMerge', 'sgdm.exe')
    if os.path.exists(diffmerge):
        process = subprocess.Popen([
            diffmerge, '-d',
            os.path.join(outputDir, 'diffmergeOutput.diff'), file1, file2
        ],
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.STDOUT,
                                   universal_newlines=True)
        # output = process.communicate()
        process.wait()
        retcode = process.poll()
        if not retcode:
            log.info('Files are Identical')
            return retcode
        elif retcode == 1:
            log.info(
                'Files are not Identical - use the openDiff flag to open up the differences in the editor'
            )
            if openDiff:
                process = subprocess.Popen([diffmerge, file1, file2],
                                           stdout=subprocess.PIPE,
                                           stderr=subprocess.STDOUT,
                                           universal_newlines=True)
            return retcode
        elif retcode == 2:
            raise IOError(
                'Files failed to compare - issues prevented the compare processing both files'
            )
            return retcode
    else:
        log.warning('Diffmerge commandline was not found, compare aborted')
def batchPatchPoses(posedir, config, poseroot, load=True, save=True, patchfunc=None,\
                    relativePose=False, relativeRots=False, relativeTrans=False):
    '''
    whats this?? a fast method to run through all the poses in a given dictionary and update
    or patch them. If patchfunc isn't given it'll just run through and resave the pose - updating
    the systems if needed. If it is then it gets run between the load and save calls.
    :param posedir: directory of poses to process
    :param config: hierarchy settings cfg to use to ID the nodes (hierarchy tab preset = filterSettings object)
    :param poseroot: root node to the filters - poseTab rootNode/MetaRig root
    :param patchfunc: optional function to run between the load and save call in processing, great for
            fixing issues on mass with poses. Note we now pass pose file back into this func as an arg
    :param load: should the batch load the pose
    :param save: should the batch resave the pose
    '''

    filterObj=r9Core.FilterNode_Settings()
    filterObj.read(os.path.join(r9Setup.red9ModulePath(), 'presets', config))  # 'Crytek_New_Meta.cfg'))
    mPose=PoseData(filterObj)
    
    files=os.listdir(posedir)
    files.sort()
    for f in files:
        if f.lower().endswith('.pose'):
            if load:
                mPose.poseLoad(poseroot, os.path.join(posedir,f),
                               useFilter=True,
                               relativePose=relativePose,
                               relativeRots=relativeRots,
                               relativeTrans=relativeTrans)
            if patchfunc:
                patchfunc(f)
            if save:
                mPose.poseSave(poseroot, os.path.join(posedir,f), useFilter=True, storeThumbnail=False)
            log.info('Processed Pose File :  %s' % f)
Example #3
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles',
                            'MetaRig_anim_jump.mb'),
               open=True,
               f=True)
     self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
     self.poseFolder = getPoseFolder()
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles',
                            'FilterNode_baseTests.ma'),
               open=True,
               f=True)
     self.filterNode = r9Core.FilterNode(['World_Root'])
     assert self.filterNode.rootNodes == ['World_Root']
Example #5
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','MetaRig_anim_jump.mb'),open=True,f=True)
     self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
     self.poseFolder = getPoseFolder()
     
     #make our PoseData object with the unitTest config loaded
     filterNode=r9Core.FilterNode_Settings()
     filterNode.read(red9MetaRigConfig)
     self.poseData=r9Pose.PoseData(filterNode)
Example #6
0
    def setup(self):
        cmds.file(os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles', 'MetaRig_anim_jump.mb'), open=True, f=True)
        self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
        self.poseFolder = getPoseFolder()

        # make our PoseData object with the unitTest config loaded
        filterNode = r9Core.FilterNode_Settings()
        filterNode.read(red9MetaRigConfig)
        self.poseData = r9Pose.PoseData(filterNode)
    def test_longJsonDumps(self):
        '''
        Test the handling of LONG serialized Json data - testing the 16bit string attrTemplate handling
        NOTE: if you set a string to over 32,767 chars and don't lock the attr once made, selecting
        the textField in the AttributeEditor will truncate the data, hence this test!
        '''
        data= "x" * 40000
        self.MClass.addAttr('json_test', data)
        assert len(self.MClass.json_test)==40000
        
        #save the file and reload to ensure the attr is consistent
        cmds.file(rename=os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','deleteMe.ma'))
        cmds.file(save=True,type='mayaAscii')
        cmds.file(new=True,f=True)
        cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','deleteMe.ma'),open=True,f=True)

        mClass=r9Meta.getMetaNodes()[0]
        assert len(mClass.json_test)
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','MetaRig_anim_jump.mb'),open=True,f=True)
     self.rootNode='|World_Ctrl'
     self.poseFolder = getPoseFolder()
     
     #make our PoseData object with the unitTest config loaded
     filterNode=r9Core.FilterNode_Settings()
     filterNode.nodeTypes='nurbsCurve'
     filterNode.incRoots=False
     filterNode.filterPriority = ['COG__Ctrl','Hips_Ctrl','Chest_Ctrl','R_Wrist_Ctrl','L_Wrist_Ctrl','L_Foot_Ctrl','R_Foot_Ctrl','L_Knee_Ctrl','R_Knee_Ctrl']
     self.poseData=r9Pose.PoseData(filterNode)
Example #9
0
def __ffprobeGet():
    '''
    I don not ship ffprobe as it's lgpl license and fairly large, however
    if you download it for use with the getMediaFileInfo then this is where it goes
    Red9/packages/ffprobe.exe
    '''
    expectedPath=os.path.join(r9Setup.red9ModulePath(),'packages','ffprobe.exe')
    if os.path.exists(expectedPath):
        return expectedPath
    else:
        log.warning('ffprobe.exe not currently installed, aborting')
Example #10
0
    def setup(self):
        cmds.file(os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles', 'MetaRig_anim_jump.mb'), open=True, f=True)
        self.rootNode = '|World_Ctrl'
        self.poseFolder = getPoseFolder()

        # make our PoseData object with the unitTest config loaded
        filterNode = r9Core.FilterNode_Settings()
        filterNode.nodeTypes = 'nurbsCurve'
        filterNode.incRoots = False
        filterNode.filterPriority = ['COG__Ctrl', 'Hips_Ctrl', 'Chest_Ctrl', 'R_Wrist_Ctrl', 'L_Wrist_Ctrl', 'L_Foot_Ctrl', 'R_Foot_Ctrl', 'L_Knee_Ctrl', 'R_Knee_Ctrl']
        self.poseData = r9Pose.PoseData(filterNode)
Example #11
0
def __ffprobeGet():
    '''
    I don not ship ffprobe as it's lgpl license and fairly large, however
    if you download it for use with the getMediaFileInfo then this is where it goes
    Red9/packages/ffprobe.exe
    '''
    expectedPath=os.path.join(r9Setup.red9ModulePath(),'packages','ffprobe.exe')
    if os.path.exists(expectedPath):
        return expectedPath
    else:
        log.warning('ffprobe.exe not currently installed, aborting')
def os_fileCompare(file1, file2, openDiff=False):
    '''
    Pass in 2 files for diffComparision. If files are identical, ie there are no
    differences then the code returns 0
    
    :param file1: first file to compare with second file
    :param file2: second file to compare against the first
    :param openDiff: if a difference was found then boot Diffmerge UI, highlighting the diff
    
    .. note::
        
        This is a stub function that requires Diffmerge.exe, you can download from 
        https://sourcegear.com/diffmerge/.
        Once downloaded drop it here Red9/pakcages/diffMerge.exe
    '''
    outputDir=tempfile.gettempdir()
    
    diffmerge=os.path.join(r9Setup.red9ModulePath(),'packages','diffMerge.exe')
    if not os.path.exists(diffmerge):
        diffmerge=os.path.join(r9Setup.red9ModulePath(),'packages','DiffMerge','sgdm.exe')
    if os.path.exists(diffmerge):
        process=subprocess.Popen([diffmerge, '-d', os.path.join(outputDir, 'diffmergeOutput.diff'), file1, file2],
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.STDOUT,
                                 universal_newlines=True)
        #output = process.communicate()
        process.wait()
        retcode = process.poll()
        if not retcode:
            log.info('Files are Identical')
            return retcode
        elif retcode==1:
            log.info('Files are not Identical - use the openDiff flag to open up the differences in the editor')
            if openDiff:
                process=subprocess.Popen([diffmerge, file1, file2], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
            return retcode
        elif retcode==2:
            raise IOError('Files failed to compare - issues prevented the compare processing both files')
            return retcode
    else:
        log.warning('Diffmerge commandline was not found, compare aborted')
Example #13
0
 def setup(self):
     
     self.leftWrist='leftWrist'
     self.leftFoot = 'leftFoot'
     self.rightWrist = 'rightWrist'
     self.rightFoot = 'rightFoot'
     self.root = 'root'
     
     cmds.polyCube(n=self.leftWrist)[0]
     cmds.polyCube(n=self.leftFoot)[0]
     cmds.polyCube(n=self.rightWrist)[0]
     cmds.polyCube(n=self.rightFoot)[0]
     cmds.polyCube(n=self.root)[0]
     self.rig=cmds.group([self.leftWrist,self.leftFoot,self.rightWrist,self.rightFoot,self.root],name='rigRoot')
     
     self.MirrorClass=r9Anim.MirrorHierarchy(self.rig)
     self.MirrorClass.settings.hierarchy=True
     self.filePath=os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','mirrorData.mirrorMap')
    def setup(self):

        self.leftWrist = 'leftWrist'
        self.leftFoot = 'leftFoot'
        self.rightWrist = 'rightWrist'
        self.rightFoot = 'rightFoot'
        self.root = 'root'

        cmds.polyCube(n=self.leftWrist)[0]
        cmds.polyCube(n=self.leftFoot)[0]
        cmds.polyCube(n=self.rightWrist)[0]
        cmds.polyCube(n=self.rightFoot)[0]
        cmds.polyCube(n=self.root)[0]
        self.rig = cmds.group([self.leftWrist, self.leftFoot, self.rightWrist, self.rightFoot, self.root], name='rigRoot')

        self.MirrorClass = r9Anim.MirrorHierarchy(self.rig)
        self.MirrorClass.settings.hierarchy = True
        self.filePath = os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles', 'mirrorData.mirrorMap')
Example #15
0
def batchPatchPoses(posedir, config, poseroot, load=True, save=True, patchfunc=None,\
                    relativePose=False, relativeRots=False, relativeTrans=False):
    '''
    whats this?? a fast method to run through all the poses in a given dictionary and update
    or patch them. If patchfunc isn't given it'll just run through and resave the pose - updating
    the systems if needed. If it is then it gets run between the load and save calls.
    :param posedir: directory of poses to process
    :param config: hierarchy settings cfg to use to ID the nodes (hierarchy tab preset = filterSettings object)
    :param poseroot: root node to the filters - poseTab rootNode/MetaRig root
    :param patchfunc: optional function to run between the load and save call in processing, great for
            fixing issues on mass with poses. Note we now pass pose file back into this func as an arg
    :param load: should the batch load the pose
    :param save: should the batch resave the pose
    '''

    filterObj = r9Core.FilterNode_Settings()
    filterObj.read(os.path.join(r9Setup.red9ModulePath(), 'presets',
                                config))  # 'Crytek_New_Meta.cfg'))
    mPose = PoseData(filterObj)

    files = os.listdir(posedir)
    files.sort()
    for f in files:
        if f.lower().endswith('.pose'):
            if load:
                mPose.poseLoad(poseroot,
                               os.path.join(posedir, f),
                               useFilter=True,
                               relativePose=relativePose,
                               relativeRots=relativeRots,
                               relativeTrans=relativeTrans)
            if patchfunc:
                patchfunc(f)
            if save:
                mPose.poseSave(poseroot,
                               os.path.join(posedir, f),
                               useFilter=True,
                               storeThumbnail=False)
            log.info('Processed Pose File :  %s' % f)
Example #16
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','MetaRig_baseTests_MetaWired.ma'),open=True,f=True)
     self.mRig=self.addMetaRig()
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','Meta_Network_WalkTest.ma'),open=True,f=True)
     self.mRig=r9Meta.getMetaNodes(mTypes='MetaRig')[0]
Example #18
0
 def setup(self):
     cmds.file(new=True, f=True)
     self.bwavpath = os.path.join(r9Setup.red9ModulePath(), 'tests',
                                  'testFiles', 'bwav_test.wav')
     self.audioNode = r9Audio.AudioNode(filepath=self.bwavpath)
     self.audioNode.importAndActivate()
Example #19
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','MetaRig_anim_jump.mb'),open=True,f=True)
     self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
     self.poseFolder = getPoseFolder()
Example #20
0
 def setup(self):
     cmds.file(new=True, f=True)
     self.bwavpath = os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles', 'bwav_test.wav')
     self.audioNode = r9Audio.AudioNode(filepath=self.bwavpath)
     self.audioNode.importAndActivate()
Example #21
0
 def setup(self):
     cmds.file(new=True, f=True)
     self.path = r9General.formatPath(os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles', 'bwav_test.wav'))
 def setup(self):
     self.bwavpath=os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','bwav_test.wav')
     self.audioNode = r9Audio.AudioNode.importAndActivate(self.bwavpath)
Example #23
0
 def setup(self):
     cmds.file(new=True, f=True)
     self.path = r9General.formatPath(
         os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles',
                      'bwav_test.wav'))
Example #24
0
def getPoseFolder():
    return os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','MetaRig_Poses')
Example #25
0
def getPoseFolder():
    return os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles', 'MetaRig_Poses')
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','FilterNode_baseTests.ma'),open=True,f=True)
     self.filterNode=r9Core.FilterNode(['World_Root'])
     assert self.filterNode.rootNodes==['World_Root']