Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-05-09 20:43:09 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-05-09 20:43:09 +0400
commit1f223801d425fa1944f8929e213b405e60a082fe (patch)
treea4fb97c969ca4d6616a471032248e1cf04cea9a5 /source
parentc59f8506c0db0c004de21ca9a94b4e70265b27c6 (diff)
some speedups for face angle drawing
- avoid calculating face center when the face isnt used at all. - avoid copying vectors when its not needed.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_view3d/drawobject.c60
1 files changed, 35 insertions, 25 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index cf37c06023d..876f3e78062 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -2955,35 +2955,45 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS
UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col);
- for (efa = BM_iter_new(&iter, em->bm, BM_FACES_OF_MESH, NULL);
- efa; efa = BM_iter_step(&iter))
- {
- BMIter liter;
- BMLoop *loop;
-
- BM_face_calc_center_bounds(efa, vmid);
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ const int is_face_sel = BM_elem_flag_test(efa, BM_ELEM_SELECT);
+
+ if (is_face_sel || do_moving) {
+ BMIter liter;
+ BMLoop *loop;
+ int cent_ok = FALSE;
+
+ BM_ITER_ELEM(loop, &liter, efa, BM_LOOPS_OF_FACE) {
+ if (is_face_sel || (do_moving && BM_elem_flag_test(loop->v, BM_ELEM_SELECT))) {
+ /* yes, we should avoid triple matrix multiply every vertex for 'global' */
+ float angle;
+
+ /* lazy init center calc */
+ if (cent_ok == FALSE) {
+ BM_face_calc_center_bounds(efa, vmid);
+ cent_ok = TRUE;
+ }
- for (loop = BM_iter_new(&liter, em->bm, BM_LOOPS_OF_FACE, efa);
- loop; loop = BM_iter_step(&liter))
- {
- float v1[3], v2[3], v3[3];
+ if (do_global) {
+ copy_v3_v3(v1, loop->prev->v->co);
+ copy_v3_v3(v2, loop->v->co);
+ copy_v3_v3(v3, loop->next->v->co);
- copy_v3_v3(v1, loop->prev->v->co);
- copy_v3_v3(v2, loop->v->co);
- copy_v3_v3(v3, loop->next->v->co);
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
+ mul_mat3_m4_v3(ob->obmat, v3);
- if (do_global) {
- mul_mat3_m4_v3(ob->obmat, v1);
- mul_mat3_m4_v3(ob->obmat, v2);
- mul_mat3_m4_v3(ob->obmat, v3);
- }
+ angle = angle_v3v3v3(v1, v2, v3);
+ interp_v3_v3v3(fvec, vmid, v2, 0.8f);
+ }
+ else {
+ angle = angle_v3v3v3(loop->prev->v->co, loop->v->co, loop->v->co);
+ interp_v3_v3v3(fvec, vmid, loop->v->co, 0.8f);
+ }
- if ( (BM_elem_flag_test(efa, BM_ELEM_SELECT)) ||
- (do_moving && BM_elem_flag_test(loop->v, BM_ELEM_SELECT)))
- {
- BLI_snprintf(numstr, sizeof(numstr), "%.3f", RAD2DEGF(angle_v3v3v3(v1, v2, v3)));
- interp_v3_v3v3(fvec, vmid, v2, 0.8f);
- view3d_cached_text_draw_add(fvec, numstr, 0, txt_flag, col);
+ BLI_snprintf(numstr, sizeof(numstr), "%.3f", RAD2DEGF(angle));
+ view3d_cached_text_draw_add(fvec, numstr, 0, txt_flag, col);
+ }
}
}
}