[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57165] trunk/blender/source/blender/ editors/space_view3d/drawobject.c: editmesh display user request, keep the edge lengths within the view bounds ( so you can see edge length even when zoomed in)
Campbell Barton
ideasman42 at gmail.com
Sat Jun 1 01:52:40 CEST 2013
Revision: 57165
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57165
Author: campbellbarton
Date: 2013-05-31 23:52:39 +0000 (Fri, 31 May 2013)
Log Message:
-----------
editmesh display user request, keep the edge lengths within the view bounds (so you can see edge length even when zoomed in)
Modified Paths:
--------------
trunk/blender/source/blender/editors/space_view3d/drawobject.c
Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c 2013-05-31 22:35:25 UTC (rev 57164)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c 2013-05-31 23:52:39 UTC (rev 57165)
@@ -2657,7 +2657,7 @@
}
}
-static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitSettings *unit)
+static void draw_em_measure_stats(ARegion *ar, View3D *v3d, Object *ob, BMEditMesh *em, UnitSettings *unit)
{
const short txt_flag = V3D_CACHE_TEXT_ASCII | V3D_CACHE_TEXT_LOCALCLIP;
Mesh *me = ob->data;
@@ -2670,6 +2670,7 @@
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;
+ float clip_planes[4][4];
BMIter iter;
int i;
@@ -2681,7 +2682,16 @@
else if (grid <= 1.0f) conv_float = "%.4g";
else if (grid <= 10.0f) conv_float = "%.3g";
else conv_float = "%.2g";
-
+
+ if (me->drawflag & (ME_DRAWEXTRA_EDGELEN | ME_DRAWEXTRA_EDGEANG)) {
+ BoundBox bb;
+ bglMats mats = {{0}};
+ const rcti rect = {0, ar->winx, 0, ar->winy};
+
+ view3d_get_transformation(ar, ar->regiondata, em->ob, &mats);
+ ED_view3d_clipping_calc(&bb, clip_planes, &mats, &rect);
+ }
+
if (me->drawflag & ME_DRAWEXTRA_EDGELEN) {
BMEdge *eed;
@@ -2698,22 +2708,28 @@
copy_v3_v3(v1, eed->v1->co);
copy_v3_v3(v2, eed->v2->co);
- mid_v3_v3v3(vmid, v1, v2);
+ if (clip_segment_v3_plane_n(v1, v2, clip_planes, 4)) {
- if (do_global) {
- mul_mat3_m4_v3(ob->obmat, v1);
- mul_mat3_m4_v3(ob->obmat, v2);
- }
+ mid_v3_v3v3(vmid, v1, v2);
- if (unit->system) {
- bUnit_AsString(numstr, sizeof(numstr), len_v3v3(v1, v2) * unit->scale_length, 3,
- unit->system, B_UNIT_LENGTH, do_split, false);
+ copy_v3_v3(v1, eed->v1->co);
+ copy_v3_v3(v2, eed->v2->co);
+
+ if (do_global) {
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
+ }
+
+ if (unit->system) {
+ bUnit_AsString(numstr, sizeof(numstr), len_v3v3(v1, v2) * unit->scale_length, 3,
+ unit->system, B_UNIT_LENGTH, do_split, false);
+ }
+ else {
+ BLI_snprintf(numstr, sizeof(numstr), conv_float, len_v3v3(v1, v2));
+ }
+
+ view3d_cached_text_draw_add(vmid, numstr, 0, txt_flag, col);
}
- else {
- BLI_snprintf(numstr, sizeof(numstr), conv_float, len_v3v3(v1, v2));
- }
-
- view3d_cached_text_draw_add(vmid, numstr, 0, txt_flag, col);
}
}
}
@@ -2742,28 +2758,34 @@
BM_elem_flag_test(l_b->prev->v, BM_ELEM_SELECT)
)))
{
- float angle;
copy_v3_v3(v1, eed->v1->co);
copy_v3_v3(v2, eed->v2->co);
- mid_v3_v3v3(vmid, v1, v2);
+ if (clip_segment_v3_plane_n(v1, v2, clip_planes, 4)) {
+ float angle;
- if (do_global) {
- float no_a[3];
- float no_b[3];
- copy_v3_v3(no_a, l_a->f->no);
- copy_v3_v3(no_b, l_b->f->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(l_a->f->no, l_b->f->no);
- }
+ mid_v3_v3v3(vmid, v1, v2);
- BLI_snprintf(numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle));
+ copy_v3_v3(v1, eed->v1->co);
+ copy_v3_v3(v2, eed->v2->co);
- view3d_cached_text_draw_add(vmid, numstr, 0, txt_flag, col);
+ if (do_global) {
+ float no_a[3];
+ float no_b[3];
+ copy_v3_v3(no_a, l_a->f->no);
+ copy_v3_v3(no_b, l_b->f->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(l_a->f->no, l_b->f->no);
+ }
+
+ BLI_snprintf(numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle));
+
+ view3d_cached_text_draw_add(vmid, numstr, 0, txt_flag, col);
+ }
}
}
}
@@ -2960,10 +2982,11 @@
return DM_DRAW_OPTION_NORMAL;
}
-static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d,
+static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, const char dt)
{
+ RegionView3D *rv3d = ar->regiondata;
Mesh *me = ob->data;
BMFace *efa_act = BM_active_face_get(em->bm, false, true); /* annoying but active faces is stored differently */
BMEdge *eed_act = NULL;
@@ -3158,7 +3181,7 @@
ME_DRAWEXTRA_EDGEANG)) &&
!(v3d->flag2 & V3D_RENDER_OVERRIDE))
{
- draw_em_measure_stats(v3d, ob, em, &scene->unit);
+ draw_em_measure_stats(ar, v3d, ob, em, &scene->unit);
}
if ((G.debug & G_DEBUG) && (me->drawflag & ME_DRAWEXTRA_INDICES) &&
@@ -3490,7 +3513,7 @@
GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
}
- draw_em_fancy(scene, v3d, rv3d, ob, em, cageDM, finalDM, dt);
+ draw_em_fancy(scene, ar, v3d, ob, em, cageDM, finalDM, dt);
GPU_end_object_materials();
More information about the Bf-blender-cvs
mailing list