forked from bartvdbraak/blender
3 duplicate functions: bone_flip_name() object_flip_name() flip_side_name()
removed object_flip_name() & bone_flip_name(), use flip_side_name()
This commit is contained in:
parent
9a9e04edfb
commit
520d12e13e
@ -80,7 +80,6 @@ void free_armature(struct bArmature *arm);
|
||||
void make_local_armature(struct bArmature *arm);
|
||||
struct bArmature *copy_armature(struct bArmature *arm);
|
||||
|
||||
void bone_flip_name (char *name, int strip_number);
|
||||
int bone_autoside_name (char *name, int strip_number, short axis, float head, float tail);
|
||||
|
||||
struct Bone *get_named_bone (struct bArmature *arm, const char *name);
|
||||
|
@ -245,117 +245,6 @@ Bone *get_named_bone (bArmature *arm, const char *name)
|
||||
return bone;
|
||||
}
|
||||
|
||||
|
||||
#define IS_SEPARATOR(a) (a=='.' || a==' ' || a=='-' || a=='_')
|
||||
|
||||
/* finds the best possible flipped name. For renaming; check for unique names afterwards */
|
||||
/* if strip_number: removes number extensions */
|
||||
void bone_flip_name (char *name, int strip_number)
|
||||
{
|
||||
int len;
|
||||
char prefix[128]={""}; /* The part before the facing */
|
||||
char suffix[128]={""}; /* The part after the facing */
|
||||
char replace[128]={""}; /* The replacement string */
|
||||
char number[128]={""}; /* The number extension string */
|
||||
char *index=NULL;
|
||||
|
||||
len= strlen(name);
|
||||
if(len<3) return; // we don't do names like .R or .L
|
||||
|
||||
/* We first check the case with a .### extension, let's find the last period */
|
||||
if(isdigit(name[len-1])) {
|
||||
index= strrchr(name, '.'); // last occurrence
|
||||
if (index && isdigit(index[1]) ) { // doesnt handle case bone.1abc2 correct..., whatever!
|
||||
if(strip_number==0)
|
||||
strcpy(number, index);
|
||||
*index= 0;
|
||||
len= strlen(name);
|
||||
}
|
||||
}
|
||||
|
||||
strcpy (prefix, name);
|
||||
|
||||
/* first case; separator . - _ with extensions r R l L */
|
||||
if( IS_SEPARATOR(name[len-2]) ) {
|
||||
switch(name[len-1]) {
|
||||
case 'l':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "r");
|
||||
break;
|
||||
case 'r':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "l");
|
||||
break;
|
||||
case 'L':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "R");
|
||||
break;
|
||||
case 'R':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "L");
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* case; beginning with r R l L , with separator after it */
|
||||
else if( IS_SEPARATOR(name[1]) ) {
|
||||
switch(name[0]) {
|
||||
case 'l':
|
||||
strcpy(replace, "r");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
case 'r':
|
||||
strcpy(replace, "l");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
case 'L':
|
||||
strcpy(replace, "R");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
case 'R':
|
||||
strcpy(replace, "L");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(len > 5) {
|
||||
/* hrms, why test for a separator? lets do the rule 'ultimate left or right' */
|
||||
index = BLI_strcasestr(prefix, "right");
|
||||
if (index==prefix || index==prefix+len-5) {
|
||||
if(index[0]=='r')
|
||||
strcpy (replace, "left");
|
||||
else {
|
||||
if(index[1]=='I')
|
||||
strcpy (replace, "LEFT");
|
||||
else
|
||||
strcpy (replace, "Left");
|
||||
}
|
||||
*index= 0;
|
||||
strcpy (suffix, index+5);
|
||||
}
|
||||
else {
|
||||
index = BLI_strcasestr(prefix, "left");
|
||||
if (index==prefix || index==prefix+len-4) {
|
||||
if(index[0]=='l')
|
||||
strcpy (replace, "right");
|
||||
else {
|
||||
if(index[1]=='E')
|
||||
strcpy (replace, "RIGHT");
|
||||
else
|
||||
strcpy (replace, "Right");
|
||||
}
|
||||
*index= 0;
|
||||
strcpy (suffix, index+4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sprintf (name, "%s%s%s%s", prefix, replace, suffix, number);
|
||||
}
|
||||
|
||||
/* Finds the best possible extension to the name on a particular axis. (For renaming, check for unique names afterwards)
|
||||
* This assumes that bone names are at most 32 chars long!
|
||||
* strip_number: removes number extensions (TODO: not used)
|
||||
|
@ -1752,9 +1752,8 @@ EditBone *ED_armature_bone_get_mirrored(ListBase *edbo, EditBone *ebo)
|
||||
|
||||
if (ebo == NULL)
|
||||
return NULL;
|
||||
|
||||
BLI_strncpy(name, ebo->name, sizeof(name));
|
||||
bone_flip_name(name, 0); // 0 = don't strip off number extensions
|
||||
|
||||
flip_side_name(name, ebo->name, FALSE);
|
||||
|
||||
for (eboflip= edbo->first; eboflip; eboflip=eboflip->next) {
|
||||
if (ebo != eboflip) {
|
||||
@ -4741,11 +4740,10 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m
|
||||
/* find flipped group */
|
||||
if (dgroup && mirror) {
|
||||
char name[32];
|
||||
|
||||
BLI_strncpy(name, dgroup->name, 32);
|
||||
|
||||
// 0 = don't strip off number extensions
|
||||
bone_flip_name(name, 0);
|
||||
|
||||
flip_side_name(name, dgroup->name, FALSE);
|
||||
|
||||
for (curdg = ob->defbase.first; curdg; curdg=curdg->next) {
|
||||
if (!strcmp(curdg->name, name))
|
||||
break;
|
||||
@ -5540,8 +5538,7 @@ static int armature_flip_names_exec (bContext *C, wmOperator *op)
|
||||
/* loop through selected bones, auto-naming them */
|
||||
CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones)
|
||||
{
|
||||
BLI_strncpy(newname, ebone->name, sizeof(newname));
|
||||
bone_flip_name(newname, 1); // 1 = do strip off number extensions
|
||||
flip_side_name(newname, ebone->name, TRUE); // 1 = do strip off number extensions
|
||||
ED_armature_bone_rename(arm, ebone->name, newname);
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
@ -897,7 +897,6 @@ static int pose_paste_exec (bContext *C, wmOperator *op)
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *ob= CTX_data_active_object(C);
|
||||
bPoseChannel *chan, *pchan;
|
||||
char name[32];
|
||||
int flip= RNA_boolean_get(op->ptr, "flipped");
|
||||
|
||||
/* sanity checks */
|
||||
@ -913,10 +912,12 @@ static int pose_paste_exec (bContext *C, wmOperator *op)
|
||||
for (chan= g_posebuf->chanbase.first; chan; chan=chan->next) {
|
||||
if (chan->flag & POSE_KEY) {
|
||||
/* get the name - if flipping, we must flip this first */
|
||||
BLI_strncpy(name, chan->name, sizeof(name));
|
||||
char name[32];
|
||||
if (flip)
|
||||
bone_flip_name(name, 0); /* 0 = don't strip off number extensions */
|
||||
|
||||
flip_side_name(name, chan->name, 0); /* 0 = don't strip off number extensions */
|
||||
else
|
||||
BLI_strncpy(name, chan->name, sizeof(name));
|
||||
|
||||
/* only copy when channel exists, poses are not meant to add random channels to anymore */
|
||||
pchan= get_pose_channel(ob->pose, name);
|
||||
|
||||
@ -1431,7 +1432,6 @@ static int pose_flip_names_exec (bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob= CTX_data_active_object(C);
|
||||
bArmature *arm;
|
||||
char newname[32];
|
||||
|
||||
/* paranoia checks */
|
||||
if (ELEM(NULL, ob, ob->pose))
|
||||
@ -1441,8 +1441,8 @@ static int pose_flip_names_exec (bContext *C, wmOperator *op)
|
||||
/* loop through selected bones, auto-naming them */
|
||||
CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones)
|
||||
{
|
||||
BLI_strncpy(newname, pchan->name, sizeof(newname));
|
||||
bone_flip_name(newname, 1); // 1 = do strip off number extensions
|
||||
char newname[32];
|
||||
flip_side_name(newname, pchan->name, TRUE);
|
||||
ED_armature_bone_rename(arm, pchan->name, newname);
|
||||
}
|
||||
CTX_DATA_END;
|
||||
@ -1546,10 +1546,8 @@ void pose_activate_flipped_bone(Scene *scene)
|
||||
|
||||
if(arm->act_bone) {
|
||||
char name[32];
|
||||
|
||||
BLI_strncpy(name, arm->act_bone->name, 32);
|
||||
bone_flip_name(name, 1); // 0 = do not strip off number extensions
|
||||
|
||||
flip_side_name(name, arm->act_bone->name, TRUE);
|
||||
|
||||
pchanf= get_pose_channel(ob->pose, name);
|
||||
if(pchanf && pchanf->bone != arm->act_bone) {
|
||||
arm->act_bone->flag &= ~BONE_SELECTED;
|
||||
|
@ -1321,7 +1321,6 @@ static void colorband_add_cb(bContext *C, void *cb_v, void *coba_v)
|
||||
static void colorband_del_cb(bContext *C, void *cb_v, void *coba_v)
|
||||
{
|
||||
ColorBand *coba= coba_v;
|
||||
int a;
|
||||
|
||||
if(colorband_element_remove(coba, coba->cur)) {
|
||||
ED_undo_push(C, "Delete colorband");
|
||||
|
@ -53,6 +53,7 @@
|
||||
#include "BKE_report.h"
|
||||
#include "BKE_scene.h"
|
||||
#include "BKE_utildefines.h"
|
||||
#include "BKE_deform.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
@ -824,130 +825,17 @@ void OBJECT_OT_select_same_group(wmOperatorType *ot)
|
||||
}
|
||||
|
||||
/**************************** Select Mirror ****************************/
|
||||
|
||||
/* finds the best possible flipped name. For renaming; check for unique names afterwards */
|
||||
/* if strip_number: removes number extensions */
|
||||
void object_flip_name (char *name)
|
||||
{
|
||||
int len;
|
||||
char prefix[128]={""}; /* The part before the facing */
|
||||
char suffix[128]={""}; /* The part after the facing */
|
||||
char replace[128]={""}; /* The replacement string */
|
||||
char number[128]={""}; /* The number extension string */
|
||||
char *index=NULL;
|
||||
|
||||
len= strlen(name);
|
||||
if(len<3) return; // we don't do names like .R or .L
|
||||
|
||||
/* We first check the case with a .### extension, let's find the last period */
|
||||
if(isdigit(name[len-1])) {
|
||||
index= strrchr(name, '.'); // last occurrence
|
||||
if (index && isdigit(index[1]) ) { // doesnt handle case bone.1abc2 correct..., whatever!
|
||||
strcpy(number, index);
|
||||
*index= 0;
|
||||
len= strlen(name);
|
||||
}
|
||||
}
|
||||
|
||||
strcpy (prefix, name);
|
||||
|
||||
#define IS_SEPARATOR(a) ((a)=='.' || (a)==' ' || (a)=='-' || (a)=='_')
|
||||
|
||||
/* first case; separator . - _ with extensions r R l L */
|
||||
if( IS_SEPARATOR(name[len-2]) ) {
|
||||
switch(name[len-1]) {
|
||||
case 'l':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "r");
|
||||
break;
|
||||
case 'r':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "l");
|
||||
break;
|
||||
case 'L':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "R");
|
||||
break;
|
||||
case 'R':
|
||||
prefix[len-1]= 0;
|
||||
strcpy(replace, "L");
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* case; beginning with r R l L , with separator after it */
|
||||
else if( IS_SEPARATOR(name[1]) ) {
|
||||
switch(name[0]) {
|
||||
case 'l':
|
||||
strcpy(replace, "r");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
case 'r':
|
||||
strcpy(replace, "l");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
case 'L':
|
||||
strcpy(replace, "R");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
case 'R':
|
||||
strcpy(replace, "L");
|
||||
strcpy(suffix, name+1);
|
||||
prefix[0]= 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(len > 5) {
|
||||
/* hrms, why test for a separator? lets do the rule 'ultimate left or right' */
|
||||
index = BLI_strcasestr(prefix, "right");
|
||||
if (index==prefix || index==prefix+len-5) {
|
||||
if(index[0]=='r')
|
||||
strcpy (replace, "left");
|
||||
else {
|
||||
if(index[1]=='I')
|
||||
strcpy (replace, "LEFT");
|
||||
else
|
||||
strcpy (replace, "Left");
|
||||
}
|
||||
*index= 0;
|
||||
strcpy (suffix, index+5);
|
||||
}
|
||||
else {
|
||||
index = BLI_strcasestr(prefix, "left");
|
||||
if (index==prefix || index==prefix+len-4) {
|
||||
if(index[0]=='l')
|
||||
strcpy (replace, "right");
|
||||
else {
|
||||
if(index[1]=='E')
|
||||
strcpy (replace, "RIGHT");
|
||||
else
|
||||
strcpy (replace, "Right");
|
||||
}
|
||||
*index= 0;
|
||||
strcpy (suffix, index+4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#undef IS_SEPARATOR
|
||||
|
||||
sprintf (name, "%s%s%s%s", prefix, replace, suffix, number);
|
||||
}
|
||||
|
||||
static int object_select_mirror_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
char tmpname[32];
|
||||
short extend;
|
||||
|
||||
extend= RNA_boolean_get(op->ptr, "extend");
|
||||
|
||||
CTX_DATA_BEGIN(C, Base*, primbase, selected_bases) {
|
||||
|
||||
strcpy(tmpname, primbase->object->id.name+2);
|
||||
object_flip_name(tmpname);
|
||||
|
||||
char tmpname[32];
|
||||
flip_side_name(tmpname, primbase->object->id.name+2, TRUE);
|
||||
|
||||
CTX_DATA_BEGIN(C, Base*, secbase, visible_bases) {
|
||||
if(!strcmp(secbase->object->id.name+2, tmpname)) {
|
||||
ED_base_object_select(secbase, BA_SELECT);
|
||||
|
@ -386,9 +386,8 @@ void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
|
||||
int actdef= 0;
|
||||
char name[32];
|
||||
|
||||
BLI_strncpy(name, defgroup->name, 32);
|
||||
bone_flip_name(name, 0); /* 0 = don't strip off number extensions */
|
||||
|
||||
flip_side_name(name, defgroup->name, FALSE);
|
||||
|
||||
for (curdef = ob->defbase.first; curdef; curdef=curdef->next, actdef++)
|
||||
if (!strcmp(curdef->name, name))
|
||||
break;
|
||||
@ -1390,10 +1389,9 @@ static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *event)
|
||||
bDeformGroup *curdef;
|
||||
int actdef= 0;
|
||||
char name[32];
|
||||
|
||||
BLI_strncpy(name, defgroup->name, 32);
|
||||
bone_flip_name(name, 0); /* 0 = don't strip off number extensions */
|
||||
|
||||
|
||||
flip_side_name(name, defgroup->name, FALSE);
|
||||
|
||||
for (curdef = ob->defbase.first; curdef; curdef=curdef->next, actdef++)
|
||||
if (!strcmp(curdef->name, name))
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user