def _extract3dRecursively(fileList, baseZipFile, destDirectory, outputFileName, numOfFileExtracted=0):
    ' extracts all the illustations and models from the 123dx file recursively '
    imageExtList = ['.jpg', '.png']
    fusionExtList = ['.smt', '.smb', '.sat', '.igs', '.dxf', '.stp', '.stl']
    for member in fileList:
        if os.path.isdir(member):
            _extract3dRecursively(os.listdir(member), baseZipFile, destDirectory, outputFileName)
        else:
            fileExt = os.path.splitext(member)[1]
            fileName = os.path.splitext(os.path.basename(member))[0]
            if (fileExt in (fusionExtList + imageExtList)):
                fullFileName = ''.join([outputFileName, '_', fileName, fileExt])
                while os.path.exists(os.path.join(destDirectory, fullFileName)):
                    fileName += '#'
                    fullFileName = ''.join([outputFileName, '_', fileName, fileExt])
                source = baseZipFile.open(member)
                target = open(os.path.join(destDirectory, fullFileName), 'wb')
                with source, target:
                    shutil.copyfileobj(source, target)
                    numOfFileExtracted += 1
extracts all the illustations and models from the 123dx file recursively
def _extract3dRecursively(fileList, baseZipFile, destDirectory, outputFileName, numOfFileExtracted=0):
    '  '
    imageExtList = ['.jpg', '.png']
    fusionExtList = ['.smt', '.smb', '.sat', '.igs', '.dxf', '.stp', '.stl']
    for member in fileList:
        if os.path.isdir(member):
            _extract3dRecursively(os.listdir(member), baseZipFile, destDirectory, outputFileName)
        else:
            fileExt = os.path.splitext(member)[1]
            fileName = os.path.splitext(os.path.basename(member))[0]
            if (fileExt in (fusionExtList + imageExtList)):
                fullFileName = .join([outputFileName, '_', fileName, fileExt])
                while os.path.exists(os.path.join(destDirectory, fullFileName)):
                    fileName += '#'
                    fullFileName = .join([outputFileName, '_', fileName, fileExt])
                source = baseZipFile.open(member)
                target = open(os.path.join(destDirectory, fullFileName), 'wb')
                with source, target:
                    shutil.copyfileobj(source, target)
                    numOfFileExtracted += 1