Two fixes:

* RNA Path fixing when renaming data now checks if a path in question cannot be resolved before trying to fix it. This should reduce the number of misindentified cases I hope.

* Silenced compiler warnings for EdgeSlide stuff that mingw was making about unused variables.
This commit is contained in:
2009-10-22 03:12:44 +00:00
parent c825a9aeaa
commit 359a3d1811
2 changed files with 61 additions and 46 deletions

View File

@@ -238,6 +238,19 @@ void BKE_animdata_make_local(AnimData *adt)
/* Path Validation -------------------------------------------- */
/* Check if a given RNA Path is valid, by tracing it from the given ID, and seeing if we can resolve it */
static short check_rna_path_is_valid (ID *owner_id, char *path)
{
PointerRNA id_ptr, ptr;
PropertyRNA *prop=NULL;
/* make initial RNA pointer to start resolving from */
RNA_id_pointer_create(owner_id, &id_ptr);
/* try to resolve */
return RNA_path_resolve(&id_ptr, path, &ptr, &prop);
}
/* Check if some given RNA Path needs fixing - free the given path and set a new one as appropriate
* NOTE: we assume that oldName and newName have [" "] padding around them
*/
@@ -249,39 +262,49 @@ static char *rna_path_rename_fix (ID *owner_id, char *prefix, char *oldName, cha
int oldNameLen= strlen(oldName);
/* only start fixing the path if the prefix and oldName feature in the path,
* and prefix occurs immediately before oldName (the +2 should take care of any [")
* and prefix occurs immediately before oldName
*/
if ( (prefixPtr && oldNamePtr) && (prefixPtr+prefixLen == oldNamePtr) ) {
DynStr *ds= BLI_dynstr_new();
char *postfixPtr= oldNamePtr+oldNameLen;
char *newPath = NULL;
char oldChar;
/* add the part of the string that goes up to the start of the prefix */
if (prefixPtr > oldpath) {
oldChar= prefixPtr[0];
prefixPtr[0]= 0;
BLI_dynstr_append(ds, oldpath);
prefixPtr[0]= oldChar;
/* if we haven't aren't able to resolve the path now, try again after fixing it */
if (check_rna_path_is_valid(owner_id, oldpath) == 0) {
DynStr *ds= BLI_dynstr_new();
char *postfixPtr= oldNamePtr+oldNameLen;
char *newPath = NULL;
char oldChar;
/* add the part of the string that goes up to the start of the prefix */
if (prefixPtr > oldpath) {
oldChar= prefixPtr[0];
prefixPtr[0]= 0;
BLI_dynstr_append(ds, oldpath);
prefixPtr[0]= oldChar;
}
/* add the prefix */
BLI_dynstr_append(ds, prefix);
/* add the new name (complete with brackets) */
BLI_dynstr_append(ds, newName);
/* add the postfix */
BLI_dynstr_append(ds, postfixPtr);
/* create new path, and cleanup old data */
newPath= BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
/* check if the new path will solve our problems */
// TODO: will need to check whether this step really helps in practice
if (check_rna_path_is_valid(owner_id, newPath)) {
/* free the old path, and return the new one, since we've solved the issues */
MEM_freeN(oldpath);
return newPath;
}
else {
/* still couldn't resolve the path... so, might as well just leave it alone */
MEM_freeN(newPath);
}
}
/* add the prefix */
BLI_dynstr_append(ds, prefix);
/* add the new name (complete with brackets) */
BLI_dynstr_append(ds, newName);
/* add the postfix */
BLI_dynstr_append(ds, postfixPtr);
/* create new path, and cleanup old data */
newPath= BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
MEM_freeN(oldpath);
/* return the new path */
return newPath;
}
/* the old path doesn't need to be changed */

View File

@@ -3942,10 +3942,8 @@ static int createSlideVerts(TransInfo *t)
LinkNode *edgelist = NULL, *vertlist=NULL, *look;
GHash *vertgh;
TransDataSlideVert *tempsv;
float perc = 0, percp = 0,vertdist; // XXX, projectMat[4][4];
float shiftlabda= 0.0f,len = 0.0f;
int i, j, numsel, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0,flip=0;
int wasshift = 0;
float vertdist; // XXX, projectMat[4][4];
int i, j, numsel, numadded=0, timesthrough = 0, vertsel=0;
/* UV correction vars */
GHash **uvarray= NULL;
SlideData *sld = MEM_callocN(sizeof(*sld), "sld");
@@ -3956,8 +3954,7 @@ static int createSlideVerts(TransInfo *t)
float projectMat[4][4];
float start[3] = {0.0f, 0.0f, 0.0f}, end[3] = {0.0f, 0.0f, 0.0f};
float vec[3];
//short mval[2], mvalo[2];
float labda = 0.0f, totvec=0.0;
float totvec=0.0;
if (!v3d) {
/*ok, let's try to survive this*/
@@ -3965,8 +3962,7 @@ static int createSlideVerts(TransInfo *t)
} else {
view3d_get_object_project_mat(v3d, t->obedit, projectMat);
}
//mvalo[0] = -1; mvalo[1] = -1;
numsel =0;
// Get number of selected edges and clear some flags
@@ -4468,23 +4464,20 @@ int doEdgeSlide(TransInfo *t, float perc)
Mesh *me= t->obedit->data;
EditMesh *em = me->edit_mesh;
SlideData *sld = t->customData;
EditEdge *first=NULL,*last=NULL, *temp = NULL;
EditVert *ev, *nearest = sld->nearest;
EditVert *centerVert, *upVert, *downVert;
LinkNode *edgelist = sld->edgelist, *vertlist=sld->vertlist, *look;
LinkNode *vertlist=sld->vertlist, *look;
GHash *vertgh = sld->vhash;
TransDataSlideVert *tempsv;
float shiftlabda= 0.0f,len = 0.0f;
int i = 0, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0,flip=0;
int wasshift = 0;
float len = 0.0f;
int prop=1, flip=0;
/* UV correction vars */
GHash **uvarray= sld->uvhash;
int uvlay_tot= CustomData_number_of_layers(&em->fdata, CD_MTFACE);
int uvlay_idx;
TransDataSlideUv *slideuvs=sld->slideuv, *suv=sld->slideuv, *suv_last=NULL;
TransDataSlideUv *suv=sld->slideuv;
float uv_tmp[2];
LinkNode *fuv_link;
float labda = 0.0f;
len = 0.0f;
@@ -4579,7 +4572,6 @@ int doEdgeSlide(TransInfo *t, float perc)
int EdgeSlide(TransInfo *t, short mval[2])
{
TransData *td = t->data;
char str[50];
float final;