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

Ton Roosendaal ton at blender.org
Sat Jan 31 14:31:15 CET 2009


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

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

Edit Mesh:

- Added back "Edge Shortest Path select"
  It now also does regular selection, more fun! 
  It's mapped to CTRL+click now, and makes or clears selections 
  between current and previously activated edge.
  Seam/Sharp/etc marking is a toolsetting mode still. These
  options cannot become properties easily, because the tool
  uses the properties of selected edge to clear...

- Removed a whole bunch of G.f flags, related to mesh drawing.
  It's all now local in me->drawflags. Here's the list of
  removed old globals:

G_DRAWEDGES
G_DRAWFACES
G_DRAWNORMALS
G_DRAW_VNORMALS

G_ALLEDGES
G_HIDDENEDGES

G_DRAWCREASES
G_DRAWSEAMS
G_DRAWSHARP
G_DRAWBWEIGHTS

G_DRAW_EDGELEN
G_DRAW_FACEAREA
G_DRAW_EDGEANG

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/mesh/editface.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_lib.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/drawmesh.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_draw.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_mesh_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
    branches/blender2.5/blender/source/blender/windowmanager/wm_event_system.h
    branches/blender2.5/blender/source/blender/windowmanager/wm_window.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h	2009-01-31 10:00:08 UTC (rev 18765)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h	2009-01-31 13:30:56 UTC (rev 18766)
@@ -117,37 +117,24 @@
 #define G_RENDER_SHADOW	(1 <<  3)
 #define G_BACKBUFSEL	(1 <<  4)
 #define G_PICKSEL		(1 <<  5)
-#define G_DRAWNORMALS	(1 <<  6)
-#define G_DRAWFACES		(1 <<  7)
+
 #define G_FACESELECT	(1 <<  8)
-#define G_DRAW_EXT		(1 <<  9)
+
 #define G_VERTEXPAINT	(1 << 10)
-#define G_ALLEDGES		(1 << 11)
+
 #define G_DEBUG			(1 << 12)
 #define G_DOSCRIPTLINKS (1 << 13)
-#define G_DRAW_VNORMALS	(1 << 14)
+
 #define G_WEIGHTPAINT	(1 << 15)	
 #define G_TEXTUREPAINT	(1 << 16)
 /* #define G_NOFROZEN	(1 << 17) also removed */
 #define G_GREASEPENCIL 	(1 << 17)
-#define G_DRAWEDGES		(1 << 18)
-#define G_DRAWCREASES	(1 << 19)
-#define G_DRAWSEAMS     (1 << 20)
-#define G_HIDDENEDGES   (1 << 21)
-/* Measurement info Drawing */
-#define G_DRAW_EDGELEN  (1 << 22) 
-#define G_DRAW_FACEAREA (1 << 23)
-#define G_DRAW_EDGEANG  (1 << 24)
 
-/* #define G_RECORDKEYS	(1 << 25)   also removed */
-
-#define G_DRAWSHARP     (1 << 28) /* draw edges with the sharp flag */
 #define G_SCULPTMODE    (1 << 29)
 #define G_PARTICLEEDIT	(1 << 30)
 
 /* #define G_AUTOMATKEYS	(1 << 30)   also removed */
 #define G_HIDDENHANDLES (1 << 31) /* used for curves only */
-#define G_DRAWBWEIGHTS	(1 << 31)
 
 /* macro for testing face select mode
  * Texture paint could be removed since selected faces are not used

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c	2009-01-31 10:00:08 UTC (rev 18765)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c	2009-01-31 13:30:56 UTC (rev 18766)
@@ -185,7 +185,8 @@
 	me->texflag= AUTOSPACE;
 	me->flag= ME_TWOSIDED;
 	me->bb= unit_boundbox();
-
+	me->drawflag= ME_DRAWEDGES|ME_DRAWFACES|ME_DRAWCREASES;
+	
 	return me;
 }
 

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-31 10:00:08 UTC (rev 18765)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-31 13:30:56 UTC (rev 18766)
@@ -8682,6 +8682,7 @@
 		bScreen *screen;
 		Scene *scene;
 		Material *ma;
+		Mesh *me;
 		Scene *sce;
 		Tex *tx;
 		
@@ -8718,6 +8719,11 @@
 			if(tx->nodetree && strlen(tx->nodetree->id.name)==0)
 				strcpy(tx->nodetree->id.name, "NTTexture Nodetree");
 		}
+		
+		/* copy standard draw flag to meshes(used to be global, is not available here) */
+		for(me= main->mesh.first; me; me= me->id.next) {
+			me->drawflag= ME_DRAWEDGES|ME_DRAWFACES|ME_DRAWCREASES;
+		}
 	}
 
 	/* TODO: should be moved into one of the version blocks once this branch moves to trunk and we can

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editface.c	2009-01-31 10:00:08 UTC (rev 18765)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editface.c	2009-01-31 13:30:56 UTC (rev 18766)
@@ -826,6 +826,8 @@
 	return ok;
 }
 
+/* ******************** edge loop shortest path ********************* */
+
 #define ME_SEAM_DONE 2		/* reuse this flag */
 
 static float edgetag_cut_cost(EditMesh *em, int e1, int e2, int vert)
