Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDemeter Dzadik <Mets>2022-01-31 13:29:27 +0300
committerDemeter Dzadik <demeter@blender.studio>2022-01-31 13:29:40 +0300
commitd4c8716c5b684faa2264a53822f3d32409a22c59 (patch)
treee18faac919f1351acd45fe89c2e02deb69f781b7
parentfe7e5fd343005eba7b416889263695d27a01d2a4 (diff)
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
-rw-r--r--pose_library/pose_usage.py124
1 files 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