Fix Crazyspace with proportional editing

This commit is contained in:
Campbell Barton 2014-02-28 21:10:32 +11:00
parent 433b20b7ea
commit 771b0e354c
3 changed files with 10 additions and 4 deletions

View File

@ -81,7 +81,8 @@ void undo_editmode_clear(void);
/* crazyspace.c */
float (*crazyspace_get_mapped_editverts(struct Scene *scene, struct Object *obedit))[3];
void crazyspace_set_quats_editmesh(struct BMEditMesh *em, float (*origcos)[3], float (*mappedcos)[3], float (*quats)[4]);
void crazyspace_set_quats_editmesh(struct BMEditMesh *em, float (*origcos)[3], float (*mappedcos)[3], float (*quats)[4],
const bool use_select);
void crazyspace_set_quats_mesh(struct Mesh *me, float (*origcos)[3], float (*mappedcos)[3], float (*quats)[4]);
int sculpt_get_first_deform_matrices(struct Scene *scene, struct Object *ob, float (**deformmats)[3][3], float (**deformcos)[3]);
void crazyspace_build_sculpt(struct Scene *scene, struct Object *ob, float (**deformmats)[3][3], float (**deformcos)[3]);

View File

@ -2252,7 +2252,7 @@ static void createTransEditVerts(TransInfo *t)
{
mappedcos = crazyspace_get_mapped_editverts(t->scene, t->obedit);
quats = MEM_mallocN(em->bm->totvert * sizeof(*quats), "crazy quats");
crazyspace_set_quats_editmesh(em, defcos, mappedcos, quats);
crazyspace_set_quats_editmesh(em, defcos, mappedcos, quats, !propmode);
if (mappedcos)
MEM_freeN(mappedcos);
}

View File

@ -152,7 +152,8 @@ float (*crazyspace_get_mapped_editverts(Scene *scene, Object *obedit))[3]
return vertexcos;
}
void crazyspace_set_quats_editmesh(BMEditMesh *em, float (*origcos)[3], float (*mappedcos)[3], float (*quats)[4])
void crazyspace_set_quats_editmesh(BMEditMesh *em, float (*origcos)[3], float (*mappedcos)[3], float (*quats)[4],
const bool use_select)
{
BMFace *f;
BMIter iter;
@ -172,8 +173,12 @@ void crazyspace_set_quats_editmesh(BMEditMesh *em, float (*origcos)[3], float (*
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
do {
if (!BM_elem_flag_test(l_iter->v, BM_ELEM_SELECT) || BM_elem_flag_test(l_iter->v, BM_ELEM_HIDDEN))
if (BM_elem_flag_test(l_iter->v, BM_ELEM_HIDDEN) ||
BM_elem_flag_test(l_iter->v, BM_ELEM_TAG) ||
(use_select && !BM_elem_flag_test(l_iter->v, BM_ELEM_SELECT)))
{
continue;
}
if (!BM_elem_flag_test(l_iter->v, BM_ELEM_TAG)) {
const float *co_prev, *co_curr, *co_next; /* orig */