From d4c8716c5b684faa2264a53822f3d32409a22c59 Mon Sep 17 00:00:00 2001 From: Demeter Dzadik Date: Mon, 31 Jan 2022 11:29:27 +0100 Subject: PoseLib: use bpy.utils.flip_name() Instead of re-implementing BLI_string_flip_side_name, use the python function that was exposed in D12322. Reviewed By: sybren Differential Revision: https://developer.blender.org/D13191 --- pose_library/pose_usage.py | 124 +-------------------------------------------- 1 file changed, 2 insertions(+), 122 deletions(-) diff --git a/pose_library/pose_usage.py b/pose_library/pose_usage.py index dc496d9c..7bc9377e 100644 --- a/pose_library/pose_usage.py +++ b/pose_library/pose_usage.py @@ -22,6 +22,7 @@ Pose Library - usage functions. from typing import Set import re +import bpy from bpy.types import ( Action, @@ -48,7 +49,7 @@ def select_bones(arm_object: Object, action: Action, *, select: bool, flipped: b seen_bone_names.add(bone_name) if flipped: - bone_name = flip_side_name(bone_name) + bone_name = bpy.utils.flip_name(bone_name) try: pose_bone = pose.bones[bone_name] @@ -58,127 +59,6 @@ def select_bones(arm_object: Object, action: Action, *, select: bool, flipped: b pose_bone.bone.select = select -_FLIP_SEPARATORS = set(". -_") - -# These are single-character replacements, others are handled differently. -_FLIP_REPLACEMENTS = { - "l": "r", - "L": "R", - "r": "l", - "R": "L", -} - - -def flip_side_name(to_flip: str) -> str: - """Flip left and right indicators in the name. - - Basically a Python implementation of BLI_string_flip_side_name. - - >>> flip_side_name('bone_L.004') - 'bone_R.004' - >>> flip_side_name('left_bone') - 'right_bone' - >>> flip_side_name('Left_bone') - 'Right_bone' - >>> flip_side_name('LEFT_bone') - 'RIGHT_bone' - >>> flip_side_name('some.bone-RIGHT.004') - 'some.bone-LEFT.004' - >>> flip_side_name('some.bone-right.004') - 'some.bone-left.004' - >>> flip_side_name('some.bone-Right.004') - 'some.bone-Left.004' - >>> flip_side_name('some.bone-LEFT.004') - 'some.bone-RIGHT.004' - >>> flip_side_name('some.bone-left.004') - 'some.bone-right.004' - >>> flip_side_name('some.bone-Left.004') - 'some.bone-Right.004' - >>> flip_side_name('.004') - '.004' - >>> flip_side_name('L.004') - 'R.004' - """ - import string - - if len(to_flip) < 3: - # we don't flip names like .R or .L - return to_flip - - # We first check the case with a .### extension, let's find the last period. - number = "" - replace = to_flip - if to_flip[-1] in string.digits: - try: - index = to_flip.rindex(".") - except ValueError: - pass - else: - if to_flip[index + 1] in string.digits: - # TODO(Sybren): this doesn't handle "bone.1abc2" correctly. - number = to_flip[index:] - replace = to_flip[:index] - - if not replace: - # Nothing left after the number, so no flips necessary. - return replace + number - - if len(replace) == 1: - replace = _FLIP_REPLACEMENTS.get(replace, replace) - return replace + number - - # First case; separator . - _ with extensions r R l L. - if replace[-2] in _FLIP_SEPARATORS and replace[-1] in _FLIP_REPLACEMENTS: - replace = replace[:-1] + _FLIP_REPLACEMENTS[replace[-1]] - return replace + number - - # Second case; beginning with r R l L, with separator after it. - if replace[1] in _FLIP_SEPARATORS and replace[0] in _FLIP_REPLACEMENTS: - replace = _FLIP_REPLACEMENTS[replace[0]] + replace[1:] - return replace + number - - lower = replace.lower() - prefix = suffix = "" - if lower.startswith("right"): - bit = replace[0:2] - if bit == "Ri": - prefix = "Left" - elif bit == "RI": - prefix = "LEFT" - else: - prefix = "left" - replace = replace[5:] - elif lower.startswith("left"): - bit = replace[0:2] - if bit == "Le": - prefix = "Right" - elif bit == "LE": - prefix = "RIGHT" - else: - prefix = "right" - replace = replace[4:] - elif lower.endswith("right"): - bit = replace[-5:-3] - if bit == "Ri": - suffix = "Left" - elif bit == "RI": - suffix = "LEFT" - else: - suffix = "left" - replace = replace[:-5] - elif lower.endswith("left"): - bit = replace[-4:-2] - if bit == "Le": - suffix = "Right" - elif bit == "LE": - suffix = "RIGHT" - else: - suffix = "right" - replace = replace[:-4] - - return prefix + replace + suffix + number - - if __name__ == '__main__': import doctest -- cgit v1.2.3