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
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-03-29 08:01:52 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-03-29 08:01:52 +0400
commit4506f730556aab929ee987323dcfb87fe0880114 (patch)
tree5427996381ee45e0d5ef32d983da9950dd85aadf /source/blender/editors
parente8105fbf5054eab80e742df3c6312d5fc64ebf05 (diff)
add edge-angle drawing in editmode for manifold edges.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/include/UI_resources.h1
-rw-r--r--source/blender/editors/interface/resources.c3
-rw-r--r--source/blender/editors/space_view3d/drawobject.c75
3 files changed, 65 insertions, 14 deletions
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h
index d84e392ae34..51d16094609 100644
--- a/source/blender/editors/include/UI_resources.h
+++ b/source/blender/editors/include/UI_resources.h
@@ -185,6 +185,7 @@ enum {
TH_EDGE_CREASE,
TH_DRAWEXTRA_EDGELEN,
+ TH_DRAWEXTRA_EDGEANG,
TH_DRAWEXTRA_FACEAREA,
TH_DRAWEXTRA_FACEANG,
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 39a6109bd62..d9b179795b8 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -309,6 +309,8 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
cp = &ts->facedot_size; break;
case TH_DRAWEXTRA_EDGELEN:
cp = ts->extra_edge_len; break;
+ case TH_DRAWEXTRA_EDGEANG:
+ cp = ts->extra_edge_angle; break;
case TH_DRAWEXTRA_FACEAREA:
cp = ts->extra_face_area; break;
case TH_DRAWEXTRA_FACEANG:
@@ -766,6 +768,7 @@ void ui_theme_init_default(void)
btheme->tv3d.facedot_size = 4;
rgba_char_args_set(btheme->tv3d.extra_edge_len, 32, 0, 0, 255);
+ rgba_char_args_set(btheme->tv3d.extra_edge_angle, 32, 32, 0, 255);
rgba_char_args_set(btheme->tv3d.extra_face_area, 0, 32, 0, 255);
rgba_char_args_set(btheme->tv3d.extra_face_angle, 0, 0, 128, 255);
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 5a537f6f6c5..0fc401e88d4 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -2601,9 +2601,9 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS
unsigned char col[4] = {0, 0, 0, 255}; /* color of the text to draw */
float area; /* area of the face */
float grid = unit->system ? unit->scale_length : v3d->grid;
- const int do_split = unit->flag & USER_UNIT_OPT_SPLIT;
- const int do_global = v3d->flag & V3D_GLOBAL_STATS;
- const int do_moving = G.moving;
+ const bool do_split = (unit->flag & USER_UNIT_OPT_SPLIT) != 0;
+ const bool do_global = (v3d->flag & V3D_GLOBAL_STATS) != 0;
+ const bool do_moving = G.moving;
BMIter iter;
int i;
@@ -2644,7 +2644,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS
unit->system, B_UNIT_LENGTH, do_split, false);
}
else {
- sprintf(numstr, conv_float, len_v3v3(v1, v2));
+ BLI_snprintf(numstr, sizeof(numstr), conv_float, len_v3v3(v1, v2));
}
view3d_cached_text_draw_add(vmid, numstr, 0, txt_flag, col);
@@ -2652,6 +2652,50 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS
}
}
+ if (me->drawflag & ME_DRAWEXTRA_EDGEANG) {
+ const bool is_rad = (unit->system_rotation == USER_UNIT_ROT_RADIANS);
+ BMEdge *eed;
+
+ UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGEANG, col);
+
+ // invert_m4_m4(ob->imat, ob->obmat); // this is already called
+
+ eed = BM_iter_new(&iter, em->bm, BM_EDGES_OF_MESH, NULL);
+ for (; eed; eed = BM_iter_step(&iter)) {
+ /* draw selected edges, or edges next to selected verts while draging */
+ if (BM_elem_flag_test(eed, BM_ELEM_SELECT) ||
+ (do_moving && (BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(eed->v2, BM_ELEM_SELECT))))
+ {
+ BMFace *f_a, *f_b;
+ if (BM_edge_face_pair(eed, &f_a, &f_b)) {
+ float angle;
+ copy_v3_v3(v1, eed->v1->co);
+ copy_v3_v3(v2, eed->v2->co);
+
+ mid_v3_v3v3(vmid, v1, v2);
+
+ if (do_global) {
+ float no_a[3];
+ float no_b[3];
+ copy_v3_v3(no_a, f_a->no);
+ copy_v3_v3(no_b, f_b->no);
+ mul_mat3_m4_v3(ob->imat, no_a);
+ mul_mat3_m4_v3(ob->imat, no_b);
+ angle = angle_v3v3(no_a, no_b);
+ }
+ else {
+ angle = angle_normalized_v3v3(f_a->no, f_b->no);
+ }
+
+ BLI_snprintf(numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle));
+
+ view3d_cached_text_draw_add(vmid, numstr, 0, txt_flag, col);
+ }
+ }
+ }
+ }
+
if (me->drawflag & ME_DRAWEXTRA_FACEAREA) {
/* would be nice to use BM_face_calc_area, but that is for 2d faces
* so instead add up tessellation triangle areas */
@@ -2714,7 +2758,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS
if (me->drawflag & ME_DRAWEXTRA_FACEANG) {
BMFace *efa;
- int is_rad = unit->system_rotation == USER_UNIT_ROT_RADIANS;
+ const bool is_rad = (unit->system_rotation == USER_UNIT_ROT_RADIANS);
UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col);
@@ -2787,7 +2831,7 @@ static void draw_em_indices(BMEditMesh *em)
UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col);
BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
if (BM_elem_flag_test(v, BM_ELEM_SELECT)) {
- sprintf(numstr, "%d", i);
+ BLI_snprintf(numstr, sizeof(numstr), "%d", i);
view3d_cached_text_draw_add(v->co, numstr, 0, txt_flag, col);
}
i++;
@@ -2799,7 +2843,7 @@ static void draw_em_indices(BMEditMesh *em)
UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGELEN, col);
BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
- sprintf(numstr, "%d", i);
+ BLI_snprintf(numstr, sizeof(numstr), "%d", i);
mid_v3_v3v3(pos, e->v1->co, e->v2->co);
view3d_cached_text_draw_add(pos, numstr, 0, txt_flag, col);
}
@@ -2813,7 +2857,7 @@ static void draw_em_indices(BMEditMesh *em)
BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
if (BM_elem_flag_test(f, BM_ELEM_SELECT)) {
BM_face_calc_center_mean(f, pos);
- sprintf(numstr, "%d", i);
+ BLI_snprintf(numstr, sizeof(numstr), "%d", i);
view3d_cached_text_draw_add(pos, numstr, 0, txt_flag, col);
}
i++;
@@ -3002,7 +3046,10 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d,
draw_dm_vert_normals(em, scene, ob, cageDM);
}
- if ((me->drawflag & (ME_DRAWEXTRA_EDGELEN | ME_DRAWEXTRA_FACEAREA | ME_DRAWEXTRA_FACEANG)) &&
+ if ((me->drawflag & (ME_DRAWEXTRA_EDGELEN |
+ ME_DRAWEXTRA_FACEAREA |
+ ME_DRAWEXTRA_FACEANG |
+ ME_DRAWEXTRA_EDGEANG)) &&
!(v3d->flag2 & V3D_RENDER_OVERRIDE))
{
draw_em_measure_stats(v3d, ob, em, &scene->unit);
@@ -3059,7 +3106,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
eWireDrawMode draw_wire = OBDRAW_WIRE_OFF;
int /* totvert,*/ totedge, totface;
DerivedMesh *dm = mesh_get_derived_final(scene, ob, scene->customdata_mask);
- const short is_obact = (ob == OBACT);
+ const bool is_obact = (ob == OBACT);
int draw_flags = (is_obact && paint_facesel_test(ob)) ? DRAW_FACE_SELECT : 0;
if (!dm)
@@ -4396,15 +4443,15 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
if (part->draw & PART_DRAW_NUM) {
if (a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype == PART_PHYS_BOIDS)) {
- sprintf(val_pos, "%d:%.2f", a, pa_health);
+ BLI_snprintf(val_pos, sizeof(numstr), "%d:%.2f", a, pa_health);
}
else {
- sprintf(val_pos, "%d", a);
+ BLI_snprintf(val_pos, sizeof(numstr), "%d", a);
}
}
else {
if (a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype == PART_PHYS_BOIDS)) {
- sprintf(val_pos, "%.2f", pa_health);
+ BLI_snprintf(val_pos, sizeof(numstr), "%.2f", pa_health);
}
}
@@ -6279,7 +6326,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
short dtx;
char dt;
short zbufoff = 0;
- const short is_obact = (ob == OBACT);
+ const bool is_obact = (ob == OBACT);
/* only once set now, will be removed too, should become a global standard */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);