def _utter_check_for_pia_skeleton(pia_filepath, armature): """Skeleton analysis in PIA file with reasonably quick searching the whole file. It takes filepath and an Armature object and returns True if the skeleton in PIA file can be used for the skeleton in provided Armature object, otherwise it returns False.""" bone_names = [bone.name for bone in armature.data.bones] file = open(pia_filepath, 'r') skeleton = None bone_matches = [] while 1: data_type, line = _pix_parser.next_line(file) if data_type == 'EOF': if len(bone_matches) > 0: break else: file.close() return False, None if data_type == 'ERR': file.close() return False, None # print('%s ==> "%s"' % (data_type, line)) if data_type == 'SE_S': section_type = re.split(r'[ ]+', line)[0] if section_type == "Global": # print(' %s' % section_type) data_type, line = _pix_parser.next_line(file) line_split = re.split(r'"', line) # print(' %r | %r' % (line_split, skeleton)) if line_split[0].strip() == "Skeleton:": skeleton = line_split[1].strip() elif section_type == "BoneChannel": data_type, line = _pix_parser.next_line(file) # print(' %s - %s' % (data_type, line)) prop_name = re.split(r'"', line)[1] # print(' %r' % prop_name) if prop_name in bone_names: bone_matches.append(prop_name) else: file.close() return False, None file.close() return True, skeleton
def _fast_check_for_pia_skeleton(pia_filepath, skeleton): """Check for the skeleton record in PIA file without parsing the whole file. It takes filepath and skeleton name (string) and returns True if the skeleton record in the file is the same as skeleton name provided, otherwise False.""" file = open(pia_filepath, 'r') while 1: data_type, line = _pix_parser.next_line(file) if data_type in ('EOF', 'ERR'): break # print('%s ==> "%s"' % (data_type, line)) if data_type == 'SE_S': section_type = re.split(r'[ ]+', line)[0] if section_type == "Global": # print(' %s' % section_type) data_type, line = _pix_parser.next_line(file) ske = re.split(r'"', line)[1] # print(' %r | %r' % (ske, skeleton)) if ske == skeleton: file.close() return True break file.close() return False