[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55660] trunk/blender: add edge-angle drawing in editmode for manifold edges.

Campbell Barton ideasman42 at gmail.com
Fri Mar 29 05:01:54 CET 2013


Revision: 55660
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55660
Author:   campbellbarton
Date:     2013-03-29 04:01:52 +0000 (Fri, 29 Mar 2013)
Log Message:
-----------
add edge-angle drawing in editmode for manifold edges.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
    trunk/blender/source/blender/editors/include/UI_resources.h
    trunk/blender/source/blender/editors/interface/resources.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/makesdna/DNA_mesh_types.h
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2013-03-29 04:01:52 UTC (rev 55660)
@@ -2563,6 +2563,7 @@
         col.separator()
         col.label(text="Numerics:")
         col.prop(mesh, "show_extra_edge_length")
+        col.prop(mesh, "show_extra_edge_angle")
         col.prop(mesh, "show_extra_face_angle")
         col.prop(mesh, "show_extra_face_area")
         if bpy.app.debug:

Modified: trunk/blender/source/blender/editors/include/UI_resources.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_resources.h	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/source/blender/editors/include/UI_resources.h	2013-03-29 04:01:52 UTC (rev 55660)
@@ -185,6 +185,7 @@
 	TH_EDGE_CREASE,
 
 	TH_DRAWEXTRA_EDGELEN,
+	TH_DRAWEXTRA_EDGEANG,
 	TH_DRAWEXTRA_FACEAREA,
 	TH_DRAWEXTRA_FACEANG,
 

Modified: trunk/blender/source/blender/editors/interface/resources.c
===================================================================
--- trunk/blender/source/blender/editors/interface/resources.c	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/source/blender/editors/interface/resources.c	2013-03-29 04:01:52 UTC (rev 55660)
@@ -309,6 +309,8 @@
 					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 @@
 	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);
 

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-03-29 04:01:52 UTC (rev 55660)
@@ -2601,9 +2601,9 @@
 	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;
@@ -2652,6 +2652,48 @@
 		}
 	}
 
+	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);
+
+		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->obmat, no_a);
+						mul_mat3_m4_v3(ob->obmat, no_b);
+						angle = angle_normalized_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 +2756,7 @@
 
 	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);
 
@@ -3002,7 +3044,10 @@
 			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);

Modified: trunk/blender/source/blender/makesdna/DNA_mesh_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_mesh_types.h	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/source/blender/makesdna/DNA_mesh_types.h	2013-03-29 04:01:52 UTC (rev 55660)
@@ -197,9 +197,10 @@
 #define ME_DRAWEXTRA_EDGELEN  (1 << 10)
 #define ME_DRAWEXTRA_FACEAREA (1 << 11)
 #define ME_DRAWEXTRA_FACEANG  (1 << 12)
+#define ME_DRAWEXTRA_EDGEANG  (1 << 13)
 
 /* debug only option */
-#define ME_DRAWEXTRA_INDICES (1 << 13)
+#define ME_DRAWEXTRA_INDICES (1 << 14)
 
 /* Subsurf Type */
 #define ME_CC_SUBSURF 		0

Modified: trunk/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2013-03-29 04:01:52 UTC (rev 55660)
@@ -234,7 +234,7 @@
 	char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4];
 	char face[4], face_select[4];	/* solid faces */
 	char face_dot[4];				/*  selected color */
-	char extra_edge_len[4], extra_face_angle[4], extra_face_area[4], pad3[4];
+	char extra_edge_len[4], extra_edge_angle[4], extra_face_angle[4], extra_face_area[4];
 	char normal[4];
 	char vertex_normal[4];
 	char bone_solid[4], bone_pose[4], bone_pose_active[4];

Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2013-03-29 04:01:52 UTC (rev 55660)
@@ -2945,6 +2945,12 @@
 	                         "Display selected edge lengths, using global values when set in the transform panel");
 	RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
 
+	prop = RNA_def_property(srna, "show_extra_edge_angle", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEXTRA_EDGEANG);
+	RNA_def_property_ui_text(prop, "Edge Angle",
+	                         "Display selected edge angle, using global values when set in the transform panel");
+	RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
+
 	prop = RNA_def_property(srna, "show_extra_face_angle", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEXTRA_FACEANG);
 	RNA_def_property_ui_text(prop, "Face Angles",

Modified: trunk/blender/source/blender/makesrna/intern/rna_userdef.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2013-03-29 01:34:04 UTC (rev 55659)
+++ trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2013-03-29 04:01:52 UTC (rev 55660)
@@ -1465,6 +1465,11 @@
 	RNA_def_property_ui_text(prop, "Edge Length Text", "");
 	RNA_def_property_update(prop, 0, "rna_userdef_update");
 
+	prop = RNA_def_property(srna, "extra_edge_angle", PROP_FLOAT, PROP_COLOR_GAMMA);
+	RNA_def_property_array(prop, 3);
+	RNA_def_property_ui_text(prop, "Edge Angle Text", "");
+	RNA_def_property_update(prop, 0, "rna_userdef_update");
+
 	prop = RNA_def_property(srna, "extra_face_angle", PROP_FLOAT, PROP_COLOR_GAMMA);
 	RNA_def_property_array(prop, 3);
 	RNA_def_property_ui_text(prop, "Face Angle Text", "");




More information about the Bf-blender-cvs mailing list