Edit Mesh: Center text when Edge length & Edge Angle is activated

This is more readable as the informations will never overlap and be off the
center of the edge.
This commit is contained in:
Clément Foucault 2018-09-24 19:48:08 +02:00
parent 75eb947275
commit 7cc9998809
6 changed files with 29 additions and 32 deletions

View File

@ -275,7 +275,7 @@ static void MPATH_cache_motion_path(MPATH_PassList *psl,
{
numstr_len = sprintf(numstr, " %d", frame);
mul_v3_m4v3(co, ob->imat, mpv->co);
DRW_text_cache_add(dt, co, numstr, numstr_len, 0, txt_flag, (is_keyframe) ? col_kf : col);
DRW_text_cache_add(dt, co, numstr, numstr_len, 0, 0, txt_flag, (is_keyframe) ? col_kf : col);
}
else if (avs->path_viewflag & MOTIONPATH_VIEW_FNUMS) {
bMotionPathVert *mpvP = (mpv - stepsize);
@ -284,7 +284,7 @@ static void MPATH_cache_motion_path(MPATH_PassList *psl,
if ((equals_v3v3(mpv->co, mpvP->co) == 0) || (equals_v3v3(mpv->co, mpvN->co) == 0)) {
numstr_len = sprintf(numstr, " %d", frame);
mul_v3_m4v3(co, ob->imat, mpv->co);
DRW_text_cache_add(dt, co, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, co, numstr, numstr_len, 0, 0, txt_flag, col);
}
}
}

View File

@ -1602,7 +1602,7 @@ static void draw_armature_edit(Object *ob)
struct DRWTextStore *dt = DRW_text_cache_ensure();
DRW_text_cache_add(
dt, vec, eBone->name, strlen(eBone->name),
10, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
10, 0, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
}
/* Draw additional axes */
@ -1716,7 +1716,7 @@ static void draw_armature_pose(Object *ob, const float const_color[4])
struct DRWTextStore *dt = DRW_text_cache_ensure();
DRW_text_cache_add(
dt, vec, pchan->name, strlen(pchan->name),
10, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
10, 0, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
}
/* Draw additional axes */

View File

@ -50,7 +50,7 @@ typedef struct ViewCachedString {
int pack;
} col;
short sco[2];
short xoffs;
short xoffs, yoffs;
short flag;
int str_len;
@ -78,7 +78,7 @@ void DRW_text_cache_add(
DRWTextStore *dt,
const float co[3],
const char *str, const int str_len,
short xoffs, short flag,
short xoffs, short yoffs, short flag,
const uchar col[4])
{
int alloc_len;
@ -99,6 +99,7 @@ void DRW_text_cache_add(
copy_v3_v3(vos->vec, co);
copy_v4_v4_uchar(vos->col.ub, col);
vos->xoffs = xoffs;
vos->yoffs = yoffs;
vos->flag = flag;
vos->str_len = str_len;
@ -162,7 +163,7 @@ void DRW_text_cache_draw(DRWTextStore *dt, ARegion *ar)
BLF_position(
font_id,
(float)(vos->sco[0] + vos->xoffs), (float)(vos->sco[1]), 2.0f);
(float)(vos->sco[0] + vos->xoffs), (float)(vos->sco[1] + vos->yoffs), 2.0f);
((vos->flag & DRW_TEXT_CACHE_ASCII) ?
BLF_draw_ascii :

View File

@ -33,7 +33,7 @@ void DRW_text_cache_add(
struct DRWTextStore *dt,
const float co[3],
const char *str, const int str_len,
short xoffs, short flag,
short xoffs, short yoffs, short flag,
const uchar col[4]);
void DRW_text_cache_draw(struct DRWTextStore *dt, struct ARegion *ar);

View File

@ -71,7 +71,7 @@ void DRW_edit_mesh_mode_text_measure_stats(
const bool do_moving = (G.moving & G_TRANSFORM_EDIT) != 0;
/* when 2 edge-info options are enabled, space apart */
const bool do_edge_textpair = (me->drawflag & ME_DRAWEXTRA_EDGELEN) && (me->drawflag & ME_DRAWEXTRA_EDGEANG);
const float edge_texpair_sep = 0.4f;
const short edge_texpair_sep = (short)(5.0f * U.ui_scale);
float clip_planes[4][4];
/* allow for displaying shape keys and deform mods */
BMIter iter;
@ -109,12 +109,7 @@ void DRW_edit_mesh_mode_text_measure_stats(
if (clip_segment_v3_plane_n(v1, v2, clip_planes, 4, v1_clip, v2_clip)) {
if (do_edge_textpair) {
interp_v3_v3v3(vmid, v1, v2, edge_texpair_sep);
}
else {
mid_v3_v3v3(vmid, v1_clip, v2_clip);
}
mid_v3_v3v3(vmid, v1_clip, v2_clip);
if (do_global) {
mul_mat3_m4_v3(ob->obmat, v1);
@ -130,7 +125,9 @@ void DRW_edit_mesh_mode_text_measure_stats(
numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), conv_float, len_v3v3(v1, v2));
}
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0,
(do_edge_textpair) ? edge_texpair_sep : 0,
txt_flag, col);
}
}
}
@ -167,12 +164,7 @@ void DRW_edit_mesh_mode_text_measure_stats(
float no_a[3], no_b[3];
float angle;
if (do_edge_textpair) {
interp_v3_v3v3(vmid, v2_clip, v1_clip, edge_texpair_sep);
}
else {
mid_v3_v3v3(vmid, v1_clip, v2_clip);
}
mid_v3_v3v3(vmid, v1_clip, v2_clip);
copy_v3_v3(no_a, l_a->f->no);
copy_v3_v3(no_b, l_b->f->no);
@ -187,9 +179,12 @@ void DRW_edit_mesh_mode_text_measure_stats(
angle = angle_normalized_v3v3(no_a, no_b);
numstr_len = BLI_snprintf_rlen(
numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle));
numstr, sizeof(numstr), "%.3f%s", (is_rad) ? angle : RAD2DEGF(angle),
(is_rad) ? "r" : "°");
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0,
(do_edge_textpair) ? -edge_texpair_sep : 0,
txt_flag, col);
}
}
}
@ -242,7 +237,7 @@ void DRW_edit_mesh_mode_text_measure_stats(
numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), conv_float, area);
}
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, 0, txt_flag, col);
}
}
}
@ -290,9 +285,10 @@ void DRW_edit_mesh_mode_text_measure_stats(
float angle = angle_v3v3v3(v1, v2, v3);
numstr_len = BLI_snprintf_rlen(
numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle));
numstr, sizeof(numstr), "%.3f%s", (is_rad) ? angle : RAD2DEGF(angle),
(is_rad) ? "r" : "°");
interp_v3_v3v3(fvec, vmid, v2_local, 0.8f);
DRW_text_cache_add(dt, fvec, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, fvec, numstr, numstr_len, 0, 0, txt_flag, col);
}
}
}
@ -312,7 +308,7 @@ void DRW_edit_mesh_mode_text_measure_stats(
BM_ITER_MESH_INDEX(v, &iter, em->bm, BM_VERTS_OF_MESH, i) {
if (BM_elem_flag_test(v, BM_ELEM_SELECT)) {
numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), "%d", i);
DRW_text_cache_add(dt, v->co, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, v->co, numstr, numstr_len, 0, 0, txt_flag, col);
}
}
}
@ -330,7 +326,7 @@ void DRW_edit_mesh_mode_text_measure_stats(
if (clip_segment_v3_plane_n(v1, v2, clip_planes, 4, v1_clip, v2_clip)) {
mid_v3_v3v3(vmid, v1_clip, v2_clip);
numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), "%d", i);
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, 0, txt_flag, col);
}
}
}
@ -344,7 +340,7 @@ void DRW_edit_mesh_mode_text_measure_stats(
BM_face_calc_center_mean(f, v1);
numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), "%d", i);
DRW_text_cache_add(dt, v1, numstr, numstr_len, 0, txt_flag, col);
DRW_text_cache_add(dt, v1, numstr, numstr_len, 0, 0, txt_flag, col);
}
}
}

View File

@ -1789,7 +1789,7 @@ static void DRW_shgroup_camera(OBJECT_ShadingGroupList *sgl, Object *ob, ViewLay
bundle_mat[3],
track->name,
strlen(track->name),
10,
10, 0,
DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR,
is_selected ? text_color_selected : text_color_unselected);
}
@ -2822,7 +2822,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
DRW_text_cache_add(
dt, ob->obmat[3],
ob->id.name + 2, strlen(ob->id.name + 2),
10, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
10, 0, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
}
if ((ob->dtx & OB_TEXSPACE) && ELEM(ob->type, OB_MESH, OB_CURVE, OB_MBALL)) {