[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18769] branches/blender2.5/blender/source /blender/editors/mesh: 2.5

Ton Roosendaal ton at blender.org
Sat Jan 31 16:21:27 CET 2009


Revision: 18769
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18769
Author:   ton
Date:     2009-01-31 16:21:26 +0100 (Sat, 31 Jan 2009)

Log Message:
-----------
2.5

Edit Mesh

- "Select Similar" for vertices back.
  (Put under Jkey for now)
- renamed operator righthand_faces to consistant_normals
  gave it boolean property for 'inside'.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-01-31 15:09:33 UTC (rev 18768)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-01-31 15:21:26 UTC (rev 18769)
@@ -639,11 +639,9 @@
 	return (*eve || *eed || *efa);
 }
 
-/* this as a way to compare the ares, perim  of 2 faces thay will scale to different sizes
- *0.5 so smaller faces arnt ALWAYS selected with a thresh of 1.0 */
-#define SCALE_CMP(a,b) ((a+a*thresh >= b) && (a-(a*thresh*0.5) <= b))
 
-/* ****************  GROUP SELECTS ************** */
+/* ****************  SIMILAR "group" SELECTS. FACE, EDGE AND VERTEX ************** */
+
 /* selects new faces/edges/verts based on the
  existing selection
 
@@ -655,6 +653,12 @@
  mode 5: same normal
  mode 6: same co-planer
 */
+
+/* this as a way to compare the ares, perim  of 2 faces thay will scale to different sizes
+*0.5 so smaller faces arnt ALWAYS selected with a thresh of 1.0 */
+#define SCALE_CMP(a,b) ((a+a*thresh >= b) && (a-(a*thresh*0.5) <= b))
+
+
 int facegroup_select(EditMesh *em, short mode)
 {
 	EditFace *efa, *base_efa=NULL;
@@ -1027,12 +1031,24 @@
  mode 2: same number of face users
  mode 3: same vertex groups
 */
-int vertgroup_select(EditMesh *em, short mode)
+static EnumPropertyItem prop_simvertex_types[] = {
+	{0, "NORMAL", "Normal", ""},
+	{1, "FACE", "Amount of Vertices in Face", ""},
+	{2, "VGROUP", "Vertex Groups", ""},
+	{0, NULL, NULL, NULL}
+};
+
+
+static int similar_vert_select_exec(bContext *C, wmOperator *op)
 {
+//	Scene *scene= CTX_data_scene(C);
+	Object *obedit= CTX_data_edit_object(C);
+	Mesh *me= obedit->data;
+	EditMesh *em= me->edit_mesh; 
 	EditVert *eve, *base_eve=NULL;
-	
 	unsigned int selcount=0; /* count how many new edges we select*/
 	
+	
 	/*count how many visible selected edges there are,
 	so we can return when there are none left */
 	unsigned int deselcount=0;
@@ -1058,8 +1074,8 @@
 	if (!ok || !deselcount) /* no data selected OR no more data to select*/
 		return 0;
 	
-	
-	if (mode==2) { /* store face users */
+	if(RNA_enum_is_equal(op->ptr, "type", "FACE")) {
+		/* store face users */
 		EditFace *efa;
 		
 		/* count how many faces each edge uses use tmp->l */
@@ -1075,7 +1091,7 @@
 	for(base_eve= em->verts.first; base_eve; base_eve= base_eve->next) {
 		if (base_eve->f1) {
 				
-			if (mode==1) { /* same normal */
+			if(RNA_enum_is_equal(op->ptr, "type", "NORMAL")) {
 				float angle;
 				for(eve= em->verts.first; eve; eve= eve->next) {
 					if (!(eve->f & SELECT) && !eve->h) {
@@ -1089,7 +1105,8 @@
 						}
 					}
 				}
-			} else if (mode==2) { /* face users */
+			}
+			else if(RNA_enum_is_equal(op->ptr, "type", "FACE")) {
 				for(eve= em->verts.first; eve; eve= eve->next) {
 					if (
 						!(eve->f & SELECT) &&
@@ -1103,7 +1120,8 @@
 							return selcount;
 					}
 				}
-			} else if (mode==3) { /* vertex groups */
+			} 
+			else if(RNA_enum_is_equal(op->ptr, "type", "VGROUP")) {
 				MDeformVert *dvert, *base_dvert;
 				short i, j; /* weight index */
 
@@ -1137,7 +1155,12 @@
 			}
 		}
 	} /* end basevert loop */
-	return selcount;
+
+	if(selcount) {
+		WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
+		return OPERATOR_FINISHED;
+	}
+	return OPERATOR_CANCELLED;
 }
 
 /* EditMode menu triggered from space.c by pressing Shift+G
@@ -1183,16 +1206,6 @@
 	ret= pupmenu(str);
 	if (ret<1) return;
 	
-	if (ret<10) {
-		selcount= vertgroup_select(em, ret);
-		if (selcount) { /* update if data was selected */
-			EM_select_flush(em); /* so that selected verts, go onto select faces */
-			em->totvertsel += selcount;
-//			if (EM_texFaceCheck())
-			BIF_undo_push("Select Similar Vertices");
-		}
-		return;
-	}
 	
 	if (ret<100) {
 		selcount= edgegroup_select(em, ret/10);
@@ -1217,6 +1230,24 @@
 	}
 }
 