@@ -871,7 +873,11 @@
 
 void edgetag_context_set(Scene *scene, EditEdge *eed, int val)
 {
+	
 	switch (scene->toolsettings->edge_mode) {
+	case EDGE_MODE_SELECT:
+		EM_select_edge(eed, val);
+		break;
 	case EDGE_MODE_TAG_SEAM:
 		if (val)		{eed->seam = 255;}
 		else			{eed->seam = 0;}
@@ -894,6 +900,8 @@
 int edgetag_context_check(Scene *scene, EditEdge *eed)
 {
 	switch (scene->toolsettings->edge_mode) {
+	case EDGE_MODE_SELECT:
+		return (eed->f & SELECT) ? 1 : 0;
 	case EDGE_MODE_TAG_SEAM:
 		return eed->seam ? 1 : 0;
 	case EDGE_MODE_TAG_SHARP:
@@ -1029,6 +1037,8 @@
 	return 1;
 }
 
+/* *************************************** */
+
 static void seam_edgehash_insert_face(EdgeHash *ehash, MFace *mf)
 {
 	BLI_edgehash_insert(ehash, mf->v1, mf->v2, NULL);
@@ -1094,7 +1104,7 @@
 // XXX	if (G.rt == 8)
 //		unwrap_lscm(1);
 
-	G.f |= G_DRAWSEAMS;
+	me->drawflag |= ME_DRAWSEAMS;
 	BIF_undo_push("Mark Seam");
 
 // XXX notifier!		object_tface_flags_changed(OBACT, 1);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c	2009-01-31 10:00:08 UTC (rev 18765)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c	2009-01-31 13:30:56 UTC (rev 18766)
@@ -643,7 +643,7 @@
 }
 #endif
 
-static void edge_drawflags(EditMesh *em)
+static void edge_drawflags(Mesh *me, EditMesh *em)
 {
 	EditVert *eve;
 	EditEdge *eed, *e1, *e2, *e3, *e4;
@@ -692,7 +692,7 @@
 		efa= efa->next;
 	}
 
-	if(G.f & G_ALLEDGES) {
+	if(me->drawflag & ME_ALLEDGES) {
 		efa= em->faces.first;
 		while(efa) {
 			if(efa->e1->f2>=2) efa->e1->f2= 1;
@@ -1042,7 +1042,7 @@
 	/* eed->f1 : flag for dynaface (cylindertest, old engine) */
 	/* eve->f1 : flag for dynaface (sphere test, old engine) */
 	/* eve->f2 : being used in vertexnormals */
-	edge_drawflags(em);
+	edge_drawflags(me, em);
 	
 	EM_stats_update(em);
 	
@@ -1146,9 +1146,9 @@
 		eve->tmp.l = a++;  /* counter */
 			
 		mvert->flag= 0;
-		if(eve->f1==1) mvert->flag |= ME_SPHERETEST;
 		mvert->flag |= (eve->f & SELECT);
 		if (eve->h) mvert->flag |= ME_HIDE;
+		
 		mvert->bweight= (char)(255.0*eve->bweight);
 
 		eve= eve->next;

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_lib.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_lib.c	2009-01-31 10:00:08 UTC (rev 18765)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_lib.c	2009-01-31 13:30:56 UTC (rev 18766)
@@ -187,7 +187,7 @@
 	
 	for(ese = em->selected.first; ese; ese = ese->next){
 		if(ese->data == data) return 1;
-		}
+	}
 	
 	return 0;
 }

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 10:00:08 UTC (rev 18765)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-01-31 13:30:56 UTC (rev 18766)
@@ -1924,15 +1924,6 @@
 
 /* ***************** loop select (non modal) ************** */
 
-static EnumPropertyItem prop_select_types[] = {
-	{0, "LOOP_EXCLUSIVE", "Loop Exclusive", ""},
-	{1, "LOOP_EXTEND", "Loop Extend", ""},
-	{2, "RING_EXCLUSIVE", "Ring Exclusive", ""},
-	{3, "RING_EXTEND", "Ring Extend", ""},
-	{0, NULL, NULL, NULL}
-};
-
-
 static void mouse_mesh_loop(bContext *C, short mval[2], short extend, short ring)
 {
 	ViewContext vc;
@@ -1948,97 +1939,138 @@
 	
 	eed= findnearestedge(&vc, &dist);
 	if(eed) {
-		/* XXX: should toolsettings do this? */
-		if (vc.scene->toolsettings->edge_mode == EDGE_MODE_SELECT) {
-			if(extend==0) EM_clear_flag_all(em, SELECT);
+		if(extend==0) EM_clear_flag_all(em, SELECT);
+	
+		if((eed->f & SELECT)==0) select=1;
+		else if(extend) select=0;
+
+		if(em->selectmode & SCE_SELECT_FACE) {
+			faceloop_select(em, eed, select);
+		}
+		else if(em->selectmode & SCE_SELECT_EDGE) {
+			if(ring)
+				edgering_select(em, eed, select);
+			else
+				edgeloop_select(em, eed, select);
+		}
+		else if(em->selectmode & SCE_SELECT_VERTEX) {
+			if(ring)
+				edgering_select(em, eed, select);
+			else 
+				edgeloop_select(em, eed, select);
+		}
+
+		EM_selectmode_flush(em);
+//			if (EM_texFaceCheck())
 		
-			if((eed->f & SELECT)==0) select=1;
-			else if(extend) select=0;
+		WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, vc.obedit);
+	}
+}
 
-			if(em->selectmode & SCE_SELECT_FACE) {
-				faceloop_select(em, eed, select);
-			}
-			else if(em->selectmode & SCE_SELECT_EDGE) {
-		        if(ring)
-					edgering_select(em, eed, select);
-		        else
-					edgeloop_select(em, eed, select);
-			}
-		    else if(em->selectmode & SCE_SELECT_VERTEX) {
-		        if(ring)
-					edgering_select(em, eed, select);
-		        else 
-					edgeloop_select(em, eed, select);
-			}
+static int mesh_loop_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	ARegion *ar= CTX_wm_region(C);
+	short mval[2];	
+	
+	mval[0]= event->x - ar->winrct.xmin;
+	mval[1]= event->y - ar->winrct.ymin;
+	
+	view3d_operator_needs_opengl(C);
+	
+	mouse_mesh_loop(C, mval, RNA_boolean_get(op->ptr, "extend"),
+					RNA_boolean_get(op->ptr, "ring"));
+	
+	/* cannot do tweaks for as long this keymap is after transform map */
+	return OPERATOR_FINISHED;
+}
 
-			EM_selectmode_flush(em);
-//			if (EM_texFaceCheck())
+void MESH_OT_loop_select(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Loop Select";
+	ot->idname= "MESH_OT_loop_select";
+	
+	/* api callbacks */
+	ot->invoke= mesh_loop_select_invoke;
+	ot->poll= ED_operator_editmesh;
+	
+	/* properties */
+	RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", "");
+	RNA_def_boolean(ot->srna, "ring", 0, "Select Ring", "");
+}
+
+/* ******************* mesh shortest path select, uses prev-selected edge ****************** */
+
+/* since you want to create paths with multiple selects, it doesn't have extend option */
+static void mouse_mesh_shortest_path(bContext *C, short mval[2])
+{
+	ViewContext vc;
+	EditMesh *em;
+	EditEdge *eed;
+	int dist= 50;
+	
+	em_setup_viewcontext(C, &vc);
+	vc.mval[0]= mval[0];
+	vc.mval[1]= mval[1];
+	em= vc.em;
+	
+	eed= findnearestedge(&vc, &dist);
+	if(eed) {
+		Mesh *me= vc.obedit->data;
+		int path = 0;
+		
+		if (em->selected.last) {
+			EditSelection *ese = em->selected.last;
 			
-		} 
-		else {
-			int act = (edgetag_context_check(vc.scene, eed)==0);
-			int path = 0;
-			
-			if (ring && em->selected.last) {
-				EditSelection *ese = em->selected.last;
-	
-				if(ese && ese->type == EDITEDGE) {
-					EditEdge *eed_act;
-					eed_act = (EditEdge*)ese->data;
-					if (eed_act != eed) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list