diff options
author | Joshua Leung <aligorith@gmail.com> | 2008-01-21 02:53:13 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2008-01-21 02:53:13 +0300 |
commit | aa03132bc30369dc310fdcebe0bf1d94bab1114f (patch) | |
tree | 061560a090c55f308338d9d20aedc570bc0dcc66 /source/blender/blenkernel/intern/constraint.c | |
parent | 6f4c03a0911dd27e5b6bcd659d204db7c2ee2d38 (diff) |
[Coder API's]: Added a "generic unique name-finding function".
Basically, this is based on the behaviour of the unique_constraint_name (or equivilant) functions, which have traditionally been duplicated everytime a new datatype needed this.
Currently, this is in use for the following things:
* Constraints
* Action/Bone Groups
* Local Action Markers / PoseLib poses
Usage Notes:
* The file in which this is to be used should include the standard header file <stddef.h>. This defines the offsetof() macro, which should be used to find the relative location of the "name" member of the structs
* This function is only designed for names of up to 128 chars in length (Most names are at most 32. TimeMarkers are 64). If a longer string needs to be handled, the function will need to be modified accordingly.
* defname is the default name that should be used in case one hasn't been specified already
Diffstat (limited to 'source/blender/blenkernel/intern/constraint.c')
-rw-r--r-- | source/blender/blenkernel/intern/constraint.c | 51 |
1 files changed, 2 insertions, 49 deletions
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 5e53f10db37..6300d882879 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -31,6 +31,7 @@ */ #include <stdio.h> +#include <stddef.h> #include <string.h> #include <math.h> @@ -226,55 +227,7 @@ void do_constraint_channels (ListBase *conbase, ListBase *chanbase, float ctime, /* Find the first available, non-duplicate name for a given constraint */ void unique_constraint_name (bConstraint *con, ListBase *list) { - bConstraint *curcon; - char tempname[64]; - int number = 1, exists = 0; - char *dot; - - /* See if we are given an empty string */ - if (con->name[0] == '\0') { - /* give it default name first */ - strcpy(con->name, "Const"); - } - - /* See if we even need to do this */ - if (list == NULL) - return; - - for (curcon = list->first; curcon; curcon=curcon->next) { - if (curcon != con) { - if (!strcmp(curcon->name, con->name)) { - exists = 1; - break; - } - } - } - - if (exists == 0) - return; - - /* Strip off the suffix */ - dot = strchr(con->name, '.'); - if (dot) - *dot=0; - - for (number = 1; number <= 999; number++) { - sprintf(tempname, "%s.%03d", con->name, number); - - exists = 0; - for (curcon=list->first; curcon; curcon=curcon->next) { - if (con != curcon) { - if (strcmp(curcon->name, tempname)==0) { - exists = 1; - break; - } - } - } - if (exists == 0) { - strcpy(con->name, tempname); - return; - } - } + BLI_uniquename(list, con, "Const", offsetof(bConstraint, name), 32); } /* ----------------- Evaluation Loop Preparation --------------- */ |