+void MESH_OT_similar_vertex_select(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Similar Vertex Select";
+	ot->idname= "MESH_OT_similar_vertex_select";
+	
+	/* api callbacks */
+	ot->invoke= WM_menu_invoke;
+	ot->exec= similar_vert_select_exec;
+	ot->poll= ED_operator_editmesh;
+	
+	/* properties */
+	RNA_def_enum(ot->srna, "type", prop_simvertex_types, 0, "Type", "");
+}
+
+/* ******************************************* */
+
+
 int mesh_layers_menu_charlen(CustomData *data, int type)
 {
  	int i, len = 0;
@@ -1233,7 +1264,8 @@
 
 /* this function adds menu text into an existing string.
  * this string's size should be allocated with mesh_layers_menu_charlen */
-void mesh_layers_menu_concat(CustomData *data, int type, char *str) {
+void mesh_layers_menu_concat(CustomData *data, int type, char *str) 
+{
 	int i, count = 0;
 	char *str_pt = str;
 	CustomDataLayer *layer;
@@ -4077,17 +4109,17 @@
 	/* 'standard' behaviour - check if selected, then apply relevant selection */
 	
 	// XXX  need other args
-	righthandfaces(em, RNA_int_get(op->ptr, "select"));
+	righthandfaces(em, RNA_boolean_get(op->ptr, "inside"));
 	
 	WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); //TODO is this needed ?
 	return OPERATOR_FINISHED;	
 }
 
-void MESH_OT_righthandfaces(wmOperatorType *ot)
+void MESH_OT_consistant_normals(wmOperatorType *ot)
 {
 	/* identifiers */
-	ot->name= "Manipulate Normals";
-	ot->idname= "MESH_OT_righthandfaces";
+	ot->name= "Make Normals consistant";
+	ot->idname= "MESH_OT_consistant_normals";
 	
 	/* api callbacks */
 	ot->exec= righthandfaces_exec;
@@ -4096,8 +4128,7 @@
 	/* flags */
 	ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
 	
-	/* XXX make it enum or so  */
-	RNA_def_int(ot->srna, "select", 0, INT_MIN, INT_MAX, "Select", "", INT_MIN, INT_MAX);
+	RNA_def_boolean(ot->srna, "inside", 0, "Inside", "");
 }
 
 /* ********** ALIGN WITH VIEW **************** */

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-01-31 15:09:33 UTC (rev 18768)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-01-31 15:21:26 UTC (rev 18769)
@@ -182,10 +182,11 @@
 void MESH_OT_selectconnected_mesh(struct wmOperatorType *ot);
 void MESH_OT_hide_mesh(struct wmOperatorType *ot);
 void MESH_OT_reveal_mesh(struct wmOperatorType *ot);
-void MESH_OT_righthandfaces(struct wmOperatorType *ot);
+void MESH_OT_consistant_normals(struct wmOperatorType *ot);
 void MESH_OT_select_linked_flat_faces(struct wmOperatorType *ot);
 void MESH_OT_select_sharp_edges(struct wmOperatorType *ot);
 void MESH_OT_shortest_path_select(struct wmOperatorType *ot);
+void MESH_OT_similar_vertex_select(struct wmOperatorType *ot);
 
 extern EditEdge *findnearestedge(ViewContext *vc, int *dist);
 extern void EM_automerge(int update);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-01-31 15:09:33 UTC (rev 18768)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-01-31 15:21:26 UTC (rev 18769)
@@ -115,7 +115,7 @@
 	WM_operatortype_append(MESH_OT_selectconnected_mesh);
 	WM_operatortype_append(MESH_OT_hide_mesh);
 	WM_operatortype_append(MESH_OT_reveal_mesh);
-	WM_operatortype_append(MESH_OT_righthandfaces);
+	WM_operatortype_append(MESH_OT_consistant_normals);
 	WM_operatortype_append(MESH_OT_subdivide);
 	WM_operatortype_append(MESH_OT_subdivide_multi);
 	WM_operatortype_append(MESH_OT_subdivide_multi_fractal);
@@ -147,8 +147,7 @@
 	WM_operatortype_append(MESH_OT_loop_select);
 	WM_operatortype_append(MESH_OT_add_edge_face);
 	WM_operatortype_append(MESH_OT_shortest_path_select);
-	
-	
+	WM_operatortype_append(MESH_OT_similar_vertex_select);
 }
 
 /* note mesh keymap also for other space? */
@@ -183,6 +182,9 @@
 	RNA_float_set(WM_keymap_add_item(keymap, "MESH_OT_select_linked_flat_faces", FKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0)->ptr,"sharpness",135.0);
 	RNA_float_set(WM_keymap_add_item(keymap, "MESH_OT_select_sharp_edges", SKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0)->ptr,"sharpness",135.0);		
 	
+	WM_keymap_add_item(keymap, "MESH_OT_similar_vertex_select", JKEY, KM_PRESS, 0, 0);
+	
+	
 	/* transform keymap already defined, so no tweaks for select */
 	
 	/* hide */
@@ -191,8 +193,8 @@
 	WM_keymap_add_item(keymap, "MESH_OT_reveal_mesh", HKEY, KM_PRESS, KM_ALT, 0);
 	
 	/* tools */
-	RNA_int_set(WM_keymap_add_item(keymap, "MESH_OT_righthandfaces", NKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "select", 2);
-	RNA_int_set(WM_keymap_add_item(keymap, "MESH_OT_righthandfaces", NKEY, KM_PRESS, KM_CTRL, 0)->ptr, "select", 1);
+	WM_keymap_add_item(keymap, "MESH_OT_consistant_normals", NKEY, KM_PRESS, KM_CTRL, 0);
+	RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_consistant_normals", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "inside", 1);
 	
 	WM_keymap_add_item(keymap, "MESH_OT_subdivs", WKEY, KM_PRESS, 0, 0); // this is the menu
 	/*WM_keymap_add_item(keymap, "MESH_OT_subdivide_multi", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);





More information about the Bf-blender-cvs mailing list