diff options
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_blender.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/armature.c | 15 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/constraint.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 5 |
4 files changed, 23 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 13fd55d244f..84c92fef0af 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -43,7 +43,7 @@ extern "C" { struct ListBase; struct MemFile; -#define BLENDER_VERSION 240 +#define BLENDER_VERSION 241 int BKE_read_file(char *dir, void *type_r); int BKE_read_file_from_memory(char* filebuf, int filelength, void *type_r); diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 15116b390cc..f5d8edef167 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -809,7 +809,22 @@ void get_objectspace_bone_matrix (struct Bone* bone, float M_accumulatedMatrix[] pose_mat(b)= arm_mat(b) * chan_mat(b) *************************************************************************** */ +/* Computes vector and roll based on a rotation. "mat" must + contain only a rotation, and no scaling. */ +void mat3_to_vec_roll(float mat[][3], float *vec, float *roll) { + if (vec) + VecCopyf(vec, mat[1]); + if (roll) { + float vecmat[3][3], vecmatinv[3][3], rollmat[3][3]; + + vec_roll_to_mat3(mat[1], 0.0f, vecmat); + Mat3Inv(vecmatinv, vecmat); + Mat3MulMat3(rollmat, vecmatinv, mat); + + *roll= atan2(rollmat[2][0], rollmat[2][2]); + } +} /* Calculates the rest matrix of a bone based On its vector and a roll around that vector */ diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index db097b37339..7458a0230dd 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -383,6 +383,9 @@ Object *get_constraint_target(bConstraint *con, char **subtarget) return (data->tar); } break; + default: + *subtarget= NULL; + break; } return NULL; diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 6c64a954b49..d0b741123b5 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -275,7 +275,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis vmap= make_uv_vert_map(mface, tface, totface, totvert, 0, limit); if (!vmap) return 0; - + ccgSubSurf_initFullSync(ss); /* use this to get consistent vert handles with different heap addresses */ @@ -283,6 +283,9 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis /* create vertices */ for (i=0; i<totvert; i++) { + if (!get_uv_map_vert(vmap, i)) + continue; + for (v=get_uv_map_vert(vmap, i)->next; v; v=v->next) if (v->separate) break; |