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:
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user